summaryrefslogtreecommitdiffstats
path: root/keyboards
diff options
context:
space:
mode:
authorAlex Ong <the.onga@gmail.com>2019-01-04 09:39:14 +0100
committerAlex Ong <the.onga@gmail.com>2019-01-04 09:39:14 +0100
commit47c91fc7f75ae0a477e55b687aa0fc30da0a283c (patch)
tree65ad39452748ff2e6d4a83ce54ede6ca22c9ada9 /keyboards
parentac9b88e8ccbbf38762871504cd827ff0d941c426 (diff)
parent563ce3f225d981ce460c12ca5130dfe47af41df0 (diff)
downloadqmk_firmware-47c91fc7f75ae0a477e55b687aa0fc30da0a283c.tar.gz
qmk_firmware-47c91fc7f75ae0a477e55b687aa0fc30da0a283c.tar.xz
Merge branch 'master' of https://github.com/qmk/qmk_firmware
Diffstat (limited to 'keyboards')
-rw-r--r--keyboards/1up60rgb/config.h58
-rw-r--r--keyboards/1up60rgb/readme.md13
-rw-r--r--keyboards/1upkeyboards/1up60hse/1up60hse.c43
-rw-r--r--keyboards/1upkeyboards/1up60hse/1up60hse.h39
-rw-r--r--keyboards/1upkeyboards/1up60hse/config.h224
-rw-r--r--keyboards/1upkeyboards/1up60hse/info.json12
-rw-r--r--keyboards/1upkeyboards/1up60hse/keymaps/default/config.h20
-rw-r--r--keyboards/1upkeyboards/1up60hse/keymaps/default/keymap.c43
-rw-r--r--keyboards/1upkeyboards/1up60hse/keymaps/default/readme.md4
-rw-r--r--keyboards/1upkeyboards/1up60hse/readme.md15
-rw-r--r--keyboards/1upkeyboards/1up60hse/rules.mk72
-rw-r--r--keyboards/1upkeyboards/1up60rgb/1up60rgb.c (renamed from keyboards/1up60rgb/1up60rgb.c)0
-rw-r--r--keyboards/1upkeyboards/1up60rgb/1up60rgb.h (renamed from keyboards/1up60rgb/1up60rgb.h)0
-rw-r--r--keyboards/1upkeyboards/1up60rgb/config.h55
-rw-r--r--keyboards/1upkeyboards/1up60rgb/info.json (renamed from keyboards/1up60rgb/info.json)0
-rw-r--r--keyboards/1upkeyboards/1up60rgb/keymaps/default/keymap.c (renamed from keyboards/1up60rgb/keymaps/default/keymap.c)0
-rw-r--r--keyboards/1upkeyboards/1up60rgb/keymaps/iso/keymap.c (renamed from keyboards/1up60rgb/keymaps/iso/keymap.c)0
-rw-r--r--keyboards/1upkeyboards/1up60rgb/keymaps/raffle/keymap.c130
-rw-r--r--keyboards/1upkeyboards/1up60rgb/keymaps/raffle/readme.md43
-rw-r--r--keyboards/1upkeyboards/1up60rgb/keymaps/tsangan/keymap.c (renamed from keyboards/1up60rgb/keymaps/tsangan/keymap.c)0
-rw-r--r--keyboards/1upkeyboards/1up60rgb/readme.md13
-rw-r--r--keyboards/1upkeyboards/1up60rgb/rules.mk (renamed from keyboards/1up60rgb/rules.mk)0
-rw-r--r--keyboards/1upkeyboards/readme.md5
-rw-r--r--keyboards/1upkeyboards/sweet16/config.h55
-rw-r--r--keyboards/1upkeyboards/sweet16/info.json (renamed from keyboards/sweet16/info.json)0
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c (renamed from keyboards/sweet16/keymaps/default/keymap.c)0
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/dlaroe/keymap.c (renamed from keyboards/sweet16/keymaps/dlaroe/keymap.c)0
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/dlaroe/readme.md (renamed from keyboards/sweet16/keymaps/dlaroe/readme.md)0
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/config.h15
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c215
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/readme.md10
-rw-r--r--keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/rules.mk5
-rw-r--r--keyboards/1upkeyboards/sweet16/readme.md14
-rw-r--r--keyboards/1upkeyboards/sweet16/rules.mk (renamed from keyboards/sweet16/rules.mk)0
-rw-r--r--keyboards/1upkeyboards/sweet16/sweet16.c (renamed from keyboards/sweet16/sweet16.c)0
-rw-r--r--keyboards/1upkeyboards/sweet16/sweet16.h (renamed from keyboards/sweet16/sweet16.h)0
-rw-r--r--keyboards/30wer/30wer.c1
-rw-r--r--keyboards/30wer/30wer.h14
-rw-r--r--keyboards/30wer/config.h31
-rw-r--r--keyboards/30wer/info.json51
-rw-r--r--keyboards/30wer/keymaps/default/keymap.c17
-rw-r--r--keyboards/30wer/readme.md16
-rw-r--r--keyboards/30wer/rules.mk60
-rw-r--r--keyboards/40percentclub/25/25.c60
-rw-r--r--keyboards/40percentclub/25/25.h85
-rw-r--r--keyboards/40percentclub/25/config.h232
-rw-r--r--keyboards/40percentclub/25/info.json29
-rw-r--r--keyboards/40percentclub/25/keymaps/default/config.h19
-rw-r--r--keyboards/40percentclub/25/keymaps/default/keymap.c87
-rw-r--r--keyboards/40percentclub/25/keymaps/default/readme.md1
-rw-r--r--keyboards/40percentclub/25/keymaps/macro/config.h19
-rw-r--r--keyboards/40percentclub/25/keymaps/macro/keymap.c42
-rw-r--r--keyboards/40percentclub/25/keymaps/macro/readme.md1
-rw-r--r--keyboards/40percentclub/25/readme.md18
-rw-r--r--keyboards/40percentclub/25/rules.mk85
-rw-r--r--keyboards/40percentclub/4x4/4x4.c (renamed from keyboards/4x4/4x4.c)0
-rw-r--r--keyboards/40percentclub/4x4/4x4.h71
-rw-r--r--keyboards/40percentclub/4x4/config.h (renamed from keyboards/4x4/config.h)0
-rw-r--r--keyboards/40percentclub/4x4/keymaps/default/config.h (renamed from keyboards/4x4/keymaps/default/config.h)0
-rw-r--r--keyboards/40percentclub/4x4/keymaps/default/keymap.c104
-rw-r--r--keyboards/40percentclub/4x4/readme.md24
-rw-r--r--keyboards/40percentclub/4x4/rules.mk79
-rw-r--r--keyboards/40percentclub/5x5/5x5.c29
-rw-r--r--keyboards/40percentclub/5x5/5x5.h53
-rw-r--r--keyboards/40percentclub/5x5/config.h208
-rw-r--r--keyboards/40percentclub/5x5/keymaps/default/config.h5
-rw-r--r--keyboards/40percentclub/5x5/keymaps/default/keymap.c117
-rw-r--r--keyboards/40percentclub/5x5/readme.md24
-rw-r--r--keyboards/40percentclub/5x5/rules.mk80
-rw-r--r--keyboards/40percentclub/6lit/6lit.c53
-rw-r--r--keyboards/40percentclub/6lit/6lit.h58
-rw-r--r--keyboards/40percentclub/6lit/config.h233
-rw-r--r--keyboards/40percentclub/6lit/info.json23
-rw-r--r--keyboards/40percentclub/6lit/keymaps/default/config.h19
-rw-r--r--keyboards/40percentclub/6lit/keymaps/default/keymap.c39
-rw-r--r--keyboards/40percentclub/6lit/keymaps/default/readme.md1
-rw-r--r--keyboards/40percentclub/6lit/keymaps/macro/config.h19
-rw-r--r--keyboards/40percentclub/6lit/keymaps/macro/keymap.c39
-rw-r--r--keyboards/40percentclub/6lit/keymaps/macro/readme.md1
-rw-r--r--keyboards/40percentclub/6lit/readme.md18
-rw-r--r--keyboards/40percentclub/6lit/rules.mk83
-rw-r--r--keyboards/40percentclub/foobar/config.h233
-rw-r--r--keyboards/40percentclub/foobar/foobar.c55
-rw-r--r--keyboards/40percentclub/foobar/foobar.h67
-rw-r--r--keyboards/40percentclub/foobar/info.json25
-rw-r--r--keyboards/40percentclub/foobar/keymaps/default/config.h21
-rw-r--r--keyboards/40percentclub/foobar/keymaps/default/keymap.c91
-rw-r--r--keyboards/40percentclub/foobar/keymaps/default/readme.md1
-rw-r--r--keyboards/40percentclub/foobar/keymaps/macro/config.h19
-rw-r--r--keyboards/40percentclub/foobar/keymaps/macro/keymap.c40
-rw-r--r--keyboards/40percentclub/foobar/keymaps/macro/readme.md1
-rw-r--r--keyboards/40percentclub/foobar/readme.md18
-rw-r--r--keyboards/40percentclub/foobar/rules.mk85
-rw-r--r--keyboards/40percentclub/gherkin/config.h51
-rw-r--r--keyboards/40percentclub/gherkin/gherkin.c (renamed from keyboards/gherkin/gherkin.c)0
-rw-r--r--keyboards/40percentclub/gherkin/gherkin.h (renamed from keyboards/gherkin/gherkin.h)5
-rw-r--r--keyboards/40percentclub/gherkin/info.json (renamed from keyboards/gherkin/info.json)0
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/bbaserdem/README.md (renamed from keyboards/gherkin/keymaps/bbaserdem/README.md)0
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h9
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/bbaserdem/keymap.c (renamed from keyboards/gherkin/keymaps/bbaserdem/keymap.c)0
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk13
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/default/keymap.c63
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h10
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c145
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk3
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/mjt/config.h7
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c250
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk2
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/steno/config.h7
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/steno/keymap.c (renamed from keyboards/gherkin/keymaps/steno/keymap.c)0
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/steno/readme.md (renamed from keyboards/gherkin/keymaps/steno/readme.md)0
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/steno/rules.mk12
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h3
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c56
-rw-r--r--keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk2
-rw-r--r--keyboards/40percentclub/gherkin/readme.md21
-rw-r--r--keyboards/40percentclub/gherkin/rules.mk74
-rw-r--r--keyboards/40percentclub/i75/config.h192
-rw-r--r--keyboards/40percentclub/i75/i75.c43
-rw-r--r--keyboards/40percentclub/i75/i75.h24
-rw-r--r--keyboards/40percentclub/i75/info.json12
-rw-r--r--keyboards/40percentclub/i75/keymaps/default/config.h19
-rw-r--r--keyboards/40percentclub/i75/keymaps/default/keymap.c66
-rw-r--r--keyboards/40percentclub/i75/keymaps/default/readme.md1
-rw-r--r--keyboards/40percentclub/i75/promicro/config.h40
-rw-r--r--keyboards/40percentclub/i75/promicro/promicro.c16
-rw-r--r--keyboards/40percentclub/i75/promicro/promicro.h47
-rw-r--r--keyboards/40percentclub/i75/promicro/rules.mk58
-rw-r--r--keyboards/40percentclub/i75/readme.md28
-rw-r--r--keyboards/40percentclub/i75/rules.mk23
-rw-r--r--keyboards/40percentclub/i75/teensy2/config.h40
-rw-r--r--keyboards/40percentclub/i75/teensy2/rules.mk58
-rw-r--r--keyboards/40percentclub/i75/teensy2/teensy2.c16
-rw-r--r--keyboards/40percentclub/i75/teensy2/teensy2.h47
-rw-r--r--keyboards/40percentclub/luddite/config.h48
-rw-r--r--keyboards/40percentclub/luddite/info.json12
-rw-r--r--keyboards/40percentclub/luddite/keymaps/default/keymap.c32
-rw-r--r--keyboards/40percentclub/luddite/luddite.c1
-rw-r--r--keyboards/40percentclub/luddite/luddite.h21
-rw-r--r--keyboards/40percentclub/luddite/readme.md21
-rw-r--r--keyboards/40percentclub/luddite/rules.mk74
-rw-r--r--keyboards/40percentclub/mf68/config.h159
-rw-r--r--keyboards/40percentclub/mf68/info.json12
-rw-r--r--keyboards/40percentclub/mf68/keymaps/68keys/config.h15
-rw-r--r--keyboards/40percentclub/mf68/keymaps/68keys/keymap.c11
-rw-r--r--keyboards/40percentclub/mf68/keymaps/68keys/readme.md23
-rw-r--r--keyboards/40percentclub/mf68/keymaps/68keys/rules.mk5
-rw-r--r--keyboards/40percentclub/mf68/keymaps/default/keymap.c53
-rw-r--r--keyboards/40percentclub/mf68/keymaps/factory/keymap.c59
-rw-r--r--keyboards/40percentclub/mf68/mf68.c (renamed from keyboards/mf68/mf68.c)0
-rw-r--r--keyboards/40percentclub/mf68/mf68.h (renamed from keyboards/mf68/mf68.h)9
-rw-r--r--keyboards/40percentclub/mf68/readme.md18
-rw-r--r--keyboards/40percentclub/mf68/rules.mk78
-rw-r--r--keyboards/40percentclub/mf68_ble/config.h159
-rw-r--r--keyboards/40percentclub/mf68_ble/info.json12
-rw-r--r--keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c53
-rw-r--r--keyboards/40percentclub/mf68_ble/mf68_ble.c (renamed from keyboards/mf68_ble/mf68_ble.c)0
-rw-r--r--keyboards/40percentclub/mf68_ble/mf68_ble.h (renamed from keyboards/mf68_ble/mf68_ble.h)9
-rw-r--r--keyboards/40percentclub/mf68_ble/readme.md29
-rw-r--r--keyboards/40percentclub/mf68_ble/rules.mk79
-rw-r--r--keyboards/40percentclub/nano/config.h42
-rw-r--r--keyboards/40percentclub/nano/info.json (renamed from keyboards/nano/info.json)0
-rw-r--r--keyboards/40percentclub/nano/keymaps/default/keymap.c18
-rw-r--r--keyboards/40percentclub/nano/keymaps/default/rules.mk (renamed from keyboards/planck/keymaps/guidoism/rules.mk)0
-rw-r--r--keyboards/40percentclub/nano/keymaps/spooka/config.h25
-rw-r--r--keyboards/40percentclub/nano/keymaps/spooka/keymap.c10
-rw-r--r--keyboards/40percentclub/nano/keymaps/spooka/rules.mk1
-rw-r--r--keyboards/40percentclub/nano/matrix.c (renamed from keyboards/nano/matrix.c)0
-rw-r--r--keyboards/40percentclub/nano/nano.c (renamed from keyboards/nano/nano.c)0
-rw-r--r--keyboards/40percentclub/nano/nano.h (renamed from keyboards/nano/nano.h)5
-rw-r--r--keyboards/40percentclub/nano/readme.md16
-rw-r--r--keyboards/40percentclub/nano/rules.mk82
-rw-r--r--keyboards/40percentclub/nori/config.h221
-rw-r--r--keyboards/40percentclub/nori/info.json117
-rw-r--r--keyboards/40percentclub/nori/keymaps/default/config.h23
-rw-r--r--keyboards/40percentclub/nori/keymaps/default/keymap.c159
-rw-r--r--keyboards/40percentclub/nori/keymaps/default/readme.md1
-rw-r--r--keyboards/40percentclub/nori/keymaps/macro/config.h21
-rw-r--r--keyboards/40percentclub/nori/keymaps/macro/keymap.c41
-rw-r--r--keyboards/40percentclub/nori/keymaps/macro/readme.md1
-rw-r--r--keyboards/40percentclub/nori/nori.c43
-rw-r--r--keyboards/40percentclub/nori/nori.h69
-rw-r--r--keyboards/40percentclub/nori/readme.md18
-rw-r--r--keyboards/40percentclub/nori/rules.mk82
-rw-r--r--keyboards/40percentclub/readme.md4
-rw-r--r--keyboards/40percentclub/tomato/config.h45
-rw-r--r--keyboards/40percentclub/tomato/info.json (renamed from keyboards/tomato/info.json)0
-rw-r--r--keyboards/40percentclub/tomato/keymaps/default/keymap.c143
-rw-r--r--keyboards/40percentclub/tomato/readme.md22
-rw-r--r--keyboards/40percentclub/tomato/rules.mk74
-rw-r--r--keyboards/40percentclub/tomato/tomato.c (renamed from keyboards/tomato/tomato.c)0
-rw-r--r--keyboards/40percentclub/tomato/tomato.h (renamed from keyboards/tomato/tomato.h)5
-rw-r--r--keyboards/40percentclub/ut47/LED_controls.ino (renamed from keyboards/ut47/LED_controls.ino)0
-rw-r--r--keyboards/40percentclub/ut47/config.h84
-rw-r--r--keyboards/40percentclub/ut47/info.json13
-rw-r--r--keyboards/40percentclub/ut47/keymaps/default/config.h21
-rw-r--r--keyboards/40percentclub/ut47/keymaps/default/keymap.c135
-rw-r--r--keyboards/40percentclub/ut47/keymaps/default/readme.md (renamed from keyboards/ut47/keymaps/default/readme.md)0
-rw-r--r--keyboards/40percentclub/ut47/keymaps/non-us/config.h21
-rw-r--r--keyboards/40percentclub/ut47/keymaps/non-us/keymap.c135
-rw-r--r--keyboards/40percentclub/ut47/keymaps/non-us/readme.md (renamed from keyboards/ut47/keymaps/non-us/readme.md)0
-rw-r--r--keyboards/40percentclub/ut47/keymaps/nordic/config.h (renamed from keyboards/ut47/keymaps/nordic/config.h)0
-rw-r--r--keyboards/40percentclub/ut47/keymaps/nordic/keymap.c178
-rw-r--r--keyboards/40percentclub/ut47/keymaps/nordic/readme.md (renamed from keyboards/ut47/keymaps/nordic/readme.md)0
-rw-r--r--keyboards/40percentclub/ut47/keymaps/rgb/config.h24
-rw-r--r--keyboards/40percentclub/ut47/keymaps/rgb/keymap.c87
-rw-r--r--keyboards/40percentclub/ut47/keymaps/rgb/readme.md (renamed from keyboards/ut47/keymaps/rgb/readme.md)0
-rw-r--r--keyboards/40percentclub/ut47/keymaps/rgb/rules.mk (renamed from keyboards/ut47/keymaps/rgb/rules.mk)0
-rw-r--r--keyboards/40percentclub/ut47/led.c (renamed from keyboards/ut47/led.c)0
-rw-r--r--keyboards/40percentclub/ut47/matrix.c (renamed from keyboards/ut47/matrix.c)0
-rw-r--r--keyboards/40percentclub/ut47/readme.md40
-rw-r--r--keyboards/40percentclub/ut47/rules.mk87
-rw-r--r--keyboards/40percentclub/ut47/ut47.c (renamed from keyboards/ut47/ut47.c)0
-rw-r--r--keyboards/40percentclub/ut47/ut47.h (renamed from keyboards/ut47/ut47.h)5
-rw-r--r--keyboards/412_64/412_64.c29
-rw-r--r--keyboards/412_64/412_64.h29
-rw-r--r--keyboards/412_64/config.h202
-rw-r--r--keyboards/412_64/keymaps/default/config.h5
-rw-r--r--keyboards/412_64/keymaps/default/keymap.c105
-rw-r--r--keyboards/412_64/keymaps/default/rules.mk1
-rw-r--r--keyboards/412_64/readme.md15
-rw-r--r--keyboards/412_64/rules.mk73
-rw-r--r--keyboards/4x4/4x4.h62
-rw-r--r--keyboards/4x4/keymaps/default/keymap.c124
-rw-r--r--keyboards/4x4/readme.md23
-rw-r--r--keyboards/4x4/rules.mk74
-rw-r--r--keyboards/6ball/config.h4
-rw-r--r--keyboards/9key/config.h4
-rw-r--r--keyboards/acr60/config.h3
-rw-r--r--keyboards/al1/info.json13
-rw-r--r--keyboards/al1/keymaps/default/keymap.c14
-rw-r--r--keyboards/al1/keymaps/splitbs/keymap.c10
-rw-r--r--keyboards/al1/rules.mk3
-rw-r--r--keyboards/alf/dc60/config.h224
-rw-r--r--keyboards/alf/dc60/dc60.c49
-rw-r--r--keyboards/alf/dc60/dc60.h42
-rw-r--r--keyboards/alf/dc60/info.json12
-rw-r--r--keyboards/alf/dc60/keymaps/default/config.h19
-rw-r--r--keyboards/alf/dc60/keymaps/default/keymap.c70
-rw-r--r--keyboards/alf/dc60/keymaps/default/readme.md1
-rw-r--r--keyboards/alf/dc60/readme.md15
-rw-r--r--keyboards/alf/dc60/rules.mk70
-rw-r--r--keyboards/alf/x2/config.h55
-rw-r--r--keyboards/alf/x2/info.json (renamed from keyboards/alf_x2/info.json)0
-rw-r--r--keyboards/alf/x2/keymaps/default/keymap.c (renamed from keyboards/alf_x2/keymaps/default/keymap.c)0
-rw-r--r--keyboards/alf/x2/keymaps/hhkb_60/keymap.c (renamed from keyboards/alf_x2/keymaps/hhkb_60/keymap.c)0
-rw-r--r--keyboards/alf/x2/readme.md15
-rw-r--r--keyboards/alf/x2/rules.mk (renamed from keyboards/alf_x2/rules.mk)0
-rw-r--r--keyboards/alf/x2/x2.c1
-rw-r--r--keyboards/alf/x2/x2.h98
-rw-r--r--keyboards/alf_x2/alf_x2.c1
-rw-r--r--keyboards/alf_x2/alf_x2.h98
-rw-r--r--keyboards/alf_x2/config.h58
-rw-r--r--keyboards/alf_x2/readme.md15
-rwxr-xr-xkeyboards/alpha/config.h2
-rwxr-xr-xkeyboards/alpha/keymaps/default/keymap.c85
-rw-r--r--keyboards/alpha/readme.md4
-rw-r--r--keyboards/alps64/alps64.h6
-rw-r--r--keyboards/alps64/keymaps/crd/keymap.c32
-rwxr-xr-xkeyboards/alu84/config.h3
-rw-r--r--keyboards/amj40/keymaps/default/rules.mk7
-rw-r--r--keyboards/amj40/keymaps/fabian/rules.mk12
-rw-r--r--keyboards/amj40/keymaps/jetpacktuxedo/rules.mk10
-rw-r--r--keyboards/amj40/keymaps/myee/rules.mk12
-rw-r--r--keyboards/amj60/amj60.h8
-rw-r--r--keyboards/amj60/keymaps/iso_split_rshift/rules.mk2
-rw-r--r--keyboards/amj96/amj96.h27
-rw-r--r--keyboards/amj96/config.h4
-rw-r--r--keyboards/amj96/info.json7
-rw-r--r--keyboards/amj96/keymaps/default/keymap.c32
-rw-r--r--keyboards/amj96/readme.md2
-rw-r--r--keyboards/amj96/rules.mk4
-rw-r--r--keyboards/amjpad/info.json6
-rw-r--r--keyboards/at101_blackheart/at101_blackheart.c1
-rw-r--r--keyboards/at101_blackheart/at101_blackheart.h28
-rw-r--r--keyboards/at101_blackheart/config.h40
-rw-r--r--keyboards/at101_blackheart/info.json121
-rw-r--r--keyboards/at101_blackheart/keymaps/default/keymap.c53
-rw-r--r--keyboards/at101_blackheart/readme.md15
-rw-r--r--keyboards/at101_blackheart/rules.mk59
-rw-r--r--keyboards/atom47/rev2/rev2.c3
-rw-r--r--keyboards/atom47/rev3/config.h2
-rw-r--r--keyboards/atom47/rev3/rev3.c3
-rw-r--r--keyboards/atomic/keymaps/pvc/rules.mk2
-rw-r--r--keyboards/atomic/rules.mk2
-rw-r--r--keyboards/atreus/keymaps/jeremy/keymap.c2
-rw-r--r--keyboards/atreus/keymaps/khitsule/config.h4
-rw-r--r--keyboards/atreus/keymaps/nojjan/config.h10
-rw-r--r--keyboards/atreus/keymaps/nojjan/keymap.c61
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/config.h101
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/keymap.c260
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/kle/base-layer.txt34
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/kle/e-layer.txt34
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/kle/fn-layer.txt35
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/kle/i-layer.txt34
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/kle/r-layer.txt34
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/kle/space-layer.txt34
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/readme.md102
-rw-r--r--keyboards/atreus/keymaps/replicaJunction/rules.mk12
-rw-r--r--keyboards/atreus/keymaps/talljoe-atreus/config.h42
-rw-r--r--keyboards/atreus/keymaps/talljoe-atreus/keymap.c (renamed from keyboards/bananasplit/keymaps/talljoe/keymap.c)0
-rw-r--r--keyboards/atreus/keymaps/talljoe-atreus/rules.mk1
-rw-r--r--keyboards/atreus/keymaps/xk/config.h3
-rw-r--r--keyboards/atreus/keymaps/xk/rules.mk2
-rw-r--r--keyboards/atreus/readme.md9
-rw-r--r--keyboards/atreus/rules.mk3
-rw-r--r--keyboards/atreus62/keymaps/194h/config.h6
-rw-r--r--keyboards/atreus62/keymaps/194h/keymap.c149
-rw-r--r--keyboards/atreus62/keymaps/194h/rules.mk7
-rw-r--r--keyboards/atreus62/keymaps/mneme/config.h1
-rw-r--r--keyboards/atreus62/keymaps/mneme/rules.mk1
-rw-r--r--keyboards/atreus62/keymaps/xyverz/keymap.c11
-rw-r--r--keyboards/baguette/baguette.c71
-rw-r--r--keyboards/baguette/baguette.h59
-rw-r--r--keyboards/baguette/config.h224
-rw-r--r--keyboards/baguette/info.json153
-rw-r--r--keyboards/baguette/keymaps/default/keymap.c50
-rw-r--r--keyboards/baguette/keymaps/default/readme.md9
-rw-r--r--keyboards/baguette/keymaps/iso/keymap.c50
-rw-r--r--keyboards/baguette/keymaps/iso/readme.md10
-rw-r--r--keyboards/baguette/readme.md16
-rw-r--r--keyboards/baguette/rules.mk81
-rw-r--r--keyboards/bananasplit/README.md15
-rw-r--r--keyboards/bananasplit/keymaps/0010/rules.mk37
-rw-r--r--keyboards/bananasplit/keymaps/coloneljesus/rules.mk37
-rw-r--r--keyboards/bananasplit/keymaps/default/rules.mk37
-rw-r--r--keyboards/bananasplit/keymaps/kamon/rules.mk37
-rw-r--r--keyboards/bananasplit/keymaps/talljoe/config.h23
-rw-r--r--keyboards/bface/README.md44
-rw-r--r--keyboards/bface/backlight_ps2avrGB.c94
-rw-r--r--keyboards/bface/backlight_ps2avrGB.h35
-rw-r--r--keyboards/bface/bface.c46
-rw-r--r--keyboards/bface/bface.h44
-rw-r--r--keyboards/bface/config.h49
-rw-r--r--keyboards/bface/i2c.c104
-rw-r--r--keyboards/bface/i2c.h25
-rw-r--r--keyboards/bface/info.json12
-rw-r--r--keyboards/bface/keymaps/default/keymap.c47
-rw-r--r--keyboards/bface/keymaps/kpeatt/keymap.c79
-rw-r--r--keyboards/bface/keymaps/kpeatt/readme.md10
-rw-r--r--keyboards/bface/matrix.c113
-rwxr-xr-xkeyboards/bface/program105
-rw-r--r--keyboards/bface/rules.mk49
-rw-r--r--keyboards/bface/usbconfig.h396
-rw-r--r--keyboards/bfake/readme.md32
-rw-r--r--keyboards/bfo9000/config.h2
-rw-r--r--keyboards/bfo9000/keymaps/andylikescandy6x18/config.h3
-rw-r--r--keyboards/bfo9000/rules.mk2
-rwxr-xr-xkeyboards/bigseries/1key/1key.c26
-rwxr-xr-xkeyboards/bigseries/1key/1key.h (renamed from keyboards/bigseries/bigseries.h)0
-rwxr-xr-xkeyboards/bigseries/1key/config.h60
-rw-r--r--keyboards/bigseries/1key/info.json (renamed from keyboards/bigseries/info.json)0
-rwxr-xr-xkeyboards/bigseries/1key/keymaps/8ball/keymap.c (renamed from keyboards/bigseries/keymaps/8ball/keymap.c)0
-rwxr-xr-xkeyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c91
-rwxr-xr-xkeyboards/bigseries/1key/keymaps/default/keymap.c (renamed from keyboards/bigseries/keymaps/default/keymap.c)0
-rw-r--r--keyboards/bigseries/1key/keymaps/dudeofawesome/README.md (renamed from keyboards/bigseries/keymaps/dudeofawesome/README.md)0
-rw-r--r--keyboards/bigseries/1key/keymaps/dudeofawesome/config.h (renamed from keyboards/bigseries/keymaps/dudeofawesome/config.h)0
-rwxr-xr-xkeyboards/bigseries/1key/keymaps/dudeofawesome/keymap.c (renamed from keyboards/bigseries/keymaps/dudeofawesome/keymap.c)0
-rw-r--r--keyboards/bigseries/1key/keymaps/dudeofawesome/rules.mk (renamed from keyboards/bigseries/keymaps/dudeofawesome/rules.mk)0
-rw-r--r--keyboards/bigseries/1key/keymaps/leddance/config.h (renamed from keyboards/bigseries/keymaps/leddance/config.h)0
-rwxr-xr-xkeyboards/bigseries/1key/keymaps/leddance/keymap.c (renamed from keyboards/bigseries/keymaps/leddance/keymap.c)0
-rw-r--r--keyboards/bigseries/1key/keymaps/leddance/rules.mk (renamed from keyboards/bigseries/keymaps/leddance/rules.mk)0
-rwxr-xr-xkeyboards/bigseries/1key/keymaps/lock/keymap.c88
-rwxr-xr-xkeyboards/bigseries/1key/keymaps/tester/keymap.c96
-rw-r--r--keyboards/bigseries/1key/readme.md15
-rwxr-xr-xkeyboards/bigseries/1key/rules.mk1
-rwxr-xr-xkeyboards/bigseries/2key/2key.c26
-rwxr-xr-xkeyboards/bigseries/2key/2key.h28
-rwxr-xr-xkeyboards/bigseries/2key/config.h60
-rw-r--r--keyboards/bigseries/2key/info.json12
-rwxr-xr-xkeyboards/bigseries/2key/keymaps/default/keymap.c87
-rwxr-xr-xkeyboards/bigseries/2key/keymaps/lock/keymap.c89
-rwxr-xr-xkeyboards/bigseries/2key/keymaps/tester/keymap.c88
-rw-r--r--keyboards/bigseries/2key/readme.md15
-rwxr-xr-xkeyboards/bigseries/2key/rules.mk1
-rwxr-xr-xkeyboards/bigseries/3key/3key.c26
-rwxr-xr-xkeyboards/bigseries/3key/3key.h28
-rwxr-xr-xkeyboards/bigseries/3key/config.h60
-rw-r--r--keyboards/bigseries/3key/info.json12
-rwxr-xr-xkeyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c91
-rwxr-xr-xkeyboards/bigseries/3key/keymaps/default/keymap.c95
-rwxr-xr-xkeyboards/bigseries/3key/keymaps/tester/keymap.c88
-rw-r--r--keyboards/bigseries/3key/readme.md15
-rwxr-xr-xkeyboards/bigseries/3key/rules.mk1
-rwxr-xr-xkeyboards/bigseries/4key/4key.c23
-rwxr-xr-xkeyboards/bigseries/4key/4key.h30
-rwxr-xr-xkeyboards/bigseries/4key/config.h60
-rw-r--r--keyboards/bigseries/4key/info.json12
-rwxr-xr-xkeyboards/bigseries/4key/keymaps/default/keymap.c89
-rwxr-xr-xkeyboards/bigseries/4key/keymaps/tester/keymap.c88
-rw-r--r--keyboards/bigseries/4key/readme.md15
-rwxr-xr-xkeyboards/bigseries/4key/rules.mk1
-rwxr-xr-xkeyboards/bigseries/bigseries.c26
-rwxr-xr-xkeyboards/bigseries/config.h59
-rw-r--r--keyboards/bigseries/readme.md11
-rwxr-xr-xkeyboards/bigseries/rules.mk2
-rw-r--r--keyboards/bigswitch/bigswitch.c4
-rwxr-xr-xkeyboards/bigswitch/config.h2
-rw-r--r--keyboards/bigswitch/keymaps/333fred/config.h20
-rw-r--r--keyboards/bigswitch/keymaps/333fred/keymap.c123
-rw-r--r--keyboards/bigswitch/keymaps/333fred/rules.mk5
-rw-r--r--keyboards/bigswitch/keymaps/wanleg/config.h42
-rw-r--r--keyboards/bigswitch/keymaps/wanleg/keymap.c26
-rw-r--r--keyboards/bigswitch/keymaps/wanleg/rules.mk16
-rw-r--r--keyboards/blockey/blockey.h48
-rw-r--r--keyboards/blockey/config.h196
-rw-r--r--keyboards/blockey/info.json12
-rw-r--r--keyboards/blockey/keymaps/default/keymap.c60
-rw-r--r--keyboards/blockey/keymaps/eucalyn/keymap.c60
-rw-r--r--keyboards/blockey/readme.md15
-rw-r--r--keyboards/blockey/rules.mk70
-rw-r--r--keyboards/bmini/bmini.h18
-rw-r--r--keyboards/bmini/info.json4
-rw-r--r--keyboards/bmini/readme.md32
-rw-r--r--keyboards/bmini/rules.mk6
-rw-r--r--keyboards/bminiex/backlight.c211
-rw-r--r--keyboards/bminiex/backlight_custom.h13
-rw-r--r--keyboards/bminiex/bminiex.c97
-rw-r--r--keyboards/bminiex/bminiex.h94
-rw-r--r--keyboards/bminiex/breathing_custom.h140
-rw-r--r--keyboards/bminiex/config.h41
-rw-r--r--keyboards/bminiex/i2c.c106
-rw-r--r--keyboards/bminiex/i2c.h25
-rw-r--r--keyboards/bminiex/info.json340
-rw-r--r--keyboards/bminiex/keymaps/ansi/keymap.c29
-rw-r--r--keyboards/bminiex/keymaps/ansi/readme.md17
-rw-r--r--keyboards/bminiex/keymaps/default/keymap.c29
-rw-r--r--keyboards/bminiex/keymaps/iso/keymap.c29
-rw-r--r--keyboards/bminiex/keymaps/iso/readme.md17
-rw-r--r--keyboards/bminiex/matrix.c122
-rw-r--r--keyboards/bminiex/readme.md14
-rw-r--r--keyboards/bminiex/rules.mk56
-rw-r--r--keyboards/bminiex/usbconfig.h396
-rw-r--r--keyboards/bpiphany/frosty_flake/config.h (renamed from keyboards/frosty_flake/config.h)0
-rw-r--r--keyboards/bpiphany/frosty_flake/frosty_flake.c (renamed from keyboards/frosty_flake/frosty_flake.c)0
-rw-r--r--keyboards/bpiphany/frosty_flake/frosty_flake.h (renamed from keyboards/frosty_flake/frosty_flake.h)10
-rw-r--r--keyboards/bpiphany/frosty_flake/info.json301
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/config.h4
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/keymap.c123
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/readme.md (renamed from keyboards/frosty_flake/keymaps/QFR_JM/readme.md)0
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk17
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/default/config.h3
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/default/keymap.c12
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/default/readme.md (renamed from keyboards/frosty_flake/keymaps/default/readme.md)0
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk17
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/nikchi/config.h18
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/nikchi/keymap.c225
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/nikchi/readme.md (renamed from keyboards/frosty_flake/keymaps/nikchi/readme.md)0
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk20
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/nikchi/variableTapDance.md (renamed from keyboards/frosty_flake/keymaps/nikchi/variableTapDance.md)0
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/tkl/config.h3
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/tkl/keymap.c11
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/tkl/readme.md (renamed from keyboards/frosty_flake/keymaps/tkl/readme.md)0
-rw-r--r--keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk17
-rw-r--r--keyboards/bpiphany/frosty_flake/matrix.c155
-rw-r--r--keyboards/bpiphany/frosty_flake/readme.md43
-rw-r--r--keyboards/bpiphany/frosty_flake/rules.mk (renamed from keyboards/frosty_flake/rules.mk)0
-rw-r--r--keyboards/bpiphany/kitten_paw/config.h (renamed from keyboards/kitten_paw/config.h)0
-rw-r--r--keyboards/bpiphany/kitten_paw/info.json (renamed from keyboards/kitten_paw/info.json)0
-rw-r--r--keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c (renamed from keyboards/kitten_paw/keymaps/default/keymap.c)0
-rw-r--r--keyboards/bpiphany/kitten_paw/keymaps/ickerwx/config.h (renamed from keyboards/kitten_paw/keymaps/ickerwx/config.h)0
-rw-r--r--keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c (renamed from keyboards/kitten_paw/keymaps/ickerwx/keymap.c)0
-rw-r--r--keyboards/bpiphany/kitten_paw/keymaps/ickerwx/readme.md (renamed from keyboards/kitten_paw/keymaps/ickerwx/readme.md)0
-rw-r--r--keyboards/bpiphany/kitten_paw/kitten_paw.c (renamed from keyboards/kitten_paw/kitten_paw.c)0
-rw-r--r--keyboards/bpiphany/kitten_paw/kitten_paw.h (renamed from keyboards/kitten_paw/kitten_paw.h)0
-rw-r--r--keyboards/bpiphany/kitten_paw/matrix.c183
-rw-r--r--keyboards/bpiphany/kitten_paw/readme.md16
-rw-r--r--keyboards/bpiphany/kitten_paw/rules.mk (renamed from keyboards/kitten_paw/rules.mk)0
-rw-r--r--keyboards/bpiphany/pegasushoof/config.h (renamed from keyboards/pegasushoof/config.h)0
-rw-r--r--keyboards/bpiphany/pegasushoof/info.json192
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c110
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk17
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/citadel/config.h6
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c128
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/citadel/readme.md (renamed from keyboards/pegasushoof/keymaps/citadel/readme.md)0
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk17
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/default/keymap.c56
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk17
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/default_jis/keymap.c54
-rw-r--r--keyboards/bpiphany/pegasushoof/keymaps/default_jis/rules.mk17
-rw-r--r--keyboards/bpiphany/pegasushoof/matrix.c222
-rw-r--r--keyboards/bpiphany/pegasushoof/pegasushoof.c (renamed from keyboards/pegasushoof/pegasushoof.c)0
-rw-r--r--keyboards/bpiphany/pegasushoof/pegasushoof.h83
-rw-r--r--keyboards/bpiphany/pegasushoof/readme.md13
-rw-r--r--keyboards/bpiphany/pegasushoof/rules.mk68
-rw-r--r--keyboards/bpiphany/readme.md6
-rw-r--r--keyboards/bpiphany/tiger_lily/config.h (renamed from keyboards/tiger_lily/config.h)0
-rw-r--r--keyboards/bpiphany/tiger_lily/info.json (renamed from keyboards/tiger_lily/info.json)0
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default/config.h (renamed from keyboards/frosty_flake/keymaps/default/config.h)0
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default/keymap.c (renamed from keyboards/tiger_lily/keymaps/default/keymap.c)0
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default/readme.md (renamed from keyboards/tiger_lily/keymaps/default/readme.md)0
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk21
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default_ansi/config.h (renamed from keyboards/frosty_flake/keymaps/tkl/config.h)0
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default_ansi/keymap.c (renamed from keyboards/tiger_lily/keymaps/default_ansi/keymap.c)0
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default_ansi/readme.md (renamed from keyboards/tiger_lily/keymaps/default_ansi/readme.md)0
-rw-r--r--keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk21
-rw-r--r--keyboards/bpiphany/tiger_lily/matrix.c155
-rw-r--r--keyboards/bpiphany/tiger_lily/readme.md16
-rw-r--r--keyboards/bpiphany/tiger_lily/rules.mk (renamed from keyboards/tiger_lily/rules.mk)0
-rw-r--r--keyboards/bpiphany/tiger_lily/tiger_lily.c (renamed from keyboards/tiger_lily/tiger_lily.c)0
-rw-r--r--keyboards/bpiphany/tiger_lily/tiger_lily.h (renamed from keyboards/tiger_lily/tiger_lily.h)0
-rw-r--r--keyboards/bpiphany/unloved_bastard/config.h (renamed from keyboards/unloved_bastard/config.h)0
-rw-r--r--keyboards/bpiphany/unloved_bastard/info.json (renamed from keyboards/unloved_bastard/info.json)0
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default/config.h (renamed from keyboards/unloved_bastard/keymaps/default/config.h)0
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c (renamed from keyboards/unloved_bastard/keymaps/default/keymap.c)0
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default/readme.md (renamed from keyboards/unloved_bastard/keymaps/default/readme.md)0
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/config.h (renamed from keyboards/unloved_bastard/keymaps/default_ansi/config.h)0
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c (renamed from keyboards/unloved_bastard/keymaps/default_ansi/keymap.c)0
-rw-r--r--keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/readme.md (renamed from keyboards/unloved_bastard/keymaps/default_ansi/readme.md)0
-rw-r--r--keyboards/bpiphany/unloved_bastard/matrix.c156
-rw-r--r--keyboards/bpiphany/unloved_bastard/readme.md15
-rw-r--r--keyboards/bpiphany/unloved_bastard/rules.mk (renamed from keyboards/unloved_bastard/rules.mk)0
-rw-r--r--keyboards/bpiphany/unloved_bastard/unloved_bastard.c (renamed from keyboards/unloved_bastard/unloved_bastard.c)0
-rw-r--r--keyboards/bpiphany/unloved_bastard/unloved_bastard.h (renamed from keyboards/unloved_bastard/unloved_bastard.h)0
-rw-r--r--keyboards/canoe/readme.md30
-rw-r--r--keyboards/canoe/rules.mk6
-rw-r--r--keyboards/catch22/config.h5
-rw-r--r--keyboards/catch22/keymaps/default/keymap.c10
-rw-r--r--keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.c111
-rw-r--r--keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.h923
-rw-r--r--keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.mk5
-rw-r--r--keyboards/chimera_ergo/config.h2
-rw-r--r--keyboards/chimera_ls/chimera_ls.h46
-rw-r--r--keyboards/chimera_ls/config.h2
-rw-r--r--keyboards/chimera_ls/info.json13
-rw-r--r--keyboards/chimera_ls/keymaps/default/keymap.c227
-rw-r--r--keyboards/chimera_ls/readme.md10
-rw-r--r--keyboards/chimera_ls/rules.mk4
-rw-r--r--keyboards/chimera_ortho/chimera_ortho.h33
-rw-r--r--keyboards/chimera_ortho/config.h2
-rw-r--r--keyboards/chimera_ortho/info.json280
-rw-r--r--keyboards/chimera_ortho/keymaps/dcompact/keymap.c12
-rw-r--r--keyboards/chimera_ortho/keymaps/default/config.h5
-rw-r--r--keyboards/chimera_ortho/keymaps/default/keymap.c218
-rw-r--r--keyboards/chimera_ortho/keymaps/gordon/keymap.c58
-rw-r--r--keyboards/chocopad/config.h10
-rw-r--r--keyboards/ckeys/nakey/info.json6
-rw-r--r--keyboards/ckeys/nakey/keymaps/default/keymap.c35
-rw-r--r--keyboards/ckeys/nakey/nakey.h13
-rw-r--r--keyboards/ckeys/nakey/rules.mk2
-rw-r--r--keyboards/ckeys/obelus/info.json13
-rw-r--r--keyboards/ckeys/obelus/keymaps/default/keymap.c75
-rw-r--r--keyboards/ckeys/obelus/obelus.h2
-rw-r--r--keyboards/ckeys/obelus/rules.mk2
-rw-r--r--keyboards/clueboard/60/config.h3
-rw-r--r--keyboards/clueboard/60/keymaps/default/keymap.c4
-rw-r--r--keyboards/clueboard/60/keymaps/default_aek/keymap.c4
-rw-r--r--keyboards/clueboard/60/keymaps/yanfali/keymap.c4
-rw-r--r--keyboards/clueboard/66/info.json4
-rw-r--r--keyboards/clueboard/66/keymaps/bloodlvst/config.h1
-rw-r--r--keyboards/clueboard/66/keymaps/skully/keymap.c53
-rw-r--r--keyboards/clueboard/66/keymaps/skully/readme.md11
-rw-r--r--keyboards/clueboard/66/keymaps/skully/rules.mk2
-rw-r--r--keyboards/clueboard/66/keymaps/xyverz/rules.mk2
-rw-r--r--keyboards/clueboard/66/rev2/rev2.h4
-rw-r--r--keyboards/clueboard/66/rev3/rev3.h2
-rw-r--r--keyboards/clueboard/66/rules.mk2
-rw-r--r--keyboards/clueboard/66_hotswap/66_hotswap.h7
-rw-r--r--keyboards/clueboard/66_hotswap/config.h15
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/config.h10
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/gen1.h8
-rw-r--r--keyboards/clueboard/66_hotswap/gen1/rules.mk25
-rw-r--r--keyboards/clueboard/66_hotswap/info.json6
-rw-r--r--keyboards/clueboard/66_hotswap/rules.mk23
-rw-r--r--keyboards/comet46/comet46.c8
-rw-r--r--keyboards/comet46/comet46.h40
-rw-r--r--keyboards/comet46/config.h14
-rw-r--r--keyboards/comet46/i2c.c162
-rw-r--r--keyboards/comet46/i2c.h49
-rw-r--r--keyboards/comet46/info.json62
-rw-r--r--keyboards/comet46/keymaps/default-rgbled/keymap.c226
-rw-r--r--keyboards/comet46/keymaps/default-rgbled/readme.md3
-rw-r--r--keyboards/comet46/keymaps/default/config.h31
-rw-r--r--keyboards/comet46/keymaps/default/keymap.c189
-rw-r--r--keyboards/comet46/keymaps/default/readme.md3
-rw-r--r--keyboards/comet46/keymaps/default/rules.mk5
-rw-r--r--keyboards/comet46/keymaps/satt/action_pseudo_lut.c212
-rw-r--r--keyboards/comet46/keymaps/satt/config.h34
-rw-r--r--keyboards/comet46/keymaps/satt/keymap.c256
-rw-r--r--keyboards/comet46/keymaps/satt/keymap_jis2us.h46
-rw-r--r--keyboards/comet46/keymaps/satt/rules.mk29
-rw-r--r--keyboards/comet46/lib/glcdfont.c148
-rw-r--r--keyboards/comet46/lib/host_led_state_reader.c15
-rw-r--r--keyboards/comet46/lib/keylogger.c294
-rw-r--r--keyboards/comet46/lib/modifier_state_reader.c18
-rw-r--r--keyboards/comet46/readme.md5
-rw-r--r--keyboards/comet46/rules.mk16
-rw-r--r--keyboards/comet46/ssd1306.c344
-rw-r--r--keyboards/comet46/ssd1306.h91
-rwxr-xr-xkeyboards/contra/config.h4
-rw-r--r--keyboards/contra/keymaps/bramver/README.md35
-rwxr-xr-xkeyboards/contra/keymaps/bramver/config.h9
-rw-r--r--keyboards/contra/keymaps/bramver/keymap.c126
-rwxr-xr-xkeyboards/contra/keymaps/bramver/rules.mk6
-rw-r--r--keyboards/contra/keymaps/deastiny/config.h37
-rw-r--r--keyboards/contra/keymaps/deastiny/keymap.c142
-rw-r--r--keyboards/contra/keymaps/deastiny/readme.md56
-rw-r--r--keyboards/contra/keymaps/erovia/config.h7
-rw-r--r--keyboards/contra/keymaps/erovia/keymap.c163
-rw-r--r--keyboards/contra/keymaps/erovia/readme.md76
-rwxr-xr-xkeyboards/contra/keymaps/erovia/rules.mk2
-rw-r--r--keyboards/contra/keymaps/losinggeneration/rules.mk2
-rw-r--r--keyboards/contra/keymaps/maxr1998/keymap.c70
-rw-r--r--keyboards/contra/keymaps/ryanm101/config.h5
-rw-r--r--keyboards/converter/adb_usb/README.md83
-rw-r--r--keyboards/converter/adb_usb/adb_usb.c3
-rw-r--r--keyboards/converter/adb_usb/adb_usb.h109
-rw-r--r--keyboards/converter/adb_usb/config.h43
-rw-r--r--keyboards/converter/adb_usb/info.json204
-rw-r--r--keyboards/converter/adb_usb/keymaps/13bit/keymap.c26
-rw-r--r--keyboards/converter/adb_usb/keymaps/default/keymap.c13
-rw-r--r--keyboards/converter/adb_usb/led.c27
-rw-r--r--keyboards/converter/adb_usb/led.h43
-rw-r--r--keyboards/converter/adb_usb/matrix.c267
-rw-r--r--keyboards/converter/adb_usb/rules.mk73
-rw-r--r--keyboards/converter/hp_46010a/config.h35
-rw-r--r--keyboards/converter/hp_46010a/hp_46010a.c3
-rw-r--r--keyboards/converter/hp_46010a/hp_46010a.h60
-rw-r--r--keyboards/converter/hp_46010a/info.json121
-rw-r--r--keyboards/converter/hp_46010a/keymaps/default/keymap.c45
-rw-r--r--keyboards/converter/hp_46010a/matrix.c244
-rw-r--r--keyboards/converter/hp_46010a/readme.md52
-rw-r--r--keyboards/converter/hp_46010a/rules.mk72
-rw-r--r--keyboards/converter/ibm_5291/config.h42
-rw-r--r--keyboards/converter/ibm_5291/ibm_5291.c3
-rw-r--r--keyboards/converter/ibm_5291/ibm_5291.h69
-rw-r--r--keyboards/converter/ibm_5291/info.json97
-rw-r--r--keyboards/converter/ibm_5291/keymaps/default/keymap.c233
-rw-r--r--keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdfbin0 -> 13054 bytes
-rw-r--r--keyboards/converter/ibm_5291/matrix.c284
-rw-r--r--keyboards/converter/ibm_5291/matrix.csv96
-rw-r--r--keyboards/converter/ibm_5291/readme.md72
-rw-r--r--keyboards/converter/ibm_5291/rules.mk72
-rw-r--r--keyboards/converter/ibm_terminal/README.md40
-rw-r--r--keyboards/converter/ibm_terminal/ibm_terminal.h10
-rw-r--r--keyboards/converter/ibm_terminal/info.json245
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/default/config.h7
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/default/keymap.c12
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/default/rules.mk2
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/priyadi/config.h7
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c28
-rw-r--r--keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk2
-rw-r--r--keyboards/converter/ibm_terminal/readme.md39
-rw-r--r--keyboards/converter/ibm_terminal/rules.mk2
-rw-r--r--keyboards/converter/m0110_usb/README.md18
-rw-r--r--keyboards/converter/m0110_usb/info.json172
-rw-r--r--keyboards/converter/palm_usb/config.h120
-rw-r--r--keyboards/converter/palm_usb/matrix.c398
-rw-r--r--keyboards/converter/palm_usb/readme.md96
-rw-r--r--keyboards/converter/palm_usb/rules.mk46
-rw-r--r--keyboards/converter/palm_usb/stowaway/info.json83
-rw-r--r--keyboards/converter/palm_usb/stowaway/keymaps/default/keymap.c59
-rw-r--r--keyboards/converter/palm_usb/stowaway/rules.mk0
-rw-r--r--keyboards/converter/palm_usb/stowaway/stowaway.h53
-rw-r--r--keyboards/converter/sun_usb/command_extra.c64
-rw-r--r--keyboards/converter/sun_usb/config.h88
-rw-r--r--keyboards/converter/sun_usb/led.c32
-rw-r--r--keyboards/converter/sun_usb/matrix.c197
-rw-r--r--keyboards/converter/sun_usb/readme.md89
-rw-r--r--keyboards/converter/sun_usb/rules.mk44
-rw-r--r--keyboards/converter/sun_usb/type3/info.json109
-rw-r--r--keyboards/converter/sun_usb/type3/keymaps/default/keymap.c29
-rw-r--r--keyboards/converter/sun_usb/type3/rules.mk0
-rw-r--r--keyboards/converter/sun_usb/type3/type3.h66
-rw-r--r--keyboards/converter/sun_usb/type5/info.json381
-rw-r--r--keyboards/converter/sun_usb/type5/keymaps/default/keymap.c30
-rw-r--r--keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c31
-rw-r--r--keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md12
-rw-r--r--keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk1
-rw-r--r--keyboards/converter/sun_usb/type5/rules.mk0
-rw-r--r--keyboards/converter/sun_usb/type5/type5.h148
-rw-r--r--keyboards/converter/usb_usb/README.md4
-rw-r--r--keyboards/converter/usb_usb/ble/config.h10
-rw-r--r--keyboards/converter/usb_usb/ble/rules.mk20
-rw-r--r--keyboards/converter/usb_usb/info.json485
-rw-r--r--keyboards/converter/usb_usb/keymap.c288
-rw-r--r--keyboards/converter/usb_usb/keymaps/ble/keymap.c18
-rw-r--r--keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c44
-rw-r--r--keyboards/converter/usb_usb/keymaps/default/keymap.c22
-rw-r--r--keyboards/converter/usb_usb/usb_usb.h56
-rw-r--r--keyboards/converter/xt_usb/README.md17
-rw-r--r--keyboards/converter/xt_usb/config.h78
-rw-r--r--keyboards/converter/xt_usb/info.json229
-rw-r--r--keyboards/converter/xt_usb/keymaps/default/config.h1
-rw-r--r--keyboards/converter/xt_usb/keymaps/default/keymap.c55
-rw-r--r--keyboards/converter/xt_usb/led.c22
-rw-r--r--keyboards/converter/xt_usb/matrix.c309
-rw-r--r--keyboards/converter/xt_usb/rules.mk62
-rw-r--r--keyboards/converter/xt_usb/xt_usb.c1
-rw-r--r--keyboards/converter/xt_usb/xt_usb.h132
-rw-r--r--keyboards/cospad/cospad.h36
-rw-r--r--keyboards/cospad/info.json77
-rw-r--r--keyboards/cospad/keymaps/detrus/keymap.c369
-rw-r--r--keyboards/cospad/readme.md6
-rwxr-xr-xkeyboards/crawlpad/config.h3
-rw-r--r--keyboards/crkbd/config.h16
-rw-r--r--keyboards/crkbd/crkbd.c9
-rw-r--r--keyboards/crkbd/crkbd.h5
-rw-r--r--keyboards/crkbd/i2c.c2
-rw-r--r--keyboards/crkbd/i2c.h7
-rw-r--r--keyboards/crkbd/info.json62
-rw-r--r--keyboards/crkbd/keymaps/default/config.h11
-rw-r--r--keyboards/crkbd/keymaps/default/glcdfont.c244
-rw-r--r--keyboards/crkbd/keymaps/default/keymap.c41
-rw-r--r--keyboards/crkbd/keymaps/default/rules.mk24
-rw-r--r--keyboards/crkbd/keymaps/drashna/config.h50
-rw-r--r--keyboards/crkbd/keymaps/drashna/keymap.c266
-rw-r--r--keyboards/crkbd/keymaps/drashna/rules.mk33
-rw-r--r--keyboards/crkbd/keymaps/edvorakjp/config.h24
-rw-r--r--keyboards/crkbd/keymaps/edvorakjp/keymap.c158
-rw-r--r--keyboards/crkbd/keymaps/edvorakjp/oled.c82
-rw-r--r--keyboards/crkbd/keymaps/edvorakjp/oled.h24
-rw-r--r--keyboards/crkbd/keymaps/edvorakjp/readme.md21
-rw-r--r--keyboards/crkbd/keymaps/edvorakjp/rules.mk32
-rw-r--r--keyboards/crkbd/keymaps/lib/host_led_state_reader.c13
-rw-r--r--keyboards/crkbd/keymaps/lib/keylogger.c49
-rw-r--r--keyboards/crkbd/keymaps/lib/layer_state_reader.c33
-rw-r--r--keyboards/crkbd/keymaps/lib/logo_reader.c12
-rw-r--r--keyboards/crkbd/keymaps/lib/mode_icon_reader.c15
-rw-r--r--keyboards/crkbd/keymaps/lib/timelogger.c17
-rw-r--r--keyboards/crkbd/keymaps/like_jis/config.h6
-rw-r--r--keyboards/crkbd/keymaps/like_jis/glcdfont.c244
-rw-r--r--keyboards/crkbd/keymaps/like_jis/keymap.c304
-rw-r--r--keyboards/crkbd/keymaps/like_jis/oled_helper.c83
-rw-r--r--keyboards/crkbd/keymaps/like_jis/oled_helper.h35
-rw-r--r--keyboards/crkbd/keymaps/like_jis/rules.mk23
-rw-r--r--keyboards/crkbd/lib/glcdfont.c243
-rw-r--r--keyboards/crkbd/lib/host_led_state_reader.c15
-rw-r--r--keyboards/crkbd/lib/keylogger.c45
-rw-r--r--keyboards/crkbd/lib/layer_state_reader.c35
-rw-r--r--keyboards/crkbd/lib/logo_reader.c11
-rw-r--r--keyboards/crkbd/lib/mode_icon_reader.c15
-rw-r--r--keyboards/crkbd/lib/rgb_state_reader.c15
-rw-r--r--keyboards/crkbd/lib/timelogger.c16
-rw-r--r--keyboards/crkbd/pro_micro.h6
-rw-r--r--keyboards/crkbd/readme.md3
-rw-r--r--keyboards/crkbd/rev1/config.h12
-rw-r--r--keyboards/crkbd/rev1/matrix.c59
-rw-r--r--keyboards/crkbd/rev1/rev1.h5
-rw-r--r--keyboards/crkbd/rev1/rules.mk5
-rw-r--r--keyboards/crkbd/rev1/serial_config.h4
-rw-r--r--keyboards/crkbd/rev1/serial_config_simpleapi.h5
-rw-r--r--keyboards/crkbd/rev1/split_scomm.c91
-rw-r--r--keyboards/crkbd/rev1/split_scomm.h24
-rw-r--r--keyboards/crkbd/rev1/split_util.c70
-rw-r--r--keyboards/crkbd/rev1/split_util.h (renamed from keyboards/crkbd/split_util.h)0
-rw-r--r--keyboards/crkbd/rules.mk12
-rw-r--r--keyboards/crkbd/serial.c598
-rw-r--r--keyboards/crkbd/serial.h90
-rw-r--r--keyboards/crkbd/split_util.c71
-rw-r--r--keyboards/crkbd/ssd1306.c20
-rw-r--r--keyboards/crkbd/ssd1306.h9
-rw-r--r--keyboards/daisy/keymaps/default/keymap.c2
-rw-r--r--keyboards/daisy/rules.mk2
-rw-r--r--keyboards/dc01/left/config.h2
-rw-r--r--keyboards/dc01/left/matrix.c41
-rw-r--r--keyboards/deltasplit75/keymaps/itsaferbie/rules.mk2
-rw-r--r--keyboards/deltasplit75/rules.mk6
-rw-r--r--keyboards/deltasplit75/v2/config.h6
-rw-r--r--keyboards/dichotemy/config.h87
-rw-r--r--keyboards/dichotemy/dichotemy.c86
-rw-r--r--keyboards/dichotemy/dichotemy.h67
-rw-r--r--keyboards/dichotemy/info.json12
-rw-r--r--keyboards/dichotemy/keymaps/default/keymap.c394
-rw-r--r--keyboards/dichotemy/matrix.c168
-rw-r--r--keyboards/dichotemy/readme.md33
-rw-r--r--keyboards/dichotemy/rules.mk75
-rwxr-xr-xkeyboards/dichotomy/config.h85
-rwxr-xr-xkeyboards/dichotomy/dichotomy.c89
-rwxr-xr-xkeyboards/dichotomy/dichotomy.h46
-rw-r--r--keyboards/dichotomy/info.json12
-rw-r--r--keyboards/dichotomy/keymaps/alairock/keymap.c196
-rwxr-xr-xkeyboards/dichotomy/keymaps/default/keymap.c506
-rwxr-xr-xkeyboards/dichotomy/matrix.c228
-rwxr-xr-xkeyboards/dichotomy/readme.md33
-rwxr-xr-xkeyboards/dichotomy/rules.mk77
-rw-r--r--keyboards/dilly/config.h10
-rw-r--r--keyboards/diverge3/.gitignore1
-rw-r--r--keyboards/diverge3/config.h14
-rwxr-xr-xkeyboards/diverge3/keymaps/iso_uk/config.h24
-rw-r--r--keyboards/diverge3/keymaps/iso_uk/keymap.c45
-rwxr-xr-xkeyboards/diverge3/keymaps/iso_uk/readme.md1
-rwxr-xr-xkeyboards/diverge3/keymaps/iso_uk/rules.mk1
-rw-r--r--keyboards/diverge3/keymaps/workman/config.h5
-rw-r--r--keyboards/diverge3/keymaps/workman/keymap.c212
-rw-r--r--keyboards/diverge3/keymaps/workman/readme.md21
-rw-r--r--keyboards/diverge3/keymaps/workman/rules.mk1
-rw-r--r--keyboards/diverge3/readme.md6
-rw-r--r--keyboards/diverge3/rules.mk10
-rw-r--r--keyboards/divergetm2/config.h82
-rw-r--r--keyboards/divergetm2/divergetm2.c17
-rw-r--r--keyboards/divergetm2/divergetm2.h74
-rw-r--r--keyboards/divergetm2/keymaps/default/config.h23
-rw-r--r--keyboards/divergetm2/keymaps/default/keymap.c200
-rw-r--r--keyboards/divergetm2/keymaps/default/readme.md5
-rw-r--r--keyboards/divergetm2/keymaps/default/rules.mk0
-rw-r--r--keyboards/divergetm2/keymaps/xtonhasvim/config.h23
-rw-r--r--keyboards/divergetm2/keymaps/xtonhasvim/keymap.c155
-rw-r--r--keyboards/divergetm2/keymaps/xtonhasvim/readme.md9
-rw-r--r--keyboards/divergetm2/keymaps/xtonhasvim/rules.mk3
-rw-r--r--keyboards/divergetm2/readme.md21
-rw-r--r--keyboards/divergetm2/rules.mk75
-rw-r--r--keyboards/do60/do60.h14
-rw-r--r--keyboards/do60/info.json4
-rw-r--r--keyboards/do60/keymaps/default/keymap.c2
-rw-r--r--keyboards/do60/keymaps/test/keymap.c2
-rw-r--r--keyboards/do60/readme.md17
-rw-r--r--keyboards/do60/rules.mk4
-rw-r--r--keyboards/duck/eagle_viper/info.json19
-rw-r--r--keyboards/duck/eagle_viper/readme.md12
-rw-r--r--keyboards/duck/eagle_viper/rules.mk3
-rw-r--r--keyboards/duck/eagle_viper/v2/config.h (renamed from keyboards/eagle_viper/v2/config.h)0
-rw-r--r--keyboards/duck/eagle_viper/v2/indicator_leds.c (renamed from keyboards/eagle_viper/v2/indicator_leds.c)0
-rw-r--r--keyboards/duck/eagle_viper/v2/indicator_leds.h (renamed from keyboards/eagle_viper/v2/indicator_leds.h)0
-rw-r--r--keyboards/duck/eagle_viper/v2/keymaps/default/keymap.c39
-rw-r--r--keyboards/duck/eagle_viper/v2/keymaps/default/readme.md (renamed from keyboards/eagle_viper/v2/keymaps/default/readme.md)0
-rw-r--r--keyboards/duck/eagle_viper/v2/keymaps/profanum429/keymap.c39
-rw-r--r--keyboards/duck/eagle_viper/v2/keymaps/profanum429/readme.md (renamed from keyboards/eagle_viper/v2/keymaps/profanum429/readme.md)0
-rw-r--r--keyboards/duck/eagle_viper/v2/matrix.c (renamed from keyboards/eagle_viper/v2/matrix.c)0
-rw-r--r--keyboards/duck/eagle_viper/v2/readme.md (renamed from keyboards/eagle_viper/v2/readme.md)0
-rw-r--r--keyboards/duck/eagle_viper/v2/rules.mk (renamed from keyboards/eagle_viper/v2/rules.mk)0
-rw-r--r--keyboards/duck/eagle_viper/v2/v2.c (renamed from keyboards/eagle_viper/v2/v2.c)0
-rw-r--r--keyboards/duck/eagle_viper/v2/v2.h81
-rw-r--r--keyboards/duck/jetfire/backlight_led.c129
-rw-r--r--keyboards/duck/jetfire/backlight_led.h18
-rw-r--r--keyboards/duck/jetfire/config.h200
-rw-r--r--keyboards/duck/jetfire/info.json16
-rw-r--r--keyboards/duck/jetfire/jetfire.c171
-rw-r--r--keyboards/duck/jetfire/jetfire.h60
-rw-r--r--keyboards/duck/jetfire/keymaps/default/config.h19
-rw-r--r--keyboards/duck/jetfire/keymaps/default/keymap.c59
-rw-r--r--keyboards/duck/jetfire/keymaps/default/readme.md1
-rw-r--r--keyboards/duck/jetfire/matrix.c277
-rw-r--r--keyboards/duck/jetfire/readme.md18
-rw-r--r--keyboards/duck/jetfire/rules.mk74
-rw-r--r--keyboards/duck/lightsaver/config.h (renamed from keyboards/lightsaver/config.h)0
-rw-r--r--keyboards/duck/lightsaver/indicator_leds.c (renamed from keyboards/lightsaver/indicator_leds.c)0
-rw-r--r--keyboards/duck/lightsaver/indicator_leds.h (renamed from keyboards/lightsaver/indicator_leds.h)0
-rw-r--r--keyboards/duck/lightsaver/info.json (renamed from keyboards/lightsaver/info.json)0
-rw-r--r--keyboards/duck/lightsaver/keymaps/default/keymap.c (renamed from keyboards/lightsaver/keymaps/default/keymap.c)0
-rw-r--r--keyboards/duck/lightsaver/keymaps/default/readme.md (renamed from keyboards/lightsaver/keymaps/default/readme.md)0
-rw-r--r--keyboards/duck/lightsaver/keymaps/rasmus/config.h (renamed from keyboards/lightsaver/keymaps/rasmus/config.h)0
-rw-r--r--keyboards/duck/lightsaver/keymaps/rasmus/keymap.c (renamed from keyboards/lightsaver/keymaps/rasmus/keymap.c)0
-rw-r--r--keyboards/duck/lightsaver/keymaps/rasmus/readme.md (renamed from keyboards/lightsaver/keymaps/rasmus/readme.md)0
-rw-r--r--keyboards/duck/lightsaver/keymaps/rasmus/rules.mk (renamed from keyboards/lightsaver/keymaps/rasmus/rules.mk)0
-rw-r--r--keyboards/duck/lightsaver/lightsaver.c (renamed from keyboards/lightsaver/lightsaver.c)0
-rw-r--r--keyboards/duck/lightsaver/lightsaver.h (renamed from keyboards/lightsaver/lightsaver.h)0
-rw-r--r--keyboards/duck/lightsaver/matrix.c (renamed from keyboards/lightsaver/matrix.c)0
-rw-r--r--keyboards/duck/lightsaver/readme.md (renamed from keyboards/lightsaver/readme.md)0
-rw-r--r--keyboards/duck/lightsaver/rules.mk (renamed from keyboards/lightsaver/rules.mk)0
-rw-r--r--keyboards/duck/octagon/keymaps/default/keymap.c37
-rw-r--r--keyboards/duck/octagon/keymaps/default/readme.md0
-rw-r--r--keyboards/duck/octagon/readme.md11
-rw-r--r--keyboards/duck/octagon/rules.mk1
-rw-r--r--keyboards/duck/octagon/v1/config.h (renamed from keyboards/octagon/v1/config.h)0
-rw-r--r--keyboards/duck/octagon/v1/info.json (renamed from keyboards/octagon/v1/info.json)0
-rw-r--r--keyboards/duck/octagon/v1/matrix.c (renamed from keyboards/octagon/v1/matrix.c)0
-rw-r--r--keyboards/duck/octagon/v1/readme.md28
-rw-r--r--keyboards/duck/octagon/v1/rules.mk (renamed from keyboards/octagon/v1/rules.mk)0
-rw-r--r--keyboards/duck/octagon/v1/v1.c (renamed from keyboards/octagon/v1/v1.c)0
-rw-r--r--keyboards/duck/octagon/v1/v1.h52
-rw-r--r--keyboards/duck/octagon/v2/config.h (renamed from keyboards/octagon/v2/config.h)0
-rw-r--r--keyboards/duck/octagon/v2/indicator_leds.c (renamed from keyboards/octagon/v2/indicator_leds.c)0
-rw-r--r--keyboards/duck/octagon/v2/indicator_leds.h (renamed from keyboards/octagon/v2/indicator_leds.h)0
-rw-r--r--keyboards/duck/octagon/v2/info.json16
-rw-r--r--keyboards/duck/octagon/v2/matrix.c (renamed from keyboards/octagon/v2/matrix.c)0
-rw-r--r--keyboards/duck/octagon/v2/readme.md (renamed from keyboards/octagon/v2/readme.md)0
-rw-r--r--keyboards/duck/octagon/v2/rules.mk74
-rw-r--r--keyboards/duck/octagon/v2/v2.c (renamed from keyboards/octagon/v2/v2.c)0
-rw-r--r--keyboards/duck/octagon/v2/v2.h52
-rw-r--r--keyboards/duck/readme.md16
-rw-r--r--keyboards/dz60/config.h3
-rw-r--r--keyboards/dz60/dz60.c4
-rw-r--r--keyboards/dz60/dz60.h464
-rw-r--r--keyboards/dz60/info.json42
-rw-r--r--keyboards/dz60/keymaps/256k_HHKB/keymap.c20
-rw-r--r--keyboards/dz60/keymaps/60_ansi/keymap.c18
-rw-r--r--keyboards/dz60/keymaps/60_ansi/readme.md9
-rw-r--r--keyboards/dz60/keymaps/60_ansi_arrow_fkeys/config.h1
-rw-r--r--keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c42
-rw-r--r--keyboards/dz60/keymaps/60_plus_arrows/keymap.c40
-rw-r--r--keyboards/dz60/keymaps/60_tsangan/keymap.c32
-rw-r--r--keyboards/dz60/keymaps/Ansi_plus_fn_arrows/config.h1
-rw-r--r--keyboards/dz60/keymaps/Ansi_plus_fn_arrows/keymap.c38
-rw-r--r--keyboards/dz60/keymaps/LEdiodes/config.h3
-rw-r--r--keyboards/dz60/keymaps/boris_burger/README.md52
-rw-r--r--keyboards/dz60/keymaps/boris_burger/config.h1
-rw-r--r--keyboards/dz60/keymaps/boris_burger/keymap.c87
-rw-r--r--keyboards/dz60/keymaps/crd_2u_lshift/keymap.c70
-rw-r--r--keyboards/dz60/keymaps/crd_ansi/keymap.c30
-rw-r--r--keyboards/dz60/keymaps/crd_tsangan/keymap.c30
-rw-r--r--keyboards/dz60/keymaps/dbroqua/keymap.c2
-rw-r--r--keyboards/dz60/keymaps/default/keymap.c38
-rw-r--r--keyboards/dz60/keymaps/doogle999/keymap.c74
-rwxr-xr-xkeyboards/dz60/keymaps/drewsky/Readme.md11
-rwxr-xr-xkeyboards/dz60/keymaps/drewsky/keymap.c34
-rw-r--r--keyboards/dz60/keymaps/eric/keymap.c36
-rw-r--r--keyboards/dz60/keymaps/f3d3/keymap.c40
-rw-r--r--keyboards/dz60/keymaps/frogger/keymap.c8
-rw-r--r--keyboards/dz60/keymaps/hailbreno/keymap.c16
-rw-r--r--keyboards/dz60/keymaps/iso_6u_space/keymap.c106
-rw-r--r--keyboards/dz60/keymaps/iso_7u_space/keymap.c109
-rw-r--r--keyboards/dz60/keymaps/iso_de_andys8/README.md3
-rw-r--r--keyboards/dz60/keymaps/iso_de_andys8/keymap.c38
-rw-r--r--keyboards/dz60/keymaps/iso_de_andys8/rules.mk15
-rw-r--r--keyboards/dz60/keymaps/iso_split-spacebar/README.md69
-rw-r--r--keyboards/dz60/keymaps/iso_split-spacebar/keymap.c193
-rw-r--r--keyboards/dz60/keymaps/iso_uk/keymap.c36
-rw-r--r--keyboards/dz60/keymaps/iso_vim_arrow/keymap.c44
-rw-r--r--keyboards/dz60/keymaps/itsaferbie/keymap.c12
-rw-r--r--keyboards/dz60/keymaps/jarred/keymap.c21
-rw-r--r--keyboards/dz60/keymaps/jkbone/keymap.c53
-rw-r--r--keyboards/dz60/keymaps/krusli/keymap.c1
-rw-r--r--keyboards/dz60/keymaps/macos_arrow/keymap.c81
-rw-r--r--keyboards/dz60/keymaps/macos_arrow/readme.md39
-rw-r--r--keyboards/dz60/keymaps/marianas/customLogic.c138
-rw-r--r--keyboards/dz60/keymaps/marianas/customLogic.h10
-rw-r--r--keyboards/dz60/keymaps/marianas/keyDefinitions.h124
-rw-r--r--keyboards/dz60/keymaps/marianas/keymap.c50
-rw-r--r--keyboards/dz60/keymaps/marianas/keymap.h15
-rw-r--r--keyboards/dz60/keymaps/marianas/relativity.c510
-rw-r--r--keyboards/dz60/keymaps/marianas/relativity.h32
-rw-r--r--keyboards/dz60/keymaps/marianas/rules.mk21
-rw-r--r--keyboards/dz60/keymaps/mechmerlin/config.h6
-rw-r--r--keyboards/dz60/keymaps/mechmerlin/keymap.c40
-rw-r--r--keyboards/dz60/keymaps/mechmerlin/readme.md68
-rw-r--r--keyboards/dz60/keymaps/pevecyan/keymap.c41
-rw-r--r--keyboards/dz60/keymaps/stephengrier/README.md45
-rw-r--r--keyboards/dz60/keymaps/stephengrier/config.h1
-rw-r--r--keyboards/dz60/keymaps/stephengrier/keymap.c50
-rw-r--r--keyboards/dz60/keymaps/thomasviaud/README.md4
-rw-r--r--keyboards/dz60/keymaps/thomasviaud/keymap.c18
-rw-r--r--keyboards/dz60/keymaps/weeheavy/keymap.c6
-rw-r--r--keyboards/dz60/keymaps/xtonhasvim/keymap.c23
-rw-r--r--keyboards/dz60/keymaps/zvecr/keymap.c40
-rw-r--r--keyboards/e6v2/le/info.json7
-rw-r--r--keyboards/e6v2/le/keymaps/johu/keymap.c98
-rw-r--r--keyboards/e6v2/le/keymaps/johu/readme.md40
-rw-r--r--keyboards/e6v2/le/le.h28
-rw-r--r--keyboards/e6v2/readme.md2
-rw-r--r--keyboards/eagle_viper/eagle_viper.c1
-rw-r--r--keyboards/eagle_viper/eagle_viper.h10
-rw-r--r--keyboards/eagle_viper/info.json22
-rw-r--r--keyboards/eagle_viper/readme.md12
-rw-r--r--keyboards/eagle_viper/rules.mk3
-rw-r--r--keyboards/eagle_viper/v2/keymaps/default/keymap.c37
-rw-r--r--keyboards/eagle_viper/v2/keymaps/profanum429/keymap.c40
-rw-r--r--keyboards/eagle_viper/v2/v2.h78
-rw-r--r--keyboards/eco/keymaps/default/rules.mk2
-rw-r--r--keyboards/eco/keymaps/hexwire/rules.mk2
-rw-r--r--keyboards/eco/keymaps/that_canadian/rules.mk2
-rw-r--r--keyboards/eco/keymaps/xyverz/rules.mk2
-rw-r--r--keyboards/ep/40/40.c43
-rw-r--r--keyboards/ep/40/40.h44
-rw-r--r--keyboards/ep/40/config.h114
-rw-r--r--keyboards/ep/40/info.json12
-rw-r--r--keyboards/ep/40/keymaps/default/keymap.c71
-rw-r--r--keyboards/ep/40/keymaps/default/readme.md1
-rw-r--r--keyboards/ep/40/readme.md15
-rw-r--r--keyboards/ep/40/rules.mk80
-rw-r--r--keyboards/ep/96/96.c43
-rw-r--r--keyboards/ep/96/96.h47
-rw-r--r--keyboards/ep/96/config.h212
-rw-r--r--keyboards/ep/96/info.json426
-rw-r--r--keyboards/ep/96/keymaps/default/keymap.c67
-rw-r--r--keyboards/ep/96/keymaps/default/readme.md1
-rw-r--r--keyboards/ep/96/readme.md15
-rw-r--r--keyboards/ep/96/rules.mk81
-rw-r--r--keyboards/ergo42/info.json2
-rw-r--r--keyboards/ergo42/keymaps/biacco-biacco/config.h33
-rw-r--r--keyboards/ergo42/keymaps/biacco-biacco/keymap.c161
-rw-r--r--keyboards/ergo42/keymaps/biacco-macOS/config.h6
-rw-r--r--keyboards/ergo42/keymaps/biacco-underglow/config.h6
-rw-r--r--keyboards/ergo42/keymaps/biacco-underglow/rules.mk4
-rw-r--r--keyboards/ergo42/keymaps/biacco-winjp/config.h33
-rw-r--r--keyboards/ergo42/keymaps/biacco-winjp/keymap.c95
-rw-r--r--keyboards/ergo42/keymaps/biacco/config.h6
-rw-r--r--keyboards/ergo42/keymaps/default-illustrator/config.h6
-rw-r--r--keyboards/ergo42/keymaps/default-underglow/config.h6
-rw-r--r--keyboards/ergo42/keymaps/default-underglow/keymap.c14
-rw-r--r--keyboards/ergo42/keymaps/default/config.h6
-rw-r--r--keyboards/ergo42/keymaps/default/keymap.c14
-rw-r--r--keyboards/ergo42/keymaps/default/rules.mk3
-rw-r--r--keyboards/ergo42/keymaps/hdbx/config.h6
-rw-r--r--keyboards/ergo42/keymaps/hdbx/rules.mk5
-rw-r--r--keyboards/ergo42/keymaps/ichi-t/config.h6
-rw-r--r--keyboards/ergo42/keymaps/koba/config.h33
-rw-r--r--keyboards/ergo42/keymaps/koba/keymap.c128
-rw-r--r--keyboards/ergo42/keymaps/koba/readme.md57
-rw-r--r--keyboards/ergo42/keymaps/koba/readme_ja.md62
-rw-r--r--keyboards/ergo42/keymaps/yshrsmz/config.h36
-rw-r--r--keyboards/ergo42/keymaps/yshrsmz/keymap.c166
-rw-r--r--keyboards/ergo42/keymaps/yshrsmz/rules.mk4
-rw-r--r--keyboards/ergo42/rev1/config.h4
-rw-r--r--keyboards/ergo42/rules.mk2
-rw-r--r--keyboards/ergodash/ergodash.h18
-rw-r--r--keyboards/ergodash/mini/config.h95
-rw-r--r--keyboards/ergodash/mini/info.json13
-rw-r--r--keyboards/ergodash/mini/keymaps/default/config.h39
-rw-r--r--keyboards/ergodash/mini/keymaps/default/keymap.c129
-rw-r--r--keyboards/ergodash/mini/keymaps/default/rules.mk0
-rw-r--r--keyboards/ergodash/mini/mini.c13
-rw-r--r--keyboards/ergodash/mini/mini.h60
-rw-r--r--keyboards/ergodash/mini/readme.md18
-rw-r--r--keyboards/ergodash/mini/rules.mk2
-rw-r--r--keyboards/ergodash/readme.md4
-rw-r--r--keyboards/ergodash/rev1/config.h4
-rw-r--r--keyboards/ergodash/rev2/config.h6
-rw-r--r--keyboards/ergodash/rev2/keymaps/default/keymap.c30
-rw-r--r--keyboards/ergodash/rev2/rules.mk3
-rw-r--r--keyboards/ergodash/rules.mk2
-rw-r--r--keyboards/ergodone/config.h2
-rw-r--r--keyboards/ergodone/keymaps/eozaki/keymap.c223
-rw-r--r--keyboards/ergodone/keymaps/eozaki/readme.md13
-rw-r--r--keyboards/ergodone/keymaps/erovia/config.h3
-rw-r--r--keyboards/ergodone/keymaps/erovia/keymap.c233
-rw-r--r--keyboards/ergodone/keymaps/erovia/readme.md76
-rw-r--r--keyboards/ergodone/keymaps/erovia/rules.mk1
-rw-r--r--keyboards/ergodox_ez/config.h19
-rw-r--r--keyboards/ergodox_ez/ergodox_ez.c1
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/bocaj.h146
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/config.h21
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/keymap.c340
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/readme.md48
-rw-r--r--keyboards/ergodox_ez/keymaps/bocaj/rules.mk5
-rw-r--r--keyboards/ergodox_ez/keymaps/default/keymap.c177
-rw-r--r--keyboards/ergodox_ez/keymaps/default_glow/keymap.c1
-rw-r--r--keyboards/ergodox_ez/keymaps/default_glow/rules.mk4
-rw-r--r--keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c2
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore2
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h88
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js19
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c353
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c5
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c8
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c19
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c12
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c14
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c14
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json15
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c20
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md62
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk40
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c40
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c20
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c75
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c74
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c3
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c121
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c12
-rw-r--r--keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c75
-rw-r--r--keyboards/ergodox_ez/keymaps/heartrobotninja/rules.mk3
-rw-r--r--keyboards/ergodox_ez/keymaps/lukaus/config.h16
-rw-r--r--keyboards/ergodox_ez/keymaps/lukaus/keymap.c843
-rw-r--r--keyboards/ergodox_ez/keymaps/lukaus/readme.md3
-rw-r--r--keyboards/ergodox_ez/keymaps/lukaus/rules.mk1
-rw-r--r--keyboards/ergodox_ez/keymaps/rgb_layer/config.h24
-rw-r--r--keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c271
-rw-r--r--keyboards/ergodox_ez/keymaps/skug/config.h8
-rw-r--r--keyboards/ergodox_ez/keymaps/skug/keymap.c273
-rw-r--r--keyboards/ergodox_ez/keymaps/skug/readme.md4
-rw-r--r--keyboards/ergodox_ez/keymaps/vim/vim.h1
-rw-r--r--keyboards/ergodox_ez/matrix.c52
-rw-r--r--keyboards/ergodox_ez/rules.mk10
-rw-r--r--keyboards/ergodox_infinity/keymaps/gordon/config.h2
-rw-r--r--keyboards/ergodox_infinity/keymaps/input_club/keymap.c4
-rw-r--r--keyboards/ergodox_infinity/keymaps/narze/config.h1
-rw-r--r--keyboards/ergodox_infinity/keymaps/narze/rules.mk2
-rw-r--r--keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk3
-rw-r--r--keyboards/ergodox_infinity/matrix.c4
-rw-r--r--keyboards/ergoinu/config.h114
-rw-r--r--keyboards/ergoinu/ergoinu.c5
-rw-r--r--keyboards/ergoinu/ergoinu.h44
-rw-r--r--keyboards/ergoinu/info.json87
-rw-r--r--keyboards/ergoinu/keymaps/default/config.h24
-rw-r--r--keyboards/ergoinu/keymaps/default/keymap.c101
-rw-r--r--keyboards/ergoinu/keymaps/default/rules.mk29
-rw-r--r--keyboards/ergoinu/keymaps/default_jis/config.h24
-rw-r--r--keyboards/ergoinu/keymaps/default_jis/keymap.c101
-rw-r--r--keyboards/ergoinu/keymaps/default_jis/rules.mk29
-rw-r--r--keyboards/ergoinu/matrix.c303
-rw-r--r--keyboards/ergoinu/readme.md21
-rw-r--r--keyboards/ergoinu/rules.mk84
-rw-r--r--keyboards/ergoinu/serial.c295
-rw-r--r--keyboards/ergoinu/serial.h24
-rw-r--r--keyboards/ergoinu/serial_config.h11
-rw-r--r--keyboards/ergoinu/split_util.c56
-rw-r--r--keyboards/ergoinu/split_util.h12
-rw-r--r--keyboards/ergotravel/config.h73
-rw-r--r--keyboards/ergotravel/ergotravel.h4
-rw-r--r--keyboards/ergotravel/i2c.h49
-rw-r--r--keyboards/ergotravel/keymaps/ckofy/config.h9
-rw-r--r--keyboards/ergotravel/keymaps/ckofy/keymap.c14
-rw-r--r--keyboards/ergotravel/keymaps/ckofy/rules.mk3
-rw-r--r--keyboards/ergotravel/keymaps/default/config.h7
-rw-r--r--keyboards/ergotravel/keymaps/default/rules.mk3
-rw-r--r--keyboards/ergotravel/keymaps/ian/config.h7
-rw-r--r--keyboards/ergotravel/keymaps/ian/rules.mk3
-rw-r--r--keyboards/ergotravel/keymaps/jpconstantineau/config.h7
-rw-r--r--keyboards/ergotravel/keymaps/jpconstantineau/rules.mk3
-rw-r--r--keyboards/ergotravel/keymaps/viet/config.h6
-rw-r--r--keyboards/ergotravel/keymaps/viet/rules.mk3
-rw-r--r--keyboards/ergotravel/keymaps/yanfali/config.h38
-rw-r--r--keyboards/ergotravel/keymaps/yanfali/keymap.c108
-rw-r--r--keyboards/ergotravel/keymaps/yanfali/rules.mk1
-rw-r--r--keyboards/ergotravel/matrix.c482
-rw-r--r--keyboards/ergotravel/rev1/config.h14
-rw-r--r--keyboards/ergotravel/rules.mk12
-rw-r--r--keyboards/ergotravel/serial.c228
-rw-r--r--keyboards/ergotravel/serial.h26
-rw-r--r--keyboards/ergotravel/split_util.c86
-rwxr-xr-xkeyboards/espectro/config.h70
-rwxr-xr-xkeyboards/espectro/espectro.c76
-rwxr-xr-xkeyboards/espectro/espectro.h144
-rw-r--r--keyboards/espectro/info.json347
-rwxr-xr-xkeyboards/espectro/keymaps/default/keymap.c88
-rwxr-xr-xkeyboards/espectro/keymaps/iso/keymap.c88
-rw-r--r--keyboards/espectro/keymaps/mac/config.h22
-rw-r--r--keyboards/espectro/keymaps/mac/keymap.c166
-rw-r--r--keyboards/espectro/keymaps/mac/readme.md56
-rw-r--r--keyboards/espectro/keymaps/mapdev/keymap.c87
-rw-r--r--keyboards/espectro/readme.md15
-rwxr-xr-xkeyboards/espectro/rules.mk61
-rw-r--r--keyboards/evil80/config.h64
-rw-r--r--keyboards/evil80/evil80.c47
-rw-r--r--keyboards/evil80/evil80.h23
-rw-r--r--keyboards/evil80/info.json13
-rw-r--r--keyboards/evil80/keymaps/default/keymap.c31
-rw-r--r--keyboards/evil80/readme.md15
-rw-r--r--keyboards/evil80/rules.mk68
-rw-r--r--keyboards/facew/readme.md35
-rw-r--r--keyboards/fc660c/keymaps/dbroqua/keymap.c47
-rw-r--r--keyboards/fc660c/keymaps/spacebarracecar/config.h8
-rw-r--r--keyboards/fc660c/keymaps/spacebarracecar/keymap.c38
-rw-r--r--keyboards/fc660c/keymaps/spacebarracecar/readme.md5
-rw-r--r--keyboards/fc660c/keymaps/spacebarracecar/rules.mk6
-rw-r--r--keyboards/fc980c/fc980c.h61
-rw-r--r--keyboards/fc980c/info.json197
-rw-r--r--keyboards/felix/config.h4
-rw-r--r--keyboards/fortitude60/config.h1
-rw-r--r--keyboards/fortitude60/keymaps/default/config.h1
-rw-r--r--keyboards/fortitude60/keymaps/default/keymap.c10
-rw-r--r--keyboards/fortitude60/keymaps/default/rules.mk1
-rw-r--r--keyboards/fortitude60/rev1/config.h11
-rw-r--r--keyboards/fortitude60/rev1/rules.mk1
-rw-r--r--keyboards/fortitude60/rules.mk2
-rw-r--r--keyboards/fortitude60/serial.c595
-rw-r--r--keyboards/fortitude60/serial.h103
-rw-r--r--keyboards/fortitude60/serial_config.h10
-rw-r--r--keyboards/four_banger/config.h7
-rw-r--r--keyboards/four_banger/four_banger.h10
-rw-r--r--keyboards/four_banger/keymaps/default/keymap.c26
-rw-r--r--keyboards/fourier/config.h9
-rw-r--r--keyboards/fourier/fourier.h8
-rw-r--r--keyboards/fourier/i2c.c162
-rw-r--r--keyboards/fourier/keymaps/default/config.h8
-rw-r--r--keyboards/fourier/keymaps/default/keymap.c4
-rw-r--r--keyboards/fourier/keymaps/default/rules.mk3
-rw-r--r--keyboards/fourier/keymaps/jennetters/config.h5
-rw-r--r--keyboards/fourier/matrix.c467
-rw-r--r--keyboards/fourier/rev1/config.h16
-rw-r--r--keyboards/fourier/rev1/rev1.c2
-rw-r--r--keyboards/fourier/rev1/rev1.h17
-rw-r--r--keyboards/fourier/rules.mk14
-rw-r--r--keyboards/fourier/serial.c228
-rw-r--r--keyboards/fourier/serial.h26
-rw-r--r--keyboards/fourier/split_util.c80
-rw-r--r--keyboards/fourier/split_util.h20
-rwxr-xr-xkeyboards/fractal/config.h7
-rw-r--r--keyboards/frosty_flake/keymaps/QFR_JM/config.h11
-rw-r--r--keyboards/frosty_flake/keymaps/QFR_JM/keymap.c132
-rw-r--r--keyboards/frosty_flake/keymaps/QFR_JM/rules.mk17
-rw-r--r--keyboards/frosty_flake/keymaps/default/keymap.c11
-rw-r--r--keyboards/frosty_flake/keymaps/default/rules.mk21
-rw-r--r--keyboards/frosty_flake/keymaps/nikchi/config.h23
-rw-r--r--keyboards/frosty_flake/keymaps/nikchi/keymap.c228
-rw-r--r--keyboards/frosty_flake/keymaps/nikchi/rules.mk23
-rw-r--r--keyboards/frosty_flake/keymaps/tkl/keymap.c11
-rw-r--r--keyboards/frosty_flake/keymaps/tkl/rules.mk17
-rw-r--r--keyboards/frosty_flake/matrix.c137
-rw-r--r--keyboards/frosty_flake/readme.md46
-rw-r--r--keyboards/gh60/keymaps/dbroqua/config.h13
-rw-r--r--keyboards/gh60/keymaps/emiilsd/keymap.c51
-rw-r--r--keyboards/gh60/keymaps/robotmaxtron/config.h13
-rw-r--r--keyboards/gh80_3000/config.h6
-rw-r--r--keyboards/gherkin/README.md18
-rw-r--r--keyboards/gherkin/config.h58
-rw-r--r--keyboards/gherkin/keymaps/bbaserdem/config.h13
-rw-r--r--keyboards/gherkin/keymaps/bbaserdem/rules.mk17
-rw-r--r--keyboards/gherkin/keymaps/default/keymap.c74
-rw-r--r--keyboards/gherkin/keymaps/itsaferbie/config.h15
-rw-r--r--keyboards/gherkin/keymaps/itsaferbie/keymap.c152
-rw-r--r--keyboards/gherkin/keymaps/itsaferbie/rules.mk7
-rw-r--r--keyboards/gherkin/keymaps/mjt/config.h169
-rw-r--r--keyboards/gherkin/keymaps/mjt/keymap.c279
-rw-r--r--keyboards/gherkin/keymaps/mjt/rules.mk29
-rw-r--r--keyboards/gherkin/keymaps/steno/config.h12
-rw-r--r--keyboards/gherkin/keymaps/steno/rules.mk16
-rw-r--r--keyboards/gherkin/keymaps/talljoe_gherkin/config.h8
-rw-r--r--keyboards/gherkin/keymaps/talljoe_gherkin/keymap.c58
-rw-r--r--keyboards/gherkin/keymaps/talljoe_gherkin/rules.mk6
-rw-r--r--keyboards/gherkin/keymaps/wanleg/config.h24
-rw-r--r--keyboards/gherkin/keymaps/wanleg/keymap.c218
-rw-r--r--keyboards/gherkin/keymaps/wanleg/readme.md86
-rw-r--r--keyboards/gherkin/keymaps/wanleg/rules.mk7
-rw-r--r--keyboards/gherkin/rules.mk59
-rw-r--r--keyboards/gonnerd/keymaps/default/rules.mk2
-rw-r--r--keyboards/gonnerd/keymaps/gam3cat/config.h9
-rw-r--r--keyboards/gonnerd/keymaps/gam3cat/keymap.c351
-rw-r--r--keyboards/gonnerd/keymaps/gam3cat/readme.md106
-rw-r--r--keyboards/gonnerd/keymaps/gam3cat/rules.mk27
-rw-r--r--keyboards/gonnerd/keymaps/mauin/rules.mk2
-rw-r--r--keyboards/gonnerd/keymaps/tkl/rules.mk2
-rwxr-xr-xkeyboards/gskt00/config.h39
-rwxr-xr-xkeyboards/gskt00/gskt00.c2
-rwxr-xr-xkeyboards/gskt00/gskt00.h57
-rw-r--r--keyboards/gskt00/info.json84
-rwxr-xr-xkeyboards/gskt00/keymaps/default/keymap.c82
-rwxr-xr-xkeyboards/gskt00/keymaps/nachie/keymap.c82
-rw-r--r--keyboards/gskt00/readme.md17
-rwxr-xr-xkeyboards/gskt00/rules.mk55
-rw-r--r--keyboards/h87a/keymaps/gam3cat/config.h10
-rw-r--r--keyboards/h87a/keymaps/gam3cat/keymap.c292
-rw-r--r--keyboards/h87a/keymaps/gam3cat/readme.md114
-rw-r--r--keyboards/h87a/keymaps/gam3cat/rules.mk24
-rw-r--r--keyboards/hadron/config.h21
-rw-r--r--keyboards/hadron/hadron.c24
-rw-r--r--keyboards/hadron/hadron.h4
-rw-r--r--keyboards/hadron/keymaps/default/config.h21
-rw-r--r--keyboards/hadron/keymaps/default/keymap.c493
-rw-r--r--keyboards/hadron/keymaps/default/rules.mk26
-rw-r--r--keyboards/hadron/keymaps/side_numpad/config.h21
-rw-r--r--keyboards/hadron/keymaps/side_numpad/keymap.c502
-rw-r--r--keyboards/hadron/keymaps/side_numpad/rules.mk26
-rw-r--r--keyboards/hadron/readme.md4
-rw-r--r--keyboards/hadron/rules.mk73
-rw-r--r--keyboards/hadron/ver0/config.h7
-rw-r--r--keyboards/hadron/ver2/config.h18
-rw-r--r--keyboards/hadron/ver2/keymaps/default/config.h9
-rw-r--r--keyboards/hadron/ver2/keymaps/default/keymap.c448
-rw-r--r--keyboards/hadron/ver2/keymaps/default/readme.md (renamed from keyboards/hadron/keymaps/default/readme.md)0
-rw-r--r--keyboards/hadron/ver2/keymaps/readme.md (renamed from keyboards/hadron/keymaps/readme.md)0
-rw-r--r--keyboards/hadron/ver2/keymaps/side_numpad/config.h8
-rw-r--r--keyboards/hadron/ver2/keymaps/side_numpad/keymap.c484
-rw-r--r--keyboards/hadron/ver2/keymaps/side_numpad/readme.md (renamed from keyboards/hadron/keymaps/side_numpad/readme.md)0
-rw-r--r--keyboards/hadron/ver2/keymaps/side_numpad/rules.mk26
-rw-r--r--keyboards/hadron/ver2/rules.mk77
-rw-r--r--keyboards/hadron/ver2/ver2.c27
-rw-r--r--keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.c126
-rw-r--r--keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.h1187
-rw-r--r--keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.mk5
-rw-r--r--keyboards/hadron/ver3/bootloader_defs.h7
-rw-r--r--keyboards/hadron/ver3/chconf.h520
-rw-r--r--keyboards/hadron/ver3/config.h202
-rw-r--r--keyboards/hadron/ver3/halconf.h388
-rw-r--r--keyboards/hadron/ver3/keymaps/default/config.h1
-rw-r--r--keyboards/hadron/ver3/keymaps/default/keymap.c295
-rw-r--r--keyboards/hadron/ver3/keymaps/default/readme.md2
-rw-r--r--keyboards/hadron/ver3/keymaps/ishtob/config.h1
-rw-r--r--keyboards/hadron/ver3/keymaps/ishtob/keymap.c250
-rw-r--r--keyboards/hadron/ver3/keymaps/ishtob/readme.md2
-rw-r--r--keyboards/hadron/ver3/keymaps/readme.md23
-rw-r--r--keyboards/hadron/ver3/matrix.c195
-rw-r--r--keyboards/hadron/ver3/mcuconf.h257
-rw-r--r--keyboards/hadron/ver3/rules.mk57
-rw-r--r--keyboards/hadron/ver3/ver3.c196
-rw-r--r--keyboards/hadron/ver3/ver3.h21
-rw-r--r--keyboards/handwired/108key_trackpoint/108key_trackpoint.c1
-rw-r--r--keyboards/handwired/108key_trackpoint/108key_trackpoint.h23
-rw-r--r--keyboards/handwired/108key_trackpoint/config.h73
-rw-r--r--keyboards/handwired/108key_trackpoint/info.json125
-rw-r--r--keyboards/handwired/108key_trackpoint/keymaps/default/keymap.c14
-rw-r--r--keyboards/handwired/108key_trackpoint/keymaps/dvorak/keymap.c14
-rw-r--r--keyboards/handwired/108key_trackpoint/keymaps/dvorak_media/keymap.c14
-rw-r--r--keyboards/handwired/108key_trackpoint/readme.md23
-rw-r--r--keyboards/handwired/108key_trackpoint/rules.mk82
-rw-r--r--keyboards/handwired/CMD60/CMD60.c8
-rw-r--r--keyboards/handwired/CMD60/CMD60.h20
-rw-r--r--keyboards/handwired/CMD60/README.md35
-rw-r--r--keyboards/handwired/CMD60/keymaps/default/keymap.c66
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/MS_sculpt_mobile.c1
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/MS_sculpt_mobile.h48
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/config.h100
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/keymaps/default/config.h8
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/keymaps/default/keymap.c64
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/keymaps/default/rules.mk17
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/config.h32
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/keymap.c272
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/readme.md1
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/rules.mk17
-rw-r--r--keyboards/handwired/MS_sculpt_mobile/readme.md58
-rw-r--r--keyboards/handwired/arrow_pad/arrow_pad.h30
-rw-r--r--keyboards/handwired/arrow_pad/info.json62
-rw-r--r--keyboards/handwired/arrow_pad/keymaps/default/keymap.c146
-rw-r--r--keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c165
-rw-r--r--keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk2
-rw-r--r--keyboards/handwired/arrow_pad/keymaps/pad_24/keymap.c146
-rw-r--r--keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk2
-rw-r--r--keyboards/handwired/arrow_pad/readme.md12
-rw-r--r--keyboards/handwired/atreus50/atreus50.h4
-rw-r--r--keyboards/handwired/atreus50/info.json70
-rw-r--r--keyboards/handwired/atreus50/keymaps/ajp10304/config.h2
-rw-r--r--keyboards/handwired/atreus50/keymaps/ajp10304/keymap.c34
-rw-r--r--keyboards/handwired/atreus50/keymaps/default/keymap.c109
-rw-r--r--keyboards/handwired/atreus50/readme.md18
-rw-r--r--keyboards/handwired/atreus50/rules.mk2
-rw-r--r--keyboards/handwired/bluepill/bluepill.c1
-rw-r--r--keyboards/handwired/bluepill/bluepill.h54
-rw-r--r--keyboards/handwired/bluepill/bluepill70/bluepill70.c1
-rw-r--r--keyboards/handwired/bluepill/bluepill70/bluepill70.h4
-rw-r--r--keyboards/handwired/bluepill/bluepill70/bootloader_defs.h10
-rw-r--r--keyboards/handwired/bluepill/bluepill70/chconf.h524
-rw-r--r--keyboards/handwired/bluepill/bluepill70/config.h25
-rw-r--r--keyboards/handwired/bluepill/bluepill70/flash.sh2
-rw-r--r--keyboards/handwired/bluepill/bluepill70/halconf.h354
-rw-r--r--keyboards/handwired/bluepill/bluepill70/info.json187
-rw-r--r--keyboards/handwired/bluepill/bluepill70/led.c38
-rw-r--r--keyboards/handwired/bluepill/bluepill70/matrix.c225
-rw-r--r--keyboards/handwired/bluepill/bluepill70/mcuconf.h209
-rw-r--r--keyboards/handwired/bluepill/bluepill70/rules.mk47
-rw-r--r--keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.c49
-rw-r--r--keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.h170
-rw-r--r--keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.mk5
-rw-r--r--keyboards/handwired/bluepill/config.h58
-rw-r--r--keyboards/handwired/bluepill/keymaps/default/keymap.c69
-rw-r--r--keyboards/handwired/bluepill/keymaps/iso/keymap.c69
-rw-r--r--keyboards/handwired/bluepill/ld/MKL26Z64.ld105
-rw-r--r--keyboards/handwired/bluepill/ld/STM32F103x8_stm32duino_bootloader.ld88
-rw-r--r--keyboards/handwired/bluepill/readme.md60
-rw-r--r--keyboards/handwired/bluepill/rules.mk10
-rw-r--r--keyboards/handwired/cmd60/cmd60.c8
-rw-r--r--keyboards/handwired/cmd60/cmd60.h20
-rw-r--r--keyboards/handwired/cmd60/config.h (renamed from keyboards/handwired/CMD60/config.h)0
-rw-r--r--keyboards/handwired/cmd60/info.json74
-rw-r--r--keyboards/handwired/cmd60/keymaps/default/keymap.c46
-rw-r--r--keyboards/handwired/cmd60/readme.md19
-rw-r--r--keyboards/handwired/cmd60/rules.mk (renamed from keyboards/handwired/CMD60/rules.mk)0
-rw-r--r--keyboards/handwired/dactyl/config.h2
-rw-r--r--keyboards/handwired/dactyl/matrix.c4
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/4x5.c23
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/4x5.h70
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/config.h46
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/info.json59
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/keymaps/default/config.h34
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/keymaps/default/keymap.c (renamed from keyboards/handwired/dactyl_manuform/keymaps/default/keymap.c)0
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/keymaps/default/rules.mk (renamed from keyboards/ergo42/keymaps/biacco-macOS/rules.mk)0
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/config.h34
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/keymap.c (renamed from keyboards/handwired/dactyl_manuform/keymaps/dvorak/keymap.c)0
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/rules.mk (renamed from keyboards/ergo42/keymaps/biacco/rules.mk)0
-rw-r--r--keyboards/handwired/dactyl_manuform/4x5/rules.mk20
-rw-r--r--keyboards/handwired/dactyl_manuform/4x6/4x6.c14
-rw-r--r--keyboards/handwired/dactyl_manuform/4x6/4x6.h36
-rw-r--r--keyboards/handwired/dactyl_manuform/4x6/config.h40
-rw-r--r--keyboards/handwired/dactyl_manuform/4x6/info.json65
-rw-r--r--keyboards/handwired/dactyl_manuform/4x6/keymaps/default/config.h31
-rw-r--r--keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c87
-rw-r--r--keyboards/handwired/dactyl_manuform/4x6/rules.mk20
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/5x6.c23
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/5x6.h40
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/config.h41
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/info.json77
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/config.h9
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/keymap.c80
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/rules.mk7
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/default/config.h27
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/default/keymap.c56
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/impstyle/config.h25
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/keymaps/impstyle/keymap.c57
-rw-r--r--keyboards/handwired/dactyl_manuform/5x6/rules.mk20
-rw-r--r--keyboards/handwired/dactyl_manuform/5x7/5x7.c23
-rw-r--r--keyboards/handwired/dactyl_manuform/5x7/5x7.h45
-rw-r--r--keyboards/handwired/dactyl_manuform/5x7/config.h33
-rw-r--r--keyboards/handwired/dactyl_manuform/5x7/info.json87
-rw-r--r--keyboards/handwired/dactyl_manuform/5x7/keymaps/default/config.h27
-rw-r--r--keyboards/handwired/dactyl_manuform/5x7/keymaps/default/keymap.c85
-rw-r--r--keyboards/handwired/dactyl_manuform/5x7/rules.mk20
-rw-r--r--keyboards/handwired/dactyl_manuform/6x6/6x6.c23
-rw-r--r--keyboards/handwired/dactyl_manuform/6x6/6x6.h44
-rw-r--r--keyboards/handwired/dactyl_manuform/6x6/config.h33
-rw-r--r--keyboards/handwired/dactyl_manuform/6x6/info.json89
-rw-r--r--keyboards/handwired/dactyl_manuform/6x6/keymaps/default/config.h27
-rw-r--r--keyboards/handwired/dactyl_manuform/6x6/keymaps/default/keymap.c57
-rw-r--r--keyboards/handwired/dactyl_manuform/6x6/rules.mk20
-rw-r--r--keyboards/handwired/dactyl_manuform/config.h32
-rw-r--r--keyboards/handwired/dactyl_manuform/dactyl_manuform.c22
-rw-r--r--keyboards/handwired/dactyl_manuform/dactyl_manuform.h66
-rw-r--r--keyboards/handwired/dactyl_manuform/eeprom-lefthand.eep2
-rw-r--r--keyboards/handwired/dactyl_manuform/eeprom-righthand.eep2
-rw-r--r--keyboards/handwired/dactyl_manuform/i2c.c162
-rw-r--r--keyboards/handwired/dactyl_manuform/i2c.h49
-rw-r--r--keyboards/handwired/dactyl_manuform/keymaps/default/config.h37
-rw-r--r--keyboards/handwired/dactyl_manuform/keymaps/default/rules.mk3
-rw-r--r--keyboards/handwired/dactyl_manuform/keymaps/dvorak/config.h37
-rw-r--r--keyboards/handwired/dactyl_manuform/keymaps/dvorak/rules.mk3
-rw-r--r--keyboards/handwired/dactyl_manuform/matrix.c465
-rw-r--r--keyboards/handwired/dactyl_manuform/readme.md84
-rw-r--r--keyboards/handwired/dactyl_manuform/rules.mk17
-rw-r--r--keyboards/handwired/dactyl_manuform/serial.c228
-rw-r--r--keyboards/handwired/dactyl_manuform/serial.h26
-rw-r--r--keyboards/handwired/dactyl_manuform/split_util.c86
-rw-r--r--keyboards/handwired/dactyl_manuform/split_util.h20
-rw-r--r--keyboards/handwired/fivethirteen/README.md28
-rw-r--r--keyboards/handwired/fivethirteen/fivethirteen.h22
-rw-r--r--keyboards/handwired/fivethirteen/info.json77
-rw-r--r--keyboards/handwired/fivethirteen/keymaps/default/keymap.c21
-rw-r--r--keyboards/handwired/fivethirteen/readme.md12
-rw-r--r--keyboards/handwired/frenchdev/frenchdev.h2
-rw-r--r--keyboards/handwired/frenchdev/info.json114
-rw-r--r--keyboards/handwired/frenchdev/keymaps/default/keymap.c14
-rw-r--r--keyboards/handwired/frenchdev/readme.md16
-rw-r--r--keyboards/handwired/gamenum/README.md102
-rw-r--r--keyboards/handwired/gamenum/gamenum.h18
-rw-r--r--keyboards/handwired/gamenum/info.json30
-rw-r--r--keyboards/handwired/gamenum/keymaps/default/keymap.c76
-rw-r--r--keyboards/handwired/gamenum/readme.md85
-rw-r--r--keyboards/handwired/ibm122m/config.h190
-rw-r--r--keyboards/handwired/ibm122m/ibm122m.c43
-rw-r--r--keyboards/handwired/ibm122m/ibm122m.h41
-rw-r--r--keyboards/handwired/ibm122m/info.json136
-rw-r--r--keyboards/handwired/ibm122m/keymaps/default/config.h19
-rw-r--r--keyboards/handwired/ibm122m/keymaps/default/keymap.c46
-rw-r--r--keyboards/handwired/ibm122m/keymaps/default/readme.md2
-rw-r--r--keyboards/handwired/ibm122m/keymaps/lukaus/config.h19
-rw-r--r--keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c586
-rw-r--r--keyboards/handwired/ibm122m/keymaps/lukaus/readme.md2
-rw-r--r--keyboards/handwired/ibm122m/readme.md16
-rw-r--r--keyboards/handwired/ibm122m/rules.mk67
-rw-r--r--keyboards/handwired/jn68m/config.h54
-rw-r--r--keyboards/handwired/jn68m/info.json16
-rw-r--r--keyboards/handwired/jn68m/jn68m.c37
-rw-r--r--keyboards/handwired/jn68m/jn68m.h49
-rw-r--r--keyboards/handwired/jn68m/keymaps/default/config.h19
-rw-r--r--keyboards/handwired/jn68m/keymaps/default/keymap.c75
-rw-r--r--keyboards/handwired/jn68m/readme.md14
-rw-r--r--keyboards/handwired/jn68m/rules.mk81
-rw-r--r--keyboards/handwired/kbod/config.h9
-rw-r--r--keyboards/handwired/kbod/info.json74
-rw-r--r--keyboards/handwired/kbod/kbod.h2
-rw-r--r--keyboards/handwired/kbod/keymaps/default/config.h7
-rw-r--r--keyboards/handwired/kbod/keymaps/default/keymap.c54
-rw-r--r--keyboards/handwired/kbod/keymaps/default/rules.mk2
-rw-r--r--keyboards/handwired/kbod/readme.md23
-rw-r--r--keyboards/handwired/maartenwut/info.json80
-rw-r--r--keyboards/handwired/maartenwut/readme.md4
-rw-r--r--keyboards/handwired/minorca/info.json55
-rw-r--r--keyboards/handwired/minorca/keymaps/default/keymap.c53
-rw-r--r--keyboards/handwired/minorca/keymaps/default/rules.mk2
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/keymap.c75
-rw-r--r--keyboards/handwired/minorca/keymaps/rgb/rules.mk2
-rw-r--r--keyboards/handwired/minorca/minorca.h12
-rw-r--r--keyboards/handwired/minorca/readme.md36
-rw-r--r--keyboards/handwired/minorca/rules.mk2
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/babblePaste.c (renamed from keyboards/handwired/MS_sculpt_mobile/babblePaste.c)146
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/babblePaste.h (renamed from keyboards/handwired/MS_sculpt_mobile/babblePaste.h)34
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/babblePaste.txt (renamed from keyboards/handwired/MS_sculpt_mobile/babblePaste.txt)0
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/config.h98
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/info.json96
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/default/config.h3
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/default/keymap.c44
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/default/rules.mk17
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/config.h28
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/keymap.c266
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/readme.md1
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/rules.mk17
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/ms_sculpt_mobile.c1
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/ms_sculpt_mobile.h48
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/readme.md55
-rw-r--r--keyboards/handwired/ms_sculpt_mobile/rules.mk (renamed from keyboards/handwired/MS_sculpt_mobile/rules.mk)0
-rw-r--r--keyboards/handwired/nicekey/keymaps/default/keymap.c2
-rw-r--r--keyboards/handwired/nicekey/nicekey.h13
-rw-r--r--keyboards/handwired/nicekey/readme.md4
-rw-r--r--keyboards/handwired/not_so_minidox/info.json63
-rw-r--r--keyboards/handwired/not_so_minidox/readme.md6
-rw-r--r--keyboards/handwired/not_so_minidox/rules.mk2
-rw-r--r--keyboards/handwired/numpad20/info.json33
-rw-r--r--keyboards/handwired/numpad20/keymaps/default/keymap.c19
-rw-r--r--keyboards/handwired/numpad20/numpad20.h12
-rw-r--r--keyboards/handwired/onekey/keymaps/default/keymap.c4
-rw-r--r--keyboards/handwired/onekey/onekey.h13
-rw-r--r--keyboards/handwired/onekey/readme.md2
-rw-r--r--keyboards/handwired/ortho5x13/info.json77
-rw-r--r--keyboards/handwired/ortho5x13/keymaps/default/keymap.c237
-rw-r--r--keyboards/handwired/ortho5x13/readme.md2
-rw-r--r--keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.c56
-rw-r--r--keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.h166
-rw-r--r--keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.mk5
-rw-r--r--keyboards/handwired/ortho60/bootloader_defs.h10
-rw-r--r--keyboards/handwired/ortho60/chconf.h524
-rw-r--r--keyboards/handwired/ortho60/config.h74
-rw-r--r--keyboards/handwired/ortho60/halconf.h353
-rw-r--r--keyboards/handwired/ortho60/hsv2rgb.c80
-rw-r--r--keyboards/handwired/ortho60/hsv2rgb.h23
-rw-r--r--keyboards/handwired/ortho60/info.json73
-rw-r--r--keyboards/handwired/ortho60/keymaps/default/keymap.c98
-rw-r--r--keyboards/handwired/ortho60/ld/MKL26Z64.ld105
-rw-r--r--keyboards/handwired/ortho60/ld/STM32F103x8_stm32duino_bootloader.ld88
-rw-r--r--keyboards/handwired/ortho60/led.c51
-rw-r--r--keyboards/handwired/ortho60/mcuconf.h209
-rw-r--r--keyboards/handwired/ortho60/ortho60.c32
-rw-r--r--keyboards/handwired/ortho60/ortho60.h33
-rw-r--r--keyboards/handwired/ortho60/readme.md3
-rw-r--r--keyboards/handwired/ortho60/rules.mk56
-rw-r--r--keyboards/handwired/ortho60/underglow.c157
-rw-r--r--keyboards/handwired/ortho60/underglow.h10
-rw-r--r--keyboards/handwired/pilcrow/info.json53
-rw-r--r--keyboards/handwired/pilcrow/keymaps/default/config.h7
-rw-r--r--keyboards/handwired/pilcrow/keymaps/default/keymap.c116
-rw-r--r--keyboards/handwired/pilcrow/keymaps/default/rules.mk2
-rw-r--r--keyboards/handwired/pilcrow/pilcrow.h2
-rw-r--r--keyboards/handwired/pilcrow/readme.md30
-rw-r--r--keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.c56
-rw-r--r--keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.h166
-rw-r--r--keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.mk5
-rw-r--r--keyboards/handwired/practice60/bootloader_defs.h10
-rw-r--r--keyboards/handwired/practice60/chconf.h524
-rw-r--r--keyboards/handwired/practice60/config.h74
-rw-r--r--keyboards/handwired/practice60/halconf.h353
-rw-r--r--keyboards/handwired/practice60/hsv2rgb.c80
-rw-r--r--keyboards/handwired/practice60/hsv2rgb.h23
-rw-r--r--keyboards/handwired/practice60/info.json74
-rw-r--r--keyboards/handwired/practice60/keymaps/default/keymap.c48
-rw-r--r--keyboards/handwired/practice60/ld/MKL26Z64.ld105
-rw-r--r--keyboards/handwired/practice60/ld/STM32F103x8_stm32duino_bootloader.ld88
-rw-r--r--keyboards/handwired/practice60/led.c51
-rw-r--r--keyboards/handwired/practice60/mcuconf.h209
-rw-r--r--keyboards/handwired/practice60/practice60.c32
-rw-r--r--keyboards/handwired/practice60/practice60.h17
-rw-r--r--keyboards/handwired/practice60/readme.md3
-rw-r--r--keyboards/handwired/practice60/rules.mk56
-rw-r--r--keyboards/handwired/practice60/underglow.c157
-rw-r--r--keyboards/handwired/practice60/underglow.h10
-rw-r--r--keyboards/handwired/prime_exl/config.h56
-rw-r--r--keyboards/handwired/prime_exl/info.json12
-rw-r--r--keyboards/handwired/prime_exl/keymaps/default/config.h19
-rw-r--r--keyboards/handwired/prime_exl/keymaps/default/keymap.c143
-rw-r--r--keyboards/handwired/prime_exl/keymaps/default/readme.md1
-rw-r--r--keyboards/handwired/prime_exl/prime_exl.c43
-rw-r--r--keyboards/handwired/prime_exl/prime_exl.h40
-rw-r--r--keyboards/handwired/prime_exl/readme.md15
-rw-r--r--keyboards/handwired/prime_exl/rules.mk80
-rw-r--r--keyboards/handwired/promethium/config.h27
-rw-r--r--keyboards/handwired/promethium/info.json68
-rw-r--r--keyboards/handwired/promethium/keymaps/default/config.h9
-rw-r--r--keyboards/handwired/promethium/keymaps/default/keymap.c30
-rw-r--r--keyboards/handwired/promethium/keymaps/default/rules.mk2
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/config.h9
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/keymap.c30
-rw-r--r--keyboards/handwired/promethium/keymaps/priyadi/rules.mk2
-rw-r--r--keyboards/handwired/promethium/promethium.h19
-rw-r--r--keyboards/handwired/promethium/rules.mk2
-rw-r--r--keyboards/handwired/pteron/config.h34
-rw-r--r--keyboards/handwired/pteron/info.json78
-rw-r--r--keyboards/handwired/pteron/keymaps/FSund/keymap.c118
-rw-r--r--keyboards/handwired/pteron/keymaps/default/keymap.c104
-rw-r--r--keyboards/handwired/pteron/pteron.c1
-rw-r--r--keyboards/handwired/pteron/pteron.h17
-rw-r--r--keyboards/handwired/pteron/readme.md15
-rw-r--r--keyboards/handwired/pteron/rules.mk58
-rw-r--r--keyboards/handwired/qc60/config.h3
-rw-r--r--keyboards/handwired/qc60/proto/config.h2
-rw-r--r--keyboards/handwired/qc60/rules.mk2
-rwxr-xr-xkeyboards/handwired/reddot/keymaps/default/keymap.c4
-rw-r--r--keyboards/handwired/space_oddity/config.h4
-rw-r--r--keyboards/handwired/terminus_mini/keymaps/default/rules.mk2
-rw-r--r--keyboards/handwired/terminus_mini/rules.mk2
-rw-r--r--keyboards/handwired/tradestation/config.h52
-rw-r--r--keyboards/handwired/tradestation/info.json15
-rw-r--r--keyboards/handwired/tradestation/keymaps/default/keymap.c61
-rw-r--r--keyboards/handwired/tradestation/license201
-rw-r--r--keyboards/handwired/tradestation/readme.md25
-rw-r--r--keyboards/handwired/tradestation/rules.mk65
-rw-r--r--keyboards/handwired/tradestation/tradestation.c1
-rw-r--r--keyboards/handwired/tradestation/tradestation.h27
-rw-r--r--keyboards/handwired/woodpad/keymaps/default/rules.mk2
-rw-r--r--keyboards/handwired/woodpad/keymaps/drashna/keymap.c2
-rw-r--r--keyboards/handwired/xealous/config.h51
-rw-r--r--keyboards/handwired/xealous/info.json91
-rw-r--r--keyboards/handwired/xealous/keymaps/default/keymap.c105
-rw-r--r--keyboards/handwired/xealous/matrix.c376
-rw-r--r--keyboards/handwired/xealous/matrix_scanrate.c39
-rw-r--r--keyboards/handwired/xealous/matrix_scanrate.h4
-rw-r--r--keyboards/handwired/xealous/readme.md166
-rw-r--r--keyboards/handwired/xealous/rev1/config.h90
-rw-r--r--keyboards/handwired/xealous/rev1/rev1.c6
-rw-r--r--keyboards/handwired/xealous/rev1/rev1.h32
-rw-r--r--keyboards/handwired/xealous/rev1/rules.mk0
-rw-r--r--keyboards/handwired/xealous/rules.mk73
-rw-r--r--keyboards/helix/pico/config.h5
-rw-r--r--keyboards/helix/pico/keymaps/biacco/config.h43
-rw-r--r--keyboards/helix/pico/keymaps/biacco/keymap.c118
-rw-r--r--keyboards/helix/pico/keymaps/biacco/rules.mk125
-rw-r--r--keyboards/helix/pico/keymaps/default/config.h15
-rw-r--r--keyboards/helix/pico/keymaps/default/keymap.c6
-rw-r--r--keyboards/helix/pico/keymaps/default/rules.mk4
-rw-r--r--keyboards/helix/pico/keymaps/mtei/config.h52
-rw-r--r--keyboards/helix/pico/keymaps/mtei/keymap.c496
-rw-r--r--keyboards/helix/pico/keymaps/mtei/rules.mk129
-rw-r--r--keyboards/helix/pico/pico.c6
-rw-r--r--keyboards/helix/pico/pico.h14
-rw-r--r--keyboards/helix/pico/rules.mk5
-rw-r--r--keyboards/helix/pico/serial_config.h15
-rw-r--r--keyboards/helix/rev1/config.h5
-rw-r--r--keyboards/helix/rev1/keymaps/OLED_sample/config.h3
-rw-r--r--keyboards/helix/rev1/keymaps/OLED_sample/keymap.c4
-rw-r--r--keyboards/helix/rev1/keymaps/OLED_sample/rules.mk25
-rw-r--r--keyboards/helix/rev1/keymaps/OLED_sample/serial_config.h17
-rw-r--r--keyboards/helix/rev1/rev1.c6
-rw-r--r--keyboards/helix/rev1/rules.mk4
-rw-r--r--keyboards/helix/rev1/serial_config.h17
-rw-r--r--keyboards/helix/rev2/config.h5
-rw-r--r--keyboards/helix/rev2/keymaps/default/config.h15
-rw-r--r--keyboards/helix/rev2/keymaps/default/keymap.c10
-rw-r--r--keyboards/helix/rev2/keymaps/default/rules.mk4
-rw-r--r--keyboards/helix/rev2/keymaps/edvorakjp/config.h16
-rw-r--r--keyboards/helix/rev2/keymaps/edvorakjp/keymap.c6
-rw-r--r--keyboards/helix/rev2/keymaps/edvorakjp/keymap_4rows.c2
-rw-r--r--keyboards/helix/rev2/keymaps/edvorakjp/keymap_5rows.c2
-rw-r--r--keyboards/helix/rev2/keymaps/edvorakjp/oled.c15
-rw-r--r--keyboards/helix/rev2/keymaps/edvorakjp/rules.mk4
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows/README.md2
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows/README_jp.md2
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows/config.h21
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows/keymap.c252
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows/rules.mk13
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows_jis/config.h15
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c26
-rw-r--r--keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk4
-rw-r--r--keyboards/helix/rev2/keymaps/froggy/config.h15
-rw-r--r--keyboards/helix/rev2/keymaps/froggy/keymap.c148
-rw-r--r--keyboards/helix/rev2/keymaps/froggy/rules.mk4
-rw-r--r--keyboards/helix/rev2/keymaps/led_test/config.h15
-rw-r--r--keyboards/helix/rev2/keymaps/led_test/led_test_init.c4
-rw-r--r--keyboards/helix/rev2/keymaps/led_test/rules.mk4
-rw-r--r--keyboards/helix/rev2/keymaps/yshrsmz/config.h38
-rw-r--r--keyboards/helix/rev2/keymaps/yshrsmz/keymap.c558
-rw-r--r--keyboards/helix/rev2/keymaps/yshrsmz/rules.mk121
-rw-r--r--keyboards/helix/rev2/matrix.c58
-rw-r--r--keyboards/helix/rev2/rev2.c6
-rw-r--r--keyboards/helix/rev2/rules.mk6
-rw-r--r--keyboards/helix/rev2/serial_config.h18
-rw-r--r--keyboards/helix/rev2/serial_config_simpleapi.h8
-rw-r--r--keyboards/helix/rev2/split_scomm.c92
-rw-r--r--keyboards/helix/rev2/split_scomm.h24
-rw-r--r--keyboards/helix/rev2/split_util.c2
-rw-r--r--keyboards/helix/rules.mk8
-rw-r--r--keyboards/helix/serial.c589
-rw-r--r--keyboards/helix/serial.h94
-rw-r--r--keyboards/helix/ssd1306.c17
-rw-r--r--keyboards/helix/ssd1306.h3
-rw-r--r--keyboards/hhkb/keymaps/blakedietz/rules.mk1
-rw-r--r--keyboards/hhkb/keymaps/cinaeco/rules.mk2
-rw-r--r--keyboards/hhkb/rn42/rn42.c2
-rw-r--r--keyboards/hs60/config.h146
-rw-r--r--keyboards/hs60/hs60.c496
-rw-r--r--keyboards/hs60/keymaps/ansi/config.h26
-rw-r--r--keyboards/hs60/readme.md18
-rw-r--r--keyboards/hs60/rules.mk74
-rw-r--r--keyboards/hs60/v1/config.h143
-rw-r--r--keyboards/hs60/v1/info.json (renamed from keyboards/hs60/info.json)0
-rw-r--r--keyboards/hs60/v1/keymaps/ansi/config.h23
-rw-r--r--keyboards/hs60/v1/keymaps/ansi/keymap.c (renamed from keyboards/hs60/keymaps/ansi/keymap.c)0
-rw-r--r--keyboards/hs60/v1/keymaps/ansi/readme.md (renamed from keyboards/hs60/keymaps/ansi/readme.md)0
-rw-r--r--keyboards/hs60/v1/keymaps/default/keymap.c (renamed from keyboards/hs60/keymaps/default/keymap.c)0
-rw-r--r--keyboards/hs60/v1/keymaps/default/readme.md (renamed from keyboards/hs60/keymaps/default/readme.md)0
-rw-r--r--keyboards/hs60/v1/readme.md22
-rw-r--r--keyboards/hs60/v1/rules.mk76
-rw-r--r--keyboards/hs60/v1/v1.c495
-rw-r--r--keyboards/hs60/v1/v1.h (renamed from keyboards/hs60/hs60.h)0
-rw-r--r--keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.c126
-rw-r--r--keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.h1187
-rw-r--r--keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.mk5
-rw-r--r--keyboards/hs60/v2/bootloader_defs.h7
-rw-r--r--keyboards/hs60/v2/chconf.h520
-rw-r--r--keyboards/hs60/v2/config.h117
-rw-r--r--keyboards/hs60/v2/halconf.h388
-rw-r--r--keyboards/hs60/v2/info.json1650
-rw-r--r--keyboards/hs60/v2/keymaps/ansi/config.h21
-rw-r--r--keyboards/hs60/v2/keymaps/ansi/keymap.c46
-rw-r--r--keyboards/hs60/v2/keymaps/ansi/readme.md6
-rw-r--r--keyboards/hs60/v2/keymaps/default/keymap.c46
-rw-r--r--keyboards/hs60/v2/keymaps/default/readme.md6
-rw-r--r--keyboards/hs60/v2/keymaps/hhkb/config.h21
-rw-r--r--keyboards/hs60/v2/keymaps/hhkb/keymap.c46
-rw-r--r--keyboards/hs60/v2/mcuconf.h257
-rw-r--r--keyboards/hs60/v2/readme.md18
-rw-r--r--keyboards/hs60/v2/rules.mk58
-rw-r--r--keyboards/hs60/v2/v2.c635
-rw-r--r--keyboards/hs60/v2/v2.h67
-rw-r--r--keyboards/idobo/config.h227
-rw-r--r--keyboards/idobo/idobo.c43
-rw-r--r--keyboards/idobo/idobo.h44
-rw-r--r--keyboards/idobo/info.json12
-rw-r--r--keyboards/idobo/keymaps/default/config.h19
-rw-r--r--keyboards/idobo/keymaps/default/keymap.c66
-rw-r--r--keyboards/idobo/keymaps/default/readme.md1
-rw-r--r--keyboards/idobo/keymaps/default75/config.h21
-rw-r--r--keyboards/idobo/keymaps/default75/keymap.c67
-rw-r--r--keyboards/idobo/keymaps/default75/readme.md1
-rw-r--r--keyboards/idobo/keymaps/default75/rules.mk14
-rw-r--r--keyboards/idobo/keymaps/revok75/config.h15
-rw-r--r--keyboards/idobo/keymaps/revok75/keymap.c90
-rw-r--r--keyboards/idobo/keymaps/revok75/readme.md1
-rw-r--r--keyboards/idobo/keymaps/revok75/rules.mk14
-rw-r--r--keyboards/idobo/keymaps/xaceofspaidsx/config.h19
-rw-r--r--keyboards/idobo/keymaps/xaceofspaidsx/keymap.c67
-rw-r--r--keyboards/idobo/keymaps/xaceofspaidsx/readme.md1
-rw-r--r--keyboards/idobo/keymaps/xaceofspaidsx/rules.mk19
-rw-r--r--keyboards/idobo/readme.md17
-rw-r--r--keyboards/idobo/rules.mk83
-rw-r--r--keyboards/infinity60/config.h2
-rw-r--r--keyboards/infinity60/infinity60.h11
-rw-r--r--keyboards/infinity60/info.json78
-rw-r--r--keyboards/infinity60/keymaps/default/keymap.c10
-rwxr-xr-xkeyboards/infinity60/keymaps/depariel/keymap.c16
-rw-r--r--keyboards/infinity60/keymaps/hasu/keymap.c12
-rw-r--r--keyboards/infinity60/keymaps/jpetermans/config.h7
-rw-r--r--keyboards/infinity60/keymaps/jpetermans/keymap.c17
-rw-r--r--keyboards/infinity60/keymaps/jpetermans/rules.mk4
-rw-r--r--keyboards/infinity60/matrix.c19
-rw-r--r--keyboards/infinity60/readme.md7
-rw-r--r--keyboards/iris/info.json10
-rw-r--r--keyboards/iris/iris.h9
-rw-r--r--keyboards/iris/keymaps/bmoorey/config.h38
-rw-r--r--keyboards/iris/keymaps/bmoorey/keymap.c114
-rw-r--r--keyboards/iris/keymaps/bmoorey/readme.md5
-rw-r--r--keyboards/iris/keymaps/bmoorey/rules.mk2
-rw-r--r--keyboards/iris/keymaps/broswen/config.h52
-rw-r--r--keyboards/iris/keymaps/broswen/keymap.c126
-rw-r--r--keyboards/iris/keymaps/broswen/rules.mk8
-rw-r--r--keyboards/iris/keymaps/davidrambo/config.h1
-rw-r--r--keyboards/iris/keymaps/dbroqua/keymap.c2
-rw-r--r--keyboards/iris/keymaps/drashna/config.h4
-rw-r--r--keyboards/iris/keymaps/drashna/keymap.c86
-rw-r--r--keyboards/iris/keymaps/drashna_old/config.h48
-rw-r--r--keyboards/iris/keymaps/drashna_old/rules.mk19
-rw-r--r--keyboards/iris/keymaps/edvorakjp/config.h1
-rw-r--r--keyboards/iris/keymaps/edvorakjp/keymap.c7
-rw-r--r--keyboards/iris/keymaps/edvorakjp/rules.mk2
-rw-r--r--keyboards/iris/keymaps/gsigler/config.h33
-rw-r--r--keyboards/iris/keymaps/gsigler/keymap.c74
-rw-r--r--keyboards/iris/keymaps/gsigler/rules.mk3
-rw-r--r--keyboards/iris/keymaps/impstyle/keymap.c8
-rw-r--r--keyboards/iris/keymaps/jennetters/config.h5
-rw-r--r--keyboards/iris/keymaps/khord/config.h38
-rw-r--r--keyboards/iris/keymaps/khord/keymap.c136
-rw-r--r--keyboards/iris/keymaps/khord/rules.mk3
-rw-r--r--keyboards/iris/keymaps/krusli/config.h2
-rw-r--r--keyboards/iris/keymaps/olligranlund_nordic/config.h36
-rw-r--r--keyboards/iris/keymaps/olligranlund_nordic/keymap.c131
-rw-r--r--keyboards/iris/keymaps/olligranlund_nordic/readme.md11
-rw-r--r--keyboards/iris/keymaps/olligranlund_nordic/rules.mk2
-rw-r--r--keyboards/iris/keymaps/omgvee/config.h49
-rw-r--r--keyboards/iris/keymaps/omgvee/keymap.c173
-rw-r--r--keyboards/iris/keymaps/omgvee/readme.md17
-rw-r--r--keyboards/iris/keymaps/omgvee/rules.mk7
-rw-r--r--keyboards/iris/keymaps/saviof/config.h39
-rw-r--r--keyboards/iris/keymaps/saviof/keymap.c107
-rw-r--r--keyboards/iris/keymaps/saviof/rules.mk3
-rw-r--r--keyboards/iris/keymaps/transmogrified/Readme.md9
-rw-r--r--keyboards/iris/keymaps/transmogrified/config.h22
-rw-r--r--keyboards/iris/keymaps/transmogrified/keymap.c330
-rw-r--r--keyboards/iris/keymaps/vyolle/config.h44
-rw-r--r--keyboards/iris/keymaps/vyolle/keymap.c115
-rw-r--r--keyboards/iris/keymaps/vyolle/rules.mk7
-rw-r--r--keyboards/iris/keymaps/wanleg/config.h33
-rw-r--r--keyboards/iris/keymaps/wanleg/keymap.c76
-rw-r--r--keyboards/iris/keymaps/wanleg/rules.mk5
-rw-r--r--keyboards/iris/keymaps/xyverz/config.h2
-rw-r--r--keyboards/iris/rev1/config.h11
-rw-r--r--keyboards/iris/rev1/rev1.c1
-rw-r--r--keyboards/iris/rev1/rev1.h5
-rw-r--r--keyboards/iris/rev1_led/config.h11
-rw-r--r--keyboards/iris/rev1_led/rev1_led.c1
-rw-r--r--keyboards/iris/rev1_led/rev1_led.h5
-rw-r--r--keyboards/iris/rev2/config.h11
-rw-r--r--keyboards/iris/rev2/rev2.h5
-rw-r--r--keyboards/iris/rev3/config.h87
-rw-r--r--keyboards/iris/rev3/rev3.c42
-rw-r--r--keyboards/iris/rev3/rev3.h35
-rw-r--r--keyboards/iris/rev3/rules.mk2
-rw-r--r--keyboards/iris/rules.mk13
-rw-r--r--keyboards/jc65/v32a/config.h7
-rw-r--r--keyboards/jc65/v32a/rules.mk6
-rw-r--r--keyboards/jc65/v32u4/keymaps/gam3cat/config.h7
-rw-r--r--keyboards/jc65/v32u4/keymaps/gam3cat/keymap.c229
-rw-r--r--keyboards/jc65/v32u4/keymaps/gam3cat/readme.md54
-rw-r--r--keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk30
-rw-r--r--keyboards/jd40/keymaps/default/keymap.c226
-rw-r--r--keyboards/jd40/readme.md8
-rw-r--r--keyboards/jd45/jd45.h28
-rw-r--r--keyboards/jd45/keymaps/blakedietz/config.h19
-rw-r--r--keyboards/jd45/keymaps/blakedietz/keymap.c18
-rw-r--r--keyboards/jd45/keymaps/default/keymap.c15
-rw-r--r--keyboards/jd45/keymaps/jeebak/config.h16
-rw-r--r--keyboards/jd45/keymaps/jeebak/keymap.c22
-rw-r--r--keyboards/jd45/keymaps/justin/keymap.c10
-rw-r--r--keyboards/jd45/keymaps/mjt/keymap.c8
-rw-r--r--keyboards/jd45/keymaps/mjt/rules.mk2
-rw-r--r--keyboards/jd45/keymaps/mjt6u/config.h83
-rw-r--r--keyboards/jd45/keymaps/mjt6u/keymap.c62
-rw-r--r--keyboards/jd45/keymaps/mjt6u/rules.mk2
-rw-r--r--keyboards/jd45/keymaps/talljoe/config.h22
-rw-r--r--keyboards/jd45/keymaps/talljoe/keymap.c1
-rw-r--r--keyboards/jd45/readme.md6
-rw-r--r--keyboards/jj40/info.json23
-rw-r--r--keyboards/jj40/jj40.h60
-rw-r--r--keyboards/jj40/keymaps/ajp10304/config.h8
-rw-r--r--keyboards/jj40/keymaps/cockpit/keymap.c8
-rw-r--r--keyboards/jj40/keymaps/default/keymap.c6
-rw-r--r--keyboards/jj40/keymaps/fun40/config.h1
-rw-r--r--keyboards/jj40/keymaps/krusli/config.h1
-rw-r--r--keyboards/jj40/keymaps/krusli/keymap.c35
-rw-r--r--keyboards/jj40/keymaps/like_jis/config.h49
-rw-r--r--keyboards/jj40/keymaps/like_jis/keymap.c200
-rw-r--r--keyboards/jj40/keymaps/like_jis/rules.mk5
-rw-r--r--keyboards/jj40/keymaps/oscillope/backlight.c60
-rw-r--r--keyboards/jj40/keymaps/oscillope/config.h1
-rw-r--r--keyboards/jj40/keymaps/oscillope/keymap.c17
-rw-r--r--keyboards/jj40/keymaps/skewwhiffy/keymap.c219
-rw-r--r--keyboards/jj40/keymaps/suzuken/config.h1
-rw-r--r--keyboards/jj40/keymaps/waples/config.h1
-rw-r--r--keyboards/jj40/rules.mk2
-rw-r--r--keyboards/jm60/config.h2
-rw-r--r--keyboards/jm60/readme.md4
-rw-r--r--keyboards/k_type/config.h2
-rw-r--r--keyboards/katana60/config.h3
-rw-r--r--keyboards/kbd19x/config.h224
-rw-r--r--keyboards/kbd19x/info.json218
-rw-r--r--keyboards/kbd19x/kbd19x.c63
-rw-r--r--keyboards/kbd19x/kbd19x.h103
-rw-r--r--keyboards/kbd19x/keymaps/default/config.h20
-rw-r--r--keyboards/kbd19x/keymaps/default/keymap.c52
-rw-r--r--keyboards/kbd19x/keymaps/default/readme.md13
-rw-r--r--keyboards/kbd19x/readme.md19
-rw-r--r--keyboards/kbd19x/rules.mk80
-rw-r--r--keyboards/kbd4x/config.h223
-rw-r--r--keyboards/kbd4x/info.json112
-rw-r--r--keyboards/kbd4x/kbd4x.c43
-rw-r--r--keyboards/kbd4x/kbd4x.h48
-rw-r--r--keyboards/kbd4x/keymaps/default/config.h19
-rw-r--r--keyboards/kbd4x/keymaps/default/keymap.c52
-rw-r--r--keyboards/kbd4x/keymaps/default/readme.md1
-rw-r--r--keyboards/kbd4x/readme.md15
-rw-r--r--keyboards/kbd4x/rules.mk81
-rw-r--r--keyboards/kbd67/config.h240
-rw-r--r--keyboards/kbd67/info.json16
-rw-r--r--keyboards/kbd67/kbd67.c51
-rw-r--r--keyboards/kbd67/kbd67.h59
-rw-r--r--keyboards/kbd67/keymaps/default/config.h19
-rw-r--r--keyboards/kbd67/keymaps/default/keymap.c99
-rw-r--r--keyboards/kbd67/keymaps/default/readme.md1
-rw-r--r--keyboards/kbd67/readme.md15
-rw-r--r--keyboards/kbd67/rules.mk80
-rw-r--r--keyboards/kbd6x/config.h5
-rw-r--r--keyboards/kbd6x/keymaps/default/keymap.c21
-rw-r--r--keyboards/kbd6x/keymaps/hhkb-default-improved/keymap.c50
-rw-r--r--keyboards/kbd6x/keymaps/hhkb-default-improved/readme.md1
-rw-r--r--keyboards/kbd6x/keymaps/hhkb-default/keymap.c51
-rw-r--r--keyboards/kbd6x/keymaps/hhkb-default/readme.md1
-rw-r--r--keyboards/kbd6x/keymaps/othi/config.h10
-rw-r--r--keyboards/kbd6x/keymaps/othi/keymap.c190
-rw-r--r--keyboards/kbd6x/keymaps/othi/readme.md56
-rw-r--r--keyboards/kbd6x/keymaps/othi/rules.mk19
-rw-r--r--keyboards/kbd6x/readme.md3
-rw-r--r--keyboards/kbd6x/rules.mk6
-rw-r--r--keyboards/kbd75/config.h3
-rw-r--r--keyboards/kbd75/keymaps/spacemanspiff/keymap.c50
-rw-r--r--keyboards/kbd75/keymaps/spacemanspiff/readme.md35
-rw-r--r--keyboards/kbd8x/config.h5
-rw-r--r--keyboards/kbd8x/kbd8x.h8
-rw-r--r--keyboards/kbd8x/keymaps/default/config.h9
-rw-r--r--keyboards/kbd8x/keymaps/default_backlighting/config.h9
-rw-r--r--keyboards/kbd8x/keymaps/default_backlighting/rules.mk2
-rw-r--r--keyboards/kbd8x/rules.mk3
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/config.h8
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/keymap.c393
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme.md29
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch1.md70
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch2.md26
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch3.md39
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch4.md54
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_ch5.md84
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/readme_git.md56
-rw-r--r--keyboards/kc60/keymaps/noroadsleft/rules.mk2
-rw-r--r--keyboards/kinesis/keymaps/carpalx/rules.mk2
-rw-r--r--keyboards/kinesis/keymaps/default/rules.mk2
-rw-r--r--keyboards/kinesis/keymaps/default_pretty/rules.mk2
-rw-r--r--keyboards/kinesis/keymaps/dvorak/rules.mk2
-rw-r--r--keyboards/kinesis/keymaps/insertsnideremarks/config.h2
-rw-r--r--keyboards/kinesis/keymaps/insertsnideremarks/keymap.c716
-rw-r--r--keyboards/kinesis/keymaps/insertsnideremarks/readme.md22
-rw-r--r--keyboards/kinesis/keymaps/insertsnideremarks/rules.mk4
-rw-r--r--keyboards/kinesis/keymaps/milestogo/rules.mk2
-rw-r--r--keyboards/kinesis/keymaps/xyverz/keymap.c43
-rw-r--r--keyboards/kinesis/keymaps/xyverz/readme.md20
-rw-r--r--keyboards/kinesis/keymaps/xyverz/rules.mk8
-rw-r--r--keyboards/kira75/rules.mk5
-rw-r--r--keyboards/kitten_paw/matrix.c165
-rw-r--r--keyboards/kitten_paw/readme.md16
-rw-r--r--keyboards/launchpad/keymaps/default/rules.mk2
-rw-r--r--keyboards/lets_split/config.h5
-rw-r--r--keyboards/lets_split/eeprom-lefthand.eep2
-rw-r--r--keyboards/lets_split/eeprom-righthand.eep2
-rw-r--r--keyboards/lets_split/i2c.c162
-rw-r--r--keyboards/lets_split/i2c.h49
-rw-r--r--keyboards/lets_split/keymaps/DE_simple/keymap.c2
-rw-r--r--keyboards/lets_split/keymaps/OLED_sample/config.h2
-rw-r--r--keyboards/lets_split/keymaps/OLED_sample/rules.mk17
-rw-r--r--keyboards/lets_split/keymaps/adam/config.h1
-rw-r--r--keyboards/lets_split/keymaps/default/config.h13
-rw-r--r--keyboards/lets_split/keymaps/default/keymap.c70
-rw-r--r--keyboards/lets_split/keymaps/default/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/heartrobotninja/rules.mk3
-rw-r--r--keyboards/lets_split/keymaps/khord/config.h3
-rw-r--r--keyboards/lets_split/keymaps/mjt/rules.mk2
-rw-r--r--keyboards/lets_split/keymaps/piemod/config.h1
-rw-r--r--keyboards/lets_split/keymaps/piemod/rules.mk2
-rw-r--r--keyboards/lets_split/keymaps/pyrol/config.h28
-rw-r--r--keyboards/lets_split/keymaps/pyrol/keymap.c218
-rw-r--r--keyboards/lets_split/keymaps/pyrol/rules.mk1
-rw-r--r--keyboards/lets_split/keymaps/waples/config.h2
-rw-r--r--keyboards/lets_split/keymaps/xk/config.h1
-rw-r--r--keyboards/lets_split/keymaps/xk/rules.mk2
-rw-r--r--keyboards/lets_split/keymaps/yshrsmz/config.h35
-rw-r--r--keyboards/lets_split/keymaps/yshrsmz/keymap.c180
-rw-r--r--keyboards/lets_split/keymaps/yshrsmz/rules.mk1
-rw-r--r--keyboards/lets_split/keymaps/zer09/config.h4
-rw-r--r--keyboards/lets_split/keymaps/zer09/keymap.c24
-rw-r--r--keyboards/lets_split/lets_split.h5
-rw-r--r--keyboards/lets_split/matrix.c470
-rw-r--r--keyboards/lets_split/readme.md4
-rw-r--r--keyboards/lets_split/rev1/config.h14
-rw-r--r--keyboards/lets_split/rev1/rev1.h5
-rw-r--r--keyboards/lets_split/rev2/config.h15
-rw-r--r--keyboards/lets_split/rev2/rev2.h5
-rw-r--r--keyboards/lets_split/rules.mk16
-rw-r--r--keyboards/lets_split/serial.c228
-rw-r--r--keyboards/lets_split/serial.h26
-rw-r--r--keyboards/lets_split/sockets/config.h15
-rw-r--r--keyboards/lets_split/sockets/sockets.h5
-rw-r--r--keyboards/lets_split/split_util.c86
-rw-r--r--keyboards/lets_split/split_util.h20
-rw-r--r--keyboards/lets_split_eh/config.h3
-rw-r--r--keyboards/lets_split_eh/keymaps/default/config.h7
-rw-r--r--keyboards/lets_split_eh/keymaps/default/keymap.c68
-rw-r--r--keyboards/lets_split_eh/keymaps/default/rules.mk3
-rw-r--r--keyboards/lets_split_eh/keymaps/doxish_dvorak/config.h21
-rw-r--r--keyboards/lets_split_eh/keymaps/doxish_dvorak/keymap.c159
-rw-r--r--keyboards/lets_split_eh/keymaps/doxish_dvorak/rules.mk0
-rw-r--r--keyboards/lets_split_eh/keymaps/romus/README.md7
-rw-r--r--keyboards/lets_split_eh/keymaps/romus/keymap.c28
-rw-r--r--keyboards/lets_split_eh/keymaps/romus/rules.mk7
-rw-r--r--keyboards/lets_split_eh/lets_split_eh.c15
-rw-r--r--keyboards/lets_split_eh/rules.mk2
-rw-r--r--keyboards/levinson/config.h8
-rw-r--r--keyboards/levinson/i2c.c162
-rw-r--r--keyboards/levinson/i2c.h49
-rw-r--r--keyboards/levinson/info.json4
-rw-r--r--keyboards/levinson/keymaps/atreus/config.h22
-rw-r--r--keyboards/levinson/keymaps/atreus/keymap.c41
-rw-r--r--keyboards/levinson/keymaps/atreus/readme.md8
-rw-r--r--keyboards/levinson/keymaps/bakingpy2u/config.h7
-rw-r--r--keyboards/levinson/keymaps/bakingpy2u/keymap.c4
-rw-r--r--keyboards/levinson/keymaps/bakingpy2u/rules.mk4
-rw-r--r--keyboards/levinson/keymaps/default/config.h8
-rw-r--r--keyboards/levinson/keymaps/default/rules.mk5
-rw-r--r--keyboards/levinson/keymaps/drogglbecher/config.h17
-rw-r--r--keyboards/levinson/keymaps/drogglbecher/keymap.c76
-rw-r--r--keyboards/levinson/keymaps/drogglbecher/rules.mk10
-rw-r--r--keyboards/levinson/keymaps/jyh/config.h29
-rw-r--r--keyboards/levinson/keymaps/jyh/keymap.c215
-rw-r--r--keyboards/levinson/keymaps/jyh/readme.md32
-rw-r--r--keyboards/levinson/keymaps/jyh/rules.mk1
-rw-r--r--keyboards/levinson/keymaps/jyh2/config.h33
-rw-r--r--keyboards/levinson/keymaps/jyh2/keymap.c222
-rw-r--r--keyboards/levinson/keymaps/jyh2/readme.md32
-rw-r--r--keyboards/levinson/keymaps/jyh2/rules.mk2
-rw-r--r--keyboards/levinson/keymaps/losinggeneration/rules.mk2
-rw-r--r--keyboards/levinson/keymaps/mmacdougall/README.md21
-rw-r--r--keyboards/levinson/keymaps/mmacdougall/config.h20
-rw-r--r--keyboards/levinson/keymaps/mmacdougall/keymap.c201
-rw-r--r--keyboards/levinson/keymaps/mmacdougall/rules.mk2
-rw-r--r--keyboards/levinson/keymaps/steno/config.h34
-rw-r--r--keyboards/levinson/keymaps/steno/keymap.c148
-rw-r--r--keyboards/levinson/keymaps/steno/rules.mk7
-rw-r--r--keyboards/levinson/keymaps/treadwell/config.h6
-rw-r--r--keyboards/levinson/keymaps/treadwell/keymap.c64
-rw-r--r--keyboards/levinson/keymaps/treadwell/rules.mk4
-rw-r--r--keyboards/levinson/keymaps/valgrahf/rules.mk5
-rw-r--r--keyboards/levinson/keymaps/xtonhasvim/config.h35
-rw-r--r--keyboards/levinson/keymaps/xtonhasvim/keymap.c237
-rw-r--r--keyboards/levinson/keymaps/xtonhasvim/readme.md9
-rw-r--r--keyboards/levinson/keymaps/xtonhasvim/rules.mk5
-rw-r--r--keyboards/levinson/levinson.h5
-rw-r--r--keyboards/levinson/matrix.c484
-rw-r--r--keyboards/levinson/readme.md14
-rw-r--r--keyboards/levinson/rev1/config.h40
-rw-r--r--keyboards/levinson/rev1/rev1.c1
-rw-r--r--keyboards/levinson/rev1/rev1.h7
-rw-r--r--keyboards/levinson/rev2/config.h40
-rw-r--r--keyboards/levinson/rev2/rev2.h7
-rw-r--r--keyboards/levinson/rules.mk52
-rw-r--r--keyboards/levinson/serial.c228
-rw-r--r--keyboards/levinson/serial.h26
-rw-r--r--keyboards/levinson/split_util.c86
-rw-r--r--keyboards/levinson/split_util.h20
-rw-r--r--keyboards/lfkeyboards/lfk65_hs/lfk65_hs.h25
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk13
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk17
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk14
-rw-r--r--keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk18
-rw-r--r--keyboards/lfkeyboards/lfk78/lfk78.c9
-rw-r--r--keyboards/lfkeyboards/lfk78/rules.mk49
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk11
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/default/rules.mk11
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/gbchk/rules.mk13
-rw-r--r--keyboards/lfkeyboards/lfk87/keymaps/iso/rules.mk11
-rw-r--r--keyboards/lfkeyboards/lfk87/lfk87.c9
-rw-r--r--keyboards/lfkeyboards/lfk87/rules.mk34
-rw-r--r--keyboards/lfkeyboards/lfkpad/keymaps/default/rules.mk13
-rw-r--r--keyboards/lfkeyboards/lfkpad/rules.mk28
-rw-r--r--keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk3
-rw-r--r--keyboards/lfkeyboards/mini1800/keymaps/default/rules.mk4
-rw-r--r--keyboards/lfkeyboards/mini1800/mini1800.c10
-rw-r--r--keyboards/lily58/config.h21
-rw-r--r--keyboards/lily58/i2c.c (renamed from keyboards/ergotravel/i2c.c)0
-rw-r--r--keyboards/lily58/i2c.h (renamed from keyboards/fourier/i2c.h)0
-rw-r--r--keyboards/lily58/keymaps/default/config.h39
-rw-r--r--keyboards/lily58/keymaps/default/keymap.c147
-rw-r--r--keyboards/lily58/keymaps/default/rules.mk21
-rw-r--r--keyboards/lily58/keymaps/yuchi/config.h39
-rw-r--r--keyboards/lily58/keymaps/yuchi/keymap.c148
-rw-r--r--keyboards/lily58/keymaps/yuchi/rules.mk22
-rw-r--r--keyboards/lily58/lily58.c1
-rw-r--r--keyboards/lily58/lily58.h28
-rw-r--r--keyboards/lily58/matrix.c459
-rw-r--r--keyboards/lily58/readme.md17
-rw-r--r--keyboards/lily58/rev1/config.h84
-rw-r--r--keyboards/lily58/rev1/rev1.c14
-rw-r--r--keyboards/lily58/rev1/rev1.h61
-rw-r--r--keyboards/lily58/rev1/rules.mk1
-rw-r--r--keyboards/lily58/rules.mk74
-rw-r--r--keyboards/lily58/serial.c445
-rw-r--r--keyboards/lily58/serial.h80
-rw-r--r--keyboards/lily58/serial_config.h8
-rw-r--r--keyboards/lily58/split_util.c83
-rw-r--r--keyboards/lily58/split_util.h (renamed from keyboards/ergotravel/split_util.h)0
-rw-r--r--keyboards/m10a/keymaps/gam3cat/config.h2
-rw-r--r--keyboards/m10a/keymaps/gam3cat/keymap.c199
-rw-r--r--keyboards/m10a/keymaps/gam3cat/readme.md10
-rw-r--r--keyboards/m10a/keymaps/gam3cat/rules.mk27
-rw-r--r--keyboards/massdrop/alt/alt.h34
-rw-r--r--keyboards/massdrop/alt/config.h126
-rw-r--r--keyboards/massdrop/alt/config_led.h178
-rw-r--r--keyboards/massdrop/alt/info.json80
-rw-r--r--keyboards/massdrop/alt/keymaps/abishalom/keymap.c189
-rw-r--r--keyboards/massdrop/alt/keymaps/default/keymap.c193
-rw-r--r--keyboards/massdrop/alt/keymaps/mac/keymap.c193
-rw-r--r--keyboards/massdrop/alt/keymaps/reywood/keymap.c195
-rw-r--r--keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.c193
-rw-r--r--keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.h3
-rw-r--r--keyboards/massdrop/alt/keymaps/reywood/rules.mk34
-rw-r--r--keyboards/massdrop/alt/led_programs.c120
-rw-r--r--keyboards/massdrop/alt/matrix.c182
-rw-r--r--keyboards/massdrop/alt/matrix.h77
-rw-r--r--keyboards/massdrop/alt/readme.md20
-rw-r--r--keyboards/massdrop/alt/rules.mk33
-rw-r--r--keyboards/massdrop/ctrl/config.h126
-rw-r--r--keyboards/massdrop/ctrl/config_led.h191
-rw-r--r--keyboards/massdrop/ctrl/ctrl.h42
-rw-r--r--keyboards/massdrop/ctrl/info.json100
-rw-r--r--keyboards/massdrop/ctrl/keymaps/default/keymap.c196
-rw-r--r--keyboards/massdrop/ctrl/keymaps/mac/keymap.c196
-rw-r--r--keyboards/massdrop/ctrl/led_programs.c120
-rw-r--r--keyboards/massdrop/ctrl/matrix.c182
-rw-r--r--keyboards/massdrop/ctrl/matrix.h77
-rw-r--r--keyboards/massdrop/ctrl/readme.md20
-rw-r--r--keyboards/massdrop/ctrl/rules.mk33
-rw-r--r--keyboards/mechmini/v1/keymaps/pitty/keymap.c54
-rw-r--r--keyboards/mechmini/v1/v1.h17
-rwxr-xr-xkeyboards/mechmini/v2/config.h3
-rw-r--r--keyboards/mechmini/v2/keymaps/arkag/config.h7
-rw-r--r--keyboards/mechmini/v2/keymaps/arkag/keymap.c39
-rw-r--r--keyboards/mechmini/v2/keymaps/arkag/rules.mk17
-rwxr-xr-xkeyboards/mechmini/v2/keymaps/lbibass_625_space/config.h4
-rwxr-xr-xkeyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c50
-rw-r--r--keyboards/mechmini/v2/keymaps/lbibass_625_space/readme.md2
-rwxr-xr-xkeyboards/mechmini/v2/keymaps/lbibass_625_space/rules.mk11
-rwxr-xr-xkeyboards/mechmini/v2/keymaps/lbibass_split_space/config.h4
-rwxr-xr-xkeyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c33
-rw-r--r--keyboards/mechmini/v2/keymaps/lbibass_split_space/readme.md2
-rwxr-xr-xkeyboards/mechmini/v2/keymaps/lbibass_split_space/rules.mk11
-rw-r--r--keyboards/mehkee96/config.h18
-rw-r--r--keyboards/mehkee96/i2c.c106
-rw-r--r--keyboards/mehkee96/i2c.h27
-rw-r--r--keyboards/mehkee96/info.json12
-rw-r--r--keyboards/mehkee96/keymaps/default/keymap.c80
-rw-r--r--keyboards/mehkee96/keymaps/johann/keymap.c80
-rw-r--r--keyboards/mehkee96/matrix.c130
-rw-r--r--keyboards/mehkee96/mehkee96.c81
-rw-r--r--keyboards/mehkee96/mehkee96.h24
-rw-r--r--keyboards/mehkee96/program105
-rw-r--r--keyboards/mehkee96/readme.md16
-rw-r--r--keyboards/mehkee96/rules.mk35
-rw-r--r--keyboards/mehkee96/usbconfig.h396
-rw-r--r--keyboards/meira/config.h2
-rw-r--r--keyboards/meira/keymaps/grahampheath/keymap.c34
-rw-r--r--keyboards/meira/rules.mk2
-rw-r--r--keyboards/melody96/config.h3
-rw-r--r--keyboards/melody96/keymaps/default/keymap.c6
-rw-r--r--keyboards/mf68/README.md18
-rw-r--r--keyboards/mf68/config.h162
-rw-r--r--keyboards/mf68/info.json12
-rw-r--r--keyboards/mf68/keymaps/default/keymap.c68
-rw-r--r--keyboards/mf68/keymaps/factory/keymap.c74
-rw-r--r--keyboards/mf68/rules.mk66
-rw-r--r--keyboards/mf68_ble/README.md27
-rw-r--r--keyboards/mf68_ble/config.h162
-rw-r--r--keyboards/mf68_ble/info.json12
-rw-r--r--keyboards/mf68_ble/keymaps/default/keymap.c68
-rw-r--r--keyboards/mf68_ble/rules.mk67
-rw-r--r--keyboards/miniaxe/config.h248
-rw-r--r--keyboards/miniaxe/info.json12
-rw-r--r--keyboards/miniaxe/keymaps/default/keymap.c159
-rw-r--r--keyboards/miniaxe/keymaps/underglow/keymap.c159
-rw-r--r--keyboards/miniaxe/keymaps/underglow/rules.mk2
-rw-r--r--keyboards/miniaxe/matrix.c641
-rw-r--r--keyboards/miniaxe/miniaxe.c43
-rw-r--r--keyboards/miniaxe/miniaxe.h50
-rw-r--r--keyboards/miniaxe/readme.md16
-rw-r--r--keyboards/miniaxe/rules.mk88
-rw-r--r--keyboards/minidox/keymaps/alairock/config.h3
-rw-r--r--keyboards/minidox/keymaps/alairock/rules.mk2
-rw-r--r--keyboards/minidox/keymaps/khitsule/config.h4
-rw-r--r--keyboards/minidox/keymaps/that_canadian/config.h2
-rw-r--r--keyboards/minidox/keymaps/that_canadian/rules.mk2
-rw-r--r--keyboards/minidox/keymaps/xyverz/config.h2
-rw-r--r--keyboards/minidox/keymaps/xyverz/rules.mk2
-rw-r--r--keyboards/minidox/readme.md6
-rw-r--r--keyboards/minidox/rules.mk2
-rw-r--r--keyboards/mint60/config.h232
-rw-r--r--keyboards/mint60/i2c.c162
-rw-r--r--keyboards/mint60/i2c.h49
-rw-r--r--keyboards/mint60/info.json78
-rw-r--r--keyboards/mint60/keymaps/default/config.h23
-rw-r--r--keyboards/mint60/keymaps/default/keymap.c104
-rw-r--r--keyboards/mint60/keymaps/default/readme.md1
-rw-r--r--keyboards/mint60/keymaps/eucalyn/config.h23
-rw-r--r--keyboards/mint60/keymaps/eucalyn/keymap.c104
-rw-r--r--keyboards/mint60/keymaps/eucalyn/readme.md3
-rw-r--r--keyboards/mint60/matrix.c349
-rw-r--r--keyboards/mint60/mint60.c43
-rw-r--r--keyboards/mint60/mint60.h59
-rw-r--r--keyboards/mint60/readme.md15
-rw-r--r--keyboards/mint60/rules.mk78
-rw-r--r--keyboards/mint60/serial.c295
-rw-r--r--keyboards/mint60/serial.h27
-rw-r--r--keyboards/mint60/serial_config.h16
-rw-r--r--keyboards/mint60/split_util.c70
-rw-r--r--keyboards/mint60/split_util.h19
-rw-r--r--keyboards/mitosis/config.h2
-rw-r--r--keyboards/mitosis/keymaps/datagrok/config.h41
-rw-r--r--keyboards/mitosis/keymaps/datagrok/keymap.c233
-rw-r--r--keyboards/mitosis/keymaps/datagrok/readme.md147
-rw-r--r--keyboards/mitosis/keymaps/datagrok/rules.mk25
-rw-r--r--keyboards/mitosis/mitosis.c19
-rw-r--r--keyboards/mitosis/mitosis.h19
-rw-r--r--keyboards/mitosis/readme.md25
-rw-r--r--keyboards/miuni32/config.h9
-rw-r--r--keyboards/miuni32/keymaps/adam-lee/rules.mk2
-rw-r--r--keyboards/miuni32/keymaps/default/rules.mk2
-rw-r--r--keyboards/miuni32/keymaps/ht_156/rules.mk2
-rw-r--r--keyboards/miuni32/keymaps/ki/rules.mk2
-rw-r--r--keyboards/miuni32/readme.md2
-rw-r--r--keyboards/model01/config.h38
-rw-r--r--keyboards/model01/info.json87
-rw-r--r--keyboards/model01/keymaps/default/config.h19
-rw-r--r--keyboards/model01/keymaps/default/keymap.c124
-rw-r--r--keyboards/model01/keymaps/default/readme.md3
-rw-r--r--keyboards/model01/keymaps/default/rules.mk2
-rw-r--r--keyboards/model01/keymaps/dshields/config.h30
-rw-r--r--keyboards/model01/keymaps/dshields/keymap.c53
-rw-r--r--keyboards/model01/keymaps/dshields/readme.md10
-rw-r--r--keyboards/model01/keymaps/dshields/rules.mk3
-rw-r--r--keyboards/model01/leds.c169
-rw-r--r--keyboards/model01/leds.h22
-rw-r--r--keyboards/model01/matrix.c94
-rw-r--r--keyboards/model01/model01.c38
-rw-r--r--keyboards/model01/model01.h50
-rw-r--r--keyboards/model01/readme.md37
-rw-r--r--keyboards/model01/rules.mk64
-rw-r--r--keyboards/model01/wire-protocol-constants.h53
-rw-r--r--keyboards/mt40/rules.mk2
-rw-r--r--keyboards/mxss/rgblight.c2
-rw-r--r--keyboards/namecard2x4/config.h223
-rw-r--r--keyboards/namecard2x4/info.json13
-rw-r--r--keyboards/namecard2x4/keymaps/brainfuck/config.h19
-rw-r--r--keyboards/namecard2x4/keymaps/brainfuck/keymap.c59
-rw-r--r--keyboards/namecard2x4/keymaps/brainfuck/readme.md12
-rw-r--r--keyboards/namecard2x4/keymaps/default/config.h19
-rw-r--r--keyboards/namecard2x4/keymaps/default/keymap.c60
-rw-r--r--keyboards/namecard2x4/keymaps/default/readme.md9
-rw-r--r--keyboards/namecard2x4/namecard2x4.c43
-rw-r--r--keyboards/namecard2x4/namecard2x4.h33
-rw-r--r--keyboards/namecard2x4/readme.md24
-rw-r--r--keyboards/namecard2x4/rules.mk81
-rw-r--r--keyboards/nano/config.h48
-rw-r--r--keyboards/nano/keymaps/default/keymap.c19
-rw-r--r--keyboards/nano/keymaps/default/rules.mk3
-rw-r--r--keyboards/nano/readme.md14
-rw-r--r--keyboards/nano/rules.mk70
-rw-r--r--keyboards/newgame40/config.h75
-rw-r--r--keyboards/newgame40/info.json13
-rw-r--r--keyboards/newgame40/keymaps/default/config.h5
-rw-r--r--keyboards/newgame40/keymaps/default/keymap.c208
-rw-r--r--keyboards/newgame40/newgame40.c5
-rw-r--r--keyboards/newgame40/newgame40.h19
-rw-r--r--keyboards/newgame40/readme.md17
-rw-r--r--keyboards/newgame40/rules.mk74
-rw-r--r--keyboards/niu_mini/config.h3
-rw-r--r--keyboards/niu_mini/keymaps/abhixec/keymap.c183
-rw-r--r--keyboards/niu_mini/keymaps/abhixec/readme.md5
-rw-r--r--keyboards/niu_mini/keymaps/abhixec/rules.mk1
-rw-r--r--keyboards/niu_mini/keymaps/spacebarracecar/config.h1
-rw-r--r--keyboards/niu_mini/keymaps/spacebarracecar/keymap.c138
-rw-r--r--keyboards/niu_mini/keymaps/spacebarracecar/readme.md5
-rw-r--r--keyboards/niu_mini/keymaps/spacebarracecar/rules.mk22
-rw-r--r--keyboards/niu_mini/keymaps/xtonhasvim/config.h10
-rw-r--r--keyboards/niu_mini/keymaps/xtonhasvim/keymap.c187
-rw-r--r--keyboards/niu_mini/keymaps/xtonhasvim/rules.mk2
-rwxr-xr-xkeyboards/novelpad/config.h3
-rw-r--r--keyboards/noxary/268/config.h5
-rw-r--r--keyboards/noxary/268_2/268_2.c54
-rw-r--r--keyboards/noxary/268_2/268_2.h43
-rw-r--r--keyboards/noxary/268_2/config.h221
-rw-r--r--keyboards/noxary/268_2/info.json12
-rw-r--r--keyboards/noxary/268_2/keymaps/default/config.h19
-rw-r--r--keyboards/noxary/268_2/keymaps/default/keymap.c83
-rw-r--r--keyboards/noxary/268_2/keymaps/default/readme.md1
-rw-r--r--keyboards/noxary/268_2/readme.md16
-rw-r--r--keyboards/noxary/268_2/rules.mk80
-rw-r--r--keyboards/noxary/README.md8
-rw-r--r--keyboards/noxary/x268/config.h230
-rw-r--r--keyboards/noxary/x268/info.json86
-rw-r--r--keyboards/noxary/x268/keymaps/default/config.h19
-rw-r--r--keyboards/noxary/x268/keymaps/default/keymap.c83
-rw-r--r--keyboards/noxary/x268/keymaps/default/readme.md1
-rw-r--r--keyboards/noxary/x268/readme.md18
-rw-r--r--keyboards/noxary/x268/rules.mk80
-rw-r--r--keyboards/noxary/x268/x268.c53
-rw-r--r--keyboards/noxary/x268/x268.h35
-rw-r--r--keyboards/nyquist/eeprom-lefthand.eep2
-rw-r--r--keyboards/nyquist/eeprom-righthand.eep2
-rw-r--r--keyboards/nyquist/i2c.c162
-rw-r--r--keyboards/nyquist/i2c.h49
-rw-r--r--keyboards/nyquist/info.json3
-rw-r--r--keyboards/nyquist/keymaps/DivergeJM/rules.mk2
-rw-r--r--keyboards/nyquist/keymaps/bramver/README.md100
-rw-r--r--keyboards/nyquist/keymaps/bramver/config.h31
-rw-r--r--keyboards/nyquist/keymaps/bramver/keymap.c281
-rw-r--r--keyboards/nyquist/keymaps/bramver/rules.mk6
-rw-r--r--keyboards/nyquist/keymaps/danielhklein/rules.mk2
-rw-r--r--keyboards/nyquist/keymaps/default/config.h7
-rw-r--r--keyboards/nyquist/keymaps/default/rules.mk4
-rw-r--r--keyboards/nyquist/keymaps/hexwire/config.h7
-rw-r--r--keyboards/nyquist/keymaps/hexwire/rules.mk3
-rw-r--r--keyboards/nyquist/keymaps/kim-kim/keymap.c2
-rw-r--r--keyboards/nyquist/keymaps/losinggeneration/rules.mk2
-rw-r--r--keyboards/nyquist/keymaps/mtdjr/config.h36
-rw-r--r--keyboards/nyquist/keymaps/mtdjr/keymap.c64
-rw-r--r--keyboards/nyquist/keymaps/mtdjr/rules.mk2
-rw-r--r--keyboards/nyquist/keymaps/yshrsmz/config.h39
-rw-r--r--keyboards/nyquist/keymaps/yshrsmz/keymap.c195
-rw-r--r--keyboards/nyquist/keymaps/yshrsmz/rules.mk1
-rw-r--r--keyboards/nyquist/matrix.c497
-rw-r--r--keyboards/nyquist/nyquist.h8
-rw-r--r--keyboards/nyquist/rev1/config.h14
-rw-r--r--keyboards/nyquist/rev1/rev1.h5
-rw-r--r--keyboards/nyquist/rev2/config.h12
-rw-r--r--keyboards/nyquist/rev2/rev2.h5
-rw-r--r--keyboards/nyquist/rev3/config.h84
-rw-r--r--keyboards/nyquist/rev3/rev3.c21
-rw-r--r--keyboards/nyquist/rev3/rev3.h63
-rw-r--r--keyboards/nyquist/rev3/rules.mk1
-rw-r--r--keyboards/nyquist/rules.mk20
-rw-r--r--keyboards/nyquist/serial.c228
-rw-r--r--keyboards/nyquist/serial.h26
-rw-r--r--keyboards/nyquist/split_util.c86
-rw-r--r--keyboards/nyquist/split_util.h20
-rw-r--r--keyboards/octagon/octagon.c1
-rw-r--r--keyboards/octagon/octagon.h14
-rw-r--r--keyboards/octagon/readme.md11
-rw-r--r--keyboards/octagon/rules.mk1
-rw-r--r--keyboards/octagon/v1/keymaps/default/keymap.c39
-rw-r--r--keyboards/octagon/v1/keymaps/default/readme.md8
-rw-r--r--keyboards/octagon/v1/readme.md28
-rw-r--r--keyboards/octagon/v1/v1.h36
-rw-r--r--keyboards/octagon/v2/info.json12
-rw-r--r--keyboards/octagon/v2/keymaps/default/keymap.c39
-rw-r--r--keyboards/octagon/v2/keymaps/default/readme.md8
-rw-r--r--keyboards/octagon/v2/rules.mk72
-rw-r--r--keyboards/octagon/v2/v2.h36
-rw-r--r--keyboards/ok60/config.h3
-rw-r--r--keyboards/ok60/info.json4
-rw-r--r--keyboards/ok60/ok60.h14
-rw-r--r--keyboards/ok60/rules.mk2
-rw-r--r--keyboards/omnikey_blackheart/config.h6
-rw-r--r--keyboards/omnikey_blackheart/keymaps/default/keymap.c8
-rw-r--r--keyboards/orange75/config.h35
-rw-r--r--keyboards/orange75/info.json96
-rw-r--r--keyboards/orange75/keymaps/default/keymap.c85
-rw-r--r--keyboards/orange75/orange75.c1
-rw-r--r--keyboards/orange75/orange75.h29
-rw-r--r--keyboards/orange75/readme.md16
-rw-r--r--keyboards/orange75/rules.mk73
-rw-r--r--keyboards/org60/rules.mk2
-rw-r--r--keyboards/orthodox/keymaps/drashna/config.h4
-rw-r--r--keyboards/orthodox/keymaps/drashna/keymap.c64
-rw-r--r--keyboards/orthodox/readme.md2
-rw-r--r--keyboards/orthodox/rev1/config.h3
-rw-r--r--keyboards/orthodox/rev3/config.h4
-rw-r--r--keyboards/orthodox/rev3_teensy/config.h4
-rw-r--r--keyboards/orthodox/rules.mk2
-rwxr-xr-xkeyboards/paladin64/config.h2
-rw-r--r--keyboards/panc60/config.h46
-rw-r--r--keyboards/panc60/i2c.c106
-rw-r--r--keyboards/panc60/i2c.h27
-rw-r--r--keyboards/panc60/info.json20
-rw-r--r--keyboards/panc60/keymaps/default/config.h19
-rw-r--r--keyboards/panc60/keymaps/default/keymap.c60
-rw-r--r--keyboards/panc60/keymaps/default/readme.md1
-rw-r--r--keyboards/panc60/matrix.c145
-rw-r--r--keyboards/panc60/panc60.c64
-rw-r--r--keyboards/panc60/panc60.h71
-rw-r--r--keyboards/panc60/readme.md46
-rw-r--r--keyboards/panc60/rules.mk52
-rw-r--r--keyboards/panc60/usbconfig.h396
-rw-r--r--keyboards/pearl/config.h7
-rw-r--r--keyboards/pearl/keymaps/jetpacktuxedo/keymap.c2
-rw-r--r--keyboards/pearl/pearl.h2
-rw-r--r--keyboards/pearl/rules.mk8
-rw-r--r--keyboards/pegasushoof/README.md12
-rw-r--r--keyboards/pegasushoof/keymaps/blowrak/keymap.c112
-rw-r--r--keyboards/pegasushoof/keymaps/blowrak/rules.mk22
-rw-r--r--keyboards/pegasushoof/keymaps/citadel/config.h14
-rw-r--r--keyboards/pegasushoof/keymaps/citadel/keymap.c128
-rw-r--r--keyboards/pegasushoof/keymaps/citadel/rules.mk22
-rw-r--r--keyboards/pegasushoof/keymaps/default/keymap.c60
-rw-r--r--keyboards/pegasushoof/keymaps/default/rules.mk22
-rw-r--r--keyboards/pegasushoof/matrix.c204
-rw-r--r--keyboards/pegasushoof/pegasushoof.h51
-rw-r--r--keyboards/pegasushoof/rules.mk67
-rw-r--r--keyboards/phantom/info.json474
-rw-r--r--keyboards/phantom/phantom.h18
-rw-r--r--keyboards/phantom/readme.md4
-rw-r--r--keyboards/planck/keymaps/ab/rules.mk2
-rw-r--r--keyboards/planck/keymaps/ajp10304/config.h8
-rw-r--r--keyboards/planck/keymaps/ajp10304/keymap.c159
-rw-r--r--keyboards/planck/keymaps/ajp10304/readme.md4
-rw-r--r--keyboards/planck/keymaps/alexey/rules.mk2
-rw-r--r--keyboards/planck/keymaps/altgr/config.h3
-rw-r--r--keyboards/planck/keymaps/am/config.h38
-rw-r--r--keyboards/planck/keymaps/am/keymap.c204
-rw-r--r--keyboards/planck/keymaps/am/readme.md17
-rw-r--r--keyboards/planck/keymaps/am/rules.mk10
-rw-r--r--keyboards/planck/keymaps/andylikescandy/config.h3
-rw-r--r--keyboards/planck/keymaps/angerthosenear/rules.mk2
-rw-r--r--keyboards/planck/keymaps/austin/rules.mk2
-rw-r--r--keyboards/planck/keymaps/basic/rules.mk2
-rw-r--r--keyboards/planck/keymaps/bone2planck/config.h8
-rw-r--r--keyboards/planck/keymaps/bone2planck/rules.mk2
-rw-r--r--keyboards/planck/keymaps/callum/keymap.c74
-rw-r--r--keyboards/planck/keymaps/callum/rules.mk2
-rw-r--r--keyboards/planck/keymaps/cbbrowne/rules.mk2
-rw-r--r--keyboards/planck/keymaps/chance/rules.mk2
-rw-r--r--keyboards/planck/keymaps/charlie/rules.mk2
-rw-r--r--keyboards/planck/keymaps/circuit/rules.mk2
-rw-r--r--keyboards/planck/keymaps/daniel/rules.mk2
-rw-r--r--keyboards/planck/keymaps/danielhklein/rules.mk2
-rw-r--r--keyboards/planck/keymaps/david/rules.mk2
-rw-r--r--keyboards/planck/keymaps/davidrambo/config.h5
-rw-r--r--keyboards/planck/keymaps/dc/rules.mk2
-rw-r--r--keyboards/planck/keymaps/default/config.h6
-rw-r--r--keyboards/planck/keymaps/default/keymap.c29
-rw-r--r--keyboards/planck/keymaps/dlaroe/rules.mk2
-rw-r--r--keyboards/planck/keymaps/dr_notsokind/Readme.md2
-rw-r--r--keyboards/planck/keymaps/dr_notsokind/keymap.c108
-rw-r--r--keyboards/planck/keymaps/dr_notsokind/rules.mk2
-rw-r--r--keyboards/planck/keymaps/dshields/config.h19
-rw-r--r--keyboards/planck/keymaps/dshields/keymap.c54
-rw-r--r--keyboards/planck/keymaps/dshields/rules.mk25
-rw-r--r--keyboards/planck/keymaps/dzobert/rules.mk2
-rw-r--r--keyboards/planck/keymaps/espynn/keymap.c1
-rw-r--r--keyboards/planck/keymaps/espynn/rules.mk2
-rw-r--r--keyboards/planck/keymaps/experimental/config.h2
-rw-r--r--keyboards/planck/keymaps/experimental/rules.mk5
-rw-r--r--keyboards/planck/keymaps/gabriel/rules.mk2
-rw-r--r--keyboards/planck/keymaps/grahampheath/config.h7
-rw-r--r--keyboards/planck/keymaps/grahampheath/readme.md2
-rw-r--r--keyboards/planck/keymaps/guidoism/config.h42
-rw-r--r--keyboards/planck/keymaps/guidoism/keymap.c253
-rw-r--r--keyboards/planck/keymaps/gunp/rules.mk2
-rw-r--r--keyboards/planck/keymaps/hiea/config.h3
-rw-r--r--keyboards/planck/keymaps/hieax/config.h3
-rw-r--r--keyboards/planck/keymaps/impossible/rules.mk2
-rwxr-xr-xkeyboards/planck/keymaps/ishtob/config.h58
-rw-r--r--keyboards/planck/keymaps/ishtob/keymap.c168
-rw-r--r--keyboards/planck/keymaps/ishtob/macros_public.h57
-rw-r--r--keyboards/planck/keymaps/ishtob/readme.md7
-rwxr-xr-xkeyboards/planck/keymaps/ishtob/rule.mk5
-rw-r--r--keyboards/planck/keymaps/jacob/rules.mk2
-rw-r--r--keyboards/planck/keymaps/jarred/config.h39
-rw-r--r--keyboards/planck/keymaps/jarred/rules.mk4
-rw-r--r--keyboards/planck/keymaps/jasperla/config.h10
-rw-r--r--keyboards/planck/keymaps/jasperla/keymap.c136
-rw-r--r--keyboards/planck/keymaps/jasperla/readme.md7
-rw-r--r--keyboards/planck/keymaps/jasperla/rules.mk1
-rw-r--r--keyboards/planck/keymaps/jcorrado/keymap.c115
-rw-r--r--keyboards/planck/keymaps/jcorrado/readme.md9
-rw-r--r--keyboards/planck/keymaps/jeebak/rules.mk2
-rw-r--r--keyboards/planck/keymaps/jeremy-dev/keymap.c1
-rw-r--r--keyboards/planck/keymaps/jetpacktuxedo/config.h34
-rw-r--r--keyboards/planck/keymaps/jetpacktuxedo/keymap.c301
-rw-r--r--keyboards/planck/keymaps/jetpacktuxedo/rules.mk1
-rw-r--r--keyboards/planck/keymaps/jhenahan/rules.mk2
-rw-r--r--keyboards/planck/keymaps/joe/rules.mk2
-rw-r--r--keyboards/planck/keymaps/johannes/rules.mk2
-rw-r--r--keyboards/planck/keymaps/kmontag42/rules.mk1
-rw-r--r--keyboards/planck/keymaps/kyle/rules.mk2
-rw-r--r--keyboards/planck/keymaps/lae3/config.h8
-rw-r--r--keyboards/planck/keymaps/lae3/rules.mk2
-rw-r--r--keyboards/planck/keymaps/leo/rules.mk2
-rw-r--r--keyboards/planck/keymaps/lucas/rules.mk2
-rw-r--r--keyboards/planck/keymaps/lukas/rules.mk2
-rw-r--r--keyboards/planck/keymaps/luke/rules.mk2
-rw-r--r--keyboards/planck/keymaps/mattly/config.h43
-rw-r--r--keyboards/planck/keymaps/mattly/keymap.c166
-rw-r--r--keyboards/planck/keymaps/mattly/readme.md28
-rw-r--r--keyboards/planck/keymaps/mattly/rules.mk2
-rw-r--r--keyboards/planck/keymaps/max/rules.mk2
-rw-r--r--keyboards/planck/keymaps/mitch/config.h3
-rw-r--r--keyboards/planck/keymaps/mitch/readme.md4
-rw-r--r--keyboards/planck/keymaps/mollat/rules.mk2
-rw-r--r--keyboards/planck/keymaps/mwpeterson/config.h40
-rw-r--r--keyboards/planck/keymaps/mwpeterson/keymap.c312
-rw-r--r--keyboards/planck/keymaps/mwpeterson/rules.mk7
-rw-r--r--keyboards/planck/keymaps/myoung34/rules.mk2
-rw-r--r--keyboards/planck/keymaps/narze/config.h3
-rw-r--r--keyboards/planck/keymaps/narze/rules.mk2
-rw-r--r--keyboards/planck/keymaps/navi/config.h31
-rw-r--r--keyboards/planck/keymaps/navi/keymap.c270
-rw-r--r--keyboards/planck/keymaps/navi/rules.mk5
-rw-r--r--keyboards/planck/keymaps/neo2planck/config.h8
-rw-r--r--keyboards/planck/keymaps/neo2planck/rules.mk2
-rw-r--r--keyboards/planck/keymaps/nico/rules.mk2
-rw-r--r--keyboards/planck/keymaps/not-quite-neo/rules.mk2
-rw-r--r--keyboards/planck/keymaps/pascamel/config.h38
-rw-r--r--keyboards/planck/keymaps/pascamel/keymap.c237
-rw-r--r--keyboards/planck/keymaps/pascamel/readme.md29
-rw-r--r--keyboards/planck/keymaps/pascamel/rules.mk1
-rw-r--r--keyboards/planck/keymaps/pevecyan/config.h38
-rw-r--r--keyboards/planck/keymaps/pevecyan/keymap.c246
-rw-r--r--keyboards/planck/keymaps/pevecyan/readme.md (renamed from keyboards/planck/keymaps/guidoism/readme.md)0
-rw-r--r--keyboards/planck/keymaps/pevecyan/rules.mk1
-rw-r--r--keyboards/planck/keymaps/pickle_jr/rules.mk2
-rw-r--r--keyboards/planck/keymaps/premek/rules.mk2
-rw-r--r--keyboards/planck/keymaps/priyadi/config.h2
-rw-r--r--keyboards/planck/keymaps/priyadi/rules.mk2
-rw-r--r--keyboards/planck/keymaps/pvc/rules.mk2
-rw-r--r--keyboards/planck/keymaps/raffle/config.h38
-rw-r--r--keyboards/planck/keymaps/raffle/keymap.c305
-rw-r--r--keyboards/planck/keymaps/raffle/readme.md11
-rw-r--r--keyboards/planck/keymaps/raffle/rules.mk1
-rw-r--r--keyboards/planck/keymaps/rai-suta/rules.mk2
-rw-r--r--keyboards/planck/keymaps/sascha/keymap.c31
-rw-r--r--keyboards/planck/keymaps/sascha/rules.mk11
-rw-r--r--keyboards/planck/keymaps/sdothum/config.h3
-rw-r--r--keyboards/planck/keymaps/sgoodwin/rules.mk2
-rw-r--r--keyboards/planck/keymaps/skug/config.h44
-rw-r--r--keyboards/planck/keymaps/skug/keymap.c344
-rw-r--r--keyboards/planck/keymaps/skug/readme.md8
-rw-r--r--keyboards/planck/keymaps/skug/rules.mk3
-rw-r--r--keyboards/planck/keymaps/spacebarracecar/config.h5
-rw-r--r--keyboards/planck/keymaps/spacebarracecar/keymap.c160
-rw-r--r--keyboards/planck/keymaps/spacebarracecar/readme.md5
-rw-r--r--keyboards/planck/keymaps/spacebarracecar/rules.mk22
-rw-r--r--keyboards/planck/keymaps/steno/config.h4
-rw-r--r--keyboards/planck/keymaps/tak3over/rules.mk2
-rw-r--r--keyboards/planck/keymaps/tehwalris/config.h4
-rw-r--r--keyboards/planck/keymaps/thermal_printer/rules.mk2
-rw-r--r--keyboards/planck/keymaps/tong92/keymap.c168
-rw-r--r--keyboards/planck/keymaps/tong92/rules.mk2
-rw-r--r--keyboards/planck/keymaps/vaire/config.h37
-rw-r--r--keyboards/planck/keymaps/vaire/keymap.c150
-rw-r--r--keyboards/planck/keymaps/vaire/readme.md6
-rw-r--r--keyboards/planck/keymaps/vaire/rules.mk82
-rw-r--r--keyboards/planck/keymaps/vifon/config.h3
-rw-r--r--keyboards/planck/keymaps/vifon/keymap.c179
-rw-r--r--keyboards/planck/keymaps/vifon/rules.mk4
-rw-r--r--keyboards/planck/keymaps/yale/config.h11
-rw-r--r--keyboards/planck/keymaps/yale/rules.mk2
-rw-r--r--keyboards/planck/keymaps/yang/rules.mk2
-rw-r--r--keyboards/planck/keymaps/zach/config.h1
-rw-r--r--keyboards/planck/keymaps/zach/rules.mk2
-rwxr-xr-xkeyboards/planck/keymaps/zrichard/rules.mk2
-rw-r--r--keyboards/planck/planck.h2
-rw-r--r--keyboards/planck/readme.md8
-rw-r--r--keyboards/planck/rev6/chconf.h4
-rw-r--r--keyboards/planck/rev6/config.h7
-rw-r--r--keyboards/planck/rev6/halconf.h2
-rw-r--r--keyboards/planck/rev6/matrix.c29
-rw-r--r--keyboards/planck/rev6/mcuconf.h2
-rw-r--r--keyboards/planck/rev6/rules.mk1
-rw-r--r--keyboards/playkbtw/ca66/config.h2
-rw-r--r--keyboards/playkbtw/ca66/keymaps/olivia/keymap.c2
-rw-r--r--keyboards/playkbtw/ca66/readme.md2
-rw-r--r--keyboards/playkbtw/pk60/config.h5
-rw-r--r--keyboards/playkbtw/pk60/readme.md2
-rw-r--r--keyboards/playkbtw/readme.md2
-rw-r--r--keyboards/preonic/info.json4
-rw-r--r--keyboards/preonic/keymaps/boy314/config.h38
-rw-r--r--keyboards/preonic/keymaps/boy314/keymap.c213
-rw-r--r--keyboards/preonic/keymaps/boy314/readme.md8
-rw-r--r--keyboards/preonic/keymaps/boy314/rules.mk0
-rw-r--r--keyboards/preonic/keymaps/bucktooth/config.h1
-rw-r--r--keyboards/preonic/keymaps/bucktooth/rules.mk2
-rw-r--r--keyboards/preonic/keymaps/dlaroe/rules.mk2
-rw-r--r--keyboards/preonic/keymaps/jacwib/config.h1
-rw-r--r--keyboards/preonic/keymaps/jacwib/keymap.c4
-rw-r--r--keyboards/preonic/keymaps/jacwib/rules.mk2
-rw-r--r--keyboards/preonic/keymaps/kinesis/rules.mk2
-rw-r--r--keyboards/preonic/keymaps/kuatsure/config.h3
-rw-r--r--keyboards/preonic/keymaps/kuatsure/keymap.c54
-rw-r--r--keyboards/preonic/keymaps/kuatsure/rules.mk2
-rw-r--r--keyboards/preonic/keymaps/seph/rules.mk2
-rw-r--r--keyboards/preonic/keymaps/that_canadian/config.h8
-rw-r--r--keyboards/preonic/keymaps/trigotometry/config.h8
-rw-r--r--keyboards/preonic/keymaps/trigotometry/keymap.c165
-rw-r--r--keyboards/preonic/keymaps/trigotometry/readme.md75
-rw-r--r--keyboards/preonic/keymaps/trigotometry/rules.mk2
-rw-r--r--keyboards/preonic/keymaps/zach/config.h3
-rw-r--r--keyboards/preonic/keymaps/zach/rules.mk2
-rw-r--r--keyboards/preonic/preonic.h159
-rw-r--r--keyboards/preonic/rev1/rev1.h39
-rw-r--r--keyboards/preonic/rev2/rev2.h36
-rw-r--r--keyboards/preonic/rev3/config.h3
-rw-r--r--keyboards/preonic/rev3/info.json330
-rw-r--r--keyboards/preonic/rev3/rev3.h106
-rw-r--r--keyboards/prime_r/config.h75
-rw-r--r--keyboards/prime_r/readme.md18
-rw-r--r--keyboards/primekb/prime_l/config.h57
-rw-r--r--keyboards/primekb/prime_l/info.json12
-rw-r--r--keyboards/primekb/prime_l/keymaps/default/config.h19
-rw-r--r--keyboards/primekb/prime_l/keymaps/default/keymap.c74
-rw-r--r--keyboards/primekb/prime_l/keymaps/default/readme.md1
-rw-r--r--keyboards/primekb/prime_l/prime_l.c43
-rw-r--r--keyboards/primekb/prime_l/prime_l.h35
-rw-r--r--keyboards/primekb/prime_l/readme.md15
-rw-r--r--keyboards/primekb/prime_l/rules.mk80
-rw-r--r--keyboards/primekb/prime_m/config.h57
-rw-r--r--keyboards/primekb/prime_m/info.json12
-rw-r--r--keyboards/primekb/prime_m/keymaps/default/config.h19
-rw-r--r--keyboards/primekb/prime_m/keymaps/default/keymap.c82
-rw-r--r--keyboards/primekb/prime_m/keymaps/default/readme.md1
-rw-r--r--keyboards/primekb/prime_m/prime_m.c43
-rw-r--r--keyboards/primekb/prime_m/prime_m.h35
-rw-r--r--keyboards/primekb/prime_m/readme.md15
-rw-r--r--keyboards/primekb/prime_m/rules.mk80
-rw-r--r--keyboards/primekb/prime_o/config.h57
-rw-r--r--keyboards/primekb/prime_o/info.json12
-rw-r--r--keyboards/primekb/prime_o/keymaps/default/config.h19
-rw-r--r--keyboards/primekb/prime_o/keymaps/default/keymap.c77
-rw-r--r--keyboards/primekb/prime_o/keymaps/default/readme.md1
-rw-r--r--keyboards/primekb/prime_o/keymaps/spacebarracecar/config.h1
-rw-r--r--keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c420
-rw-r--r--keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md6
-rw-r--r--keyboards/primekb/prime_o/keymaps/spacebarracecar/rules.mk22
-rw-r--r--keyboards/primekb/prime_o/prime_o.c43
-rw-r--r--keyboards/primekb/prime_o/prime_o.h40
-rw-r--r--keyboards/primekb/prime_o/readme.md15
-rw-r--r--keyboards/primekb/prime_o/rules.mk80
-rw-r--r--keyboards/primekb/prime_r/config.h71
-rw-r--r--keyboards/primekb/prime_r/info.json (renamed from keyboards/prime_r/info.json)0
-rw-r--r--keyboards/primekb/prime_r/keymaps/default/config.h (renamed from keyboards/prime_r/keymaps/default/config.h)0
-rw-r--r--keyboards/primekb/prime_r/keymaps/default/keymap.c (renamed from keyboards/prime_r/keymaps/default/keymap.c)0
-rw-r--r--keyboards/primekb/prime_r/keymaps/default/readme.md (renamed from keyboards/prime_r/keymaps/default/readme.md)0
-rw-r--r--keyboards/primekb/prime_r/keymaps/rooski/config.h (renamed from keyboards/prime_r/keymaps/rooski/config.h)0
-rw-r--r--keyboards/primekb/prime_r/keymaps/rooski/keymap.c (renamed from keyboards/prime_r/keymaps/rooski/keymap.c)0
-rw-r--r--keyboards/primekb/prime_r/keymaps/rooski/readme.md (renamed from keyboards/prime_r/keymaps/rooski/readme.md)0
-rw-r--r--keyboards/primekb/prime_r/keymaps/rooski/rules.mk (renamed from keyboards/prime_r/keymaps/rooski/rules.mk)0
-rw-r--r--keyboards/primekb/prime_r/prime_r.c (renamed from keyboards/prime_r/prime_r.c)0
-rw-r--r--keyboards/primekb/prime_r/prime_r.h (renamed from keyboards/prime_r/prime_r.h)0
-rw-r--r--keyboards/primekb/prime_r/readme.md17
-rw-r--r--keyboards/primekb/prime_r/rules.mk (renamed from keyboards/prime_r/rules.mk)0
-rw-r--r--keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.c126
-rw-r--r--keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.h1187
-rw-r--r--keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.mk5
-rw-r--r--keyboards/proton_c/bootloader_defs.h7
-rw-r--r--keyboards/proton_c/chconf.h520
-rw-r--r--keyboards/proton_c/config.h121
-rw-r--r--keyboards/proton_c/halconf.h388
-rw-r--r--keyboards/proton_c/keymaps/default/keymap.c21
-rw-r--r--keyboards/proton_c/mcuconf.h257
-rw-r--r--keyboards/proton_c/proton_c.c25
-rw-r--r--keyboards/proton_c/proton_c.h18
-rw-r--r--keyboards/proton_c/readme.md16
-rw-r--r--keyboards/proton_c/rules.mk51
-rw-r--r--keyboards/ps2avrGB/README.md1
-rw-r--r--keyboards/ps2avrGB/rules.mk6
-rw-r--r--keyboards/puck/config.h31
-rw-r--r--keyboards/puck/info.json25
-rw-r--r--keyboards/puck/keymaps/default/keymap.c64
-rw-r--r--keyboards/puck/puck.c1
-rw-r--r--keyboards/puck/puck.h18
-rw-r--r--keyboards/puck/readme.md13
-rw-r--r--keyboards/puck/rules.mk68
-rw-r--r--keyboards/quefrency/i2c.c162
-rw-r--r--keyboards/quefrency/i2c.h49
-rw-r--r--keyboards/quefrency/info.json94
-rw-r--r--keyboards/quefrency/keymaps/bjohnson/config.h41
-rw-r--r--keyboards/quefrency/keymaps/bjohnson/keymap.c33
-rw-r--r--keyboards/quefrency/keymaps/bjohnson/rules.mk22
-rw-r--r--keyboards/quefrency/keymaps/bramver/README.md61
-rw-r--r--keyboards/quefrency/keymaps/bramver/config.h31
-rw-r--r--keyboards/quefrency/keymaps/bramver/keymap.c134
-rw-r--r--keyboards/quefrency/keymaps/bramver/rules.mk6
-rw-r--r--keyboards/quefrency/keymaps/default/config.h8
-rw-r--r--keyboards/quefrency/keymaps/default/keymap.c4
-rw-r--r--keyboards/quefrency/keymaps/default65/config.h27
-rw-r--r--keyboards/quefrency/keymaps/default65/keymap.c35
-rw-r--r--keyboards/quefrency/keymaps/default65/rules.mk0
-rw-r--r--keyboards/quefrency/matrix.c467
-rw-r--r--keyboards/quefrency/readme.md2
-rw-r--r--keyboards/quefrency/rev1/config.h42
-rw-r--r--keyboards/quefrency/rev1/rev1.c2
-rw-r--r--keyboards/quefrency/rev1/rev1.h33
-rw-r--r--keyboards/quefrency/rules.mk45
-rw-r--r--keyboards/quefrency/serial.c228
-rw-r--r--keyboards/quefrency/serial.h26
-rw-r--r--keyboards/quefrency/split_util.c80
-rw-r--r--keyboards/quefrency/split_util.h20
-rw-r--r--keyboards/qwertyydox/config.h91
-rw-r--r--keyboards/qwertyydox/info.json16
-rw-r--r--keyboards/qwertyydox/keymaps/default/config.h43
-rw-r--r--keyboards/qwertyydox/keymaps/default/keymap.c83
-rw-r--r--keyboards/qwertyydox/keymaps/default/rules.mk1
-rw-r--r--keyboards/qwertyydox/qwertyydox.c1
-rw-r--r--keyboards/qwertyydox/qwertyydox.h24
-rw-r--r--keyboards/qwertyydox/readme.md27
-rw-r--r--keyboards/qwertyydox/rev1/config.h92
-rw-r--r--keyboards/qwertyydox/rev1/rev1.c22
-rw-r--r--keyboards/qwertyydox/rev1/rev1.h37
-rw-r--r--keyboards/qwertyydox/rev1/rules.mk1
-rw-r--r--keyboards/qwertyydox/rules.mk69
-rw-r--r--keyboards/rama/m10_b/config.h24
-rw-r--r--keyboards/rama/m10_b/keymaps/default/keymap.c18
-rw-r--r--keyboards/rama/m10_b/keymaps/knops/config.h3
-rw-r--r--keyboards/rama/m10_b/m10_b.c31
-rw-r--r--keyboards/rama/m10_b/rules.mk42
-rw-r--r--keyboards/rama/m60_a/config.h131
-rw-r--r--keyboards/rama/m60_a/info.json13
-rw-r--r--keyboards/rama/m60_a/keymaps/default/keymap.c40
-rw-r--r--keyboards/rama/m60_a/keymaps/proto/config.h5
-rw-r--r--keyboards/rama/m60_a/keymaps/proto/keymap.c40
-rw-r--r--keyboards/rama/m60_a/m60_a.c18
-rw-r--r--keyboards/rama/m60_a/m60_a.h37
-rw-r--r--keyboards/rama/m60_a/readme.md15
-rw-r--r--keyboards/rama/m60_a/rules.mk80
-rw-r--r--keyboards/rama/m6_a/config.h131
-rw-r--r--keyboards/rama/m6_a/keymaps/default/config.h24
-rw-r--r--keyboards/rama/m6_a/keymaps/default/keymap.c316
-rw-r--r--keyboards/rama/m6_a/m6_a.c31
-rw-r--r--keyboards/rama/m6_a/readme.md2
-rw-r--r--keyboards/rama/m6_a/rules.mk50
-rw-r--r--keyboards/rama/m6_b/config.h163
-rw-r--r--keyboards/rama/m6_b/info.json19
-rw-r--r--keyboards/rama/m6_b/keymaps/default/keymap.c16
-rw-r--r--keyboards/rama/m6_b/m6_b.c18
-rw-r--r--keyboards/rama/m6_b/m6_b.h28
-rw-r--r--keyboards/rama/m6_b/readme.md15
-rw-r--r--keyboards/rama/m6_b/rules.mk79
-rw-r--r--keyboards/rama/readme.md2
-rw-r--r--keyboards/rama/u80_a/config.h208
-rw-r--r--keyboards/rama/u80_a/info.json13
-rw-r--r--keyboards/rama/u80_a/keymaps/default/keymap.c37
-rw-r--r--keyboards/rama/u80_a/readme.md15
-rw-r--r--keyboards/rama/u80_a/rules.mk71
-rw-r--r--keyboards/rama/u80_a/u80_a.c17
-rw-r--r--keyboards/rama/u80_a/u80_a.h43
-rw-r--r--keyboards/redox/config.h5
-rw-r--r--keyboards/redox/info.json87
-rw-r--r--keyboards/redox/keymaps/default/config.h13
-rw-r--r--keyboards/redox/keymaps/default/keymap.c136
-rw-r--r--keyboards/redox/keymaps/finex/config.h34
-rw-r--r--keyboards/redox/keymaps/finex/keymap.c188
-rw-r--r--keyboards/redox/keymaps/finex/readme.md35
-rw-r--r--keyboards/redox/keymaps/finex/rules.mk3
-rw-r--r--keyboards/redox/keymaps/german/config.h34
-rw-r--r--keyboards/redox/keymaps/german/keymap.c96
-rw-r--r--keyboards/redox/keymaps/german/readme.md5
-rw-r--r--keyboards/redox/keymaps/german/rules.mk1
-rw-r--r--keyboards/redox/keymaps/italian/config.h13
-rw-r--r--keyboards/redox/keymaps/italian/keymap.c146
-rw-r--r--keyboards/redox/keymaps/jeherve/config.h38
-rw-r--r--keyboards/redox/keymaps/jeherve/keymap.c259
-rw-r--r--keyboards/redox/keymaps/jeherve/readme.md42
-rw-r--r--keyboards/redox/keymaps/jeherve/rules.mk3
-rw-r--r--keyboards/redox/readme.md14
-rw-r--r--keyboards/redox/redox.h22
-rw-r--r--keyboards/redox/rev1/config.h12
-rw-r--r--keyboards/redox/rev1/rev1.h74
-rw-r--r--keyboards/redox/rules.mk4
-rw-r--r--keyboards/redox_w/config.h81
-rw-r--r--keyboards/redox_w/info.json12
-rw-r--r--keyboards/redox_w/keymaps/default/keymap.c115
-rw-r--r--keyboards/redox_w/keymaps/default/readme.md1
-rw-r--r--keyboards/redox_w/keymaps/italian/keymap.c125
-rw-r--r--keyboards/redox_w/keymaps/italian/readme.md1
-rw-r--r--keyboards/redox_w/matrix.c162
-rw-r--r--keyboards/redox_w/readme.md34
-rw-r--r--keyboards/redox_w/redox_w.c42
-rw-r--r--keyboards/redox_w/redox_w.h40
-rw-r--r--keyboards/redox_w/rules.mk76
-rw-r--r--keyboards/roadkit/keymaps/default/rules.mk21
-rw-r--r--keyboards/roadkit/keymaps/flipphone/rules.mk21
-rw-r--r--keyboards/roadkit/keymaps/khord/rules.mk22
-rw-r--r--keyboards/roadkit/keymaps/mjt/rules.mk21
-rw-r--r--keyboards/roadkit/keymaps/singles/rules.mk21
-rw-r--r--keyboards/roadkit/keymaps/singlesBrent/rules.mk22
-rw-r--r--keyboards/roadkit/readme.md14
-rw-r--r--keyboards/rorschach/keymaps/insertsnideremarks/config.h23
-rw-r--r--keyboards/rorschach/keymaps/insertsnideremarks/keymap.c289
-rw-r--r--keyboards/rorschach/keymaps/insertsnideremarks/rules.mk19
-rw-r--r--keyboards/rorschach/rev1/config.h3
-rw-r--r--keyboards/rorschach/rules.mk2
-rw-r--r--keyboards/s60_x/keymaps/ansi_qwertz/rules.mk2
-rw-r--r--keyboards/s60_x/keymaps/bluebear/config.h3
-rw-r--r--keyboards/s60_x/keymaps/bluebear/rules.mk2
-rw-r--r--keyboards/s60_x/readme.md4
-rw-r--r--keyboards/s60_x/rgb/config.h5
-rw-r--r--keyboards/s65_plus/config.h3
-rw-r--r--keyboards/s65_plus/info.json92
-rw-r--r--keyboards/s65_plus/s65_plus.h4
-rw-r--r--keyboards/s65_x/config.h4
-rw-r--r--keyboards/s7_elephant/config.h47
-rw-r--r--keyboards/s7_elephant/info.json2348
-rw-r--r--keyboards/s7_elephant/keymaps/default/config.h1
-rw-r--r--keyboards/s7_elephant/keymaps/default/keymap.c64
-rw-r--r--keyboards/s7_elephant/keymaps/default/readme.md35
-rw-r--r--keyboards/s7_elephant/readme.md17
-rw-r--r--keyboards/s7_elephant/rules.mk52
-rw-r--r--keyboards/s7_elephant/s7_elephant.c1
-rw-r--r--keyboards/s7_elephant/s7_elephant.h855
-rw-r--r--keyboards/satan/info.json5
-rw-r--r--keyboards/satan/keymaps/abhixec/keymap.c76
-rw-r--r--keyboards/satan/keymaps/abhixec/readme.md19
-rw-r--r--keyboards/satan/keymaps/abhixec/rules.mk18
-rw-r--r--keyboards/satan/keymaps/addcninblue/rules.mk2
-rw-r--r--keyboards/satan/keymaps/admiralStrokers/rules.mk2
-rw-r--r--keyboards/satan/keymaps/ben_iso/rules.mk2
-rw-r--r--keyboards/satan/keymaps/chaser/rules.mk2
-rw-r--r--keyboards/satan/keymaps/colemak/rules.mk2
-rw-r--r--keyboards/satan/keymaps/default/rules.mk2
-rw-r--r--keyboards/satan/keymaps/dende_iso/keymap.c2
-rw-r--r--keyboards/satan/keymaps/dende_iso/rules.mk2
-rw-r--r--keyboards/satan/keymaps/dkrieger/rules.mk2
-rw-r--r--keyboards/satan/keymaps/hhkb_7u/keymap.c56
-rw-r--r--keyboards/satan/keymaps/hhkb_7u/readme.md9
-rw-r--r--keyboards/satan/keymaps/isoHHKB/rules.mk2
-rw-r--r--keyboards/satan/keymaps/jarred/keymap.c22
-rw-r--r--keyboards/satan/keymaps/jarred/readme.md1
-rw-r--r--keyboards/satan/keymaps/lepa/rules.mk2
-rw-r--r--keyboards/satan/keymaps/midi/rules.mk2
-rw-r--r--keyboards/satan/keymaps/olligranlund_iso/config.h17
-rw-r--r--keyboards/satan/keymaps/olligranlund_iso/keymap.c99
-rw-r--r--keyboards/satan/keymaps/olligranlund_iso/readme.md18
-rw-r--r--keyboards/satan/keymaps/olligranlund_iso/rules.mk17
-rw-r--r--keyboards/satan/keymaps/sethbc/rules.mk2
-rw-r--r--keyboards/satan/keymaps/smt/rules.mk2
-rw-r--r--keyboards/satan/keymaps/spacemanspiff/keymap.c77
-rw-r--r--keyboards/satan/keymaps/spacemanspiff/readme.md34
-rw-r--r--keyboards/satan/keymaps/unxmaal/rules.mk2
-rw-r--r--keyboards/satan/satan.h29
-rw-r--r--keyboards/scrabblepad/keymaps/random/keymap.c75
-rw-r--r--keyboards/scrabblepad/keymaps/random/readme.md5
-rw-r--r--keyboards/scrabblepad/readme.md2
-rw-r--r--keyboards/singa/readme.md34
-rw-r--r--keyboards/sixshooter/config.h128
-rw-r--r--keyboards/sixshooter/info.json13
-rw-r--r--keyboards/sixshooter/keymaps/default/keymap.c73
-rw-r--r--keyboards/sixshooter/keymaps/default/readme.md1
-rw-r--r--keyboards/sixshooter/readme.md13
-rw-r--r--keyboards/sixshooter/rules.mk64
-rw-r--r--keyboards/sixshooter/sixshooter.c38
-rw-r--r--keyboards/sixshooter/sixshooter.h44
-rw-r--r--keyboards/skog/README.md61
-rw-r--r--keyboards/skog/backlight.c211
-rw-r--r--keyboards/skog/backlight_custom.h13
-rw-r--r--keyboards/skog/breathing_custom.h140
-rw-r--r--keyboards/skog/config.h42
-rw-r--r--keyboards/skog/i2c.c106
-rw-r--r--keyboards/skog/i2c.h25
-rw-r--r--keyboards/skog/info.json12
-rw-r--r--keyboards/skog/keymaps/default/keymap.c37
-rw-r--r--keyboards/skog/matrix.c112
-rw-r--r--keyboards/skog/rules.mk55
-rw-r--r--keyboards/skog/skog.c98
-rw-r--r--keyboards/skog/skog.h39
-rw-r--r--keyboards/skog/usbconfig.h396
-rw-r--r--keyboards/snagpad/config.h56
-rw-r--r--keyboards/snagpad/info.json16
-rw-r--r--keyboards/snagpad/keymaps/default/keymap.c63
-rw-r--r--keyboards/snagpad/license201
-rw-r--r--keyboards/snagpad/readme.md21
-rw-r--r--keyboards/snagpad/rules.mk65
-rw-r--r--keyboards/snagpad/snagpad.c1
-rw-r--r--keyboards/snagpad/snagpad.h30
-rw-r--r--keyboards/sol/common/glcdfont.c244
-rw-r--r--keyboards/sol/common/knob_v2.c71
-rw-r--r--keyboards/sol/common/knob_v2.h28
-rw-r--r--keyboards/sol/common/ssd1306.c329
-rw-r--r--keyboards/sol/common/ssd1306.h92
-rw-r--r--keyboards/sol/config.h22
-rw-r--r--keyboards/sol/i2c.c162
-rw-r--r--keyboards/sol/i2c.h49
-rwxr-xr-xkeyboards/sol/keymaps/brianweyer/config.h27
-rwxr-xr-xkeyboards/sol/keymaps/brianweyer/keymap.c291
-rwxr-xr-xkeyboards/sol/keymaps/brianweyer/rules.mk46
-rw-r--r--keyboards/sol/keymaps/danielhklein/config.h25
-rw-r--r--keyboards/sol/keymaps/danielhklein/keymap.c354
-rw-r--r--keyboards/sol/keymaps/danielhklein/rules.mk50
-rw-r--r--keyboards/sol/keymaps/default/config.h25
-rw-r--r--keyboards/sol/keymaps/default/keymap.c362
-rw-r--r--keyboards/sol/keymaps/default/readme.md133
-rw-r--r--keyboards/sol/keymaps/default/rules.mk50
-rw-r--r--keyboards/sol/keymaps/kageurufu/keymap.c79
-rw-r--r--keyboards/sol/keymaps/kageurufu/rules.mk46
-rw-r--r--keyboards/sol/readme.md15
-rw-r--r--keyboards/sol/rev1/config.h155
-rw-r--r--keyboards/sol/rev1/info.json91
-rw-r--r--keyboards/sol/rev1/matrix.c304
-rw-r--r--keyboards/sol/rev1/rev1.c15
-rw-r--r--keyboards/sol/rev1/rev1.h70
-rw-r--r--keyboards/sol/rev1/rules.mk2
-rw-r--r--keyboards/sol/rev1/split_util.c54
-rw-r--r--keyboards/sol/rev1/split_util.h17
-rw-r--r--keyboards/sol/rules.mk66
-rw-r--r--keyboards/sol/serial.c288
-rw-r--r--keyboards/sol/serial.h26
-rw-r--r--keyboards/sol/sol.c1
-rw-r--r--keyboards/sol/sol.h7
-rw-r--r--keyboards/sweet16/config.h58
-rw-r--r--keyboards/sweet16/readme.md14
-rwxr-xr-xkeyboards/sx60/config.h4
-rw-r--r--keyboards/sx60/readme.md4
-rw-r--r--keyboards/tada68/keymaps/abishalom/config.h3
-rw-r--r--keyboards/tada68/keymaps/abishalom/keymap.c96
-rw-r--r--keyboards/tada68/keymaps/abishalom/readme.md6
-rw-r--r--keyboards/tada68/keymaps/abishalom/rules.mk18
-rw-r--r--keyboards/tada68/keymaps/ardakilic/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/bazooka/rules.mk2
-rwxr-xr-xkeyboards/tada68/keymaps/cheese/keymap.c107
-rwxr-xr-xkeyboards/tada68/keymaps/cheese/readme.md20
-rw-r--r--keyboards/tada68/keymaps/cheese/rules.mk17
-rw-r--r--keyboards/tada68/keymaps/default/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/dlg/config.h3
-rwxr-xr-xkeyboards/tada68/keymaps/dlg/keymap.c76
-rwxr-xr-xkeyboards/tada68/keymaps/dlg/readme.md54
-rw-r--r--keyboards/tada68/keymaps/dlg/rules.mk17
-rw-r--r--keyboards/tada68/keymaps/fakb/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/fezzant/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/iso-nor/config.h1
-rw-r--r--keyboards/tada68/keymaps/iso-nor/keymap.c51
-rw-r--r--keyboards/tada68/keymaps/iso-nor/readme.md17
-rw-r--r--keyboards/tada68/keymaps/iso-nor/rules.mk21
-rw-r--r--keyboards/tada68/keymaps/iso-uk/keymap.c8
-rw-r--r--keyboards/tada68/keymaps/iso-uk/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/isoish/rules.mk2
-rwxr-xr-xkeyboards/tada68/keymaps/laas/config.h1
-rwxr-xr-xkeyboards/tada68/keymaps/laas/keymap.c53
-rwxr-xr-xkeyboards/tada68/keymaps/laas/readme.md12
-rwxr-xr-xkeyboards/tada68/keymaps/laas/rules.mk5
-rw-r--r--keyboards/tada68/keymaps/mattdicarlo/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/mlechner/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/mtdjr/rules.mk2
-rwxr-xr-xkeyboards/tada68/keymaps/pascamel/readme.md10
-rw-r--r--keyboards/tada68/keymaps/pascamel/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/raylas/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/rbong/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/rgb/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/rys/keymap.c50
-rw-r--r--keyboards/tada68/keymaps/rys/readme.md15
-rw-r--r--keyboards/tada68/keymaps/rys/rules.mk17
-rw-r--r--keyboards/tada68/keymaps/shalzz/config.h4
-rw-r--r--keyboards/tada68/keymaps/shalzz/keymap.c53
-rw-r--r--keyboards/tada68/keymaps/shalzz/readme.md43
-rw-r--r--keyboards/tada68/keymaps/shalzz/rules.mk12
-rw-r--r--keyboards/tada68/keymaps/sm0g/config.h3
-rw-r--r--keyboards/tada68/keymaps/sm0g/keymap.c100
-rw-r--r--keyboards/tada68/keymaps/sm0g/readme.md15
-rw-r--r--keyboards/tada68/keymaps/sm0g/rules.mk18
-rw-r--r--keyboards/tada68/keymaps/stephengrier/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/trashcat/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/tshack/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/unix/rules.mk2
-rw-r--r--keyboards/tada68/keymaps/wamsm_tada/rules.mk2
-rwxr-xr-xkeyboards/tada68/readme.md8
-rwxr-xr-xkeyboards/tada68/rules.mk2
-rwxr-xr-xkeyboards/tada68/tada68.h6
-rw-r--r--keyboards/telophase/config.h85
-rw-r--r--keyboards/telophase/keymaps/default/keymap.c104
-rw-r--r--keyboards/telophase/matrix.c164
-rw-r--r--keyboards/telophase/readme.md16
-rw-r--r--keyboards/telophase/rules.mk75
-rw-r--r--keyboards/telophase/telophase.c41
-rw-r--r--keyboards/telophase/telophase.h67
-rw-r--r--keyboards/tetris/config.h13
-rw-r--r--keyboards/tetris/keymaps/default/keymap.c42
-rw-r--r--keyboards/tetris/rules.mk21
-rw-r--r--keyboards/the_ruler/config.h3
-rw-r--r--keyboards/the_ruler/keymaps/default/rules.mk2
-rw-r--r--keyboards/the_ruler/readme.md4
-rw-r--r--keyboards/the_ruler/rules.mk2
-rw-r--r--keyboards/thevankeyboards/bananasplit/README.md14
-rw-r--r--keyboards/thevankeyboards/bananasplit/bananasplit.c (renamed from keyboards/bananasplit/bananasplit.c)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/bananasplit.h (renamed from keyboards/bananasplit/bananasplit.h)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/config.h (renamed from keyboards/bananasplit/config.h)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/info.json (renamed from keyboards/bananasplit/info.json)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/0010/config.h (renamed from keyboards/bananasplit/keymaps/0010/config.h)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/0010/keymap.c (renamed from keyboards/bananasplit/keymaps/0010/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk37
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/config.h (renamed from keyboards/bananasplit/keymaps/coloneljesus/config.h)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/keymap.c (renamed from keyboards/bananasplit/keymaps/coloneljesus/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/readme.md (renamed from keyboards/bananasplit/keymaps/coloneljesus/readme.md)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk37
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/default/config.h (renamed from keyboards/bananasplit/keymaps/default/config.h)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/default/keymap.c (renamed from keyboards/bananasplit/keymaps/default/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/default/readme.md (renamed from keyboards/bananasplit/keymaps/default/readme.md)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk37
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/hhkbanana/keymap.c (renamed from keyboards/bananasplit/keymaps/hhkbanana/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_ansi/keymap.c (renamed from keyboards/bananasplit/keymaps/jockyxu1122_ansi/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_ansi/readme.md (renamed from keyboards/bananasplit/keymaps/jockyxu1122_ansi/readme.md)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_iso/keymap.c (renamed from keyboards/bananasplit/keymaps/jockyxu1122_iso/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_iso/readme.md (renamed from keyboards/bananasplit/keymaps/jockyxu1122_iso/readme.md)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/kamon/config.h (renamed from keyboards/bananasplit/keymaps/kamon/config.h)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/kamon/keymap.c (renamed from keyboards/bananasplit/keymaps/kamon/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/kamon/readme.md (renamed from keyboards/bananasplit/keymaps/kamon/readme.md)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk37
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/nic/keymap.c (renamed from keyboards/bananasplit/keymaps/nic/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/rask/README.md (renamed from keyboards/bananasplit/keymaps/rask/README.md)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/rask/keymap.c (renamed from keyboards/bananasplit/keymaps/rask/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/talljoe/config.h22
-rw-r--r--keyboards/thevankeyboards/bananasplit/keymaps/talljoe/keymap.c1
-rw-r--r--keyboards/thevankeyboards/bananasplit/rules.mk (renamed from keyboards/bananasplit/rules.mk)0
-rw-r--r--keyboards/thevankeyboards/minivan/config.h162
-rw-r--r--keyboards/thevankeyboards/minivan/info.json (renamed from keyboards/tv44/info.json)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/belak/config.h (renamed from keyboards/tv44/keymaps/belak/config.h)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/belak/keymap.c102
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/belak/readme.md (renamed from keyboards/tv44/keymaps/belak/readme.md)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/belak/rules.mk (renamed from keyboards/tv44/keymaps/belak/rules.mk)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/budi/config.h (renamed from keyboards/tv44/keymaps/budi/config.h)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c229
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/budi/readme.md17
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/core/keymap.c32
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/core/readme.md (renamed from keyboards/tv44/keymaps/core/readme.md)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/core/rules.mk (renamed from keyboards/ergo42/keymaps/default-illustrator/rules.mk)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/default/config.h (renamed from keyboards/roadkit/keymaps/default/config.h)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/default/keymap.c99
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/default/readme.md (renamed from keyboards/tv44/keymaps/default/readme.md)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/default/rules.mk21
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/jeebak/keymap.c423
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/jeebak/readme.md (renamed from keyboards/tv44/keymaps/jeebak/readme.md)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk21
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/config.h (renamed from keyboards/tv44/keymaps/jetpacktuxedo/config.h)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/keymap.c39
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/readme.md (renamed from keyboards/tv44/keymaps/jetpacktuxedo/readme.md)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/rules.mk17
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/lexworth/config.h5
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/lexworth/keymap.c29
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/lexworth/readme.md7
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/lexworth/rules.mk5
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/mjt/config.h (renamed from keyboards/tv44/keymaps/mjt/config.h)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/mjt/keymap.c197
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/mjt/readme.md (renamed from keyboards/tv44/keymaps/mjt/readme.md)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk21
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/smt/keymap.c230
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/smt/readme.md (renamed from keyboards/tv44/keymaps/smt/readme.md)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk21
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/config.h53
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/keymap.c1
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/rules.mk3
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/tong92/config.h (renamed from keyboards/tv44/keymaps/tong92/config.h)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/tong92/keymap.c203
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/tong92/readme.md (renamed from keyboards/tv44/keymaps/tong92/readme.md)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk21
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/xyverz/config.h (renamed from keyboards/roadkit/keymaps/flipphone/config.h)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/xyverz/keymap.c124
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/xyverz/readme.md (renamed from keyboards/tv44/keymaps/xyverz/readme.md)0
-rw-r--r--keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk21
-rw-r--r--keyboards/thevankeyboards/minivan/minivan.c28
-rw-r--r--keyboards/thevankeyboards/minivan/minivan.h67
-rw-r--r--keyboards/thevankeyboards/minivan/readme.md13
-rw-r--r--keyboards/thevankeyboards/minivan/rules.mk (renamed from keyboards/tv44/rules.mk)0
-rw-r--r--keyboards/thevankeyboards/readme.md3
-rw-r--r--keyboards/thevankeyboards/roadkit/config.h (renamed from keyboards/roadkit/config.h)0
-rw-r--r--keyboards/thevankeyboards/roadkit/info.json (renamed from keyboards/roadkit/info.json)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/default/config.h (renamed from keyboards/roadkit/keymaps/mjt/config.h)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c (renamed from keyboards/roadkit/keymaps/default/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/default/readme.md (renamed from keyboards/roadkit/keymaps/default/readme.md)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk21
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/flipphone/config.h (renamed from keyboards/roadkit/keymaps/singles/config.h)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/flipphone/keymap.c (renamed from keyboards/roadkit/keymaps/flipphone/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/flipphone/readme.md (renamed from keyboards/roadkit/keymaps/flipphone/readme.md)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk21
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/khord/config.h (renamed from keyboards/roadkit/keymaps/khord/config.h)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/khord/keymap.c (renamed from keyboards/roadkit/keymaps/khord/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk22
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/mjt/config.h (renamed from keyboards/tv44/keymaps/default/config.h)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/mjt/keymap.c (renamed from keyboards/roadkit/keymaps/mjt/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/mjt/readme.md (renamed from keyboards/roadkit/keymaps/mjt/readme.md)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk21
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singles/config.h (renamed from keyboards/tv44/keymaps/xyverz/config.h)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singles/keymap.c (renamed from keyboards/roadkit/keymaps/singles/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singles/readme.md (renamed from keyboards/roadkit/keymaps/singles/readme.md)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk21
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/config.h (renamed from keyboards/roadkit/keymaps/singlesBrent/config.h)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/keymap.c (renamed from keyboards/roadkit/keymaps/singlesBrent/keymap.c)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/readme.md (renamed from keyboards/roadkit/keymaps/singlesBrent/readme.md)0
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk22
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/keymap.c10
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/readme.md35
-rw-r--r--keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk17
-rw-r--r--keyboards/thevankeyboards/roadkit/readme.md13
-rw-r--r--keyboards/thevankeyboards/roadkit/roadkit.c (renamed from keyboards/roadkit/roadkit.c)0
-rw-r--r--keyboards/thevankeyboards/roadkit/roadkit.h (renamed from keyboards/roadkit/roadkit.h)0
-rw-r--r--keyboards/thevankeyboards/roadkit/rules.mk (renamed from keyboards/roadkit/rules.mk)0
-rw-r--r--keyboards/tiger_lily/keymaps/default/config.h8
-rw-r--r--keyboards/tiger_lily/keymaps/default/rules.mk21
-rw-r--r--keyboards/tiger_lily/keymaps/default_ansi/config.h8
-rw-r--r--keyboards/tiger_lily/keymaps/default_ansi/rules.mk21
-rw-r--r--keyboards/tiger_lily/matrix.c137
-rw-r--r--keyboards/tiger_lily/readme.md16
-rw-r--r--keyboards/tkc1800/keymaps/default/keymap.c10
-rw-r--r--keyboards/tkc1800/keymaps/smt/keymap.c2
-rw-r--r--keyboards/tkc1800/keymaps/wkl/keymap.c10
-rw-r--r--keyboards/toad/config.h54
-rw-r--r--keyboards/toad/info.json409
-rw-r--r--keyboards/toad/keymaps/ansi_wk/keymap.c15
-rw-r--r--keyboards/toad/keymaps/ansi_wkl/keymap.c13
-rw-r--r--keyboards/toad/keymaps/default/keymap.c13
-rw-r--r--keyboards/toad/keymaps/iso_wk/keymap.c13
-rw-r--r--keyboards/toad/keymaps/iso_wkl/keymap.c13
-rw-r--r--keyboards/toad/readme.md14
-rw-r--r--keyboards/toad/rules.mk56
-rw-r--r--keyboards/toad/toad.c18
-rw-r--r--keyboards/toad/toad.h91
-rw-r--r--keyboards/tokyo60/config.h63
-rw-r--r--keyboards/tokyo60/info.json12
-rw-r--r--keyboards/tokyo60/keymaps/default/config.h3
-rw-r--r--keyboards/tokyo60/keymaps/default/keymap.c49
-rw-r--r--keyboards/tokyo60/keymaps/swappedBottomRow/config.h3
-rw-r--r--keyboards/tokyo60/keymaps/swappedBottomRow/keymap.c47
-rw-r--r--keyboards/tokyo60/readme.md15
-rw-r--r--keyboards/tokyo60/rules.mk77
-rw-r--r--keyboards/tokyo60/tokyo60.c18
-rw-r--r--keyboards/tokyo60/tokyo60.h20
-rw-r--r--keyboards/tomato/config.h51
-rw-r--r--keyboards/tomato/keymaps/default/keymap.c158
-rw-r--r--keyboards/tomato/readme.md20
-rw-r--r--keyboards/tomato/rules.mk58
-rw-r--r--keyboards/tragicforce68/README.md18
-rw-r--r--keyboards/tragicforce68/config.h69
-rw-r--r--keyboards/tragicforce68/info.json242
-rw-r--r--keyboards/tragicforce68/keymaps/buswerks/keymap.c60
-rw-r--r--keyboards/tragicforce68/keymaps/default/keymap.c34
-rw-r--r--keyboards/tragicforce68/rules.mk26
-rw-r--r--keyboards/tragicforce68/tragicforce68.c8
-rw-r--r--keyboards/tragicforce68/tragicforce68.h74
-rw-r--r--keyboards/treasure/type9/config.h224
-rw-r--r--keyboards/treasure/type9/info.json12
-rw-r--r--keyboards/treasure/type9/keymaps/default/config.h19
-rw-r--r--keyboards/treasure/type9/keymaps/default/keymap.c64
-rw-r--r--keyboards/treasure/type9/keymaps/default/readme.md1
-rw-r--r--keyboards/treasure/type9/readme.md13
-rw-r--r--keyboards/treasure/type9/rules.mk81
-rw-r--r--keyboards/treasure/type9/type9.c43
-rw-r--r--keyboards/treasure/type9/type9.h40
-rw-r--r--keyboards/tv44/config.h162
-rw-r--r--keyboards/tv44/keymaps/belak/keymap.c105
-rw-r--r--keyboards/tv44/keymaps/budi/keymap.c196
-rw-r--r--keyboards/tv44/keymaps/budi/readme.md8
-rw-r--r--keyboards/tv44/keymaps/core/keymap.c34
-rw-r--r--keyboards/tv44/keymaps/core/rules.mk3
-rw-r--r--keyboards/tv44/keymaps/default/keymap.c101
-rw-r--r--keyboards/tv44/keymaps/default/rules.mk21
-rw-r--r--keyboards/tv44/keymaps/jeebak/keymap.c425
-rw-r--r--keyboards/tv44/keymaps/jeebak/rules.mk21
-rw-r--r--keyboards/tv44/keymaps/jetpacktuxedo/keymap.c39
-rw-r--r--keyboards/tv44/keymaps/jetpacktuxedo/rules.mk17
-rw-r--r--keyboards/tv44/keymaps/mjt/keymap.c199
-rw-r--r--keyboards/tv44/keymaps/mjt/rules.mk21
-rw-r--r--keyboards/tv44/keymaps/smt/keymap.c232
-rw-r--r--keyboards/tv44/keymaps/smt/rules.mk21
-rw-r--r--keyboards/tv44/keymaps/tong92/keymap.c136
-rw-r--r--keyboards/tv44/keymaps/tong92/rules.mk21
-rw-r--r--keyboards/tv44/keymaps/xyverz/keymap.c126
-rw-r--r--keyboards/tv44/keymaps/xyverz/rules.mk21
-rw-r--r--keyboards/tv44/readme.md14
-rw-r--r--keyboards/tv44/tv44.c28
-rw-r--r--keyboards/tv44/tv44.h67
-rw-r--r--keyboards/uk78/config.h3
-rw-r--r--keyboards/unloved_bastard/matrix.c138
-rw-r--r--keyboards/unloved_bastard/readme.md15
-rw-r--r--keyboards/ut47/config.h87
-rw-r--r--keyboards/ut47/keymaps/default/config.h24
-rw-r--r--keyboards/ut47/keymaps/default/keymap.c136
-rw-r--r--keyboards/ut47/keymaps/non-us/config.h24
-rw-r--r--keyboards/ut47/keymaps/non-us/keymap.c136
-rw-r--r--keyboards/ut47/keymaps/nordic/keymap.c179
-rw-r--r--keyboards/ut47/keymaps/rgb/config.h27
-rw-r--r--keyboards/ut47/keymaps/rgb/keymap.c88
-rw-r--r--keyboards/ut47/readme.md41
-rw-r--r--keyboards/ut47/rules.mk70
-rw-r--r--keyboards/v60_type_r/keymaps/followingghosts/config.h18
-rw-r--r--keyboards/v60_type_r/keymaps/followingghosts/keymap.c109
-rw-r--r--keyboards/v60_type_r/keymaps/followingghosts/readme.md61
-rw-r--r--keyboards/v60_type_r/keymaps/followingghosts/rules.mk4
-rw-r--r--keyboards/v60_type_r/keymaps/xtonhasvim/config.h24
-rw-r--r--keyboards/v60_type_r/keymaps/xtonhasvim/keymap.c196
-rw-r--r--keyboards/v60_type_r/keymaps/xtonhasvim/readme.md20
-rw-r--r--keyboards/v60_type_r/keymaps/xtonhasvim/rules.mk5
-rw-r--r--keyboards/v60_type_r/readme.md4
-rw-r--r--keyboards/v60_type_r/rules.mk2
-rw-r--r--keyboards/vinta/boards/GENERIC_STM32_F042X6/board.c101
-rw-r--r--keyboards/vinta/boards/GENERIC_STM32_F042X6/board.h896
-rw-r--r--keyboards/vinta/boards/GENERIC_STM32_F042X6/board.mk5
-rw-r--r--keyboards/vinta/bootloader_defs.h7
-rw-r--r--keyboards/vinta/chconf.h521
-rw-r--r--keyboards/vinta/config.h70
-rw-r--r--keyboards/vinta/halconf.h350
-rw-r--r--keyboards/vinta/info.json18
-rw-r--r--keyboards/vinta/keymaps/default/keymap.c51
-rw-r--r--keyboards/vinta/mcuconf.h168
-rw-r--r--keyboards/vinta/readme.md22
-rw-r--r--keyboards/vinta/rules.mk47
-rw-r--r--keyboards/vinta/vinta.c18
-rw-r--r--keyboards/vinta/vinta.h55
-rw-r--r--keyboards/vision_division/keymaps/default/rules.mk2
-rw-r--r--keyboards/vision_division/readme.md4
-rw-r--r--keyboards/vitamins_included/config.h12
-rw-r--r--keyboards/vitamins_included/keymaps/default/config.h7
-rw-r--r--keyboards/vitamins_included/keymaps/default/keymap.c12
-rw-r--r--keyboards/vitamins_included/keymaps/default/rules.mk4
-rw-r--r--keyboards/vitamins_included/rev1/config.h4
-rw-r--r--keyboards/vitamins_included/rules.mk9
-rw-r--r--keyboards/viterbi/keymaps/drashna/config.h12
-rw-r--r--keyboards/viterbi/keymaps/drashna/keymap.c17
-rw-r--r--keyboards/viterbi/rev1/config.h4
-rw-r--r--keyboards/viterbi/rev1/rev1.h2
-rw-r--r--keyboards/viterbi/rev1/rules.mk4
-rw-r--r--keyboards/viterbi/rules.mk8
-rw-r--r--keyboards/viterbi/viterbi.h2
-rw-r--r--keyboards/wavelet/config.h63
-rw-r--r--keyboards/wavelet/info.json17
-rw-r--r--keyboards/wavelet/keymaps/default/keymap.c212
-rw-r--r--keyboards/wavelet/keymaps/default/rules.mk2
-rw-r--r--keyboards/wavelet/readme.md20
-rw-r--r--keyboards/wavelet/rules.mk30
-rw-r--r--keyboards/wavelet/wavelet.c29
-rw-r--r--keyboards/wavelet/wavelet.h37
-rw-r--r--keyboards/westfoxtrot/cyclops/config.h212
-rw-r--r--keyboards/westfoxtrot/cyclops/cyclops.c43
-rw-r--r--keyboards/westfoxtrot/cyclops/cyclops.h43
-rw-r--r--keyboards/westfoxtrot/cyclops/info.json12
-rw-r--r--keyboards/westfoxtrot/cyclops/keymaps/default/config.h19
-rw-r--r--keyboards/westfoxtrot/cyclops/keymaps/default/keymap.c53
-rw-r--r--keyboards/westfoxtrot/cyclops/keymaps/default/readme.md1
-rw-r--r--keyboards/westfoxtrot/cyclops/readme.md15
-rw-r--r--keyboards/westfoxtrot/cyclops/rules.mk80
-rw-r--r--keyboards/whitefox/board_is31fl3731c.h2
-rw-r--r--keyboards/whitefox/config.h2
-rw-r--r--keyboards/whitefox/keymaps/billypython/config.h17
-rw-r--r--keyboards/whitefox/keymaps/billypython/keymap.c157
-rw-r--r--keyboards/whitefox/keymaps/billypython/rules.mk15
-rw-r--r--keyboards/whitefox/keymaps/constexpr/config.h14
-rw-r--r--keyboards/whitefox/keymaps/constexpr/keymap.c142
-rw-r--r--keyboards/whitefox/keymaps/constexpr/rules.mk4
-rw-r--r--keyboards/whitefox/keymaps/konstantin/config.h27
-rw-r--r--keyboards/whitefox/keymaps/konstantin/keymap.c198
-rw-r--r--keyboards/whitefox/keymaps/konstantin/rules.mk13
-rw-r--r--keyboards/wilba_tech/wt60_a/config.h208
-rw-r--r--keyboards/wilba_tech/wt60_a/info.json16
-rw-r--r--keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c38
-rw-r--r--keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c38
-rw-r--r--keyboards/wilba_tech/wt60_a/readme.md15
-rw-r--r--keyboards/wilba_tech/wt60_a/rules.mk71
-rw-r--r--keyboards/wilba_tech/wt60_a/wt60_a.c17
-rw-r--r--keyboards/wilba_tech/wt60_a/wt60_a.h52
-rw-r--r--keyboards/wilba_tech/wt65_a/config.h208
-rw-r--r--keyboards/wilba_tech/wt65_a/info.json13
-rw-r--r--keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c37
-rw-r--r--keyboards/wilba_tech/wt65_a/readme.md15
-rw-r--r--keyboards/wilba_tech/wt65_a/rules.mk71
-rw-r--r--keyboards/wilba_tech/wt65_a/wt65_a.c17
-rw-r--r--keyboards/wilba_tech/wt65_a/wt65_a.h41
-rw-r--r--keyboards/wilba_tech/wt80_a/config.h208
-rw-r--r--keyboards/wilba_tech/wt80_a/info.json13
-rw-r--r--keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c38
-rw-r--r--keyboards/wilba_tech/wt80_a/readme.md15
-rw-r--r--keyboards/wilba_tech/wt80_a/rules.mk71
-rw-r--r--keyboards/wilba_tech/wt80_a/wt80_a.c17
-rw-r--r--keyboards/wilba_tech/wt80_a/wt80_a.h58
-rw-r--r--keyboards/wilba_tech/wt8_a/config.h115
-rw-r--r--keyboards/wilba_tech/wt8_a/info.json13
-rw-r--r--keyboards/wilba_tech/wt8_a/keymaps/default/keymap.c16
-rw-r--r--keyboards/wilba_tech/wt8_a/readme.md15
-rw-r--r--keyboards/wilba_tech/wt8_a/rules.mk68
-rw-r--r--keyboards/wilba_tech/wt8_a/wt8_a.c17
-rw-r--r--keyboards/wilba_tech/wt8_a/wt8_a.h27
-rw-r--r--keyboards/wilba_tech/wt_main.c282
-rw-r--r--keyboards/wilba_tech/wt_mono_backlight.c116
-rw-r--r--keyboards/wilba_tech/wt_mono_backlight.h33
-rw-r--r--keyboards/xd60/keymaps/crd_ansi/README.md52
-rw-r--r--keyboards/xd60/keymaps/crd_ansi/keymap.c30
-rw-r--r--keyboards/xd60/keymaps/edulpn64/keymap.c46
-rw-r--r--keyboards/xd60/keymaps/edulpn64/readme.md9
-rw-r--r--keyboards/xd60/keymaps/kmontag42/rules.mk1
-rw-r--r--keyboards/xd60/readme.md4
-rw-r--r--keyboards/xd60/rules.mk2
-rw-r--r--keyboards/xd75/keymaps/billypython/config.h17
-rw-r--r--keyboards/xd75/keymaps/billypython/keymap.c119
-rw-r--r--keyboards/xd75/keymaps/billypython/rules.mk15
-rw-r--r--keyboards/xd75/keymaps/boy_314/config.h1
-rw-r--r--keyboards/xd75/keymaps/boy_314/keymap.c165
-rw-r--r--keyboards/xd75/keymaps/boy_314/readme.md8
-rw-r--r--keyboards/xd75/keymaps/boy_314/rules.mk0
-rw-r--r--keyboards/xd75/keymaps/bramver/README.md43
-rw-r--r--keyboards/xd75/keymaps/bramver/config.h25
-rw-r--r--keyboards/xd75/keymaps/bramver/keymap.c115
-rw-r--r--keyboards/xd75/keymaps/bramver/rules.mk7
-rw-r--r--keyboards/xd75/keymaps/daniel/keymap.c29
-rw-r--r--keyboards/xd75/keymaps/daniel/readme.md1
-rw-r--r--keyboards/xd75/keymaps/davidrambo/config.h3
-rw-r--r--keyboards/xd75/keymaps/default/readme.md2
-rw-r--r--keyboards/xd75/keymaps/fabian/rules.mk2
-rw-r--r--keyboards/xd75/keymaps/germanized/config.h4
-rw-r--r--keyboards/xd75/keymaps/germanized/rules.mk2
-rw-r--r--keyboards/xd75/keymaps/jarred/keymap.c37
-rw-r--r--keyboards/xd75/keymaps/jarred/readme.md1
-rw-r--r--keyboards/xd75/keymaps/kim-kim/keymap.c2
-rw-r--r--keyboards/xd75/keymaps/revok75/config.h20
-rw-r--r--keyboards/xd75/keymaps/revok75/keymap.c90
-rw-r--r--keyboards/xd75/keymaps/revok75/readme.md1
-rw-r--r--keyboards/xd75/keymaps/revok75/rules.mk18
-rw-r--r--keyboards/xd75/keymaps/skewwhiffy/config.h24
-rw-r--r--keyboards/xd75/keymaps/skewwhiffy/keymap.c281
-rw-r--r--keyboards/xd75/keymaps/tdl-jturner/config.h1
-rw-r--r--keyboards/xd75/rules.mk2
-rw-r--r--keyboards/xd87/config.h227
-rw-r--r--keyboards/xd87/info.json291
-rw-r--r--keyboards/xd87/keymaps/default/config.h19
-rw-r--r--keyboards/xd87/keymaps/default/keymap.c68
-rw-r--r--keyboards/xd87/keymaps/default/readme.md1
-rw-r--r--keyboards/xd87/readme.md26
-rw-r--r--keyboards/xd87/rules.mk84
-rw-r--r--keyboards/xd87/xd87.c43
-rw-r--r--keyboards/xd87/xd87.h70
-rw-r--r--keyboards/xmmx/config.h6
-rw-r--r--keyboards/xmmx/info.json475
-rw-r--r--keyboards/xmmx/keymaps/ansi_wk/keymap.c14
-rw-r--r--keyboards/xmmx/keymaps/ansi_wkl/keymap.c14
-rw-r--r--keyboards/xmmx/keymaps/default/keymap.c24
-rw-r--r--keyboards/xmmx/keymaps/iso_wk/keymap.c14
-rw-r--r--keyboards/xmmx/keymaps/iso_wkl/keymap.c14
-rw-r--r--keyboards/xmmx/keymaps/toad/keymap.c30
-rw-r--r--keyboards/xmmx/keymaps/toad_ansi_wk/keymap.c30
-rw-r--r--keyboards/xmmx/keymaps/toad_ansi_wkl/keymap.c30
-rw-r--r--keyboards/xmmx/keymaps/toad_iso_wk/keymap.c30
-rw-r--r--keyboards/xmmx/keymaps/toad_iso_wkl/keymap.c30
-rw-r--r--keyboards/xmmx/keymaps/xmmx_ansi_wk/keymap.c30
-rw-r--r--keyboards/xmmx/keymaps/xmmx_ansi_wkl/keymap.c30
-rw-r--r--keyboards/xmmx/keymaps/xmmx_iso_wk/keymap.c30
-rw-r--r--keyboards/xmmx/keymaps/xmmx_iso_wkl/keymap.c30
-rw-r--r--keyboards/xmmx/readme.md18
-rw-r--r--keyboards/xmmx/xmmx.c17
-rw-r--r--keyboards/xmmx/xmmx.h100
-rw-r--r--keyboards/yd68/config.h224
-rw-r--r--keyboards/yd68/info.json13
-rw-r--r--keyboards/yd68/keymaps/default/config.h19
-rw-r--r--keyboards/yd68/keymaps/default/keymap.c65
-rw-r--r--keyboards/yd68/keymaps/default/readme.md1
-rw-r--r--keyboards/yd68/readme.md15
-rw-r--r--keyboards/yd68/rules.mk81
-rw-r--r--keyboards/yd68/yd68.c73
-rw-r--r--keyboards/yd68/yd68.h62
-rw-r--r--keyboards/ymd96/README.md14
-rw-r--r--keyboards/ymd96/config.h1
-rw-r--r--keyboards/ymd96/keymaps/AnthonyWharton/README.md16
-rw-r--r--keyboards/ymd96/keymaps/AnthonyWharton/config.h63
-rw-r--r--keyboards/ymd96/keymaps/AnthonyWharton/keymap.c47
-rw-r--r--keyboards/ymd96/keymaps/hgoel89/config.h1
-rw-r--r--keyboards/ymd96/matrix.c12
-rw-r--r--keyboards/ymd96/rules.mk2
-rw-r--r--keyboards/ymd96/usbconfig.h8
-rw-r--r--keyboards/ymd96/ymd96.h17
-rw-r--r--keyboards/ymdk_np21/keymaps/default/keymap.c7
-rw-r--r--keyboards/ymdk_np21/matrix.c11
-rw-r--r--keyboards/ymdk_np21/ymdk_np21.c6
-rw-r--r--keyboards/ymdk_np21/ymdk_np21.h4
-rw-r--r--keyboards/z150_blackheart/config.h48
-rw-r--r--keyboards/z150_blackheart/keymaps/default/keymap.c69
-rw-r--r--keyboards/z150_blackheart/readme.md14
-rw-r--r--keyboards/z150_blackheart/rules.mk58
-rw-r--r--keyboards/z150_blackheart/z150_blackheart.c1
-rw-r--r--keyboards/z150_blackheart/z150_blackheart.h34
-rw-r--r--keyboards/zeal60/config.h129
-rw-r--r--keyboards/zeal60/info.json25
-rw-r--r--keyboards/zeal60/keymaps/ansi_split_bs_rshift/config.h21
-rw-r--r--keyboards/zeal60/keymaps/ansi_split_bs_rshift/keymap.c38
-rw-r--r--keyboards/zeal60/keymaps/crd/config.h29
-rw-r--r--keyboards/zeal60/keymaps/crd/keymap.c39
-rw-r--r--keyboards/zeal60/keymaps/default/config.h20
-rw-r--r--keyboards/zeal60/keymaps/default/keymap.c38
-rw-r--r--keyboards/zeal60/keymaps/hhkb/config.h20
-rw-r--r--keyboards/zeal60/keymaps/hhkb/keymap.c38
-rw-r--r--keyboards/zeal60/keymaps/iso/config.h20
-rw-r--r--keyboards/zeal60/keymaps/iso/keymap.c38
-rw-r--r--keyboards/zeal60/keymaps/ryanmaclean/config.h21
-rw-r--r--keyboards/zeal60/keymaps/ryanmaclean/keymap.c84
-rw-r--r--keyboards/zeal60/keymaps/tusing/Makefile6
-rw-r--r--keyboards/zeal60/keymaps/tusing/README.md80
-rw-r--r--keyboards/zeal60/keymaps/tusing/config.h36
-rw-r--r--keyboards/zeal60/keymaps/tusing/keymap.c49
-rw-r--r--keyboards/zeal60/readme.md47
-rw-r--r--keyboards/zeal60/rgb_backlight.c1689
-rw-r--r--keyboards/zeal60/rgb_backlight.h110
-rw-r--r--keyboards/zeal60/rgb_backlight_api.h43
-rw-r--r--keyboards/zeal60/rgb_backlight_keycodes.h34
-rw-r--r--keyboards/zeal60/rules.mk79
-rw-r--r--keyboards/zeal60/zeal60.c377
-rw-r--r--keyboards/zeal60/zeal60.h93
-rw-r--r--keyboards/zeal60/zeal60_api.h48
-rw-r--r--keyboards/zeal60/zeal60_keycodes.h58
-rw-r--r--keyboards/zeal65/config.h129
-rw-r--r--keyboards/zeal65/info.json16
-rw-r--r--keyboards/zeal65/keymaps/default/config.h5
-rw-r--r--keyboards/zeal65/keymaps/default/keymap.c38
-rw-r--r--keyboards/zeal65/keymaps/split_bs/config.h5
-rw-r--r--keyboards/zeal65/keymaps/split_bs/keymap.c38
-rw-r--r--keyboards/zeal65/readme.md16
-rw-r--r--keyboards/zeal65/rules.mk78
-rw-r--r--keyboards/zeal65/zeal65.c18
-rw-r--r--keyboards/zeal65/zeal65.h50
-rw-r--r--keyboards/zen/info.json12
-rw-r--r--keyboards/zen/keymaps/333fred/keymap.c35
-rw-r--r--keyboards/zen/keymaps/default/keymap.c84
-rw-r--r--keyboards/zen/keymaps/jwlawrence/keymap.c84
-rw-r--r--keyboards/zen/keymaps/kageurufu/keymap.c62
-rw-r--r--keyboards/zen/keymaps/xyverz/keymap.c114
-rw-r--r--keyboards/zen/readme.md24
-rw-r--r--keyboards/zen/rev1/config.h4
-rw-r--r--keyboards/zen/rev1/rev1.h2
-rw-r--r--keyboards/zen/rules.mk2
-rw-r--r--keyboards/zen/zen.h18
-rw-r--r--keyboards/zinc/config.h50
-rw-r--r--keyboards/zinc/i2c.c162
-rw-r--r--keyboards/zinc/i2c.h49
-rw-r--r--keyboards/zinc/info.json13
-rw-r--r--keyboards/zinc/keymaps/default/config.h38
-rw-r--r--keyboards/zinc/keymaps/default/keymap.c306
-rw-r--r--keyboards/zinc/keymaps/default/readme_jp.md123
-rw-r--r--keyboards/zinc/keymaps/default/rules.mk98
-rw-r--r--keyboards/zinc/keymaps/ginjake/config.h38
-rw-r--r--keyboards/zinc/keymaps/ginjake/keymap.c368
-rw-r--r--keyboards/zinc/keymaps/ginjake/readme_jp.md123
-rw-r--r--keyboards/zinc/keymaps/ginjake/rules.mk98
-rw-r--r--keyboards/zinc/keymaps/monks/config.h38
-rw-r--r--keyboards/zinc/keymaps/monks/keymap.c255
-rw-r--r--keyboards/zinc/keymaps/monks/readme_jp.md103
-rw-r--r--keyboards/zinc/keymaps/monks/rules.mk100
-rw-r--r--keyboards/zinc/readme.md17
-rw-r--r--keyboards/zinc/rev1/config.h149
-rw-r--r--keyboards/zinc/rev1/info.json13
-rw-r--r--keyboards/zinc/rev1/matrix.c356
-rw-r--r--keyboards/zinc/rev1/rev1.c6
-rw-r--r--keyboards/zinc/rev1/rev1.h44
-rw-r--r--keyboards/zinc/rev1/rules.mk4
-rw-r--r--keyboards/zinc/rev1/serial_config.h18
-rw-r--r--keyboards/zinc/rev1/serial_config_simpleapi.h8
-rw-r--r--keyboards/zinc/rev1/split_scomm.c95
-rw-r--r--keyboards/zinc/rev1/split_scomm.h24
-rw-r--r--keyboards/zinc/rev1/split_util.c70
-rw-r--r--keyboards/zinc/rev1/split_util.h19
-rw-r--r--keyboards/zinc/reva/config.h143
-rw-r--r--keyboards/zinc/reva/info.json13
-rw-r--r--keyboards/zinc/reva/matrix.c356
-rw-r--r--keyboards/zinc/reva/reva.c6
-rw-r--r--keyboards/zinc/reva/reva.h44
-rw-r--r--keyboards/zinc/reva/rules.mk4
-rw-r--r--keyboards/zinc/reva/serial_config.h18
-rw-r--r--keyboards/zinc/reva/serial_config_simpleapi.h8
-rw-r--r--keyboards/zinc/reva/split_scomm.c95
-rw-r--r--keyboards/zinc/reva/split_scomm.h24
-rw-r--r--keyboards/zinc/reva/split_util.c70
-rw-r--r--keyboards/zinc/reva/split_util.h19
-rw-r--r--keyboards/zinc/rules.mk72
-rw-r--r--keyboards/zinc/serial.c590
-rw-r--r--keyboards/zinc/serial.h84
-rw-r--r--keyboards/zinc/zinc.c1
-rw-r--r--keyboards/zinc/zinc.h14
-rwxr-xr-xkeyboards/zlant/config.h3
-rw-r--r--keyboards/zlant/info.json17
-rwxr-xr-xkeyboards/zlant/keymaps/default/keymap.c22
-rw-r--r--keyboards/zlant/readme.md6
-rwxr-xr-xkeyboards/zlant/rules.mk2
-rwxr-xr-xkeyboards/zlant/zlant.h44
3418 files changed, 153638 insertions, 33614 deletions
diff --git a/keyboards/1up60rgb/config.h b/keyboards/1up60rgb/config.h
deleted file mode 100644
index bfdf354af..000000000
--- a/keyboards/1up60rgb/config.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER 1upkeyboards
-#define PRODUCT 1UP RGB Underglow PCB
-#define DESCRIPTION 60% keyboard with RGB underglow
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 15
-
-/* key matrix pins */
-#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
-#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3, F4 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* number of backlight levels */
-#define BACKLIGHT_PIN B6
-#ifdef BACKLIGHT_PIN
-#define BACKLIGHT_LEVELS 5
-#endif
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-#define RGB_DI_PIN E2
-#ifdef RGB_DI_PIN
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 16
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#endif
-
-#endif
diff --git a/keyboards/1up60rgb/readme.md b/keyboards/1up60rgb/readme.md
deleted file mode 100644
index a16ab7ea8..000000000
--- a/keyboards/1up60rgb/readme.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# 1upkeyboards 60% RGB
-
-Firmware for custom keyboard PCB with 60% key layout.
-
-Keyboard Maintainer: [rempired](https://github.com/rempired)
-Hardware Supported: 1upkeyboards 60% RGB
-Hardware Availability: [1upkeyboards](https://www.1upkeyboards.com/shop/controllers/1up-rgb-underglow-pcb/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make 1up60rgb:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/1upkeyboards/1up60hse/1up60hse.c b/keyboards/1upkeyboards/1up60hse/1up60hse.c
new file mode 100644
index 000000000..c04018d62
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60hse/1up60hse.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "1up60hse.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/1upkeyboards/1up60hse/1up60hse.h b/keyboards/1upkeyboards/1up60hse/1up60hse.h
new file mode 100644
index 000000000..d24bbaabf
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60hse/1up60hse.h
@@ -0,0 +1,39 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef KB_H
+#define KB_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguments representing the physical
+// layout of the board and position of the keys
+// The second converts the arguments into a two-dimensional array which
+// represents the switch matrix.
+#define LAYOUT_60_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3D, \
+ K40, K41, K42, K45, K49, K4A, K4B, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, KC_NO, KC_NO, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, KC_NO, K4D } \
+}
+#endif
diff --git a/keyboards/1upkeyboards/1up60hse/config.h b/keyboards/1upkeyboards/1up60hse/config.h
new file mode 100644
index 000000000..c3682de43
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60hse/config.h
@@ -0,0 +1,224 @@
+/*
+Copyright 2018 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER 1upkeyboards
+#define PRODUCT 1up60hse
+#define DESCRIPTION A custom 60% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B3, B2, B1, B0, D4 }
+#define MATRIX_COL_PINS { C7, F7, F6, F5, F4, F1, E6, D1, D0, D2, D3, D5, D6, D7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
+
+#define RGB_DI_PIN F0
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/1upkeyboards/1up60hse/info.json b/keyboards/1upkeyboards/1up60hse/info.json
new file mode 100644
index 000000000..831614bc6
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60hse/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "1up60hse",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/1upkeyboards/1up60hse/keymaps/default/config.h b/keyboards/1upkeyboards/1up60hse/keymaps/default/config.h
new file mode 100644
index 000000000..99a700560
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60hse/keymaps/default/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2018 MechMerlin
+ * Copyright 2018 Logan Huskins
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/1upkeyboards/1up60hse/keymaps/default/keymap.c b/keyboards/1upkeyboards/1up60hse/keymaps/default/keymap.c
new file mode 100644
index 000000000..48350a53e
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60hse/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 MechMerlin
+ * Copyright 2018 Logan Huskins
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_LCTL
+ ),
+
+ [1] = LAYOUT_60_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT_60_ansi(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET,
+ BL_TOGG, BL_INC, BL_DEC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+};
diff --git a/keyboards/1upkeyboards/1up60hse/keymaps/default/readme.md b/keyboards/1upkeyboards/1up60hse/keymaps/default/readme.md
new file mode 100644
index 000000000..a7041f37b
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60hse/keymaps/default/readme.md
@@ -0,0 +1,4 @@
+# 1up60hse default keymap generated by QMK Configurator
+
+This is the keymap used by [QMK Configurator](https://config.qmk.fm/#/1upkeyboards/1up60hse/LAYOUT_60_ansi) as default.
+
diff --git a/keyboards/1upkeyboards/1up60hse/readme.md b/keyboards/1upkeyboards/1up60hse/readme.md
new file mode 100644
index 000000000..2865768b6
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60hse/readme.md
@@ -0,0 +1,15 @@
+# 1up60hse (hot swap edition)
+
+![1up60hse](https://i2.wp.com/www.1upkeyboards.com/wp-content/uploads/2018/08/PCB-1up-60-hotswap-group-RGB.jpg?fit=1280%2C1280&ssl=1)
+
+A 60% PCB with USB C, RGB underglow, backlighting, hotswappable switches, and a standard ANSI layout.
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: 1up60hse 60% PCB.
+Hardware Availability: [1upkeyboards.com](https://www.1upkeyboards.com/shop/controllers/1up-rgb-pcb-hse/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 1upkeyboards/1up60hse: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/1upkeyboards/1up60hse/rules.mk b/keyboards/1upkeyboards/1up60hse/rules.mk
new file mode 100644
index 000000000..f33e33fd9
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60hse/rules.mk
@@ -0,0 +1,72 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+
+LAYOUTS = 60_ansi
diff --git a/keyboards/1up60rgb/1up60rgb.c b/keyboards/1upkeyboards/1up60rgb/1up60rgb.c
index 4ba631c79..4ba631c79 100644
--- a/keyboards/1up60rgb/1up60rgb.c
+++ b/keyboards/1upkeyboards/1up60rgb/1up60rgb.c
diff --git a/keyboards/1up60rgb/1up60rgb.h b/keyboards/1upkeyboards/1up60rgb/1up60rgb.h
index 6905fd220..6905fd220 100644
--- a/keyboards/1up60rgb/1up60rgb.h
+++ b/keyboards/1upkeyboards/1up60rgb/1up60rgb.h
diff --git a/keyboards/1upkeyboards/1up60rgb/config.h b/keyboards/1upkeyboards/1up60rgb/config.h
new file mode 100644
index 000000000..ee49211b4
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60rgb/config.h
@@ -0,0 +1,55 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER 1upkeyboards
+#define PRODUCT 1UP RGB Underglow PCB
+#define DESCRIPTION 60% keyboard with RGB underglow
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3, F4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 5
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 16
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+#endif
diff --git a/keyboards/1up60rgb/info.json b/keyboards/1upkeyboards/1up60rgb/info.json
index 67f94b7fe..67f94b7fe 100644
--- a/keyboards/1up60rgb/info.json
+++ b/keyboards/1upkeyboards/1up60rgb/info.json
diff --git a/keyboards/1up60rgb/keymaps/default/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/default/keymap.c
index cb372e15d..cb372e15d 100644
--- a/keyboards/1up60rgb/keymaps/default/keymap.c
+++ b/keyboards/1upkeyboards/1up60rgb/keymaps/default/keymap.c
diff --git a/keyboards/1up60rgb/keymaps/iso/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/iso/keymap.c
index 42fcb6cf9..42fcb6cf9 100644
--- a/keyboards/1up60rgb/keymaps/iso/keymap.c
+++ b/keyboards/1upkeyboards/1up60rgb/keymaps/iso/keymap.c
diff --git a/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/keymap.c
new file mode 100644
index 000000000..c166cd0b1
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/keymap.c
@@ -0,0 +1,130 @@
+//****************************************************************************//
+// raffle's keymap for the 1up60rgb. //
+// emulates my pok3r layout and adds RGB control + firmware reset/debug //
+// layers //
+//****************************************************************************//
+
+//************************ dependencies + definitions ************************//
+#include QMK_KEYBOARD_H
+
+// create names for layers
+enum layers {
+ _typing,
+ _raise,
+ _rgb,
+ _adjust
+};
+
+// define layer mods
+#define RAISE MO(_raise)
+#define RGB MO(_rgb)
+
+// define mod masks for making multi-key macros
+#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL) | MOD_BIT(KC_RCTRL))
+#define MODS_ALT_MASK (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT))
+
+//********************************** Layers **********************************//
+// define layers
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // typing layer to handle basic typing
+ [_typing] = LAYOUT_all
+ (
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT,
+ KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT,
+ RAISE, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, RGB, KC_RCTL
+ ),
+ // raise layer to handle function & nav keys
+ [_raise] = LAYOUT_all
+ (
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_LSCR, KC_PAUSE, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ // rgb layer for pretty backlight colors
+ [_rgb] = LAYOUT_all
+ (
+ RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, RGB_M_T, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_HUI, RGB_VAI, RGB_HUD, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_MOD, RGB_SAI, RGB_VAD,RGB_SAD, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_RMOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+ // adjust to handle firmware debug + reset mode
+ [_adjust] = LAYOUT_all
+ (
+ RESET, DEBUG, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ )
+};
+
+//***************************** Function bodies *****************************//
+// enable tri-layer state for _raise + _rgb = _adjust
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _raise, _rgb, _adjust);
+}
+
+
+// scan matrix
+void matrix_scan_user(void) {
+}
+
+// support for standard mod state keys (caps lock, scroll lock, etc.)
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 2); PORTB &= ~(1 << 2);
+ } else {
+ DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
+
+//*********** Empty fxns from default map that I'm not modifying ***********//
+// onboard macro support
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ ;
+
+ switch (id) {
+
+ }
+ return MACRO_NONE;
+}
+
+// initialize matrix
+void matrix_init_user(void) {
+}
+
+
+
diff --git a/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/readme.md b/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/readme.md
new file mode 100644
index 000000000..c462c206a
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60rgb/keymaps/raffle/readme.md
@@ -0,0 +1,43 @@
+## raffle's keymap
+The default keymap is just enough to get started. This keymap adds a pok3r-like
+raise layer, backlight RGB control layer, and firmware reset/debug adjust layer
+for ANSI layouts.
+
+In the default layer, the following modifications are made (using standard ANSI
+keys for LHS):
+
+- `CAPS` = `LCTRL`
+- `LCTRL` = `RAISE`
+- `APP` = `RGB`
+- `LCTRL` + `APP` (`RAISE` + `RGB`) = `ADJUST`
+- `GRV` = `ESC`
+
+Additionally, the pok3r's `SHIFT` + `ESC` for `~` is maintained (with either `SHIFT`).
+
+### Raise Layer
+Emulates standard pok3r layout (without the onboard macro keys)
+
+Highlights:
+
+- `IJKL` for arrow keys
+- `H`/`N` for `HOME`/`END`
+- `U`/`P` for `PGUP`/`PGDN`
+- `1` - `=` for `F1` - `F12`
+- `Y` for calculator
+
+Other standard keys from the pok3r layout are carried over. See the keymap or
+the pok3r documentation for details.
+
+### RGB Layer
+Uses navigation keys from `RAISE` layer for RGB adjustment
+
+- `I`/`K` for Value (brightness) Increase/Decrease
+- `U`/`P` for Hue (color) Increase/Decrease
+- `H`/`N` for Saturation Incrase/Decrease
+- `GRV` to toggle RGB on/off
+- `1`-`9` to activate QMK's predefined RGB animations
+
+### Adjust Layer
+
+- `GRV` activates firmware reset for flashing
+- `1` enters debug mode
diff --git a/keyboards/1up60rgb/keymaps/tsangan/keymap.c b/keyboards/1upkeyboards/1up60rgb/keymaps/tsangan/keymap.c
index 485010eef..485010eef 100644
--- a/keyboards/1up60rgb/keymaps/tsangan/keymap.c
+++ b/keyboards/1upkeyboards/1up60rgb/keymaps/tsangan/keymap.c
diff --git a/keyboards/1upkeyboards/1up60rgb/readme.md b/keyboards/1upkeyboards/1up60rgb/readme.md
new file mode 100644
index 000000000..de3ad98b7
--- /dev/null
+++ b/keyboards/1upkeyboards/1up60rgb/readme.md
@@ -0,0 +1,13 @@
+# 1upkeyboards 60% RGB
+
+Firmware for custom keyboard PCB with 60% key layout.
+
+Keyboard Maintainer: [rempired](https://github.com/rempired)
+Hardware Supported: 1upkeyboards 60% RGB
+Hardware Availability: [1upkeyboards](https://www.1upkeyboards.com/shop/controllers/1up-rgb-underglow-pcb/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 1upkeyboards/1up60rgb: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/1up60rgb/rules.mk b/keyboards/1upkeyboards/1up60rgb/rules.mk
index 540e4ea96..540e4ea96 100644
--- a/keyboards/1up60rgb/rules.mk
+++ b/keyboards/1upkeyboards/1up60rgb/rules.mk
diff --git a/keyboards/1upkeyboards/readme.md b/keyboards/1upkeyboards/readme.md
new file mode 100644
index 000000000..4f075d827
--- /dev/null
+++ b/keyboards/1upkeyboards/readme.md
@@ -0,0 +1,5 @@
+# 1UP Keyboards
+
+Website: [1UP Keyboards](https://www.1upkeyboards.com/)
+Discord: [Server Invite](https://discordapp.com/invite/c6SYn8)
+YouTube: [skiwithpete](https://www.youtube.com/user/skiwithpete) \ No newline at end of file
diff --git a/keyboards/1upkeyboards/sweet16/config.h b/keyboards/1upkeyboards/sweet16/config.h
new file mode 100644
index 000000000..20d99651d
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/config.h
@@ -0,0 +1,55 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x2010
+#define DEVICE_VER 0x0001
+#define MANUFACTURER 1up Keyboards
+#define PRODUCT Sweet16
+#define DESCRIPTION 4x4 grid
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 4
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { D1, D0, D4, C6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define RGB_DI_PIN B1
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 1
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+#endif
diff --git a/keyboards/sweet16/info.json b/keyboards/1upkeyboards/sweet16/info.json
index 445a5909e..445a5909e 100644
--- a/keyboards/sweet16/info.json
+++ b/keyboards/1upkeyboards/sweet16/info.json
diff --git a/keyboards/sweet16/keymaps/default/keymap.c b/keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c
index 2ddf8acb4..2ddf8acb4 100644
--- a/keyboards/sweet16/keymaps/default/keymap.c
+++ b/keyboards/1upkeyboards/sweet16/keymaps/default/keymap.c
diff --git a/keyboards/sweet16/keymaps/dlaroe/keymap.c b/keyboards/1upkeyboards/sweet16/keymaps/dlaroe/keymap.c
index b42c34edb..b42c34edb 100644
--- a/keyboards/sweet16/keymaps/dlaroe/keymap.c
+++ b/keyboards/1upkeyboards/sweet16/keymaps/dlaroe/keymap.c
diff --git a/keyboards/sweet16/keymaps/dlaroe/readme.md b/keyboards/1upkeyboards/sweet16/keymaps/dlaroe/readme.md
index aabcf82c6..aabcf82c6 100644
--- a/keyboards/sweet16/keymaps/dlaroe/readme.md
+++ b/keyboards/1upkeyboards/sweet16/keymaps/dlaroe/readme.md
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/config.h b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/config.h
new file mode 100644
index 000000000..c83544007
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/config.h
@@ -0,0 +1,15 @@
+#pragma once
+
+/* tap dance stuff*/
+#undef TAPPING_TERM
+#define TAPPING_TERM 500
+
+#define TAPPING_TOGGLE 2
+
+#define EXAMPLESTRING1 "tapdance_1"
+#define EXAMPLESTRING2 "tapdance_2"
+#define EXAMPLESTRING3 "tapdance_3"
+#define EXAMPLESTRING4 "tapdance_4"
+
+#undef RGBLED_NUM
+#define RGBLED_NUM 16 \ No newline at end of file
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c
new file mode 100644
index 000000000..ad9786ba7
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/keymap.c
@@ -0,0 +1,215 @@
+/*
+tap danc eis turned on in the rules now...
+*/
+#include QMK_KEYBOARD_H
+
+#define _EMOJI 0
+#define _TAPLAND 1
+#define _LEDCNTL 2
+
+enum custom_keycodes {
+ SHRUG,
+ DISFACE,
+ FU,
+ TFLIP,
+ TFLIP2,
+ SAD_EYES,
+ TPUT,
+ HAPPYFACE,
+ HEARTFACE,
+ CLOUD,
+ CHANFACE,
+ CMDCLEAR
+};
+//Tap Dance Declarations
+enum {
+ TD_EXAMPLE1 = 0,
+ TD_EXAMPLE2,
+ TD_EXAMPLE3,
+ TD_EXAMPLE4
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* EMOJI Pad
+ * ,-------------------------------.
+ * |TFLIP | TFlIP2|DISFACE| FU |
+ * |------+-------+-------+--------|
+ * | CLOUD| | | CLEAR |
+ * |------+-------+-------+--------|
+ * |SHRUG |DISFACE| HRTFAC| HAPPYF |
+ * |------+-------+-------+--------|
+ * | ENTER| |LEDCNTR| tapland|
+ * `-------------------------------'
+ */
+ //purple
+ [_EMOJI] = LAYOUT_ortho_4x4(
+ TFLIP, TFLIP2, KC_NO, FU ,
+ CLOUD, KC_NO, KC_NO, CMDCLEAR,
+ SHRUG, DISFACE, HEARTFACE, HAPPYFACE,
+ KC_ENT, RGB_TOG, MO(_LEDCNTL), MO(_TAPLAND)
+ ),
+
+ /* TapLand //
+ * ,-------------------------------.
+ * | str1 | str2 | str3 | str4 |
+ * |------+-------+-------+--------|
+ * | | | | |
+ * |------+-------+-------+--------|
+ * | | | | |
+ * |------+-------+-------+--------|
+ * | | | | |
+ * `-------------------------------'
+ */
+ //blue
+ [_TAPLAND] = LAYOUT_ortho_4x4(
+ TD(TD_EXAMPLE1), TD(TD_EXAMPLE2), TD(TD_EXAMPLE3), TD(TD_EXAMPLE4),
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO
+ ),
+ /* LEDControl Pad
+ * ,-------------------------------.
+ * | snake|breathe|rainbow|gradient|
+ * |------+-------+-------+--------|
+ * | xmas | Val+ | Sat+ | HUE+ |
+ * |------+-------+-------+--------|
+ * |kngrdr| Val- | Sat- | HUE- |
+ * |------+-------+-------+--------|
+ * | swirl| PLAIN | | ON/OFF |
+ * `-------------------------------'
+ */
+ //blue
+ [_LEDCNTL] = LAYOUT_ortho_4x4(
+ RGB_M_SN, RGB_M_B, RGB_M_R, RGB_M_G,
+ RGB_M_X, RGB_VAI, RGB_SAI, RGB_HUI,
+ RGB_M_K, RGB_VAD, RGB_SAD, RGB_HUD,
+ RGB_M_SW, RGB_M_P, KC_NO, RGB_TOG
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case CLOUD: // (っ◕‿◕)っ
+ if(record->event.pressed){
+ send_unicode_hex_string("0028 3063 25D5 203F 25D5 0029 3063");
+ }
+ return false;
+ break;
+ case FU: // t(-_-t)
+ if(record->event.pressed){
+ SEND_STRING("t(-_-t)");
+ }
+ return false;
+ break;
+ case HAPPYFACE: // ʘ‿ʘ
+ if(record->event.pressed){
+ send_unicode_hex_string("0298 203F 0298");
+ }
+ return false;
+ break;
+ case CMDCLEAR:
+ if (record->event.pressed) {
+ register_code(KC_LGUI);
+ tap_code(KC_A);
+ unregister_code(KC_LGUI);
+ tap_code(KC_DEL);
+ }
+ return false;
+ break;
+ case SHRUG: // ¯\_(ツ)_/¯
+ if (record->event.pressed) {
+ send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF");
+ }
+ return false;
+ break;
+ case HEARTFACE: // ♥‿♥
+ if(record->event.pressed){
+ send_unicode_hex_string("2665 203F 2665");
+ }
+ return false;
+ break;
+ case DISFACE: // ಠ_ಠ
+ if(record->event.pressed){
+ send_unicode_hex_string("0CA0 005F 0CA0");
+ }
+ return false;
+ break;
+ case TFLIP: // (╯°□°)╯ ︵ ┻━┻
+ if(record->event.pressed){
+ send_unicode_hex_string("0028 256F 00B0 25A1 00B0 0029 256F 0020 FE35 0020 253B 2501 253B");
+ }
+ return false;
+ break;
+ case TFLIP2: // ┻━┻︵ \(°□°)/ ︵ ┻━┻
+ if(record->event.pressed){
+ send_unicode_hex_string("253B 2501 253B FE35 0020 005C 0028 00B0 25A1 00B0 0029 002F 0020 FE35 0020 253B 2501 253B");
+ }
+ return false;
+ break;
+ }
+ }
+ return true;
+}
+
+
+/* tap dance time */
+void tdexample1(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count >= 2) {
+ SEND_STRING(EXAMPLESTRING1);
+ reset_tap_dance (state);
+ }
+}
+void tdexample2(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count >= 2) {
+ SEND_STRING(EXAMPLESTRING2);
+ reset_tap_dance (state);
+ }
+}
+void tdexample3(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count >= 2) {
+ SEND_STRING(EXAMPLESTRING3);
+ reset_tap_dance (state);
+ }
+}
+void tdexample4(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count >= 2) {
+ SEND_STRING(EXAMPLESTRING4);
+ reset_tap_dance (state);
+ }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_EXAMPLE1] = ACTION_TAP_DANCE_FN(tdexample1),
+ [TD_EXAMPLE2] = ACTION_TAP_DANCE_FN(tdexample2),
+ [TD_EXAMPLE3] = ACTION_TAP_DANCE_FN(tdexample3),
+ [TD_EXAMPLE4] = ACTION_TAP_DANCE_FN(tdexample4)
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_scan_user(void) {
+ static bool has_ran_yet;
+ if (!has_ran_yet) {
+ has_ran_yet = true;
+ rgblight_setrgb (16, 0, 16);
+ }
+}
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case _TAPLAND:
+ rgblight_setrgb(0, 16, 0); //green
+ break;
+ case _LEDCNTL:
+ rgblight_setrgb(0, 0, 16); //blue
+ break;
+ case _EMOJI:
+ rgblight_setrgb (16, 0, 16); //purple
+ break;
+
+ default: // for any other layers, or the default layer
+ rgblight_setrgb (16, 0, 16); //purple
+ break;
+ }
+ return state;
+} \ No newline at end of file
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/readme.md b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/readme.md
new file mode 100644
index 000000000..7a3b8c8e4
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/readme.md
@@ -0,0 +1,10 @@
+# Ridingtraffic's examples
+===
+This keymap has many features:
+3 layers
+Momentary layer switching
+16 pixel neopixel
+Unicode Enabled
+Tap dance enabled
+
+The rgb also updates depending on what layer you are on, and then flips back when done.
diff --git a/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/rules.mk b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/rules.mk
new file mode 100644
index 000000000..de4417553
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/keymaps/ridingintraffic/rules.mk
@@ -0,0 +1,5 @@
+# turning on tap dance
+TAP_DANCE_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+MOUSEKEY_ENABLE = no
+UNICODE_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/1upkeyboards/sweet16/readme.md b/keyboards/1upkeyboards/sweet16/readme.md
new file mode 100644
index 000000000..3b7b1d6f0
--- /dev/null
+++ b/keyboards/1upkeyboards/sweet16/readme.md
@@ -0,0 +1,14 @@
+Sweet16
+===
+
+A 4x4 numpad/macro pad sold by 1up Keyboards - designed by Bishop Keyboards
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Sweet16 Keyboard PCB
+Hardware Availability: [1up Keyboards](https://1upkeyboards.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 1upkeyboards/sweet16: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/sweet16/rules.mk b/keyboards/1upkeyboards/sweet16/rules.mk
index 212e74059..212e74059 100644
--- a/keyboards/sweet16/rules.mk
+++ b/keyboards/1upkeyboards/sweet16/rules.mk
diff --git a/keyboards/sweet16/sweet16.c b/keyboards/1upkeyboards/sweet16/sweet16.c
index 2f116c2a3..2f116c2a3 100644
--- a/keyboards/sweet16/sweet16.c
+++ b/keyboards/1upkeyboards/sweet16/sweet16.c
diff --git a/keyboards/sweet16/sweet16.h b/keyboards/1upkeyboards/sweet16/sweet16.h
index 879f51fae..879f51fae 100644
--- a/keyboards/sweet16/sweet16.h
+++ b/keyboards/1upkeyboards/sweet16/sweet16.h
diff --git a/keyboards/30wer/30wer.c b/keyboards/30wer/30wer.c
new file mode 100644
index 000000000..a46c54319
--- /dev/null
+++ b/keyboards/30wer/30wer.c
@@ -0,0 +1 @@
+#include "30wer.h"
diff --git a/keyboards/30wer/30wer.h b/keyboards/30wer/30wer.h
new file mode 100644
index 000000000..e7bce8277
--- /dev/null
+++ b/keyboards/30wer/30wer.h
@@ -0,0 +1,14 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b \
+) \
+{ \
+ { 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 } \
+}
diff --git a/keyboards/30wer/config.h b/keyboards/30wer/config.h
new file mode 100644
index 000000000..d49758524
--- /dev/null
+++ b/keyboards/30wer/config.h
@@ -0,0 +1,31 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x1234
+#define PRODUCT_ID 0x5678
+#define DEVICE_VER 0x0000
+#define MANUFACTURER 8o7wer
+#define PRODUCT 30wer
+#define DESCRIPTION Gherkin style construction 30% staggered pcb kit
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 13
+
+/* pcb default pin-out */
+#define MATRIX_ROW_PINS { E6, B4, B5 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, D1, D0, D4, C6, D7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* prevent stuck modifiers */
+#define PREVENT_STUCK_MODIFIERS
diff --git a/keyboards/30wer/info.json b/keyboards/30wer/info.json
new file mode 100644
index 000000000..0fbbeb47d
--- /dev/null
+++ b/keyboards/30wer/info.json
@@ -0,0 +1,51 @@
+{
+ "keyboard_name": "30wer",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 13.25,
+ "height": 3,
+ "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":6, "y":0},
+ {"label":"U", "x":7, "y":0},
+ {"label":"I", "x":8, "y":0},
+ {"label":"O", "x":9, "y":0},
+ {"label":"P", "x":10, "y":0},
+ {"label":"Bksp", "x":11, "y":0},
+ {"label":"Delete", "x":12, "y":0, "w":1.25},
+ {"label":"Ctrl", "x":0, "y":1, "w":1.25},
+ {"label":"A", "x":1.25, "y":1},
+ {"label":"S", "x":2.25, "y":1},
+ {"label":"D", "x":3.25, "y":1},
+ {"label":"F", "x":4.25, "y":1},
+ {"label":"G", "x":5.25, "y":1},
+ {"label":"H", "x":6.25, "y":1},
+ {"label":"J", "x":7.25, "y":1},
+ {"label":"K", "x":8.25, "y":1},
+ {"label":"L", "x":9.25, "y":1},
+ {"label":":", "x":10.25, "y":1},
+ {"label":"\"", "x":11.25, "y":1},
+ {"label":"Enter", "x":12.25, "y":1},
+ {"label":"Shift", "x":0, "y":2, "w":1.75},
+ {"label":"Z", "x":1.75, "y":2},
+ {"label":"X", "x":2.75, "y":2},
+ {"label":"C", "x":3.75, "y":2},
+ {"label":"V", "x":4.75, "y":2},
+ {"label":"B", "x":5.75, "y":2},
+ {"label":"N", "x":6.75, "y":2},
+ {"label":"M", "x":7.75, "y":2},
+ {"label":"<", "x":8.75, "y":2},
+ {"label":">", "x":9.75, "y":2},
+ {"label":"?", "x":10.75, "y":2},
+ {"label":"Space", "x":11.75, "y":2, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/30wer/keymaps/default/keymap.c b/keyboards/30wer/keymaps/default/keymap.c
new file mode 100644
index 000000000..9e39a500a
--- /dev/null
+++ b/keyboards/30wer/keymaps/default/keymap.c
@@ -0,0 +1,17 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[0] = LAYOUT( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LT(1, KC_SPC) \
+),
+
+[1] = LAYOUT( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_UP, KC_DEL, \
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, KC_LEFT, KC_RGHT, _______, \
+ KC_LALT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DOWN, _______ \
+),
+
+};
diff --git a/keyboards/30wer/readme.md b/keyboards/30wer/readme.md
new file mode 100644
index 000000000..c9184f726
--- /dev/null
+++ b/keyboards/30wer/readme.md
@@ -0,0 +1,16 @@
+30wer by 8o7wer
+===
+
+![30wer](https://i.imgur.com/ZYbRvY7.png)
+
+Keyboard Maintainer: [Filip Sund](https://github.com/FSund)
+Hardware Supported: Pro Micro
+Hardware Availability: Group buy
+
+More info in the [group by thread at Keebtalk](https://www.keebtalk.com/t/gb-30wer-by-8o7wer/3618/).
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 30wer: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/30wer/rules.mk b/keyboards/30wer/rules.mk
new file mode 100644
index 000000000..9d77ec546
--- /dev/null
+++ b/keyboards/30wer/rules.mk
@@ -0,0 +1,60 @@
+# 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
+# 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
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
diff --git a/keyboards/40percentclub/25/25.c b/keyboards/40percentclub/25/25.c
new file mode 100644
index 000000000..54a42d263
--- /dev/null
+++ b/keyboards/40percentclub/25/25.c
@@ -0,0 +1,60 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "25.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}},
+ {{4, 6}, {3, 6}, {2, 6}, {1, 6}, {0, 6}},
+ {{4, 7}, {3, 7}, {2, 7}, {1, 7}, {0, 7}},
+ {{4, 8}, {3, 8}, {2, 8}, {1, 8}, {0, 8}},
+ {{4, 9}, {3, 9}, {2, 9}, {1, 9}, {0, 9}},
+
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}},
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}},
+};
+#endif
diff --git a/keyboards/40percentclub/25/25.h b/keyboards/40percentclub/25/25.h
new file mode 100644
index 000000000..db9c48b52
--- /dev/null
+++ b/keyboards/40percentclub/25/25.h
@@ -0,0 +1,85 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+#define ___ KC_NO
+
+#ifndef FLIP_HALF
+#define LAYOUT_ortho_5x10( \
+ L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
+ L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
+ L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
+ L30, L31, L32, L33, L34, R30, R31, R32, R33, R34, \
+ L40, L41, L42, L43, L44, R40, R41, R42, R43, R44 \
+) { \
+ { L00, L01, L02, L03, L04 }, \
+ { L10, L11, L12, L13, L14 }, \
+ { L20, L21, L22, L23, L24 }, \
+ { L30, L31, L32, L33, L34 }, \
+ { L40, L41, L42, L43, L44 }, \
+ { R04, R03, R02, R01, R00 }, \
+ { R14, R13, R12, R11, R10 }, \
+ { R24, R23, R22, R21, R20 }, \
+ { R34, R33, R32, R31, R30 }, \
+ { R44, R43, R42, R41, R40 } \
+}
+#else
+#define LAYOUT_ortho_5x10( \
+ L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
+ L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
+ L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
+ L30, L31, L32, L33, L34, R30, R31, R32, R33, R34, \
+ L40, L41, L42, L43, L44, R40, R41, R42, R43, R44 \
+) { \
+ { L00, L01, L02, L03, L04 }, \
+ { L10, L11, L12, L13, L14 }, \
+ { L20, L21, L22, L23, L24 }, \
+ { L30, L31, L32, L33, L34 }, \
+ { L40, L41, L42, L43, L44 }, \
+ { R00, R01, R02, R03, R04 }, \
+ { R10, R11, R12, R13, R14 }, \
+ { R20, R21, R22, R23, R24 }, \
+ { R30, R31, R32, R33, R34 }, \
+ { R40, R41, R42, R43, R44 } \
+}
+#endif
+
+#define LAYOUT_ortho_5x5( \
+ L00, L01, L02, L03, L04, \
+ L10, L11, L12, L13, L14, \
+ L20, L21, L22, L23, L24, \
+ L30, L31, L32, L33, L34, \
+ L40, L41, L42, L43, L44 \
+) { \
+ { L00, L01, L02, L03, L04 }, \
+ { L10, L11, L12, L13, L14 }, \
+ { L20, L21, L22, L23, L24 }, \
+ { L30, L31, L32, L33, L34 }, \
+ { L40, L41, L42, L43, L44 }, \
+ { ___, ___, ___, ___, ___ }, \
+ { ___, ___, ___, ___, ___ }, \
+ { ___, ___, ___, ___, ___ }, \
+ { ___, ___, ___, ___, ___ }, \
+ { ___, ___, ___, ___, ___ } \
+}
+
+#define LAYOUT_macro LAYOUT_ortho_5x5
+#define LAYOUT_split LAYOUT_ortho_5x10
+
+#ifdef USE_I2C
+ #error "I2C not Supported"
+#endif
diff --git a/keyboards/40percentclub/25/config.h b/keyboards/40percentclub/25/config.h
new file mode 100644
index 000000000..7fe59fcca
--- /dev/null
+++ b/keyboards/40percentclub/25/config.h
@@ -0,0 +1,232 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0A0C
+#define DEVICE_VER 0x0F25
+#define MANUFACTURER di0ib
+#define PRODUCT The 5x5 Keyboard
+#define DESCRIPTION A split 50 key keyboard
+
+#define USE_SERIAL
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/* Select hand configuration */
+#define MASTER_LEFT
+//#define MASTER_RIGHT
+//#define EE_HANDS
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 5*2
+#define MATRIX_COLS 5
+
+/*
+ * 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, F7, B1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
diff --git a/keyboards/40percentclub/25/info.json b/keyboards/40percentclub/25/info.json
new file mode 100644
index 000000000..abb77a067
--- /dev/null
+++ b/keyboards/40percentclub/25/info.json
@@ -0,0 +1,29 @@
+{
+ "keyboard_name": "foobar",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 6,
+ "height": 2,
+ "layouts": {
+ "LAYOUT_macro": {
+ "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}
+ ]
+ },
+ "LAYOUT_split": {
+ "key_count": 30,
+ "layout": [
+ {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0},
+ {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1},
+ {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2},
+ {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3},
+ {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/40percentclub/25/keymaps/default/config.h b/keyboards/40percentclub/25/keymaps/default/config.h
new file mode 100644
index 000000000..6173b6327
--- /dev/null
+++ b/keyboards/40percentclub/25/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/40percentclub/25/keymaps/default/keymap.c b/keyboards/40percentclub/25/keymaps/default/keymap.c
new file mode 100644
index 000000000..ccb54c82a
--- /dev/null
+++ b/keyboards/40percentclub/25/keymaps/default/keymap.c
@@ -0,0 +1,87 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 1
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Qwerty
+ * ,---------------------------------------------------------------------.
+ * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
+ * |------+------+------+------+------+------+------+------+------+------|
+ * | Q | W | E | R | T | Y | U | I | O | P |
+ * |------+------+------+------+-------------+------+------+------+------|
+ * | A | S | D | F | G | H | J | K | L | Bksp |
+ * |------+------+------+------+------|------+------+------+------+------|
+ * | Z | X | C | V | B | N | M | , | . |Enter |
+ * |------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt |Lower |Space | Shift| Left | Down | Up |Right |
+ * `---------------------------------------------------------------------'
+ */
+ [_QWERTY] = LAYOUT_split(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC, \
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_ENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_LSFT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Lower
+ * ,---------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | ` | / | _ | + |
+ * |------+------+------+------+------|------+------+------+------+------|
+ * | F7 | F8 | F9 | F10 | F11 | F12 | ~ | [ | ] | \ |
+ * |------+------+------+------+-------------+------+------+------+------|
+ * | Esc | | | | | | | ; | " | Del |
+ * |------+------+------+------+------|------+------+------+------+------|
+ * | Tab | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | Home | PgDn | PgUp | End |
+ * `---------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT_split( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_GRV, KC_SLSH, KC_UNDS, KC_PLUS, \
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TILD, KC_LBRC, KC_RBRC, KC_PIPE, \
+ KC_ESC, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_QUOT, KC_DEL, \
+ KC_TAB, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/40percentclub/25/keymaps/default/readme.md b/keyboards/40percentclub/25/keymaps/default/readme.md
new file mode 100644
index 000000000..7558c42ec
--- /dev/null
+++ b/keyboards/40percentclub/25/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default split keymap for 25
diff --git a/keyboards/40percentclub/25/keymaps/macro/config.h b/keyboards/40percentclub/25/keymaps/macro/config.h
new file mode 100644
index 000000000..6173b6327
--- /dev/null
+++ b/keyboards/40percentclub/25/keymaps/macro/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/40percentclub/25/keymaps/macro/keymap.c b/keyboards/40percentclub/25/keymaps/macro/keymap.c
new file mode 100644
index 000000000..80d227710
--- /dev/null
+++ b/keyboards/40percentclub/25/keymaps/macro/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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_macro(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, \
+ KC_GRV, KC_Q, KC_W, KC_E, KC_R, \
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/40percentclub/25/keymaps/macro/readme.md b/keyboards/40percentclub/25/keymaps/macro/readme.md
new file mode 100644
index 000000000..6645f93dd
--- /dev/null
+++ b/keyboards/40percentclub/25/keymaps/macro/readme.md
@@ -0,0 +1 @@
+# The default macro keymap for 25
diff --git a/keyboards/40percentclub/25/readme.md b/keyboards/40percentclub/25/readme.md
new file mode 100644
index 000000000..b1685b618
--- /dev/null
+++ b/keyboards/40percentclub/25/readme.md
@@ -0,0 +1,18 @@
+# 25
+
+![25](https://2.bp.blogspot.com/-lBK_ZlB3a9Q/WcAM0B_vwdI/AAAAAAACDgs/qnI9YB53pzck4Bw0v5QRvypDMs80CxWVQCLcBGAs/s640/IMG_0695.JPG)
+===
+
+Split 50 key keyboard - it is the largest keybad that fits within the 100mm x 100mm PCB size. Can be used together as a split keyboard or as a single 25 key macropad.
+
+* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/25)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: 25 PCB
+Hardware Availability: [25 project on 40% Keyboards](http://www.40percent.club/2017/09/25.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/25: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/40percentclub/25/rules.mk b/keyboards/40percentclub/25/rules.mk
new file mode 100644
index 000000000..bfcdce7c9
--- /dev/null
+++ b/keyboards/40percentclub/25/rules.mk
@@ -0,0 +1,85 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = caterina
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+
+# Enable generic behavior for split boards
+SPLIT_KEYBOARD = yes
+
+LAYOUTS = ortho_5x5 ortho_5x10
diff --git a/keyboards/4x4/4x4.c b/keyboards/40percentclub/4x4/4x4.c
index 963b6d00d..963b6d00d 100644
--- a/keyboards/4x4/4x4.c
+++ b/keyboards/40percentclub/4x4/4x4.c
diff --git a/keyboards/40percentclub/4x4/4x4.h b/keyboards/40percentclub/4x4/4x4.h
new file mode 100644
index 000000000..359cdc80a
--- /dev/null
+++ b/keyboards/40percentclub/4x4/4x4.h
@@ -0,0 +1,71 @@
+#pragma once
+
+#include "quantum.h"
+#define ___ KC_NO
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define LAYOUT_ortho_4x4( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, K23, \
+ K30, K31, K32, K33 \
+) \
+{ \
+ { K00, K01, K02, K03, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K10, K11, K12, K13, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K20, K21, K22, K23, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K30, K31, K32, K33, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___} \
+}
+#define LAYOUT_ortho_4x8( \
+ K00, K01, K02, K03, K04, K05, K06, K07, \
+ K10, K11, K12, K13, K14, K15, K16, K17, \
+ K20, K21, K22, K23, K24, K25, K26, K27, \
+ K30, K31, K32, K33, K34, K35, K36, K37\
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K30, K31, K32, K33, K34, K35, K35, K37, ___, ___, ___, ___, ___, ___, ___, ___} \
+}
+#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_ortho_4x16( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e, K0f, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e, K1f, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e, K2f, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3c, K3d, K3e, K3f \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e, K0f }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e, K1f }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e, K2f }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3c, K3d, K3e, K3f } \
+}
+
+#define LAYOUT_kc_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 \
+) \
+{ \
+ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0a, KC_##K0b, ___, ___, ___, ___}, \
+ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1a, KC_##K1b, ___, ___, ___, ___}, \
+ { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2a, KC_##K2b, ___, ___, ___, ___}, \
+ { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3a, KC_##K3b, ___, ___, ___, ___} \
+}
diff --git a/keyboards/4x4/config.h b/keyboards/40percentclub/4x4/config.h
index e66e9433a..e66e9433a 100644
--- a/keyboards/4x4/config.h
+++ b/keyboards/40percentclub/4x4/config.h
diff --git a/keyboards/4x4/keymaps/default/config.h b/keyboards/40percentclub/4x4/keymaps/default/config.h
index d533d806c..d533d806c 100644
--- a/keyboards/4x4/keymaps/default/config.h
+++ b/keyboards/40percentclub/4x4/keymaps/default/config.h
diff --git a/keyboards/40percentclub/4x4/keymaps/default/keymap.c b/keyboards/40percentclub/4x4/keymaps/default/keymap.c
new file mode 100644
index 000000000..1f52b2066
--- /dev/null
+++ b/keyboards/40percentclub/4x4/keymaps/default/keymap.c
@@ -0,0 +1,104 @@
+
+#include QMK_KEYBOARD_H
+
+#define PAD 0
+#define _QW 1
+#define NUM 2
+#define DIR 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Single 4x4 board only
+ * .-----------------------------------.
+ * | 7 | 8 | 9 | / |
+ * |--------+--------+--------+--------|
+ * | 4 | 5 | 6 | * |
+ * |--------+--------+--------+--------|
+ * | 1 | 2 | 3 | - |
+ * |--------+--------+--------+--------|
+ * | 0 | QWERTY | . | + |
+ * '-----------------------------------'
+ */
+
+ [PAD] = LAYOUT_ortho_4x4(
+ KC_KP_7, KC_KP_8, KC_KP_9, KC_PSLS,
+ KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST,
+ KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS,
+ KC_KP_0, DF(_QW), KC_KP_DOT, KC_PPLS
+ ),
+
+/* QWERTY
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | Q | W | E | R | T | Y | U | I | O | P | BACKSP | 7 | 8 | 9 | / |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | TAB | A | S | D | F | G | H | J | K | L | ; | ' | 4 | 5 | 6 | * |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | SHIFT | Z | X | C | V | B | N | M | , | . | / | ENT/SFT| 1 | 2 | 3 | - |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL | LGUI | ALT | ALT | NUM | SHIFT | SPACE | DIR | RGUI | RALT | DEL | CTRL | 0 | 0 | . | + |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW] = LAYOUT_ortho_4x16(
+ 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_KP_7, KC_KP_8, KC_KP_9, KC_PSLS,
+ 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_KP_4, KC_KP_5, KC_KP_6, KC_PAST,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, MO(NUM), KC_LSFT, KC_SPC, MO(DIR), KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT, KC_PPLS
+ ),
+
+/* NUMBERS
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | NUMLOCK| / | * | - | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | + | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | F11 | F12 | | | | ENTER | SHIFT | RGUI | ./ALT | BKSC | | | | ENTER | |
+ * | | | | | | | | | | |CTRLhold| | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |
+ * | | | | | | | ENTER | SHIFT | | | | | | | | |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [NUM] = LAYOUT_ortho_4x16(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, KC_PPLS, _______,
+ _______, KC_F11, KC_F12, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC), _______, _______, _______, KC_PENT, _______,
+ _______, _______, _______, _______, _______, _______, KC_ENT, KC_RSFT, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+/* DIRECTIONS
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * | RESET | TAB | up | | INS | CTRL | SHIFT | PgUp | Home | - | = | DEL | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | CAPSLK | left | down | right | PrScr | SHIFT | CTRL | PgDn | End | [ | ] | \ | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | P-Brk | | | | | | | RGUI | ALT | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | KEYPAD | | | | | | | | | | | | | | | |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [DIR] = LAYOUT_ortho_4x16(
+ RESET, KC_TAB, KC_UP, _______, KC_INS, KC_LCTL, KC_LSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_DEL, _______, _______, _______, _______,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_LCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______, _______,
+ _______, KC_PAUS, _______, _______, _______, _______, _______, _______, KC_RGUI, KC_RALT, _______, _______, _______, _______, _______, _______,
+ DF(PAD), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/40percentclub/4x4/readme.md b/keyboards/40percentclub/4x4/readme.md
new file mode 100644
index 000000000..077a2049b
--- /dev/null
+++ b/keyboards/40percentclub/4x4/readme.md
@@ -0,0 +1,24 @@
+# 4x4
+
+![4x4](https://2.bp.blogspot.com/-xRZOpwlTT4c/WlOwRIVAecI/AAAAAAACKo4/d75juHTX2W0Nrch7NigssMbagvl3I4w_ACEwYBhgL/s1600/e.jpg)
+===
+
+**Modular keypad/keyboard**
+The basic unit is a 4x4 matrix with 16 keys. Up to 4 of these can be connected to each other side by side.
+4x4, 4x8, 4x12 and 4x16 are possible.
+There are pads for header pins on each side that complete the circuits from board to board. These can be permanently connected with solder bridges or temporarily with pin headers and shunt jumpers.
+**_All configurations are powered by a SINGLE Arduino Micro or clone (NOT a Pro Micro)._**
+
+* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/4x4)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: 4x4 PCB
+Hardware Availability: [4x4x4x4x4 project on 40% Keyboards](http://www.40percent.club/2018/01/4x4x4x4x4.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/4x4: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).
+
+First pass at adding support for the 4x4 keyboard. Compiles but completely untested. Intended to kick-start development.
diff --git a/keyboards/40percentclub/4x4/rules.mk b/keyboards/40percentclub/4x4/rules.mk
new file mode 100644
index 000000000..4ab5e7431
--- /dev/null
+++ b/keyboards/40percentclub/4x4/rules.mk
@@ -0,0 +1,79 @@
+# 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
+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_4x4 ortho_4x8 ortho_4x12 ortho_4x16
diff --git a/keyboards/40percentclub/5x5/5x5.c b/keyboards/40percentclub/5x5/5x5.c
new file mode 100644
index 000000000..20e524609
--- /dev/null
+++ b/keyboards/40percentclub/5x5/5x5.c
@@ -0,0 +1,29 @@
+
+#include "5x5.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/40percentclub/5x5/5x5.h b/keyboards/40percentclub/5x5/5x5.h
new file mode 100644
index 000000000..182e9e819
--- /dev/null
+++ b/keyboards/40percentclub/5x5/5x5.h
@@ -0,0 +1,53 @@
+#pragma once
+
+#include "quantum.h"
+#define ___ KC_NO
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define LAYOUT_ortho_5x5( \
+ K00, K01, K02, K03, K04, \
+ K10, K11, K12, K13, K14, \
+ K20, K21, K22, K23, K24, \
+ K30, K31, K32, K33, K34, \
+ K40, K41, K42, K43, K44 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K10, K11, K12, K13, K14, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K20, K21, K22, K23, K24, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K30, K31, K32, K33, K34, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
+ { K40, K41, K42, K43, K44, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___} \
+}
+
+#define LAYOUT_ortho_5x10( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, ___, ___, ___, ___, ___}, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, ___, ___, ___, ___, ___}, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, ___, ___, ___, ___, ___}, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, ___, ___, ___, ___, ___}, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, ___, ___, ___, ___, ___} \
+}
+
+#define LAYOUT_ortho_5x15( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3c, K3d, K3e, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4a, K4b, K4c, K4d, K4e \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e}, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e}, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e}, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3c, K3d, K3e}, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4a, K4b, K4c, K4d, K4e} \
+}
diff --git a/keyboards/40percentclub/5x5/config.h b/keyboards/40percentclub/5x5/config.h
new file mode 100644
index 000000000..bc609934e
--- /dev/null
+++ b/keyboards/40percentclub/5x5/config.h
@@ -0,0 +1,208 @@
+
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0A0C
+#define DEVICE_VER 0x05B5
+#define MANUFACTURER di0ib
+#define PRODUCT The 5x5 Keyboard
+#define DESCRIPTION A 25 or 50 or 75 key keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B2, D1, D0, D4, C6 }
+#define MATRIX_COL_PINS { D7, E6, B4, B5, B6, B7, D6, F7, F6, F5, F4, F1, F0, B3, B1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
diff --git a/keyboards/40percentclub/5x5/keymaps/default/config.h b/keyboards/40percentclub/5x5/keymaps/default/config.h
new file mode 100644
index 000000000..d533d806c
--- /dev/null
+++ b/keyboards/40percentclub/5x5/keymaps/default/config.h
@@ -0,0 +1,5 @@
+
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/40percentclub/5x5/keymaps/default/keymap.c b/keyboards/40percentclub/5x5/keymaps/default/keymap.c
new file mode 100644
index 000000000..56ddbb23f
--- /dev/null
+++ b/keyboards/40percentclub/5x5/keymaps/default/keymap.c
@@ -0,0 +1,117 @@
+
+#include QMK_KEYBOARD_H
+
+#define PAD 0
+#define _QW 1
+#define NUM 2
+#define DIR 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Single 5x5 board only
+ * .--------------------------------------------.
+ * | QWERTY | / | * | - | |
+ * |--------+--------+--------+--------+--------|
+ * | 7 | 8 | 9 | + | |
+ * |--------+--------+--------+--------+--------|
+ * | 4 | 5 | 6 | + | |
+ * |--------+--------+--------+--------+--------|
+ * | 1 | 2 | 3 | ENTER | |
+ * |--------+--------+--------+--------+--------|
+ * | 0 | 0 | . | ENTER | |
+ * '--------------------------------------------'
+ */
+
+ [PAD] = LAYOUT_ortho_5x5(
+ DF(_QW), KC_PSLS, KC_PAST, KC_PMNS, _______,
+ KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, _______,
+ KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______,
+ KC_KP_1, KC_KP_2, KC_KP_3, KC_PENT, _______,
+ KC_KP_0, KC_KP_0, KC_KP_DOT, KC_PENT, _______
+ ),
+
+/* QWERTY
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ESC | Q | W | E | R | T | Y | U | I | O | P | BACKSP | 7 | 8 | 9 |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | TAB | A | S | D | F | G | H | J | K | L | ; | ' | 4 | 5 | 6 |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | SHIFT | Z | X | C | V | B | N | M | , | . | / | ENT/SFT| 1 | 2 | 3 |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL | LGUI | ALT | ALT | NUM | SHIFT | SPACE | DIR | RGUI | RALT | DEL | CTRL | 0 | 0 | . |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW] = LAYOUT_ortho_5x15(
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, _______,
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_KP_7, KC_KP_8, KC_KP_9,
+ 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_KP_4, KC_KP_5, KC_KP_6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), KC_KP_1, KC_KP_2, KC_KP_3,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, MO(NUM), KC_LSFT, KC_SPC, MO(DIR), KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT
+ ),
+
+/* NUMBERS
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | NUMLOCK| / | * | - |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | + |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | F11 | F12 | | | | ENTER | SHIFT | RGUI | ./ALT | BKSC | | | | ENTER |
+ * | | | | | | | | | | |CTRLhold| | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | ENTER | SHIFT | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [NUM] = LAYOUT_ortho_5x15(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, KC_PPLS,
+ _______, KC_F11, KC_F12, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC), _______, _______, _______, KC_PENT,
+ _______, _______, _______, _______, _______, _______, KC_ENT, KC_RSFT, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+/* DIRECTIONS
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | RESET | TAB | up | | INS | CTRL | SHIFT | PgUp | Home | - | = | DEL | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | CAPSLK | left | down | right | PrScr | SHIFT | CTRL | PgDn | End | [ | ] | \ | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | P-Brk | | | | | | | RGUI | ALT | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | KEYPAD | | | | | | | | | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [DIR] = LAYOUT_ortho_5x15(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RESET, KC_TAB, KC_UP, _______, KC_INS, KC_LCTL, KC_LSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_DEL, _______, _______, _______,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_LCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______,
+ _______, KC_PAUS, _______, _______, _______, _______, _______, _______, KC_RGUI, KC_RALT, _______, _______, _______, _______, _______,
+ DF(PAD), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/40percentclub/5x5/readme.md b/keyboards/40percentclub/5x5/readme.md
new file mode 100644
index 000000000..8f0d8e166
--- /dev/null
+++ b/keyboards/40percentclub/5x5/readme.md
@@ -0,0 +1,24 @@
+# 5x5
+
+![5x5](https://3.bp.blogspot.com/-bKOfUyMtdrE/WqGA_03kGZI/AAAAAAACPtY/DsHDTQS0IlMD3ie8HHlf1ATRUAwpZdcSgCLcBGAs/s1600/c.jpg)
+===
+
+**Modular Keypad/Keyboard**
+The basic unit is a 5x5 matrix with 25 keys. Up to 3 of these can be connected to each other side by side.
+5x5, 5x10, and 5x15 matrices are possible.
+There are pads for header pins on each side that complete the circuits from board to board. These can be permanently connected with solder bridges or temporarily with pin headers and shunt jumpers.
+**_All configurations are powered by a SINGLE Arduino Micro or clone (NOT a Pro Micro)._**
+
+* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/5x5)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: 5x5 PCB
+Hardware Availability: [5x5 project on 40% Keyboards](http://www.40percent.club/2018/04/5x5.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/5x5: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).
+
+First pass at adding support for the 4x4 keyboard. Compiles but completely untested. Intended to kick-start development.
diff --git a/keyboards/40percentclub/5x5/rules.mk b/keyboards/40percentclub/5x5/rules.mk
new file mode 100644
index 000000000..237de6497
--- /dev/null
+++ b/keyboards/40percentclub/5x5/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 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_5x5 ortho_5x10 ortho_5x15
diff --git a/keyboards/40percentclub/6lit/6lit.c b/keyboards/40percentclub/6lit/6lit.c
new file mode 100644
index 000000000..fd3ae7d00
--- /dev/null
+++ b/keyboards/40percentclub/6lit/6lit.c
@@ -0,0 +1,53 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "6lit.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{2, 2}, {1, 2}, {0, 2}},
+ {{2, 3}, {1, 3}, {0, 3}},
+ {{0, 0}, {1, 0}, {2, 0}},
+ {{0, 1}, {1, 1}, {2, 1}},
+};
+#endif
diff --git a/keyboards/40percentclub/6lit/6lit.h b/keyboards/40percentclub/6lit/6lit.h
new file mode 100644
index 000000000..af01d44c2
--- /dev/null
+++ b/keyboards/40percentclub/6lit/6lit.h
@@ -0,0 +1,58 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+#define ___ KC_NO
+
+#ifndef FLIP_HALF
+#define LAYOUT_ortho_2x6( \
+ L00, L01, L02, R00, R01, R02, \
+ L10, L11, L12, R10, R11, R12 \
+) { \
+ { L00, L01, L02 }, \
+ { L10, L11, L12 }, \
+ { R02, R01, R00 }, \
+ { R12, R11, R10 }, \
+}
+#else
+#define LAYOUT_ortho_2x6( \
+ L00, L01, L02, R00, R01, R02, \
+ L10, L11, L12, R10, R11, R12 \
+) { \
+ { L00, L01, L02 }, \
+ { L10, L11, L12 }, \
+ { R00, R01, R02 }, \
+ { R10, R11, R12 }, \
+}
+#endif
+
+#define LAYOUT_ortho_2x3( \
+ L00, L01, L02, \
+ L10, L11, L12 \
+) { \
+ { L00, L01, L02 }, \
+ { L10, L11, L12 }, \
+ { ___, ___, ___ }, \
+ { ___, ___, ___ }, \
+}
+
+#define LAYOUT_macro LAYOUT_ortho_2x3
+#define LAYOUT_split LAYOUT_ortho_2x6
+
+#ifdef USE_I2C
+ #error "I2C not Supported"
+#endif
diff --git a/keyboards/40percentclub/6lit/config.h b/keyboards/40percentclub/6lit/config.h
new file mode 100644
index 000000000..940518f36
--- /dev/null
+++ b/keyboards/40percentclub/6lit/config.h
@@ -0,0 +1,233 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0A0C
+#define DEVICE_VER 0x0F61
+#define MANUFACTURER di0ib
+#define PRODUCT The 6lit Macropad
+#define DESCRIPTION A split 12 key Macropad
+
+#define USE_SERIAL
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/* Select hand configuration */
+#define MASTER_LEFT
+//#define MASTER_RIGHT
+//#define EE_HANDS
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 2*2
+#define MATRIX_COLS 3
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D7, E6 }
+#define MATRIX_COL_PINS { F6, F7, B1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
diff --git a/keyboards/40percentclub/6lit/info.json b/keyboards/40percentclub/6lit/info.json
new file mode 100644
index 000000000..ce1a7d6e1
--- /dev/null
+++ b/keyboards/40percentclub/6lit/info.json
@@ -0,0 +1,23 @@
+{
+ "keyboard_name": "6lit",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 6,
+ "height": 2,
+ "layouts": {
+ "LAYOUT_macro": {
+ "key_count": 6,
+ "layout": [
+ {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0},
+ {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}
+ ]
+ },
+ "LAYOUT_split": {
+ "key_count": 12,
+ "layout": [
+ {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0},
+ {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}
+ ]
+ }
+ }
+}
diff --git a/keyboards/40percentclub/6lit/keymaps/default/config.h b/keyboards/40percentclub/6lit/keymaps/default/config.h
new file mode 100644
index 000000000..6173b6327
--- /dev/null
+++ b/keyboards/40percentclub/6lit/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/40percentclub/6lit/keymaps/default/keymap.c b/keyboards/40percentclub/6lit/keymaps/default/keymap.c
new file mode 100644
index 000000000..6864c72f7
--- /dev/null
+++ b/keyboards/40percentclub/6lit/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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_split( /* Base */
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, \
+ KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24 \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/40percentclub/6lit/keymaps/default/readme.md b/keyboards/40percentclub/6lit/keymaps/default/readme.md
new file mode 100644
index 000000000..b3acc3f58
--- /dev/null
+++ b/keyboards/40percentclub/6lit/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default split keymap for 6lit
diff --git a/keyboards/40percentclub/6lit/keymaps/macro/config.h b/keyboards/40percentclub/6lit/keymaps/macro/config.h
new file mode 100644
index 000000000..6173b6327
--- /dev/null
+++ b/keyboards/40percentclub/6lit/keymaps/macro/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/40percentclub/6lit/keymaps/macro/keymap.c b/keyboards/40percentclub/6lit/keymaps/macro/keymap.c
new file mode 100644
index 000000000..6b10ac133
--- /dev/null
+++ b/keyboards/40percentclub/6lit/keymaps/macro/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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_macro( /* Base */
+ KC_F19, KC_F20, KC_F21, \
+ KC_F22, KC_F23, KC_F24 \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/40percentclub/6lit/keymaps/macro/readme.md b/keyboards/40percentclub/6lit/keymaps/macro/readme.md
new file mode 100644
index 000000000..9f883b821
--- /dev/null
+++ b/keyboards/40percentclub/6lit/keymaps/macro/readme.md
@@ -0,0 +1 @@
+# The default single board macro keymap for 6lit
diff --git a/keyboards/40percentclub/6lit/readme.md b/keyboards/40percentclub/6lit/readme.md
new file mode 100644
index 000000000..3d28df2d7
--- /dev/null
+++ b/keyboards/40percentclub/6lit/readme.md
@@ -0,0 +1,18 @@
+# 6lit
+
+![6lit](https://1.bp.blogspot.com/-Pa8RgYZ0hy8/Wbmr4bjuV0I/AAAAAAACDbI/WLKQMDlcDVAVf1lAIRMN51usR1XcCCVNgCLcBGAs/s1600/a.JPG)
+===
+
+6 key macropad that fits within the 100mm x 100mm PCB size. Can be used singly as a regular 6 key macropad as well.
+
+* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/6lit)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: 6lit PCB
+Hardware Availability: [6lit project on 40% Keyboards](http://www.40percent.club/2017/09/6lit.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/6lit: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/40percentclub/6lit/rules.mk b/keyboards/40percentclub/6lit/rules.mk
new file mode 100644
index 000000000..327565165
--- /dev/null
+++ b/keyboards/40percentclub/6lit/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 = caterina
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+
+# Enable generic behavior for split boards
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/40percentclub/foobar/config.h b/keyboards/40percentclub/foobar/config.h
new file mode 100644
index 000000000..88075c456
--- /dev/null
+++ b/keyboards/40percentclub/foobar/config.h
@@ -0,0 +1,233 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0A0C
+#define DEVICE_VER 0x0F00
+#define MANUFACTURER di0ib
+#define PRODUCT The foobar Keyboard
+#define DESCRIPTION A split 30 key keyboard
+
+#define USE_SERIAL
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/* Select hand configuration */
+#define MASTER_LEFT
+//#define MASTER_RIGHT
+//#define EE_HANDS
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 3*2
+#define MATRIX_COLS 5
+
+/*
+ * 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, B4 }
+#define MATRIX_COL_PINS { F6, F7, B1, B3, B2 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
diff --git a/keyboards/40percentclub/foobar/foobar.c b/keyboards/40percentclub/foobar/foobar.c
new file mode 100644
index 000000000..c032056a1
--- /dev/null
+++ b/keyboards/40percentclub/foobar/foobar.c
@@ -0,0 +1,55 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "foobar.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ {{4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+ {{4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
+ {{4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}},
+};
+#endif
diff --git a/keyboards/40percentclub/foobar/foobar.h b/keyboards/40percentclub/foobar/foobar.h
new file mode 100644
index 000000000..8cf2e384f
--- /dev/null
+++ b/keyboards/40percentclub/foobar/foobar.h
@@ -0,0 +1,67 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+#define ___ KC_NO
+
+#ifndef FLIP_HALF
+#define LAYOUT_ortho_3x10( \
+ L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
+ L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
+ L20, L21, L22, L23, L24, R20, R21, R22, R23, R24 \
+) { \
+ { L00, L01, L02, L03, L04 }, \
+ { L10, L11, L12, L13, L14 }, \
+ { L20, L21, L22, L23, L24 }, \
+ { R04, R03, R02, R01, R00 }, \
+ { R14, R13, R12, R11, R10 }, \
+ { R24, R23, R22, R21, R20 } \
+}
+#else
+#define LAYOUT_ortho_3x10( \
+ L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
+ L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
+ L20, L21, L22, L23, L24, R20, R21, R22, R23, R24 \
+) { \
+ { L00, L01, L02, L03, L04 }, \
+ { L10, L11, L12, L13, L14 }, \
+ { L20, L21, L22, L23, L24 }, \
+ { R00, R01, R02, R03, R04 }, \
+ { R10, R11, R12, R13, R14 }, \
+ { R20, R21, R22, R23, R24 } \
+}
+#endif
+
+#define LAYOUT_ortho_3x5( \
+ L00, L01, L02, L03, L04, \
+ L10, L11, L12, L13, L14, \
+ L20, L21, L22, L23, L24 \
+) { \
+ { L00, L01, L02, L03, L04 }, \
+ { L10, L11, L12, L13, L14 }, \
+ { L20, L21, L22, L23, L24 }, \
+ { ___, ___, ___, ___, ___ }, \
+ { ___, ___, ___, ___, ___ }, \
+ { ___, ___, ___, ___, ___ } \
+}
+
+#define LAYOUT_macro LAYOUT_ortho_3x5
+#define LAYOUT_split LAYOUT_ortho_3x10
+
+#ifdef USE_I2C
+ #error "I2C not Supported"
+#endif
diff --git a/keyboards/40percentclub/foobar/info.json b/keyboards/40percentclub/foobar/info.json
new file mode 100644
index 000000000..cb7f29b25
--- /dev/null
+++ b/keyboards/40percentclub/foobar/info.json
@@ -0,0 +1,25 @@
+{
+ "keyboard_name": "foobar",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 6,
+ "height": 2,
+ "layouts": {
+ "LAYOUT_macro": {
+ "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}
+ ]
+ },
+ "LAYOUT_split": {
+ "key_count": 30,
+ "layout": [
+ {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0},
+ {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1},
+ {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/40percentclub/foobar/keymaps/default/config.h b/keyboards/40percentclub/foobar/keymaps/default/config.h
new file mode 100644
index 000000000..bedc27ba8
--- /dev/null
+++ b/keyboards/40percentclub/foobar/keymaps/default/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
+
+#define PERMISSIVE_HOLD
diff --git a/keyboards/40percentclub/foobar/keymaps/default/keymap.c b/keyboards/40percentclub/foobar/keymaps/default/keymap.c
new file mode 100644
index 000000000..1be4b38dd
--- /dev/null
+++ b/keyboards/40percentclub/foobar/keymaps/default/keymap.c
@@ -0,0 +1,91 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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 foobar_layers {
+ QWERTY,
+ FN1,
+ FN2,
+ FN3,
+ FN4,
+ FN5
+};
+
+#define FN1_SPC LT(FN1, KC_SPC)
+#define FN2_BSC LT(FN2, KC_BSPC)
+#define FN3_C LT(FN3, KC_C)
+#define FN4_V LT(FN4, KC_V)
+#define FN5_B LT(FN5, KC_B)
+#define RALT_N RALT_T(KC_N)
+#define LALT_X LALT_T(KC_X)
+#define LCTL_Z LCTL_T(KC_Z)
+#define RCTL_M RCTL_T(KC_M)
+#define LSFT_ENT LSFT_T(KC_ENT)
+#define RGUI_ESC RGUI_T(KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [QWERTY] = LAYOUT_split(
+ 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, RGUI_ESC,
+ LCTL_Z, LALT_X, FN3_C, FN4_V, FN2_BSC, FN1_SPC, FN5_B, RALT_N, RCTL_M, LSFT_ENT
+ ),
+
+ [FN1] = LAYOUT_split(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______
+ ),
+
+ [FN2] = LAYOUT_split(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
+ KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, KC_GRV,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [FN3] = LAYOUT_split(
+ _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_TAB, _______, _______, _______, _______, KC_COMM, KC_DOT, KC_SLSH, KC_SCLN, KC_QUOT,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+ [FN4] = LAYOUT_split(
+ _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_TAB, _______, _______, _______, _______, KC_LABK, KC_RABK, KC_QUES, KC_COLN, KC_DQUO,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [FN5] = LAYOUT_split(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, RESET, _______, _______, _______, _______
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/40percentclub/foobar/keymaps/default/readme.md b/keyboards/40percentclub/foobar/keymaps/default/readme.md
new file mode 100644
index 000000000..7113469e7
--- /dev/null
+++ b/keyboards/40percentclub/foobar/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default split keymap for foobar
diff --git a/keyboards/40percentclub/foobar/keymaps/macro/config.h b/keyboards/40percentclub/foobar/keymaps/macro/config.h
new file mode 100644
index 000000000..6173b6327
--- /dev/null
+++ b/keyboards/40percentclub/foobar/keymaps/macro/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/40percentclub/foobar/keymaps/macro/keymap.c b/keyboards/40percentclub/foobar/keymaps/macro/keymap.c
new file mode 100644
index 000000000..1e7ec905f
--- /dev/null
+++ b/keyboards/40percentclub/foobar/keymaps/macro/keymap.c
@@ -0,0 +1,40 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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_macro( /* Base */
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_INT1, \
+ KC_F17, KC_F18, KC_F19, KC_F20, KC_INT2, \
+ KC_F21, KC_F22, KC_F23, KC_F14, KC_INT5 \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/40percentclub/foobar/keymaps/macro/readme.md b/keyboards/40percentclub/foobar/keymaps/macro/readme.md
new file mode 100644
index 000000000..4cc59e7e5
--- /dev/null
+++ b/keyboards/40percentclub/foobar/keymaps/macro/readme.md
@@ -0,0 +1 @@
+# The default single board macro keymap for foobar
diff --git a/keyboards/40percentclub/foobar/readme.md b/keyboards/40percentclub/foobar/readme.md
new file mode 100644
index 000000000..0acdf7252
--- /dev/null
+++ b/keyboards/40percentclub/foobar/readme.md
@@ -0,0 +1,18 @@
+# foobar
+
+![foobar](https://2.bp.blogspot.com/-rr8TK6xg2N0/WbwVL2O7EfI/AAAAAAACDc8/209wN69ju0wAFICYYPNLIEGQhat5-5MbwCLcBGAs/s640/a.JPG)
+===
+
+Split 30% keyboard that fits within the 100mm x 100mm PCB size. Can be used together as a split keyboard or as a single 15 key macropad.
+
+* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/foobar)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: foobar PCB
+Hardware Availability: [foobar project on 40% Keyboards](http://www.40percent.club/2017/09/foobar-10.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/foobar: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/40percentclub/foobar/rules.mk b/keyboards/40percentclub/foobar/rules.mk
new file mode 100644
index 000000000..155a7daac
--- /dev/null
+++ b/keyboards/40percentclub/foobar/rules.mk
@@ -0,0 +1,85 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = caterina
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+
+# Enable generic behavior for split boards
+SPLIT_KEYBOARD = yes
+
+LAYOUTS = ortho_3x10
diff --git a/keyboards/40percentclub/gherkin/config.h b/keyboards/40percentclub/gherkin/config.h
new file mode 100644
index 000000000..3ed638b66
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/config.h
@@ -0,0 +1,51 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER 40 Percent Club
+#define PRODUCT Gherkin
+#define DESCRIPTION A 30 key ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 6
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
+#define MATRIX_COL_PINS { B4, E6, D7, C6, D4, D0 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B5
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 0
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
diff --git a/keyboards/gherkin/gherkin.c b/keyboards/40percentclub/gherkin/gherkin.c
index 2952d842c..2952d842c 100644
--- a/keyboards/gherkin/gherkin.c
+++ b/keyboards/40percentclub/gherkin/gherkin.c
diff --git a/keyboards/gherkin/gherkin.h b/keyboards/40percentclub/gherkin/gherkin.h
index f8674be40..70bffee30 100644
--- a/keyboards/gherkin/gherkin.h
+++ b/keyboards/40percentclub/gherkin/gherkin.h
@@ -1,5 +1,4 @@
-#ifndef GHERKIN_H
-#define GHERKIN_H
+#pragma once
#include "quantum.h"
@@ -14,5 +13,3 @@
{ K30, K31, K32, K33, K34, K35 }, \
{ K40, K41, K42, K43, K44, K45 } \
}
-
-#endif
diff --git a/keyboards/gherkin/info.json b/keyboards/40percentclub/gherkin/info.json
index 7ebbfb04b..7ebbfb04b 100644
--- a/keyboards/gherkin/info.json
+++ b/keyboards/40percentclub/gherkin/info.json
diff --git a/keyboards/gherkin/keymaps/bbaserdem/README.md b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/README.md
index 3c9a5e98b..3c9a5e98b 100644
--- a/keyboards/gherkin/keymaps/bbaserdem/README.md
+++ b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/README.md
diff --git a/keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h
new file mode 100644
index 000000000..5c9ca52d7
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#define RGB_DI_PIN F6
+#define RGBLED_NUM 10
+#define RGBLIGHT_ANIMATIONS
+#ifdef BACKLIGHT_LEVELS
+#undef BACKLIGHT_LEVELS
+#endif
+#define BACKLIGHT_LEVELS 3
diff --git a/keyboards/gherkin/keymaps/bbaserdem/keymap.c b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/keymap.c
index 0d3c8557c..0d3c8557c 100644
--- a/keyboards/gherkin/keymaps/bbaserdem/keymap.c
+++ b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/keymap.c
diff --git a/keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk
new file mode 100644
index 000000000..07a20a421
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/bbaserdem/rules.mk
@@ -0,0 +1,13 @@
+USER_NAME := bbaserdem-nouserspace
+
+STENO_ENABLE = no # Additional protocols for Stenography(+1700), requires VIRTSER
+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
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+AUDIO_ENABLE = no # Enable audio output from keyboard
+
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE = yes # Enable RBG light strips
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
diff --git a/keyboards/40percentclub/gherkin/keymaps/default/keymap.c b/keyboards/40percentclub/gherkin/keymaps/default/keymap.c
new file mode 100644
index 000000000..ae6f15862
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+#include QMK_KEYBOARD_H
+
+#define FN1_Q LT(1, KC_Q)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ortho_3x10(
+ FN1_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC,
+ KC_Z, KC_X, KC_C, KC_V, KC_BSPC, KC_SPC, KC_B, KC_N, KC_M, KC_ENT
+ ),
+
+ [1] = LAYOUT_ortho_3x10(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_INC,
+ _______, _______, _______, _______, _______, _______, RESET, _______, _______, BL_DEC
+ ),
+
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+ DDRD |= (1 << 5); PORTD &= ~(1 << 5);
+ } else {
+ DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 0); PORTB &= ~(1 << 0);
+ } else {
+ DDRB &= ~(1 << 0); PORTB &= ~(1 << 0);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h
new file mode 100644
index 000000000..6849bbdd2
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/config.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#undef RGB_DI_PIN
+#undef RGBLED_NUM
+#define RGB_DI_PIN D2
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c
new file mode 100644
index 000000000..950b6e86b
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/keymap.c
@@ -0,0 +1,145 @@
+#include QMK_KEYBOARD_H
+
+extern rgblight_config_t rgblight_config;
+extern keymap_config_t keymap_config;
+
+#define _PS 0 // This is the Photoshop Layer
+#define _AI 1 // This is the Illustrator Layer
+#define _PR 2 // This is the Premier Layer
+#define _XD 3 // This is the Experience Design Layer
+
+enum custom_keycodes {
+ PS = SAFE_RANGE,
+ AI,
+ PR,
+ MACRO_0,
+};
+
+#define PS TO(0)
+#define AI TO(1)
+#define PR TO(2)
+#define XD TO(3)
+
+// Mix of Photoshop, Illustrator, Premiere, and Experience Design shortcuts.
+#define SAVE LCTL(KC_S)
+#define OPEN LCTL(KC_O)
+#define COPY LCTL(KC_C)
+#define PAST LCTL(KC_V)
+#define CUNDO LCTL(LALT(KC_Z))
+#define INVERT LCTL(LSFT(KC_I))
+#define NLAYER LSFT(LCTL(KC_N))
+#define UNDO LCTL(KC_Z)
+#define TRANS LCTL(KC_T)
+#define ALIGNL LCTL(LSFT(KC_L))
+#define ALIGNC LCTL(LSFT(KC_C))
+#define ALIGNR LCTL(LSFT(KC_R))
+#define BRINGF LCTL(KC_RBRC)
+#define BRINGB LCTL(KC_LBRC)
+
+// Illustrator layer shortcuts.
+#define SHAPE LSFT(KC_M)
+#define RULER LCTL(LALT(KC_R))
+
+// Premiere layer shortcuts.
+#define REDO LCTL(LSFT(KC_Z))
+#define EXPORT LCTL(KC_M)
+#define IMPORT LCTL(KC_I)
+#define PCOPY LCTL(KC_V)
+#define PPASTE LCTL(LSFT(KC_V))
+
+// Experience Design layer shortcuts. (can be used with others too.)
+#define NEW LCTL(KC_N)
+#define LOCK LCTL(KC_L)
+#define SYMB LCTL(KC_K)
+#define HIDE LCTL(KC_SCLN)
+#define REPEAT LCTL(KC_R)
+#define MASK LCTL(LSFT(KC_M))
+#define GROUP LCTL(KC_G)
+#define UNGRP LCTL(LSFT(KC_G))
+#define VIEW LCTL(KC_TAB)
+#define HORZ LSFT(KC_C)
+#define VERT LSFT(KC_M)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Photoshop layer
+ [_PS] = LAYOUT_ortho_3x10(
+ SAVE, KC_W, KC_E, KC_T, KC_U, KC_I, KC_P, INVERT, CUNDO, NLAYER,
+ UNDO, KC_H, KC_L, TRANS, ALIGNL, ALIGNC, ALIGNR, BRINGB, BRINGF, OPEN,
+ KC_LSFT, COPY, PAST, KC_Z, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, AI
+ ),
+
+ // Illustrator layer
+ [_AI] = LAYOUT_ortho_3x10(
+ _______, MACRO_0, RULER, _______, KC_G, _______, _______, KC_Q, KC_MINS, KC_PLUS,
+ _______, _______, _______, KC_E, _______, _______, _______, SHAPE, KC_O, OPEN,
+ _______, _______, _______, _______, _______, _______, _______, KC_M, KC_SLSH, PR
+ ),
+
+ // Premiere layer
+ [_PR] = LAYOUT_ortho_3x10(
+ _______, KC_Q, KC_W, KC_I, KC_O, KC_P, IMPORT, EXPORT, KC_MINS, KC_EQL,
+ _______, REDO, KC_D, KC_F, KC_H, KC_M, KC_ENT, KC_LBRC, KC_RBRC, OPEN,
+ _______, PCOPY, PPASTE, KC_SPC, KC_Z, KC_C, KC_V, KC_LEFT, KC_RIGHT, XD
+ ),
+
+ // Experience Design layer
+ [_XD] = LAYOUT_ortho_3x10(
+ _______, KC_E, KC_R, KC_T, KC_P, KC_A, KC_L, KC_V, KC_DEL, NEW,
+ _______, REDO, GROUP, UNGRP, VIEW, HORZ, VERT, KC_Z, KC_ENT, OPEN,
+ _______, KC_LCTL, COPY, PAST, SYMB, LOCK, MASK, HIDE, REPEAT, PS
+ ),
+
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+void matrix_init_user(void) {
+ rgblight_enable();
+}
+
+void matrix_scan_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+
+ static uint8_t old_layer = 255;
+ uint8_t new_layer = biton32(layer_state);
+
+ // Color of the Icons.
+ if (old_layer != new_layer) {
+ switch (new_layer) {
+ case _PS:
+ // #31C5F0
+ rgblight_setrgb(49, 197, 240);
+ break;
+ case _AI:
+ // #FF8011
+ rgblight_setrgb(255, 128, 17);
+ break;
+ case _PR:
+ // #E788FF
+ rgblight_setrgb(231, 136, 255);
+ break;
+ case _XD:
+ // #FF2BC2
+ rgblight_setrgb(255, 43, 194);
+ break;
+ }
+ old_layer = new_layer;
+ }
+ #endif
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case MACRO_0:
+ // Save for Web Macro.
+ SEND_STRING(SS_LSFT(SS_LALT(SS_LCTRL("s"))));
+ return false;
+ }
+ }
+ return true;
+};
diff --git a/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk
new file mode 100644
index 000000000..b359ca287
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/itsaferbie/rules.mk
@@ -0,0 +1,3 @@
+BACKLIGHT_ENABLE = yes
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/config.h b/keyboards/40percentclub/gherkin/keymaps/mjt/config.h
new file mode 100644
index 000000000..9fe94bcd2
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/mjt/config.h
@@ -0,0 +1,7 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#undef MANUFACTURER
+#undef DESCRIPTION
+#define MANUFACTURER Some Guy
+#define DESCRIPTION 30 percent disaster
diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c b/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c
new file mode 100644
index 000000000..2fd4c2a46
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/mjt/keymap.c
@@ -0,0 +1,250 @@
+#include QMK_KEYBOARD_H
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+//Tap Dance Declarations
+enum {
+ TD_Z_LCTL = 0,
+ TD_X_LGUI = 1,
+ TD_C_LALT = 2,
+ TD_A_TAB = 3,
+ TD_Q_ESC = 4,
+};
+
+//Friendly Layer Names
+enum gherkin_layers {
+ _QWERTY,
+ _SONGS,
+ _NUMBERS,
+ _SYMBOLS,
+ _PLOVER,
+ _ADJUST
+};
+
+// custom keycodes
+enum gherkin_keycodes {
+ QWERTY = SAFE_RANGE,
+ NUMBERS,
+ SYMBOLS,
+ SONGS,
+ PLOVER,
+ BACKLIT,
+ MACSLEEP,
+ EXT_PLV
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_ortho_3x10(
+ TD(TD_Q_ESC), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ TD(TD_A_TAB), LT(_SYMBOLS,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_ADJUST,KC_SPC),
+ TD(TD_Z_LCTL), TD(TD_X_LGUI), TD(TD_C_LALT), KC_V, KC_B, LT(_NUMBERS, KC_N), KC_M, KC_COMM, KC_DOT, SFT_T(KC_ENT)
+ ),
+ [_NUMBERS] = LAYOUT_ortho_3x10(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_HOME, KC_PGDN, KC_PGUP, KC_END ,
+ KC_F7, KC_F8, KC_F9, KC_F10, LT(_ADJUST,KC_F11), _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
+ ),
+ [_SYMBOLS] = LAYOUT_ortho_3x10(
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
+ KC_GRV, _______, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, KC_MINS, KC_EQL , KC_SCLN, KC_QUOT,
+ KC_TILD, MO(_ADJUST), XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE, KC_UNDS, KC_PLUS, S(KC_SCLN), S(KC_QUOT)
+ ),
+ [_PLOVER] = LAYOUT_ortho_3x10(
+ KC_Q, KC_W, KC_E, KC_R, KC_1, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+ [_ADJUST] = LAYOUT_ortho_3x10(
+ RESET, _______, _______, _______, _______, QWERTY, NUMBERS, SYMBOLS, PLOVER, SONGS,
+ MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, _______, _______, MACSLEEP, _______,
+ BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistant_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case NUMBERS:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ persistant_default_layer_set(1UL<<_NUMBERS);
+ }
+ return false;
+ break;
+ case SYMBOLS:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ persistant_default_layer_set(1UL<<_SYMBOLS);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(tone_plover);
+ #endif
+ layer_off(_NUMBERS);
+ layer_off(_SYMBOLS);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_plover_gb);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ case MACSLEEP:
+ if (record->event.pressed) {
+ // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_SONG(tone_startup);
+}
+
+void shutdown_user()
+{
+ PLAY_SONG(tone_goodbye);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_SONG(music_scale);
+}
+
+#endif
+
+void matrix_scan_user(void) {
+}
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for Esc, twice for Caps Lock
+ [TD_Z_LCTL] = ACTION_TAP_DANCE_DOUBLE(KC_Z, KC_LCTL),
+ [TD_X_LGUI] = ACTION_TAP_DANCE_DOUBLE(KC_X, KC_LGUI),
+ [TD_C_LALT] = ACTION_TAP_DANCE_DOUBLE(KC_C, KC_LALT),
+ [TD_A_TAB] = ACTION_TAP_DANCE_DOUBLE(KC_A, KC_TAB),
+ [TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC)
+};
+
+// don't know what this is doing...
+/*
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+ DDRD |= (1 << 5); PORTD &= ~(1 << 5);
+ } else {
+ DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 0); PORTB &= ~(1 << 0);
+ } else {
+ DDRB &= ~(1 << 0); PORTB &= ~(1 << 0);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
+*/
diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk b/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk
new file mode 100644
index 000000000..3a35ae3b3
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/mjt/rules.mk
@@ -0,0 +1,2 @@
+AUDIO_ENABLE = yes # Audio output on port C6
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/config.h b/keyboards/40percentclub/gherkin/keymaps/steno/config.h
new file mode 100644
index 000000000..20a8f7844
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/steno/config.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#define NO_ACTION_LAYER
+#define NO_ACTION_TAPPING
+#define NO_ACTION_ONESHOT
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
diff --git a/keyboards/gherkin/keymaps/steno/keymap.c b/keyboards/40percentclub/gherkin/keymaps/steno/keymap.c
index c7ee63d12..c7ee63d12 100644
--- a/keyboards/gherkin/keymaps/steno/keymap.c
+++ b/keyboards/40percentclub/gherkin/keymaps/steno/keymap.c
diff --git a/keyboards/gherkin/keymaps/steno/readme.md b/keyboards/40percentclub/gherkin/keymaps/steno/readme.md
index 6536ed7ab..6536ed7ab 100644
--- a/keyboards/gherkin/keymaps/steno/readme.md
+++ b/keyboards/40percentclub/gherkin/keymaps/steno/readme.md
diff --git a/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk b/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk
new file mode 100644
index 000000000..a6e76f7cf
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/steno/rules.mk
@@ -0,0 +1,12 @@
+STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER
+
+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
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h
new file mode 100644
index 000000000..271f48d00
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c
new file mode 100644
index 000000000..ca3da579a
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/keymap.c
@@ -0,0 +1,56 @@
+#include QMK_KEYBOARD_H
+#include "keymap_steno.h"
+
+#define ST_BOLT QK_STENO_BOLT
+#define ST_GEM QK_STENO_GEMINI
+
+enum keyboard_layers {
+ _QWERTY,
+ _RAISE,
+ _LOWER,
+ _PLOVER,
+ _ADJUST
+};
+
+#define ADJ_Z LT(_ADJUST, KC_Z)
+#define RS_BSPC LT(_RAISE, KC_BSPC)
+#define LW_SPC LT(_LOWER, KC_SPC)
+#define MO_ADJ MO(_ADJUST)
+#define TG_PLV TG(_PLOVER)
+#define OS_LCTL OSM(MOD_LCTL)
+#define OS_LALT OSM(MOD_LALT)
+#define OS_LGUI OSM(MOD_LGUI)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_ortho_3x10(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RSFT,
+ ADJ_Z, KC_X, KC_C, KC_V, RS_BSPC, LW_SPC, KC_B, KC_N, KC_M, KC_ENT
+ ),
+
+ [_RAISE] = LAYOUT_ortho_3x10(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_7, KC_9, KC_0,
+ KC_ESC, KC_MINS, KC_EQL, _______, KC_LBRC, KC_RBRC, _______, KC_QUOT, KC_SCLN, _______,
+ OS_LCTL, OS_LGUI, OS_LALT, KC_GRV, _______, KC_TAB, KC_BSLS, KC_COMM, KC_DOT, KC_SLSH
+ ),
+
+ [_LOWER] = LAYOUT_ortho_3x10(
+ KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX,
+ KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______,
+ KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, OS_LALT, OS_LGUI, OS_LCTL, KC_CAPS
+ ),
+
+ [_PLOVER] = LAYOUT_ortho_3x10(
+ STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
+ STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
+ MO_ADJ, STN_NUM, STN_A, STN_O, STN_NUM, STN_E, STN_U, STN_NUM, STN_NUM, XXXXXXX
+ ),
+
+ [_ADJUST] = LAYOUT_ortho_3x10(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ST_BOLT, ST_GEM, TG_PLV,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET
+ ),
+
+};
diff --git a/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk
new file mode 100644
index 000000000..a64c606ae
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/keymaps/talljoe-gherkin/rules.mk
@@ -0,0 +1,2 @@
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER
diff --git a/keyboards/40percentclub/gherkin/readme.md b/keyboards/40percentclub/gherkin/readme.md
new file mode 100644
index 000000000..a6680d720
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/readme.md
@@ -0,0 +1,21 @@
+# Gherkin
+
+![Gherkin](https://4.bp.blogspot.com/-sQ18-lNZXOc/WCzlTde-4PI/AAAAAAAB_JQ/qQrehAMG6DMKf3i4oj4mkmLGOfTUvb3KgCLcB/s640/IMG_20161116_122926.jpg)
+===
+
+A 30 key keyboard.
+
+* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/gherkin)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Gherkin PCB
+Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/gherkin: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).
+
+First pass at adding support for the gherkin keyboard. Compiles but completely
+untested. Intended to kick-start development.
diff --git a/keyboards/40percentclub/gherkin/rules.mk b/keyboards/40percentclub/gherkin/rules.mk
new file mode 100644
index 000000000..1e0b34641
--- /dev/null
+++ b/keyboards/40percentclub/gherkin/rules.mk
@@ -0,0 +1,74 @@
+# 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
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
+
+LAYOUTS = ortho_3x10
diff --git a/keyboards/40percentclub/i75/config.h b/keyboards/40percentclub/i75/config.h
new file mode 100644
index 000000000..bc032ba45
--- /dev/null
+++ b/keyboards/40percentclub/i75/config.h
@@ -0,0 +1,192 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0A0C
+#define DEVICE_VER 0x0175
+#define MANUFACTURER di0ib
+#define PRODUCT i75
+#define DESCRIPTION i75 15x5 ortholinear keyboard
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/40percentclub/i75/i75.c b/keyboards/40percentclub/i75/i75.c
new file mode 100644
index 000000000..7efe3b454
--- /dev/null
+++ b/keyboards/40percentclub/i75/i75.c
@@ -0,0 +1,43 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "i75.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/40percentclub/i75/i75.h b/keyboards/40percentclub/i75/i75.h
new file mode 100644
index 000000000..a31c9f6e6
--- /dev/null
+++ b/keyboards/40percentclub/i75/i75.h
@@ -0,0 +1,24 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_40percentclub_i75_promicro
+ #include "promicro.h"
+#elif KEYBOARD_40percentclub_i75_teensy2
+ #include "teensy2.h"
+#endif
diff --git a/keyboards/40percentclub/i75/info.json b/keyboards/40percentclub/i75/info.json
new file mode 100644
index 000000000..033bf02bc
--- /dev/null
+++ b/keyboards/40percentclub/i75/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "i75",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ortho_5x15": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/40percentclub/i75/keymaps/default/config.h b/keyboards/40percentclub/i75/keymaps/default/config.h
new file mode 100644
index 000000000..6173b6327
--- /dev/null
+++ b/keyboards/40percentclub/i75/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/40percentclub/i75/keymaps/default/keymap.c b/keyboards/40percentclub/i75/keymaps/default/keymap.c
new file mode 100644
index 000000000..3054f8ebe
--- /dev/null
+++ b/keyboards/40percentclub/i75/keymaps/default/keymap.c
@@ -0,0 +1,66 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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_ortho_5x15( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_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, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/40percentclub/i75/keymaps/default/readme.md b/keyboards/40percentclub/i75/keymaps/default/readme.md
new file mode 100644
index 000000000..4d054181f
--- /dev/null
+++ b/keyboards/40percentclub/i75/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for i75
diff --git a/keyboards/40percentclub/i75/promicro/config.h b/keyboards/40percentclub/i75/promicro/config.h
new file mode 100644
index 000000000..bc9146328
--- /dev/null
+++ b/keyboards/40percentclub/i75/promicro/config.h
@@ -0,0 +1,40 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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"
+
+/* key matrix size */
+#define MATRIX_ROWS 9
+#define MATRIX_COLS 9
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B4, E6, D7, C6, D4, D0, D1, D2, D3 }
+#define MATRIX_COL_PINS { B5, B6, B2, B3, B1, F7, F6, F5, F4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/40percentclub/i75/promicro/promicro.c b/keyboards/40percentclub/i75/promicro/promicro.c
new file mode 100644
index 000000000..28684e714
--- /dev/null
+++ b/keyboards/40percentclub/i75/promicro/promicro.c
@@ -0,0 +1,16 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "i75.h"
diff --git a/keyboards/40percentclub/i75/promicro/promicro.h b/keyboards/40percentclub/i75/promicro/promicro.h
new file mode 100644
index 000000000..29394855a
--- /dev/null
+++ b/keyboards/40percentclub/i75/promicro/promicro.h
@@ -0,0 +1,47 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 "i75.h"
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_ortho_5x15( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, 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, K65, \
+ K66, K67, K68, K70, K71, K72, K73, K74, K75, K76, K77, K78, K80, K81, K82 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
+ { K10, K11, 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, K65, K66, K67, K68 }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77, K78 }, \
+ { K80, K81, K82 } \
+}
diff --git a/keyboards/40percentclub/i75/promicro/rules.mk b/keyboards/40percentclub/i75/promicro/rules.mk
new file mode 100644
index 000000000..dc6f19623
--- /dev/null
+++ b/keyboards/40percentclub/i75/promicro/rules.mk
@@ -0,0 +1,58 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = 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
diff --git a/keyboards/40percentclub/i75/readme.md b/keyboards/40percentclub/i75/readme.md
new file mode 100644
index 000000000..9bdad68ad
--- /dev/null
+++ b/keyboards/40percentclub/i75/readme.md
@@ -0,0 +1,28 @@
+# i75
+
+![i75](https://1.bp.blogspot.com/-eRSwPnvgliI/WCYQ-aYihoI/AAAAAAAB_Bc/a7i1Envc1FYiEHeqvyHw80VxTAnafDsPgCLcB/s320/IMG_20161003_084555.jpg)
+===
+
+5x15 grid layout, multiple controllers supported
+- Pro Micro
+- PJRC Teensy 2.0
+- PJRC Teensy LC/3.2 (**NB: Not currently ported**)
+
+The matrix is a 9x9 grid. This uses all of the available pins on the Pro Micro. The other controllers have pins left over. The serial pins and pins connected to LEDs were avoided if possible.
+
+* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/i75_ProMicro)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: i75 PCB
+Hardware Availability: [i75 project on 40% Keyboards](http://www.40percent.club/2016/11/i75.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/i75:default
+
+If you would like to use one of the alternative controllers:
+
+ make 40percentclub/i75/promicro:default
+ make 40percentclub/i75/teensy2: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/40percentclub/i75/rules.mk b/keyboards/40percentclub/i75/rules.mk
new file mode 100644
index 000000000..6f79143a1
--- /dev/null
+++ b/keyboards/40percentclub/i75/rules.mk
@@ -0,0 +1,23 @@
+# 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_5x15
+DEFAULT_FOLDER = 40percentclub/i75/promicro
diff --git a/keyboards/40percentclub/i75/teensy2/config.h b/keyboards/40percentclub/i75/teensy2/config.h
new file mode 100644
index 000000000..fdbde8d64
--- /dev/null
+++ b/keyboards/40percentclub/i75/teensy2/config.h
@@ -0,0 +1,40 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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"
+
+/* key matrix size */
+#define MATRIX_ROWS 9
+#define MATRIX_COLS 9
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D3, D2, D1, D0, B7, B3, B2, B1, B0 }
+#define MATRIX_COL_PINS { C6, C7, D6, D7, B5, B6, F7, F6, F5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/40percentclub/i75/teensy2/rules.mk b/keyboards/40percentclub/i75/teensy2/rules.mk
new file mode 100644
index 000000000..3fb7c7e5a
--- /dev/null
+++ b/keyboards/40percentclub/i75/teensy2/rules.mk
@@ -0,0 +1,58 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = halfkay
+
+
+# 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
diff --git a/keyboards/40percentclub/i75/teensy2/teensy2.c b/keyboards/40percentclub/i75/teensy2/teensy2.c
new file mode 100644
index 000000000..28684e714
--- /dev/null
+++ b/keyboards/40percentclub/i75/teensy2/teensy2.c
@@ -0,0 +1,16 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "i75.h"
diff --git a/keyboards/40percentclub/i75/teensy2/teensy2.h b/keyboards/40percentclub/i75/teensy2/teensy2.h
new file mode 100644
index 000000000..29394855a
--- /dev/null
+++ b/keyboards/40percentclub/i75/teensy2/teensy2.h
@@ -0,0 +1,47 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 "i75.h"
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_ortho_5x15( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, 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, K65, \
+ K66, K67, K68, K70, K71, K72, K73, K74, K75, K76, K77, K78, K80, K81, K82 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08 }, \
+ { K10, K11, 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, K65, K66, K67, K68 }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77, K78 }, \
+ { K80, K81, K82 } \
+}
diff --git a/keyboards/40percentclub/luddite/config.h b/keyboards/40percentclub/luddite/config.h
new file mode 100644
index 000000000..62ff72bb0
--- /dev/null
+++ b/keyboards/40percentclub/luddite/config.h
@@ -0,0 +1,48 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0A0C
+#define DEVICE_VER 0x1001
+#define MANUFACTURER di0ib
+#define PRODUCT Luddite
+#define DESCRIPTION Luddite Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 8
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D3, D2, D1, D0, D4, C6, D7, E6 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6 }
+#define UNUSED_PINS
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B5
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 4
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN B4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8 // Number of LEDs
+// #define RGBLIGHT_HUE_STEP 10
+// #define RGBLIGHT_SAT_STEP 17
+// #define RGBLIGHT_VAL_STEP 17
diff --git a/keyboards/40percentclub/luddite/info.json b/keyboards/40percentclub/luddite/info.json
new file mode 100644
index 000000000..51d71ec77
--- /dev/null
+++ b/keyboards/40percentclub/luddite/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "foobar",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/40percentclub/luddite/keymaps/default/keymap.c b/keyboards/40percentclub/luddite/keymaps/default/keymap.c
new file mode 100644
index 000000000..4d6ae0d52
--- /dev/null
+++ b/keyboards/40percentclub/luddite/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+#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 _BASE 0
+#define _FN1 1
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_60_ansi(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL , KC_LGUI , KC_LALT , KC_SPC , KC_RALT , KC_RGUI , MO(_FN1) , KC_RCTL
+ ),
+
+ [_FN1] = LAYOUT_60_ansi(
+ KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, \
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
+ BL_INC, BL_DEC, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/40percentclub/luddite/luddite.c b/keyboards/40percentclub/luddite/luddite.c
new file mode 100644
index 000000000..3e720ad57
--- /dev/null
+++ b/keyboards/40percentclub/luddite/luddite.c
@@ -0,0 +1 @@
+#include "luddite.h"
diff --git a/keyboards/40percentclub/luddite/luddite.h b/keyboards/40percentclub/luddite/luddite.h
new file mode 100644
index 000000000..1ba743e9e
--- /dev/null
+++ b/keyboards/40percentclub/luddite/luddite.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_60_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K10, K11, K12, K13, K14, K15, \
+ K16, K17, K20, K21, K22, K23, K24, K25, K26, K27, K30, K31, K32, K33, \
+ K34, K35, K36, K37, K40, K41, K42, K43, K44, K45, K46, K47, K50, \
+ K51, K52, K53, K54, K55, K56, K57, K60, K61, K62, K63, K64, \
+ K65, K66, K67, K70, K71, K72, K73, K74\
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37 }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { K70, K71, K72, K73, K74 }, \
+}
+
diff --git a/keyboards/40percentclub/luddite/readme.md b/keyboards/40percentclub/luddite/readme.md
new file mode 100644
index 000000000..928b6de8f
--- /dev/null
+++ b/keyboards/40percentclub/luddite/readme.md
@@ -0,0 +1,21 @@
+# Luddite
+
+![Luddite](https://1.bp.blogspot.com/-GAAa-sMU_WU/W7uYLJJ8x1I/AAAAAAACS44/31n2z69BSboM4KT48YkNMJRYciC8LUMWgCLcBGAs/s640/a.jpg)
+===
+
+Luddite 60% keyboard with backlight and RGB underglow.
+
+* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/luddite)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Luddite PCB
+Hardware Availability: [Luddite project on 40% Keyboards](http://www.40percent.club/search/label/luddite)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/luddite: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).
+
+First pass at adding support for the luddite keyboard. Compiles but completely
+untested. Intended to kick-start development.
diff --git a/keyboards/40percentclub/luddite/rules.mk b/keyboards/40percentclub/luddite/rules.mk
new file mode 100644
index 000000000..8dff21f9a
--- /dev/null
+++ b/keyboards/40percentclub/luddite/rules.mk
@@ -0,0 +1,74 @@
+# 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
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
+
+LAYOUTS = 60_ansi
diff --git a/keyboards/40percentclub/mf68/config.h b/keyboards/40percentclub/mf68/config.h
new file mode 100644
index 000000000..22d987e52
--- /dev/null
+++ b/keyboards/40percentclub/mf68/config.h
@@ -0,0 +1,159 @@
+/*
+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 0xCEEB
+#define PRODUCT_ID 0x0510
+#define DEVICE_VER 0x0101
+#define MANUFACTURER di0ib
+#define PRODUCT MF68
+#define DESCRIPTION Magicforce 68 with programmable PCB replacement
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 9
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7, F6, F5, F4 }
+#define MATRIX_COL_PINS { D3, D2, D1, D0, D4, C6, D7, E6, B4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/40percentclub/mf68/info.json b/keyboards/40percentclub/mf68/info.json
new file mode 100644
index 000000000..fae15aaf5
--- /dev/null
+++ b/keyboards/40percentclub/mf68/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "MF68",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 17.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_68_ansi": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/config.h b/keyboards/40percentclub/mf68/keymaps/68keys/config.h
new file mode 100644
index 000000000..a0a576b7b
--- /dev/null
+++ b/keyboards/40percentclub/mf68/keymaps/68keys/config.h
@@ -0,0 +1,15 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#undef VENDOR_ID
+#undef PRODUCT_ID
+#undef DEVICE_VER
+#undef MANUFACTURER
+#undef PRODUCT
+#undef DESCRIPTION
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0A0C
+#define DEVICE_VER 0x0068
+#define MANUFACTURER 68Keys.io
+#define PRODUCT The 68Keys.io Keyboard
+#define DESCRIPTION A 68 keys mechanical keyboard
diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/keymap.c b/keyboards/40percentclub/mf68/keymaps/68keys/keymap.c
new file mode 100644
index 000000000..3778ea21e
--- /dev/null
+++ b/keyboards/40percentclub/mf68/keymaps/68keys/keymap.c
@@ -0,0 +1,11 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_68_ansi(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_ESC, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
+ KC_CAPSLOCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/readme.md b/keyboards/40percentclub/mf68/keymaps/68keys/readme.md
new file mode 100644
index 000000000..4b7cdf125
--- /dev/null
+++ b/keyboards/40percentclub/mf68/keymaps/68keys/readme.md
@@ -0,0 +1,23 @@
+# 68Keys.io
+
+Custom [68Keys.io](https://68keys.io) DIY keyboard.
+
+Keymap Maintainer: [sbstjn](https://sbstjn.com)
+Hardware Supported: mf68
+Hardware Availability: [DIY Guide](https://68keys.io)
+
+Make example for this keyboard (after setting up your build environment):
+
+```bash
+$ > cd qmk_firmware/
+$ > make 40percentclub/mf68:68keys
+```
+
+Example of flashing this keyboard:
+
+```bash
+$ > cd qmk_firmware/
+$ > make 40percentclub/mf68:68keys:avrdude
+```
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/rules.mk b/keyboards/40percentclub/mf68/keymaps/68keys/rules.mk
new file mode 100644
index 000000000..96ce13fe7
--- /dev/null
+++ b/keyboards/40percentclub/mf68/keymaps/68keys/rules.mk
@@ -0,0 +1,5 @@
+BOOTLOADER = atmel-dfu
+
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = no
+BACKLIGHT_ENABLE = no
diff --git a/keyboards/40percentclub/mf68/keymaps/default/keymap.c b/keyboards/40percentclub/mf68/keymaps/default/keymap.c
new file mode 100644
index 000000000..ae7e7297c
--- /dev/null
+++ b/keyboards/40percentclub/mf68/keymaps/default/keymap.c
@@ -0,0 +1,53 @@
+#include QMK_KEYBOARD_H
+
+#define _QWERTY 0
+#define _FN1 1
+#define _FN2 2
+#define KC_ KC_TRNS
+#define KC_X0 LT(_FN2, KC_GRV)
+#define KC_X1 MO(_FN1)
+#define KC_X2 BL_STEP
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
+ ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL , BSPC , INS ,PGUP,
+ /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------| |----`----| */
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,LBRC,RBRC, BSLS , DEL ,PGDN,
+ /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------| `----`----' */
+ X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT, ENTER ,
+ /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------| ,----. */
+ LSFT , Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, RSFT , UP ,
+ /*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */
+ LCTL ,LGUI ,LALT , SPACE , X1 ,RALT ,RCTL , LEFT,DOWN,RGHT
+ /*`-----+-----+-----+------------------------------+------+-----+-----' `----+----+----' */
+ ),
+
+ [_FN1] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
+ GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
+ /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
+ , , , UP , , , , , , , , , X2 , , VOLD,END,
+ /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
+ , ,LEFT,DOWN,RGHT, , , , , , , , ,
+ /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
+ , , , , , , ,MUTE, , , , , MUTE,
+ /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
+ , , , , , , , MPRV,MPLY,MNXT
+ /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
+ ),
+
+ [_FN2] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
+ GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
+ /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
+ , , , UP , , , , 7 , 8 , 9 , , , , , VOLD,END,
+ /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
+ , ,LEFT,DOWN,RGHT, , , 4 , 5 , 6 , , , ,
+ /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
+ , , , , , , 0 , 1 , 2 , 3 , , , MUTE,
+ /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
+ , , , , , , , MPRV,MPLY,MNXT
+ /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
+ )
+};
diff --git a/keyboards/40percentclub/mf68/keymaps/factory/keymap.c b/keyboards/40percentclub/mf68/keymaps/factory/keymap.c
new file mode 100644
index 000000000..12032350c
--- /dev/null
+++ b/keyboards/40percentclub/mf68/keymaps/factory/keymap.c
@@ -0,0 +1,59 @@
+#include QMK_KEYBOARD_H
+
+#define _QWERTY 0
+#define _FN1 1
+#define _FN2 2
+#define KC_ KC_TRNS
+#define KC_X0 LT(_FN2, KC_CAPS)
+#define KC_X1 MO(_FN1)
+#define KC_X2 BL_STEP
+#define KC_X3 BL_BRTG
+#define KC_X4 BL_TOGG
+#define KC_X5 BL_INC
+#define KC_X6 BL_DEC
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
+ ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL , BSPC , INS ,PGUP,
+ /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------| |----`----| */
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,LBRC,RBRC, BSLS , DEL ,PGDN,
+ /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------| `----`----' */
+ X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT, ENTER ,
+ /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------| ,----. */
+ LSFT , Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, RSFT , UP ,
+ /*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */
+ LCTL ,LGUI ,LALT , SPACE , X1 ,RALT ,RCTL , LEFT,DOWN,RGHT
+ /*`-----+-----+-----+------------------------------+------+-----+-----' `----+----+----' */
+ ),
+
+ [_FN1] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
+ GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , ,HOME,
+ /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
+ , , UP , , , , , , ,PSCR,SLCK,PAUS, X2 , , ,END,
+ /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
+ X0 ,LEFT,DOWN,RGHT, , X6 , X5 , X4 , X3 , X2 ,HOME, , ,
+ /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
+ , ,MPLY,MSTP,MPRV,MNXT,VOLD,VOLU,MUTE, ,END , , X5 ,
+ /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
+ , , , , , , , X3 , X6 , X4
+ /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
+ ),
+
+ [_FN2] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
+ GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
+ /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
+ , , , UP , , , , 7 , 8 , 9 , , , , , VOLD,END,
+ /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
+ , ,LEFT,DOWN,RGHT, , , 4 , 5 , 6 , , , ,
+ /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
+ , , , , , , 0 , 1 , 2 , 3 , , , MUTE,
+ /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
+ , , , , , , , MPRV,MPLY,MNXT
+ /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
+ )
+};
diff --git a/keyboards/mf68/mf68.c b/keyboards/40percentclub/mf68/mf68.c
index 1da522e7e..1da522e7e 100644
--- a/keyboards/mf68/mf68.c
+++ b/keyboards/40percentclub/mf68/mf68.c
diff --git a/keyboards/mf68/mf68.h b/keyboards/40percentclub/mf68/mf68.h
index a7aefc647..a34f9cde8 100644
--- a/keyboards/mf68/mf68.h
+++ b/keyboards/40percentclub/mf68/mf68.h
@@ -1,9 +1,8 @@
-#ifndef MF68_H
-#define MF68_H
+#pragma once
#include "quantum.h"
-#define LAYOUT( \
+#define LAYOUT_68_ansi( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, 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, \
@@ -26,7 +25,7 @@
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, K65, K66, K67, K68, K70, K71, K72, K73, K74 \
-) LAYOUT( \
+) LAYOUT_68_ansi( \
KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, \
KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, \
KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, \
@@ -36,5 +35,3 @@
KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, KC_##K68, \
KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74 \
)
-
-#endif
diff --git a/keyboards/40percentclub/mf68/readme.md b/keyboards/40percentclub/mf68/readme.md
new file mode 100644
index 000000000..825c265f1
--- /dev/null
+++ b/keyboards/40percentclub/mf68/readme.md
@@ -0,0 +1,18 @@
+# mf68
+
+![mf68](https://3.bp.blogspot.com/-0YCA3Hx2Rq0/WD3U3GWhyvI/AAAAAAAB_Uo/RWTeyCPblGcxDrDwT9WL9ck2ZRuR26DgACLcB/s640/IMG_20161129_063741.jpg)
+===
+
+Magicforce 68 with [replacement PCB](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68) designed by [di0ib](https://github.com/di0ib).
+
+* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Pro Micro
+Hardware Availability: [PCB files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68/pcb)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/mf68: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/40percentclub/mf68/rules.mk b/keyboards/40percentclub/mf68/rules.mk
new file mode 100644
index 000000000..38c9f517b
--- /dev/null
+++ b/keyboards/40percentclub/mf68/rules.mk
@@ -0,0 +1,78 @@
+# 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 = yes # 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
+
+LAYOUTS = 68_ansi
diff --git a/keyboards/40percentclub/mf68_ble/config.h b/keyboards/40percentclub/mf68_ble/config.h
new file mode 100644
index 000000000..e7edd77fe
--- /dev/null
+++ b/keyboards/40percentclub/mf68_ble/config.h
@@ -0,0 +1,159 @@
+/*
+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 0xCEEB
+#define PRODUCT_ID 0x0510
+#define DEVICE_VER 0x0101
+#define MANUFACTURER di0ib
+#define PRODUCT MF68
+#define DESCRIPTION Magicforce 68 BLE
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 9
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D1, D0, C6, D7, B5, B6, B7, D6 }
+#define MATRIX_COL_PINS { C7, F7, F6, F5, F4, F1, F0, D2, D3 }
+#define UNUSED_PINS {B5}
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+/*
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+*/
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/40percentclub/mf68_ble/info.json b/keyboards/40percentclub/mf68_ble/info.json
new file mode 100644
index 000000000..4cd9b2c83
--- /dev/null
+++ b/keyboards/40percentclub/mf68_ble/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "MF68 BLE",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 17.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_68_ansi": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c b/keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c
new file mode 100644
index 000000000..ae7e7297c
--- /dev/null
+++ b/keyboards/40percentclub/mf68_ble/keymaps/default/keymap.c
@@ -0,0 +1,53 @@
+#include QMK_KEYBOARD_H
+
+#define _QWERTY 0
+#define _FN1 1
+#define _FN2 2
+#define KC_ KC_TRNS
+#define KC_X0 LT(_FN2, KC_GRV)
+#define KC_X1 MO(_FN1)
+#define KC_X2 BL_STEP
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
+ ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL , BSPC , INS ,PGUP,
+ /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------| |----`----| */
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,LBRC,RBRC, BSLS , DEL ,PGDN,
+ /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------| `----`----' */
+ X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT, ENTER ,
+ /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------| ,----. */
+ LSFT , Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, RSFT , UP ,
+ /*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */
+ LCTL ,LGUI ,LALT , SPACE , X1 ,RALT ,RCTL , LEFT,DOWN,RGHT
+ /*`-----+-----+-----+------------------------------+------+-----+-----' `----+----+----' */
+ ),
+
+ [_FN1] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
+ GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
+ /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
+ , , , UP , , , , , , , , , X2 , , VOLD,END,
+ /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
+ , ,LEFT,DOWN,RGHT, , , , , , , , ,
+ /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
+ , , , , , , ,MUTE, , , , , MUTE,
+ /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
+ , , , , , , , MPRV,MPLY,MNXT
+ /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
+ ),
+
+ [_FN2] = LAYOUT_kc(
+ /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
+ GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
+ /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
+ , , , UP , , , , 7 , 8 , 9 , , , , , VOLD,END,
+ /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
+ , ,LEFT,DOWN,RGHT, , , 4 , 5 , 6 , , , ,
+ /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
+ , , , , , , 0 , 1 , 2 , 3 , , , MUTE,
+ /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
+ , , , , , , , MPRV,MPLY,MNXT
+ /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
+ )
+};
diff --git a/keyboards/mf68_ble/mf68_ble.c b/keyboards/40percentclub/mf68_ble/mf68_ble.c
index 95f8592f8..95f8592f8 100644
--- a/keyboards/mf68_ble/mf68_ble.c
+++ b/keyboards/40percentclub/mf68_ble/mf68_ble.c
diff --git a/keyboards/mf68_ble/mf68_ble.h b/keyboards/40percentclub/mf68_ble/mf68_ble.h
index fa17a9390..a34f9cde8 100644
--- a/keyboards/mf68_ble/mf68_ble.h
+++ b/keyboards/40percentclub/mf68_ble/mf68_ble.h
@@ -1,9 +1,8 @@
-#ifndef MF68_BLE_H
-#define MF68_BLE_H
+#pragma once
#include "quantum.h"
-#define LAYOUT( \
+#define LAYOUT_68_ansi( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, 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, \
@@ -26,7 +25,7 @@
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, K65, K66, K67, K68, K70, K71, K72, K73, K74 \
-) LAYOUT( \
+) LAYOUT_68_ansi( \
KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, \
KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, \
KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, \
@@ -36,5 +35,3 @@
KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, KC_##K68, \
KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74 \
)
-
-#endif
diff --git a/keyboards/40percentclub/mf68_ble/readme.md b/keyboards/40percentclub/mf68_ble/readme.md
new file mode 100644
index 000000000..0e0f4b90d
--- /dev/null
+++ b/keyboards/40percentclub/mf68_ble/readme.md
@@ -0,0 +1,29 @@
+# mf68_ble
+
+![mf68_ble](https://3.bp.blogspot.com/-0YCA3Hx2Rq0/WD3U3GWhyvI/AAAAAAAB_Uo/RWTeyCPblGcxDrDwT9WL9ck2ZRuR26DgACLcB/s640/IMG_20161129_063741.jpg)
+===
+
+Magicforce 68 with [replacement PCB](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68) designed by [di0ib](https://github.com/di0ib).
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: [Feather 32u4 Bluefruit](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/)
+Please note: This is 32u4 and not M0
+Hardware Availability: [PCB files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68/pcb)
+[MF68 thicc case files](https://github.com/harshitgoel96/mf68-case-thicc)
+Story
+-----
+
+The story and the idea behind this mod is available on [my reddit post](https://www.reddit.com/r/MechanicalKeyboards/comments/7eiiht/guide_i_built_a_bluetooth_enabled_magicforce68_no/)
+
+Wiring
+------
+
+Below is how you wire the Feather to PCB
+
+![wire map](https://i.imgur.com/zYOjlTA.png)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/mf68_ble: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/40percentclub/mf68_ble/rules.mk b/keyboards/40percentclub/mf68_ble/rules.mk
new file mode 100644
index 000000000..2ca811833
--- /dev/null
+++ b/keyboards/40percentclub/mf68_ble/rules.mk
@@ -0,0 +1,79 @@
+# 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 = 8000000
+
+
+#
+# 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
+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
+
+BLUETOOTH = AdafruitBLE
diff --git a/keyboards/40percentclub/nano/config.h b/keyboards/40percentclub/nano/config.h
new file mode 100644
index 000000000..36840d2f6
--- /dev/null
+++ b/keyboards/40percentclub/nano/config.h
@@ -0,0 +1,42 @@
+/*
+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 0xCEEB
+#define PRODUCT_ID 0x0007
+#define DEVICE_VER 0x0001
+#define MANUFACTURER di0ib
+#define PRODUCT Nano
+#define DESCRIPTION 8 key microswitch board
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 4
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 6 // Number of LEDs
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define TAPPING_TERM 200
diff --git a/keyboards/nano/info.json b/keyboards/40percentclub/nano/info.json
index b135a2d09..b135a2d09 100644
--- a/keyboards/nano/info.json
+++ b/keyboards/40percentclub/nano/info.json
diff --git a/keyboards/40percentclub/nano/keymaps/default/keymap.c b/keyboards/40percentclub/nano/keymaps/default/keymap.c
new file mode 100644
index 000000000..9ce282a28
--- /dev/null
+++ b/keyboards/40percentclub/nano/keymaps/default/keymap.c
@@ -0,0 +1,18 @@
+#include QMK_KEYBOARD_H
+
+#define _MAIN 0
+#define _FN 1
+
+#define KC_X0 LT(_FN, KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_MAIN] = LAYOUT(
+ KC_VOLU, KC_MPLY, KC_MPRV, KC_PGUP,
+ KC_VOLD, KC_MUTE, KC_MNXT, KC_PGDN
+ ),
+
+ [_FN] = LAYOUT(
+ KC_F, _______, RGB_HUI, _______,
+ RGB_TOG, RGB_MOD, RGB_HUD, _______
+ )
+};
diff --git a/keyboards/planck/keymaps/guidoism/rules.mk b/keyboards/40percentclub/nano/keymaps/default/rules.mk
index e69de29bb..e69de29bb 100644
--- a/keyboards/planck/keymaps/guidoism/rules.mk
+++ b/keyboards/40percentclub/nano/keymaps/default/rules.mk
diff --git a/keyboards/40percentclub/nano/keymaps/spooka/config.h b/keyboards/40percentclub/nano/keymaps/spooka/config.h
new file mode 100644
index 000000000..05900a215
--- /dev/null
+++ b/keyboards/40percentclub/nano/keymaps/spooka/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2018 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#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/40percentclub/nano/keymaps/spooka/keymap.c b/keyboards/40percentclub/nano/keymaps/spooka/keymap.c
new file mode 100644
index 000000000..7908794fe
--- /dev/null
+++ b/keyboards/40percentclub/nano/keymaps/spooka/keymap.c
@@ -0,0 +1,10 @@
+#include QMK_KEYBOARD_H
+
+#define _MAIN 0
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_MAIN] = LAYOUT(
+ RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI,
+ RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD
+ )
+};
diff --git a/keyboards/40percentclub/nano/keymaps/spooka/rules.mk b/keyboards/40percentclub/nano/keymaps/spooka/rules.mk
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/keyboards/40percentclub/nano/keymaps/spooka/rules.mk
@@ -0,0 +1 @@
+
diff --git a/keyboards/nano/matrix.c b/keyboards/40percentclub/nano/matrix.c
index fa2461af5..fa2461af5 100644
--- a/keyboards/nano/matrix.c
+++ b/keyboards/40percentclub/nano/matrix.c
diff --git a/keyboards/nano/nano.c b/keyboards/40percentclub/nano/nano.c
index 63e23545e..63e23545e 100644
--- a/keyboards/nano/nano.c
+++ b/keyboards/40percentclub/nano/nano.c
diff --git a/keyboards/nano/nano.h b/keyboards/40percentclub/nano/nano.h
index 21d6c4f30..ae297ac12 100644
--- a/keyboards/nano/nano.h
+++ b/keyboards/40percentclub/nano/nano.h
@@ -1,5 +1,4 @@
-#ifndef NANO_H
-#define NANO_H
+#pragma once
#include "quantum.h"
@@ -10,5 +9,3 @@
{ k01, k02, k03, k04 }, \
{ k05, k06, k07, k08 } \
}
-
-#endif
diff --git a/keyboards/40percentclub/nano/readme.md b/keyboards/40percentclub/nano/readme.md
new file mode 100644
index 000000000..2677e5b7b
--- /dev/null
+++ b/keyboards/40percentclub/nano/readme.md
@@ -0,0 +1,16 @@
+# nano
+
+![nano](https://1.bp.blogspot.com/-goa_eXx1McA/WEhvoSdfDSI/AAAAAAAB_bM/XdstcXe_eKkQxuYcNI5cTySTVo3xZxaeQCEw/s640/IMG_20161207_101051.jpg)
+===
+
+A 2x4 mini switch pad built using 6mm x 6mm tactile switches and a Pro Micro. [More info here.](http://www.40percent.club/2016/12/nano-tmk.html)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Pro Micro ATmega32U4
+Hardware Availability: [PCB Files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/nano/pcb)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/nano: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/40percentclub/nano/rules.mk b/keyboards/40percentclub/nano/rules.mk
new file mode 100644
index 000000000..66ad3ffc6
--- /dev/null
+++ b/keyboards/40percentclub/nano/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 = 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 to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = yes # 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
+
+# custom matrix setup
+SRC = matrix.c
+CUSTOM_MATRIX = yes
diff --git a/keyboards/40percentclub/nori/config.h b/keyboards/40percentclub/nori/config.h
new file mode 100644
index 000000000..9232344bf
--- /dev/null
+++ b/keyboards/40percentclub/nori/config.h
@@ -0,0 +1,221 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0A0C
+#define DEVICE_VER 0x0444
+#define MANUFACTURER di0ib
+#define PRODUCT The nori Keyboard
+#define DESCRIPTION A modular compact keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D3, D2, D1, D0 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6, D4, C6, D7, E6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B5
+//#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+// enable RGB underglow
+#define RGB_DI_PIN B4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 10
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
diff --git a/keyboards/40percentclub/nori/info.json b/keyboards/40percentclub/nori/info.json
new file mode 100644
index 000000000..db0d6aaad
--- /dev/null
+++ b/keyboards/40percentclub/nori/info.json
@@ -0,0 +1,117 @@
+{
+ "keyboard_name": "nori",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x4": {
+ "key_count": 16,
+ "layout": [
+ { "w": 1, "x": 0, "y": 0 },
+ { "w": 1, "x": 1, "y": 0 },
+ { "w": 1, "x": 2, "y": 0 },
+ { "w": 1, "x": 3, "y": 0 },
+ { "w": 1, "x": 0, "y": 1 },
+ { "w": 1, "x": 1, "y": 1 },
+ { "w": 1, "x": 2, "y": 1 },
+ { "w": 1, "x": 3, "y": 1 },
+ { "w": 1, "x": 0, "y": 2 },
+ { "w": 1, "x": 1, "y": 2 },
+ { "w": 1, "x": 2, "y": 2 },
+ { "w": 1, "x": 3, "y": 2 },
+ { "w": 1, "x": 0, "y": 3 },
+ { "w": 1, "x": 1, "y": 3 },
+ { "w": 1, "x": 2, "y": 3 },
+ { "w": 1, "x": 3, "y": 3 } ]
+ },
+ "LAYOUT_ortho_4x8": {
+ "key_count": 32,
+ "layout": [
+ { "w": 1, "x": 0, "y": 0 },
+ { "w": 1, "x": 1, "y": 0 },
+ { "w": 1, "x": 2, "y": 0 },
+ { "w": 1, "x": 3, "y": 0 },
+ { "w": 1, "x": 4, "y": 0 },
+ { "w": 1, "x": 5, "y": 0 },
+ { "w": 1, "x": 6, "y": 0 },
+ { "w": 1, "x": 7, "y": 0 },
+ { "w": 1, "x": 0, "y": 1 },
+ { "w": 1, "x": 1, "y": 1 },
+ { "w": 1, "x": 2, "y": 1 },
+ { "w": 1, "x": 3, "y": 1 },
+ { "w": 1, "x": 4, "y": 1 },
+ { "w": 1, "x": 5, "y": 1 },
+ { "w": 1, "x": 6, "y": 1 },
+ { "w": 1, "x": 7, "y": 1 },
+ { "w": 1, "x": 0, "y": 2 },
+ { "w": 1, "x": 1, "y": 2 },
+ { "w": 1, "x": 2, "y": 2 },
+ { "w": 1, "x": 3, "y": 2 },
+ { "w": 1, "x": 4, "y": 2 },
+ { "w": 1, "x": 5, "y": 2 },
+ { "w": 1, "x": 6, "y": 2 },
+ { "w": 1, "x": 7, "y": 2 },
+ { "w": 1, "x": 0, "y": 3 },
+ { "w": 1, "x": 1, "y": 3 },
+ { "w": 1, "x": 2, "y": 3 },
+ { "w": 1, "x": 3, "y": 3 },
+ { "w": 1, "x": 4, "y": 3 },
+ { "w": 1, "x": 5, "y": 3 },
+ { "w": 1, "x": 6, "y": 3 },
+ { "w": 1, "x": 7, "y": 3 } ]
+ },
+ "LAYOUT_ortho_4x12": {
+ "key_count": 48,
+ "layout": [
+ { "w": 1, "x": 0, "y": 0 },
+ { "w": 1, "x": 1, "y": 0 },
+ { "w": 1, "x": 2, "y": 0 },
+ { "w": 1, "x": 3, "y": 0 },
+ { "w": 1, "x": 4, "y": 0 },
+ { "w": 1, "x": 5, "y": 0 },
+ { "w": 1, "x": 6, "y": 0 },
+ { "w": 1, "x": 7, "y": 0 },
+ { "w": 1, "x": 8, "y": 0 },
+ { "w": 1, "x": 9, "y": 0 },
+ { "w": 1, "x": 10, "y": 0 },
+ { "w": 1, "x": 11, "y": 0 },
+ { "w": 1, "x": 0, "y": 1 },
+ { "w": 1, "x": 1, "y": 1 },
+ { "w": 1, "x": 2, "y": 1 },
+ { "w": 1, "x": 3, "y": 1 },
+ { "w": 1, "x": 4, "y": 1 },
+ { "w": 1, "x": 5, "y": 1 },
+ { "w": 1, "x": 6, "y": 1 },
+ { "w": 1, "x": 7, "y": 1 },
+ { "w": 1, "x": 8, "y": 1 },
+ { "w": 1, "x": 9, "y": 1 },
+ { "w": 1, "x": 10, "y": 1 },
+ { "w": 1, "x": 11, "y": 1 },
+ { "w": 1, "x": 0, "y": 2 },
+ { "w": 1, "x": 1, "y": 2 },
+ { "w": 1, "x": 2, "y": 2 },
+ { "w": 1, "x": 3, "y": 2 },
+ { "w": 1, "x": 4, "y": 2 },
+ { "w": 1, "x": 5, "y": 2 },
+ { "w": 1, "x": 6, "y": 2 },
+ { "w": 1, "x": 7, "y": 2 },
+ { "w": 1, "x": 8, "y": 2 },
+ { "w": 1, "x": 9, "y": 2 },
+ { "w": 1, "x": 10, "y": 2 },
+ { "w": 1, "x": 11, "y": 2 },
+ { "w": 1, "x": 0, "y": 3 },
+ { "w": 1, "x": 1, "y": 3 },
+ { "w": 1, "x": 2, "y": 3 },
+ { "w": 1, "x": 3, "y": 3 },
+ { "w": 1, "x": 4, "y": 3 },
+ { "w": 1, "x": 5, "y": 3 },
+ { "w": 1, "x": 6, "y": 3 },
+ { "w": 1, "x": 7, "y": 3 },
+ { "w": 1, "x": 8, "y": 3 },
+ { "w": 1, "x": 9, "y": 3 },
+ { "w": 1, "x": 10, "y": 3 },
+ { "w": 1, "x": 11, "y": 3 } ]
+ }
+ }
+}
diff --git a/keyboards/40percentclub/nori/keymaps/default/config.h b/keyboards/40percentclub/nori/keymaps/default/config.h
new file mode 100644
index 000000000..90831ff34
--- /dev/null
+++ b/keyboards/40percentclub/nori/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
+#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
diff --git a/keyboards/40percentclub/nori/keymaps/default/keymap.c b/keyboards/40percentclub/nori/keymaps/default/keymap.c
new file mode 100644
index 000000000..3c225a0d9
--- /dev/null
+++ b/keyboards/40percentclub/nori/keymaps/default/keymap.c
@@ -0,0 +1,159 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define ADJUST MO(_ADJUST)
+
+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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower | 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_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | 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_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_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 |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/40percentclub/nori/keymaps/default/readme.md b/keyboards/40percentclub/nori/keymaps/default/readme.md
new file mode 100644
index 000000000..4a55a35e4
--- /dev/null
+++ b/keyboards/40percentclub/nori/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap
diff --git a/keyboards/40percentclub/nori/keymaps/macro/config.h b/keyboards/40percentclub/nori/keymaps/macro/config.h
new file mode 100644
index 000000000..03f34d3f5
--- /dev/null
+++ b/keyboards/40percentclub/nori/keymaps/macro/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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
+#undef RGBLED_NUM
+#define RGBLED_NUM 4
diff --git a/keyboards/40percentclub/nori/keymaps/macro/keymap.c b/keyboards/40percentclub/nori/keymaps/macro/keymap.c
new file mode 100644
index 000000000..14dc0b678
--- /dev/null
+++ b/keyboards/40percentclub/nori/keymaps/macro/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4x4( /* Base */
+ KC_INT1, KC_INT2, KC_INT3, KC_INT5, \
+ KC_F13, KC_F14, KC_F15, KC_F16, \
+ KC_F17, KC_F18, KC_F19, KC_F20, \
+ KC_F21, KC_F22, KC_F23, KC_F24 \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/40percentclub/nori/keymaps/macro/readme.md b/keyboards/40percentclub/nori/keymaps/macro/readme.md
new file mode 100644
index 000000000..de2324248
--- /dev/null
+++ b/keyboards/40percentclub/nori/keymaps/macro/readme.md
@@ -0,0 +1 @@
+# The default single board macro keymap for nori
diff --git a/keyboards/40percentclub/nori/nori.c b/keyboards/40percentclub/nori/nori.c
new file mode 100644
index 000000000..9d27df7a5
--- /dev/null
+++ b/keyboards/40percentclub/nori/nori.c
@@ -0,0 +1,43 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "nori.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/40percentclub/nori/nori.h b/keyboards/40percentclub/nori/nori.h
new file mode 100644
index 000000000..802f0bfce
--- /dev/null
+++ b/keyboards/40percentclub/nori/nori.h
@@ -0,0 +1,69 @@
+/* Copyright 2018
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+#define ___ KC_NO
+
+#define LAYOUT_ortho_4x4( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, K23, \
+ K30, K31, K32, K33 \
+) \
+{ \
+ { K00, K01, K02, K03, ___, ___, ___, ___, ___, ___, ___, ___ }, \
+ { K10, K11, K12, K13, ___, ___, ___, ___, ___, ___, ___, ___ }, \
+ { K20, K21, K22, K23, ___, ___, ___, ___, ___, ___, ___, ___ }, \
+ { K30, K31, K32, K33, ___, ___, ___, ___, ___, ___, ___, ___ } \
+}
+#define LAYOUT_ortho_4x8( \
+ K00, K01, K02, K03, K04, K05, K06, K07, \
+ K10, K11, K12, K13, K14, K15, K16, K17, \
+ K20, K21, K22, K23, K24, K25, K26, K27, \
+ K30, K31, K32, K33, K34, K35, K36, K37\
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, ___, ___, ___, ___ }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, ___, ___, ___, ___ }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, ___, ___, ___, ___ }, \
+ { K30, K31, K32, K33, K34, K35, K35, K37, ___, ___, ___, ___ } \
+}
+#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_kc_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 \
+) \
+{ \
+ { KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K0a, KC_##K0b }, \
+ { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1a, KC_##K1b }, \
+ { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2a, KC_##K2b }, \
+ { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3a, KC_##K3b } \
+}
diff --git a/keyboards/40percentclub/nori/readme.md b/keyboards/40percentclub/nori/readme.md
new file mode 100644
index 000000000..3dd8afff4
--- /dev/null
+++ b/keyboards/40percentclub/nori/readme.md
@@ -0,0 +1,18 @@
+# nori
+
+![nori](https://2.bp.blogspot.com/-UBFz3c1-8hM/W48N0ynt6TI/AAAAAAACSQg/MHLY-DchBBMiiHUeIPVt_4T6x-ntmdjgwCEwYBhgL/s640/a.jpg)
+===
+
+A 4x12 matrix using 3 modular 4x4 matrix boards and powered by a Pro Micro.
+
+this one is using a Pro Micro. The Pro Micro has less data pins available so only 3 boards can be connected instead of 4. There are 2 pins left over, I used one (B5) for a backlight circuit like on a Gherkin. The other data pin (B4) is left for possible use with a WS2812B strip.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: nori PCB
+Hardware Availability: [nori project on 40% Keyboards](https://www.40percent.club/2018/10/nori.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/nori: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/40percentclub/nori/rules.mk b/keyboards/40percentclub/nori/rules.mk
new file mode 100644
index 000000000..f52135379
--- /dev/null
+++ b/keyboards/40percentclub/nori/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 = caterina
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+
+LAYOUTS = ortho_4x4 ortho_4x8 ortho_4x12
diff --git a/keyboards/40percentclub/readme.md b/keyboards/40percentclub/readme.md
new file mode 100644
index 000000000..a8dd0e84f
--- /dev/null
+++ b/keyboards/40percentclub/readme.md
@@ -0,0 +1,4 @@
+# 40% Keyboards
+
+Website: [40percent.club](http://www.40percent.club/)
+The original TMK firmware: [repo](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/)
diff --git a/keyboards/40percentclub/tomato/config.h b/keyboards/40percentclub/tomato/config.h
new file mode 100644
index 000000000..05c83c30c
--- /dev/null
+++ b/keyboards/40percentclub/tomato/config.h
@@ -0,0 +1,45 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER 40 Percent Club
+#define PRODUCT Tomato
+#define DESCRIPTION A 30 key ortholinear keyboard with RGB backlighting
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 6
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
+#define MATRIX_COL_PINS { B4, E6, D7, C6, D4, D0 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* eliminate lag on space cadet mods */
+#define PERMISSIVE_HOLD
+
+/* setup lighting */
+#define RGB_DI_PIN B5
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 30
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/tomato/info.json b/keyboards/40percentclub/tomato/info.json
index f01f5e7e0..f01f5e7e0 100644
--- a/keyboards/tomato/info.json
+++ b/keyboards/40percentclub/tomato/info.json
diff --git a/keyboards/40percentclub/tomato/keymaps/default/keymap.c b/keyboards/40percentclub/tomato/keymaps/default/keymap.c
new file mode 100644
index 000000000..01a868d7e
--- /dev/null
+++ b/keyboards/40percentclub/tomato/keymaps/default/keymap.c
@@ -0,0 +1,143 @@
+#include QMK_KEYBOARD_H
+
+#define SPC_F1 LT(1,KC_SPC)
+#define BS_F2 LT(2,KC_BSPC)
+#define C_F3 LT(3,KC_C)
+#define V_F4 LT(4,KC_V)
+#define B_F5 LT(5,KC_B)
+#define Z_CTL MT(MOD_LCTL, KC_Z)
+#define X_ALT MT(MOD_LALT, KC_X)
+#define N_ALT MT(MOD_RALT, KC_N)
+#define M_CTL MT(MOD_RCTL, KC_M)
+#define ENT_SFT MT(MOD_RSFT, KC_ENT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Level 0: Default Layer
+ * ,-------------------------------------------------------------------------------.
+ * | Q | W | E | R | T | Y | U | I | O | P |
+ * |-------------------------------------------------------------------------------|
+ * | A | S | D | F | G | H | J | K | L | ESC |
+ * |-------------------------------------------------------------------------------|
+ * | Z | X | C | V | BSPC | SPC | B | N | M | ENT |
+ * '-------------------------------------------------------------------------------'
+ */
+ LAYOUT_ortho_3x10
+ ( KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P
+ , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC
+ , Z_CTL, X_ALT, C_F3, V_F4, BS_F2, SPC_F1, B_F5, N_ALT, M_CTL, ENT_SFT
+ ),
+ /* Level 1: Numbers Layer
+ * ,-------------------------------------------------------------------------------.
+ * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
+ * |-------------------------------------------------------------------------------|
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |
+ * |-------------------------------------------------------------------------------|
+ * | | | | | DEL | | | | | |
+ * '-------------------------------------------------------------------------------'
+ */
+ LAYOUT_ortho_3x10
+ ( KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0
+ , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+ , _______,_______,_______,_______,KC_DEL, _______,_______,_______,_______,_______
+ ),
+ /* Level 2: Symbols Layer
+ * ,-------------------------------------------------------------------------------.
+ * | ! | @ | # | $ | % | ^ | & | * | ( | ) |
+ * |-------------------------------------------------------------------------------|
+ * | F11 | F12 | | | | | | | | ` |
+ * |-------------------------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * '-------------------------------------------------------------------------------'
+ */
+ LAYOUT_ortho_3x10
+ ( KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN
+ , KC_F11, KC_F12,_______,_______,_______,_______,_______,_______,_______,KC_GRAVE
+ , _______,_______,_______,_______,_______,_______,_______,_______,_______,_______
+ ),
+ /* Level 3: RGB Layer
+ * ,-------------------------------------------------------------------------------.
+ * | | | | | | - | = | [ | ] | \ |
+ * |-------------------------------------------------------------------------------|
+ * | Tab | | | | | , | . | / | ; | ' |
+ * |-------------------------------------------------------------------------------|
+ * | | | | | | | Left | Down | Up | Right |
+ * '-------------------------------------------------------------------------------'
+ */
+ LAYOUT_ortho_3x10
+ ( _______,_______,_______,_______,_______,KC_MINS,KC_EQL, KC_LBRC,KC_RBRC,KC_BSLS
+ , KC_TAB, _______,_______,_______,_______,KC_COMM,KC_DOT, KC_SLSH,KC_SCLN,KC_QUOT
+ , _______,_______,_______,_______,_______,_______,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT
+ ),
+ /* Level 4: RGB Layer
+ * ,-------------------------------------------------------------------------------.
+ * | | | | | | _ | + | { | } | | |
+ * |-------------------------------------------------------------------------------|
+ * | Tab | | | | | < | > | ? | : | " |
+ * |-------------------------------------------------------------------------------|
+ * | | | | | | | Home | PgDn | PgUp | End |
+ * '-------------------------------------------------------------------------------'
+ */
+ LAYOUT_ortho_3x10
+ ( _______,_______,_______,_______,_______,KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE
+ , KC_TAB, _______,_______,_______,_______,KC_LT, KC_GT, KC_QUES,KC_COLN,KC_DQUO
+ , _______,_______,_______,_______,_______,_______,KC_HOME,KC_PGUP,KC_PGDN,KC_END
+ ),
+ /* Level 5: RGB Layer
+ * ,-------------------------------------------------------------------------------.
+ * | Calc | Web | Mail |Explore| | | | | | |
+ * |-------------------------------------------------------------------------------|
+ * |RGB_TOG|RGB_MOD|RGB_HUI|RGB_HUD|xxxxxxx|xxxxxxx|RGB_SAI|RGB_SAD|RGB_VAI|RGB_VAD|
+ * |-------------------------------------------------------------------------------|
+ * | | | | | Flash | | | | | |
+ * '-------------------------------------------------------------------------------'
+ */
+ LAYOUT_ortho_3x10
+ ( KC_CALC,KC_WSCH,KC_MAIL,KC_MYCM,_______,_______,_______,_______,_______,_______
+ , RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,XXXXXXX,XXXXXXX,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD
+ , _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______
+ ),
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/40percentclub/tomato/readme.md b/keyboards/40percentclub/tomato/readme.md
new file mode 100644
index 000000000..f93105ffd
--- /dev/null
+++ b/keyboards/40percentclub/tomato/readme.md
@@ -0,0 +1,22 @@
+# Tomato
+
+![Tomato](https://2.bp.blogspot.com/-k6lyvfZz2WA/WXYyr508D7I/AAAAAAACB8A/UCNP2WCfvWAT8UWsCDICMRXwip5tAZsOwCLcBGAs/s640/a.JPG)
+===
+
+A 30 key keyboard with programmable rgb backlighting.
+
+* [The fluff](http://www.40percent.club/2017/07/tomato-in-gherkin.html)
+* [The meat](https://github.com/di0ib/Misc/tree/master/tomato)
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Tomato PCB
+Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2017/07/tomato-in-gherkin.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 40percentclub/tomato: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).
+
+First pass at adding support for the tomato keyboard. Completely
+untested. Intended to kick-start development.
diff --git a/keyboards/40percentclub/tomato/rules.mk b/keyboards/40percentclub/tomato/rules.mk
new file mode 100644
index 000000000..844ff9982
--- /dev/null
+++ b/keyboards/40percentclub/tomato/rules.mk
@@ -0,0 +1,74 @@
+# 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
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
+
+LAYOUTS = ortho_3x10
diff --git a/keyboards/tomato/tomato.c b/keyboards/40percentclub/tomato/tomato.c
index dbf8bfe12..dbf8bfe12 100644
--- a/keyboards/tomato/tomato.c
+++ b/keyboards/40percentclub/tomato/tomato.c
diff --git a/keyboards/tomato/tomato.h b/keyboards/40percentclub/tomato/tomato.h
index f8674be40..70bffee30 100644
--- a/keyboards/tomato/tomato.h
+++ b/keyboards/40percentclub/tomato/tomato.h
@@ -1,5 +1,4 @@
-#ifndef GHERKIN_H
-#define GHERKIN_H
+#pragma once
#include "quantum.h"
@@ -14,5 +13,3 @@
{ K30, K31, K32, K33, K34, K35 }, \
{ K40, K41, K42, K43, K44, K45 } \
}
-
-#endif
diff --git a/keyboards/ut47/LED_controls.ino b/keyboards/40percentclub/ut47/LED_controls.ino
index dd50300eb..dd50300eb 100644
--- a/keyboards/ut47/LED_controls.ino
+++ b/keyboards/40percentclub/ut47/LED_controls.ino
diff --git a/keyboards/40percentclub/ut47/config.h b/keyboards/40percentclub/ut47/config.h
new file mode 100644
index 000000000..cd55e4d73
--- /dev/null
+++ b/keyboards/40percentclub/ut47/config.h
@@ -0,0 +1,84 @@
+/*
+Copyright 2018 Carlos Filoteo
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER 40percent.club
+#define PRODUCT ut47
+#define DESCRIPTION An awesome 40% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+#define MATRIX_ROW_PINS { D1, D0, D4, C6 }
+#define MATRIX_COL_PINS { D7, E6, B4, B5, B6, B2, B3, B1, F7, F6, F5, F4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Enable GNAP matrix serial output */
+#define GNAP_ENABLE
+
+/* USART configuration */
+#ifdef __AVR_ATmega32U4__
+# define SERIAL_UART_BAUD 9600
+# define SERIAL_UART_DATA UDR1
+# define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
+# define SERIAL_UART_RXD_VECT USART1_RX_vect
+# define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
+# define SERIAL_UART_INIT() do { \
+ /* baud rate */ \
+ UBRR1L = SERIAL_UART_UBRR; \
+ /* baud rate */ \
+ UBRR1H = SERIAL_UART_UBRR >> 8; \
+ /* enable TX */ \
+ UCSR1B = _BV(TXEN1); \
+ /* 8-bit data */ \
+ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
+ sei(); \
+ } while(0)
+# else
+# error "USART configuration is needed."
+#endif
diff --git a/keyboards/40percentclub/ut47/info.json b/keyboards/40percentclub/ut47/info.json
new file mode 100644
index 000000000..59bffe99a
--- /dev/null
+++ b/keyboards/40percentclub/ut47/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "UT47",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12.5,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 47,
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"Backspace", "x":11, "y":0, "w":1.5}, {"label":"LT(3) / Tab", "x":0, "y":1, "w":1.25}, {"label":"A", "x":1.25, "y":1}, {"label":"S", "x":2.25, "y":1}, {"label":"D", "x":3.25, "y":1}, {"label":"F", "x":4.25, "y":1}, {"label":"G", "x":5.25, "y":1}, {"label":"H", "x":6.25, "y":1}, {"label":"J", "x":7.25, "y":1}, {"label":"K", "x":8.25, "y":1}, {"label":"L", "x":9.25, "y":1}, {"label":":", "x":10.25, "y":1}, {"label":"\"", "x":11.25, "y":1, "w":1.25}, {"label":"Shift", "x":0, "y":2, "w":1.5}, {"label":"Z", "x":1.5, "y":2}, {"label":"X", "x":2.5, "y":2}, {"label":"C", "x":3.5, "y":2}, {"label":"V", "x":4.5, "y":2}, {"label":"B", "x":5.5, "y":2}, {"label":"N", "x":6.5, "y":2}, {"label":"M", "x":7.5, "y":2}, {"label":"<", "x":8.5, "y":2}, {"label":">", "x":9.5, "y":2}, {"label":"?", "x":10.5, "y":2}, {"label":"Shift / Enter", "x":11.5, "y":2}, {"label":"Ctrl", "x":0, "y":3}, {"label":"Alt", "x":1, "y":3}, {"label":"GUI", "x":2, "y":3}, {"label":"Menu", "x":3, "y":3}, {"label":"MO(2)", "x":4, "y":3, "w":1.25}, {"x":5.25, "y":3, "w":2}, {"label":"MO(1)", "x":7.25, "y":3, "w":1.25}, {"label":"\u2190", "x":8.5, "y":3}, {"label":"\u2193", "x":9.5, "y":3}, {"label":"\u2191", "x":10.5, "y":3}, {"label":"\u2192", "x":11.5, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/40percentclub/ut47/keymaps/default/config.h b/keyboards/40percentclub/ut47/keymaps/default/config.h
new file mode 100644
index 000000000..f88ebf7e8
--- /dev/null
+++ b/keyboards/40percentclub/ut47/keymaps/default/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+// place overrides here
diff --git a/keyboards/40percentclub/ut47/keymaps/default/keymap.c b/keyboards/40percentclub/ut47/keymaps/default/keymap.c
new file mode 100644
index 000000000..0fa7838df
--- /dev/null
+++ b/keyboards/40percentclub/ut47/keymaps/default/keymap.c
@@ -0,0 +1,135 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#ifdef LED_ENABLE
+ #include "protocol/serial.h"
+#endif
+
+#define LT3_TAB LT(3, KC_TAB)
+#define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT)
+
+enum custom_keycodes {
+ LED_TOG = SAFE_RANGE,
+ LED_CHG
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
+ * |-------------------------------------------------------------------------+
+ * |Tab/L3| A | S | D | F | G | H | J | K | L | ; | ' |
+ * |-------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Sh/En|
+ * |-------------------------------------------------------------------------+
+ * | Ctrl| Alt | Gui | App | L2 | Space | L1 | Left| Down| Up |Right|
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT3_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, MT_RSFT_ENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+ /* FN Layer 1
+ * ,-------------------------------------------------------------------------.
+ * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | - | = | [ | ] | \ |
+ * |-------------------------------------------------------------------------+
+ * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | Home| PgDn| PgUp| End |
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Right */
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
+ _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+ /* FN Layer 2
+ * ,-------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |Delete|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | _ | + | { | } | | |
+ * |-------------------------------------------------------------------------+
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | Home| PgDn| PgUp| End |
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Left */
+ KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_DELETE,
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+ /* FN Layer 2
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Calc|Webhm| Mail| Comp| | | | | |PrtSc| |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | | | | |
+ * |-------------------------------------------------------------------------+
+ * | |LEDtg|LEDch| | | | | | | | | |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | |MousL|MousD|MousU|MousR|
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Tab */
+ KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, LED_TOG, LED_CHG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
+),
+};
+
+//LED keymap functions
+ #ifdef LED_ENABLE
+void led_chmode(void) {
+ serial_send(101);
+}
+
+void led_toggle(void) {
+ serial_send(100);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case LED_TOG:
+ #ifdef LED_ENABLE
+ led_toggle();
+ #endif
+ return false;
+ case LED_CHG:
+ #ifdef LED_ENABLE
+ led_chmode();
+ #endif
+ return false;
+ }
+ }
+ return true;
+};
+#endif
diff --git a/keyboards/ut47/keymaps/default/readme.md b/keyboards/40percentclub/ut47/keymaps/default/readme.md
index e09dc73fa..e09dc73fa 100644
--- a/keyboards/ut47/keymaps/default/readme.md
+++ b/keyboards/40percentclub/ut47/keymaps/default/readme.md
diff --git a/keyboards/40percentclub/ut47/keymaps/non-us/config.h b/keyboards/40percentclub/ut47/keymaps/non-us/config.h
new file mode 100644
index 000000000..f88ebf7e8
--- /dev/null
+++ b/keyboards/40percentclub/ut47/keymaps/non-us/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+// place overrides here
diff --git a/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c b/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c
new file mode 100644
index 000000000..0c1c2e759
--- /dev/null
+++ b/keyboards/40percentclub/ut47/keymaps/non-us/keymap.c
@@ -0,0 +1,135 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#ifdef LED_ENABLE
+ #include "protocol/serial.h"
+#endif
+
+#define LT3_TAB LT(3, KC_TAB)
+#define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT)
+
+enum custom_keycodes {
+ LED_TOG = SAFE_RANGE,
+ LED_CHG
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
+ * |-------------------------------------------------------------------------+
+ * |Tab/L3| A | S | D | F | G | H | J | K | L | ; | ' |
+ * |-------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Sh/En|
+ * |-------------------------------------------------------------------------+
+ * | Ctrl| Alt | Gui | App | L2 | Space | L1 | Left| Down| Up |Right|
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT3_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, MT_RSFT_ENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+ /* FN Layer 1
+ * ,-------------------------------------------------------------------------.
+ * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | # | - | = | [ | ] | \ |
+ * |-------------------------------------------------------------------------+
+ * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | Home| PgDn| PgUp| End |
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Right */
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
+ _______, _______, _______, _______, _______, _______, KC_NUHS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_NUBS,
+ _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+ /* FN Layer 2
+ * ,-------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |Delete|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | _ | + | { | } | | |
+ * |-------------------------------------------------------------------------+
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | Home| PgDn| PgUp| End |
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Left */
+ KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_DELETE,
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+ /* FN Layer 2
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Calc|Webhm| Mail| Comp| | | | | |PrtSc| |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | | | | |
+ * |-------------------------------------------------------------------------+
+ * | |LEDtg|LEDch| | | | | | | | | |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | |MousL|MousD|MousU|MousR|
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Tab */
+ KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, LED_TOG, LED_CHG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
+),
+};
+
+//LED keymap functions
+ #ifdef LED_ENABLE
+void led_chmode(void) {
+ serial_send(101);
+}
+
+void led_toggle(void) {
+ serial_send(100);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case LED_TOG:
+ #ifdef LED_ENABLE
+ led_toggle();
+ #endif
+ return false;
+ case LED_CHG:
+ #ifdef LED_ENABLE
+ led_chmode();
+ #endif
+ return false;
+ }
+ }
+ return true;
+};
+#endif
diff --git a/keyboards/ut47/keymaps/non-us/readme.md b/keyboards/40percentclub/ut47/keymaps/non-us/readme.md
index e09dc73fa..e09dc73fa 100644
--- a/keyboards/ut47/keymaps/non-us/readme.md
+++ b/keyboards/40percentclub/ut47/keymaps/non-us/readme.md
diff --git a/keyboards/ut47/keymaps/nordic/config.h b/keyboards/40percentclub/ut47/keymaps/nordic/config.h
index fcdd2c232..fcdd2c232 100644
--- a/keyboards/ut47/keymaps/nordic/config.h
+++ b/keyboards/40percentclub/ut47/keymaps/nordic/config.h
diff --git a/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c b/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c
new file mode 100644
index 000000000..f3e297ec0
--- /dev/null
+++ b/keyboards/40percentclub/ut47/keymaps/nordic/keymap.c
@@ -0,0 +1,178 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#ifdef LED_ENABLE
+ #include "protocol/serial.h"
+
+#endif
+
+#include "keymap_norwegian.h"
+
+#define LT3_TAB LT(3, KC_TAB)
+#define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT)
+#define CTRADEL LALT(LCTL(KC_DEL))
+#define ALTTAB LALT(KC_TAB)
+
+enum custom_keycodes {
+ LED_TOG = SAFE_RANGE,
+ LED_CHG
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base Layer - L0
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
+ * |-------------------------------------------------------------------------+
+ * |Tab/L3| A | S | D | F | G | H | J | K | L | ' |Ent/RS|
+ * |-------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | Up | L4 |
+ * |-------------------------------------------------------------------------+
+ * | Ctrl| Gui | L4 | Alt | L2 | Space | L1 | Ctrl| Left| Down|Right|
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Base - L0 */
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT3_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_APOS, MT_RSFT_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, MO(4),
+ KC_LCTL, KC_LGUI, MO(4), KC_LALT, MO(2), KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+),
+
+ /* FN Layer 1
+ * ,-------------------------------------------------------------------------.
+ * | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | + | = | * | / |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | | - | _ | PgUp| |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | | Home| PgDn| End |
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Right modifier - L1 */
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
+ _______, _______, _______, _______, _______, _______, _______, _______, NO_PLUS, NO_EQL, NO_ASTR, NO_SLSH,
+ _______, _______, _______, _______, _______, _______, _______, _______, NO_MINS, NO_UNDS, KC_PGUP, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+),
+
+ /* FN Layer 2
+ * ,-------------------------------------------------------------------------.
+ * | § | ! | " | # | ¤ | % | & | / | = | + | \ | Delete|
+ * |-------------------------------------------------------------------------+
+ * | | | ? | { | [ | ( | ) | ] | } | F10 | F11 | F12 |
+ * |-------------------------------------------------------------------------+
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | PgUp| |
+ * |-------------------------------------------------------------------------+
+ * | | | |Capsl| | | | | Home| PgDn| End |
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Left modifier - L2 */
+ NO_SECT, KC_EXCLAIM, NO_QUO2, KC_HASH, NO_BULT, KC_PERCENT, NO_AMPR, NO_SLSH, NO_EQL, NO_PLUS, NO_BSLS, KC_DELETE,
+ _______, _______, NO_QUES, NO_LCBR, NO_LBRC, NO_LPRN, NO_RPRN, NO_RBRC, NO_RCBR, KC_F10, KC_F11, KC_F12,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_PGUP, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+),
+
+ /* FN Layer 3
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Calc|Webhm| Comp|Webrf| | | | | |PrtSc|CtrAlDl|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | |VolDn|VolUp| | | |
+ * |-------------------------------------------------------------------------+
+ * | |LEDtg|LEDch| | |RESET| | Mute| |MouB1|MousU|MouB2|
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | |MousL|MousD|MousR|
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Hold Tab down - L3 */
+ KC_ESC, KC_CALC, KC_WHOM, KC_MYCM, KC_WREF, _______, _______, _______, _______, _______, KC_PSCR, CTRADEL,
+ _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______,
+ _______, LED_TOG, LED_CHG, _______, _______, RESET, _______, KC_MUTE, _______, KC_MS_BTN1, KC_MS_U, KC_MS_BTN2,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
+),
+
+ /* FN Layer 4
+ * ,-------------------------------------------------------------------------.
+ * | | | @ | £ | $ | ~ | | ¨ | ´ | ` | Å | |
+ * |-------------------------------------------------------------------------+
+ * | | | | € | | | | | ^ | Ø | Æ | |
+ * |-------------------------------------------------------------------------+
+ * | | < | | | | | | µ | | | | |
+ * |-------------------------------------------------------------------------+
+ * | | | | | | | | L5 | | | |
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* Norsk - L4 */
+ _______, _______, NO_AT, NO_PND, NO_DLR, NO_TILD, _______, NO_QUOT, NO_ACUT, NO_GRV, NO_AA, _______,
+ _______, _______, _______, NO_EURO, _______, _______, _______, _______, NO_CIRC, NO_OSLH, NO_AE, _______,
+ _______, NO_LESS, _______, _______, _______, _______, _______, NO_MU, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, TO(5), _______, _______, _______
+),
+
+ /* GAMING Layer (toggle on and off)
+ * ,-------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | F1 | F2 | F3 | F4 |Alt+Tab|
+ * |-------------------------------------------------------------------------+
+ * | Tab | A | S | D | F | G | H | F5 | F6 | F7 | F8 | Enter|
+ * |-------------------------------------------------------------------------+
+ * | Shift | 1 | 2 | 3 | 4 | 5 | 6 | F9 | F10 | F11 | Up |TOGGL|
+ * |-------------------------------------------------------------------------+
+ * | Ctrl| Z | X | C | B | Space | M | V |Left |Down |Right|
+ * `-------------------------------------------------------------------------'
+ */
+
+LAYOUT( /* GAMING, toggled on and off - L5 */
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_F1, KC_F2, KC_F3, KC_F4, ALTTAB,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_F5, KC_F6, KC_F7, KC_F8, KC_ENT,
+ KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_UP, TO(0),
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_B, KC_SPC, KC_M, KC_V, KC_LEFT, KC_DOWN, KC_RGHT
+),
+};
+
+//LED keymap functions
+ #ifdef LED_ENABLE
+void led_chmode(void) {
+ serial_send(101);
+}
+
+void led_toggle(void) {
+ serial_send(100);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case LED_TOG:
+ #ifdef LED_ENABLE
+ led_toggle();
+ #endif
+ return false;
+ case LED_CHG:
+ #ifdef LED_ENABLE
+ led_chmode();
+ #endif
+ return false;
+ }
+ }
+ return true;
+};
+#endif
diff --git a/keyboards/ut47/keymaps/nordic/readme.md b/keyboards/40percentclub/ut47/keymaps/nordic/readme.md
index 4b0d0eb12..4b0d0eb12 100644
--- a/keyboards/ut47/keymaps/nordic/readme.md
+++ b/keyboards/40percentclub/ut47/keymaps/nordic/readme.md
diff --git a/keyboards/40percentclub/ut47/keymaps/rgb/config.h b/keyboards/40percentclub/ut47/keymaps/rgb/config.h
new file mode 100644
index 000000000..791147b5b
--- /dev/null
+++ b/keyboards/40percentclub/ut47/keymaps/rgb/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+// place overrides here
+#define RGBLIGHT_ANIMATIONS
+#define RGB_DI_PIN D3 // The pin the LED strip is connected to
+#define RGBLED_NUM 7 // Number of LEDs in your strip
diff --git a/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c b/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c
new file mode 100644
index 000000000..77fa5b401
--- /dev/null
+++ b/keyboards/40percentclub/ut47/keymaps/rgb/keymap.c
@@ -0,0 +1,87 @@
+/* Copyright 2018 Carlos Filoteo
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#ifdef LED_ENABLE
+ #include "protocol/serial.h"
+#endif
+
+#define LT3_TAB LT(3, KC_TAB)
+#define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT)
+
+enum custom_keycodes {
+ LED_TOG = SAFE_RANGE,
+ LED_CHG
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+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,
+ LT3_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, MT_RSFT_ENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
+ _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+LAYOUT(
+ KC_FN6, KC_FN7, KC_FN8, KC_FN9, KC_FN10, KC_FN11, KC_FN12, KC_FN13, KC_FN14, KC_FN15, KC_FN16, KC_DELETE,
+ _______, _______, _______, _______, _______, _______, _______, KC_FN17, KC_FN18, KC_FN19, KC_FN20, KC_FN21,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+LAYOUT( /* Tab */
+ KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
+),
+};
+
+//LED keymap functions
+ #ifdef LED_ENABLE
+void led_chmode(void) {
+ serial_send(101);
+}
+
+void led_toggle(void) {
+ serial_send(100);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case LED_TOG:
+ #ifdef LED_ENABLE
+ led_toggle();
+ #endif
+ return false;
+ case LED_CHG:
+ #ifdef LED_ENABLE
+ led_chmode();
+ #endif
+ return false;
+ }
+ }
+ return true;
+};
+#endif
diff --git a/keyboards/ut47/keymaps/rgb/readme.md b/keyboards/40percentclub/ut47/keymaps/rgb/readme.md
index 00076bfc4..00076bfc4 100644
--- a/keyboards/ut47/keymaps/rgb/readme.md
+++ b/keyboards/40percentclub/ut47/keymaps/rgb/readme.md
diff --git a/keyboards/ut47/keymaps/rgb/rules.mk b/keyboards/40percentclub/ut47/keymaps/rgb/rules.mk
index 1e3cebb14..1e3cebb14 100644
--- a/keyboards/ut47/keymaps/rgb/rules.mk
+++ b/keyboards/40percentclub/ut47/keymaps/rgb/rules.mk
diff --git a/keyboards/ut47/led.c b/keyboards/40percentclub/ut47/led.c
index 9458c038f..9458c038f 100644
--- a/keyboards/ut47/led.c
+++ b/keyboards/40percentclub/ut47/led.c
diff --git a/keyboards/ut47/matrix.c b/keyboards/40percentclub/ut47/matrix.c
index 921bc9ed5..921bc9ed5 100644
--- a/keyboards/ut47/matrix.c
+++ b/keyboards/40percentclub/ut47/matrix.c
diff --git a/keyboards/40percentclub/ut47/readme.md b/keyboards/40percentclub/ut47/readme.md
new file mode 100644
index 000000000..bbae1384a
--- /dev/null
+++ b/keyboards/40percentclub/ut47/readme.md
@@ -0,0 +1,40 @@
+# ut47
+
+![ut47](https://i.imgur.com/ZDKZQaj.jpg)
+===
+
+Somewhere between ortholinear and standard offset. Created to have all the same functions on a Planck in a keyboard but with a more conventional keyboard row stagger.
+
+Keyboard Maintainer: [filoxo](https://github.com/filoxo), [network_operations]
+Hardware Supported: [PCB design](http://www.40percent.club/2016/10/gnap-20-plateless.html), Arduino Pro Micro
+Hardware Availability: [How to order](http://www.40percent.club/2017/03/ordering-pcb.html)
+
+### Instructions
+
+To flash the UT47 without LEDs (single controller), run:
+
+ make 40percentclub/ut47:default
+
+To enable the UT47 LEDs (dual controller), run this for the main controller:
+
+ make 40percentclub/ut47:default LED_ENABLE=yes
+
+Or you can add `LED_ENABLE = yes` to *rules.mk*
+
+And then flash [LED_controls.ino](LED_controls.ino) to the second controller using [Arduino IDE](https://www.arduino.cc/en/Main/Software) or similar. NOTE: Arduino IDE will require importing additional libraries to compile.
+
+<small>The reason this is an "opt-in" feature is to prevent sending serial communication over the pin, in case it ends up being used for something else (like RGB underglow).</small>
+
+### Layout
+
+Go to the [default layout README](keymaps/default/readme.md) for more information.
+
+### Additional info
+
+Credit: Forked from [di0ib TMK version](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/gnap)
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+### Build Guide
+
+[u/network_operations' build guide thread](https://www.reddit.com/r/MechanicalKeyboards/comments/7wqktu/gnap_the_cheap_40/)
diff --git a/keyboards/40percentclub/ut47/rules.mk b/keyboards/40percentclub/ut47/rules.mk
new file mode 100644
index 000000000..7495f5edd
--- /dev/null
+++ b/keyboards/40percentclub/ut47/rules.mk
@@ -0,0 +1,87 @@
+# 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 = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+# custom matrix setup
+CUSTOM_MATRIX = yes
+SRC += matrix.c protocol/serial_uart.c
+
+ifeq ($(strip $(LED_ENABLE)), yes)
+ OPT_DEFS += -DLED_ENABLE
+ SRC += led.c
+endif
diff --git a/keyboards/ut47/ut47.c b/keyboards/40percentclub/ut47/ut47.c
index f467fd130..f467fd130 100644
--- a/keyboards/ut47/ut47.c
+++ b/keyboards/40percentclub/ut47/ut47.c
diff --git a/keyboards/ut47/ut47.h b/keyboards/40percentclub/ut47/ut47.h
index a4507dd34..f6456fe91 100644
--- a/keyboards/ut47/ut47.h
+++ b/keyboards/40percentclub/ut47/ut47.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 UT47_H
-#define UT47_H
+#pragma once
#include "quantum.h"
@@ -45,5 +44,3 @@
)
#define LAYOUT_kc_ut47 LAYOUT_kc
-
-#endif
diff --git a/keyboards/412_64/412_64.c b/keyboards/412_64/412_64.c
new file mode 100644
index 000000000..eaec54ade
--- /dev/null
+++ b/keyboards/412_64/412_64.c
@@ -0,0 +1,29 @@
+
+#include "412_64.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/412_64/412_64.h b/keyboards/412_64/412_64.h
new file mode 100644
index 000000000..27a32f15a
--- /dev/null
+++ b/keyboards/412_64/412_64.h
@@ -0,0 +1,29 @@
+
+#ifndef FOURx16_H
+#define FOURx16_H
+
+#include "quantum.h"
+#define ___ KC_NO
+
+// 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_ortho_4x16( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K10, K11, K12, K13, K14, K15, \
+ K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K30, K31, \
+ K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K43, K44, K45, K46, K47, \
+ K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K60, K61, K62, K63 \
+) \
+{ \
+ { K00, K02, K04, K06, K08, K10, K12, K14 }, \
+ { K01, K03, K05, K07, K09, K11, K13, K15 }, \
+ { K16, K18, K20, K22, K24, K26, K28, K30 }, \
+ { K17, K19, K21, K23, K25, K27, K29, K31 }, \
+ { K32, K34, K36, K38, K40, K42, K44, K46 }, \
+ { K33, K35, K37, K39, K41, K43, K45, K47 }, \
+ { K48, K50, K52, K54, K56, K58, K60, K62 }, \
+ { K49, K51, K53, K55, K57, K59, K61, K63 } \
+}
+
+#endif
diff --git a/keyboards/412_64/config.h b/keyboards/412_64/config.h
new file mode 100644
index 000000000..28d9763c3
--- /dev/null
+++ b/keyboards/412_64/config.h
@@ -0,0 +1,202 @@
+
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xF7E0
+#define PRODUCT_ID 0x0412
+#define DEVICE_VER 0x0000
+#define MANUFACTURER EDI/SCI
+#define PRODUCT 412 64 Model 00
+#define DESCRIPTION A compact 60% keyboard inspired by the 4x4x4x4x4
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#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 { D3, F4, F5, F6, F7, B1, B3, B2 }
+#define MATRIX_COL_PINS { B0, D2, D0, D1, D4, C6, D7, E6 }
+#define UNUSED_PINS { B4, B5, B6, B7, C7, F0, F1 }
+
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN C7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/412_64/keymaps/default/config.h b/keyboards/412_64/keymaps/default/config.h
new file mode 100644
index 000000000..d533d806c
--- /dev/null
+++ b/keyboards/412_64/keymaps/default/config.h
@@ -0,0 +1,5 @@
+
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/412_64/keymaps/default/keymap.c b/keyboards/412_64/keymaps/default/keymap.c
new file mode 100644
index 000000000..c098a37e5
--- /dev/null
+++ b/keyboards/412_64/keymaps/default/keymap.c
@@ -0,0 +1,105 @@
+
+#include QMK_KEYBOARD_H
+
+#define _MAIN 0
+#define _RAISE 1
+#define _LOWER 2
+
+// Readability keycodes
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+/* MAIN
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | Backsp | Delete | 7 | 8 | 9 |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ESC | A | S | D | F | G | H | J | K | L | ; | ' | PgUp | 4 | 5 | 6 |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | SHIFT | Z | X | C | V | B | N | M | , | . | / | ENTER | PgDn | 1 | 2 | 3 |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | LCTRL | PAUS | GUI | ALT | Lower | Space | Space | Raise | Left | Down | Up | Right | Shift | 0 | . | ENTER |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_MAIN] = LAYOUT_ortho_4x16(
+ 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_DEL, KC_KP_7, KC_KP_8, KC_KP_9,
+ 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_PGUP, KC_KP_4, KC_KP_5, KC_KP_6,
+ 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_PGDN, KC_KP_1, KC_KP_2, KC_KP_3,
+ KC_LCTL, KC_PAUS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RSFT, KC_KP_0, KC_KP_DOT, KC_PENT
+ ),
+
+/* RAISE
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | Insert | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | - | = | [ | ] | \ | Home | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | ISO # | ISO / | | | PScr | End | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play | | | | |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_RAISE] = LAYOUT_ortho_4x16(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, KC_INS, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_NUHS, KC_NUBS, _______, _______, KC_PSCR, KC_END, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, _______
+ ),
+
+/* LOWER
+ * .-----------------------------------------------------------------------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | | | | | Reset |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | ISO ~ | ISO | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | | | | Mute | | | | |
+ * '-----------------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_LOWER] = LAYOUT_ortho_4x16(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, _______, _______, RESET,
+ _______, 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_MUTE, _______, _______, _______, _______
+ ),
+
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ keyevent_t event = record->event;
+ (void)event;
+
+ switch (id) {
+
+ }
+ return MACRO_NONE;
+}
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/412_64/keymaps/default/rules.mk b/keyboards/412_64/keymaps/default/rules.mk
new file mode 100644
index 000000000..08fdcc0a5
--- /dev/null
+++ b/keyboards/412_64/keymaps/default/rules.mk
@@ -0,0 +1 @@
+KEY_LOCK_ENABLE = yes # Enable the universal locking key, which lets you do any locking you require. \ No newline at end of file
diff --git a/keyboards/412_64/readme.md b/keyboards/412_64/readme.md
new file mode 100644
index 000000000..081103107
--- /dev/null
+++ b/keyboards/412_64/readme.md
@@ -0,0 +1,15 @@
+# 412-64
+
+![412-64](image_here)
+
+A compact 60% keyboard designed by Fate Everywhere and sold on a limited basis. Born out of the desire for a Planck with a numpad for technical work.
+
+Keyboard Maintainer: [Fate Everywhere](https://github.com/fateeverywhere)
+Hardware Supported: 4x16 T&E Prototype, 412-64 Mk. 0, Mk. 1.
+Hardware Availability: Highly limited, contact /u/FateEverywhere on reddit for availability.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make 412-64: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/412_64/rules.mk b/keyboards/412_64/rules.mk
new file mode 100644
index 000000000..9e74da5d9
--- /dev/null
+++ b/keyboards/412_64/rules.mk
@@ -0,0 +1,73 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# 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 = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = 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
+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_4x16
diff --git a/keyboards/4x4/4x4.h b/keyboards/4x4/4x4.h
deleted file mode 100644
index db67ab34e..000000000
--- a/keyboards/4x4/4x4.h
+++ /dev/null
@@ -1,62 +0,0 @@
-
-#ifndef FOURX4_H
-#define FOURX4_H
-
-#include "quantum.h"
-#define ___ KC_NO
-
-// 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_ortho_4x4( \
- K00, K01, K02, K03, \
- K10, K11, K12, K13, \
- K20, K21, K22, K23, \
- K30, K31, K32, K33 \
-) \
-{ \
- { K00, K01, K02, K03, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
- { K10, K11, K12, K13, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
- { K20, K21, K22, K23, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___}, \
- { K30, K31, K32, K33, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___} \
-}
-#define LAYOUT_ortho_4x8( \
- K00, K01, K02, K03, K04, K05, K06, K07, \
- K10, K11, K12, K13, K14, K15, K16, K17, \
- K20, K21, K22, K23, K24, K25, K26, K27, \
- K30, K31, K32, K33, K34, K35, K36, K37\
-) \
-{ \
- { K00, K01, K02, K03, K04, K05, K06, K07, ___, ___, ___, ___, ___, ___, ___, ___}, \
- { K10, K11, K12, K13, K14, K15, K16, K17, ___, ___, ___, ___, ___, ___, ___, ___}, \
- { K20, K21, K22, K23, K24, K25, K26, K27, ___, ___, ___, ___, ___, ___, ___, ___}, \
- { K30, K31, K32, K33, K34, K35, K35, K37, ___, ___, ___, ___, ___, ___, ___, ___} \
-}
-#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, K35, K37, K38, K39, K3a, K3b, ___, ___, ___, ___} \
-}
-
-#define LAYOUT_ortho_4x16( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e, K0f, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e, K1f, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e, K2f, \
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3a, K3b, K3c, K3d, K3e, K3f \
-) \
-{ \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0a, K0b, K0c, K0d, K0e, K0f }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1a, K1b, K1c, K1d, K1e, K1f }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2a, K2b, K2c, K2d, K2e, K2f }, \
- { K30, K31, K32, K33, K34, K35, K35, K37, K38, K39, K3a, K3b, K3c, K3d, K3e, K3f } \
-}
-
-#endif
diff --git a/keyboards/4x4/keymaps/default/keymap.c b/keyboards/4x4/keymaps/default/keymap.c
deleted file mode 100644
index 144ec05c1..000000000
--- a/keyboards/4x4/keymaps/default/keymap.c
+++ /dev/null
@@ -1,124 +0,0 @@
-
-#include QMK_KEYBOARD_H
-
-#define PAD 0
-#define _QW 1
-#define NUM 2
-#define DIR 3
-
-// Readability keycodes
-#define _______ KC_TRNS
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Single 4x4 board only
- * .-----------------------------------.
- * | 7 | 8 | 9 | / |
- * |--------+--------+--------+--------|
- * | 4 | 5 | 6 | * |
- * |--------+--------+--------+--------|
- * | 1 | 2 | 3 | - |
- * |--------+--------+--------+--------|
- * | 0 | QWERTY | . | + |
- * '-----------------------------------'
- */
-
- [PAD] = LAYOUT_ortho_4x4(
- KC_KP_7, KC_KP_8, KC_KP_9, KC_PSLS,
- KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST,
- KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS,
- KC_KP_0, DF(_QW), KC_KP_DOT, KC_PPLS
- ),
-
-/* QWERTY
- * .-----------------------------------------------------------------------------------------------------------------------------------------------.
- * | ESC | Q | W | E | R | T | Y | U | I | O | P | BACKSP | 7 | 8 | 9 | / |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | TAB | A | S | D | F | G | H | J | K | L | ; | ' | 4 | 5 | 6 | * |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | SHIFT | Z | X | C | V | B | N | M | , | . | / | ENT/SFT| 1 | 2 | 3 | - |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | LCTRL | LGUI | ALT | ALT | NUM | SHIFT | SPACE | DIR | RGUI | RALT | DEL | CTRL | 0 | 0 | . | + |
- * '-----------------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [_QW] = LAYOUT_ortho_4x16(
- 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_KP_7, KC_KP_8, KC_KP_9, KC_PSLS,
- 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_KP_4, KC_KP_5, KC_KP_6, KC_PAST,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS,
- KC_LCTL, KC_LGUI, KC_LALT, KC_LALT, MO(NUM), KC_LSFT, KC_SPC, MO(DIR), KC_RGUI, KC_RALT, KC_DEL, KC_RCTL, KC_KP_0, KC_KP_0, KC_KP_DOT, KC_PPLS
- ),
-
-/* NUMBERS
- * .-----------------------------------------------------------------------------------------------------------------------------------------------.
- * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | NUMLOCK| / | * | - | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | | + | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | F11 | F12 | | | | ENTER | SHIFT | RGUI | ./ALT | BKSC | | | | ENTER | |
- * | | | | | | | | | | |CTRLhold| | | | | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------| |
- * | | | | | | | ENTER | SHIFT | | | | | | | | |
- * '-----------------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [NUM] = LAYOUT_ortho_4x16(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, _______, _______, KC_PPLS, _______,
- _______, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC), _______, _______, _______, KC_PENT, _______,
- _______, _______, _______, _______, _______, _______, KC_ENT, KC_RSFT, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
-/* DIRECTIONS
- * .-----------------------------------------------------------------------------------------------------------------------------------------------.
- * | RESET | TAB | up | | INS | CTRL | SHIFT | PgUp | Home | - | = | DEL | | | | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | CAPSLK | left | down | right | PrScr | SHIFT | CTRL | PgDn | End | [ | ] | \ | | | | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | | P-Brk | | | | | | | RGUI | ALT | | | | | | |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | KEYPAD | | | | | | | | | | | | | | | |
- * '-----------------------------------------------------------------------------------------------------------------------------------------------'
- */
-
- [DIR] = LAYOUT_ortho_4x16(
- RESET, KC_TAB, KC_UP, _______, KC_INS, KC_LCTL, KC_LSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_DEL, _______, _______, _______, _______,
- KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_LCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______, _______,
- _______, KC_PAUS, _______, _______, _______, _______, _______, _______, KC_RGUI, KC_RALT, _______, _______, _______, _______, _______, _______,
- DF(PAD), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
- ),
-
-};
-
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- keyevent_t event = record->event;
- (void)event;
-
- switch (id) {
-
- }
- return MACRO_NONE;
-}
-
-
-void matrix_init_user(void) {
-
-}
-
-void matrix_scan_user(void) {
-
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-void led_set_user(uint8_t usb_led) {
-
-}
diff --git a/keyboards/4x4/readme.md b/keyboards/4x4/readme.md
deleted file mode 100644
index 3ca074fdd..000000000
--- a/keyboards/4x4/readme.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# 4x4
-
-![4x4](https://2.bp.blogspot.com/-xRZOpwlTT4c/WlOwRIVAecI/AAAAAAACKo4/d75juHTX2W0Nrch7NigssMbagvl3I4w_ACEwYBhgL/s1600/e.jpg)
-===
-
-**Modular keypad/keyboard**
-The basic unit is a 4x4 matrix with 16 keys. Up to 4 of these can be connected to each other side by side.
-4x4, 4x8, 4x12 and 4x16 are possible.
-There are pads for header pins on each side that complete the circuits from board to board. These can be permanently connected with solder bridges or temporarily with pin headers and shunt jumpers.
-**_All configurations are powered by a SINGLE Arduino Micro or clone (NOT a Pro Micro)._**
-
-* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/4x4)
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: 4x4 PCB
-Hardware Availability: [4x4x4x4x4 project on 40% Keyboards](http://www.40percent.club/2018/01/4x4x4x4x4.html)
-
-Make example for this keyboard (after setting up your build environment):
-
- make 4x4:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-First pass at adding support for the 4x4 keyboard. Compiles but completely untested. Intended to kick-start development.
diff --git a/keyboards/4x4/rules.mk b/keyboards/4x4/rules.mk
deleted file mode 100644
index 3ea4476db..000000000
--- a/keyboards/4x4/rules.mk
+++ /dev/null
@@ -1,74 +0,0 @@
-# MCU name
-#MCU = at90usb1286
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# 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
-
-# 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
-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)
-
-LAYOUT = ortho_4x4 ortho_4x8 ortho_4x12 ortho_4x16
diff --git a/keyboards/6ball/config.h b/keyboards/6ball/config.h
index 19d24486c..b0e59f20c 100644
--- a/keyboards/6ball/config.h
+++ b/keyboards/6ball/config.h
@@ -39,11 +39,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN F7
-#define RGBLIGHT_TIMER
+
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 6 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/9key/config.h b/keyboards/9key/config.h
index eee8407cc..4e5a2fd45 100644
--- a/keyboards/9key/config.h
+++ b/keyboards/9key/config.h
@@ -39,10 +39,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN F7
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 1 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/acr60/config.h b/keyboards/acr60/config.h
index c44ba737e..3066f349d 100644
--- a/keyboards/acr60/config.h
+++ b/keyboards/acr60/config.h
@@ -41,9 +41,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN E2
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 20
diff --git a/keyboards/al1/info.json b/keyboards/al1/info.json
index c40bd8196..f5ab64399 100644
--- a/keyboards/al1/info.json
+++ b/keyboards/al1/info.json
@@ -5,12 +5,11 @@
"width": 20.5,
"height": 5.25,
"layouts": {
- "LAYOUT": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Insert", "x":15.25, "y":0}, {"label":"Num Lock", "x":16.5, "y":0}, {"label":"/", "x":17.5, "y":0}, {"label":"*", "x":18.5, "y":0}, {"label":"-", "x":19.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Delete", "x":15.25, "y":1}, {"label":"7", "x":16.5, "y":1}, {"label":"8", "x":17.5, "y":1}, {"label":"9", "x":18.5, "y":1}, {"label":"+", "x":19.5, "y":1, "h":2}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"4", "x":16.5, "y":2}, {"label":"5", "x":17.5, "y":2}, {"label":"6", "x":18.5, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"1", "x":16.5, "y":3}, {"label":"2", "x":17.5, "y":3}, {"label":"3", "x":18.5, "y":3}, {"label":"Enter", "x":19.5, "y":3, "h":2}, {"label":"\u2191", "x":15.25, "y":3.25}, {"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}, {"x":3.5, "y":4, "w":7}, {"label":"Alt", "x":10.5, "y":4, "w":1.25}, {"label":"Win", "x":11.75, "y":4}, {"label":"Menu", "x":12.75, "y":4, "w":1.25}, {"label":"0", "x":17.5, "y":4}, {"label":".", "x":18.5, "y":4}, {"label":"\u2190", "x":14.25, "y":4.25}, {"label":"\u2193", "x":15.25, "y":4.25}, {"label":"\u2192", "x":16.25, "y":4.25}]
- },
-
- "LAYOUT_split_bs": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Insert", "x":15.25, "y":0}, {"label":"Num Lock", "x":16.5, "y":0}, {"label":"/", "x":17.5, "y":0}, {"label":"*", "x":18.5, "y":0}, {"label":"-", "x":19.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Delete", "x":15.25, "y":1}, {"label":"7", "x":16.5, "y":1}, {"label":"8", "x":17.5, "y":1}, {"label":"9", "x":18.5, "y":1}, {"label":"+", "x":19.5, "y":1, "h":2}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"4", "x":16.5, "y":2}, {"label":"5", "x":17.5, "y":2}, {"label":"6", "x":18.5, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"1", "x":16.5, "y":3}, {"label":"2", "x":17.5, "y":3}, {"label":"3", "x":18.5, "y":3}, {"label":"Enter", "x":19.5, "y":3, "h":2}, {"label":"\u2191", "x":15.25, "y":3.25}, {"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}, {"x":3.5, "y":4, "w":7}, {"label":"Alt", "x":10.5, "y":4, "w":1.25}, {"label":"Win", "x":11.75, "y":4}, {"label":"Menu", "x":12.75, "y":4, "w":1.25}, {"label":"0", "x":17.5, "y":4}, {"label":".", "x":18.5, "y":4}, {"label":"\u2190", "x":14.25, "y":4.25}, {"label":"\u2193", "x":15.25, "y":4.25}, {"label":"\u2192", "x":16.25, "y":4.25}]
- }
+ "LAYOUT": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Insert", "x":15.25, "y":0}, {"label":"Num Lock", "x":16.5, "y":0}, {"label":"/", "x":17.5, "y":0}, {"label":"*", "x":18.5, "y":0}, {"label":"-", "x":19.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Delete", "x":15.25, "y":1}, {"label":"7", "x":16.5, "y":1}, {"label":"8", "x":17.5, "y":1}, {"label":"9", "x":18.5, "y":1}, {"label":"+", "x":19.5, "y":1, "h":2}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"4", "x":16.5, "y":2}, {"label":"5", "x":17.5, "y":2}, {"label":"6", "x":18.5, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"↑", "x":15.25, "y":3.25}, {"label":"1", "x":16.5, "y":3}, {"label":"2", "x":17.5, "y":3}, {"label":"3", "x":18.5, "y":3}, {"label":"Enter", "x":19.5, "y":3, "h":2}, {"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}, {"x":3.5, "y":4, "w":7}, {"label":"Alt", "x":10.5, "y":4, "w":1.25}, {"label":"Win", "x":11.75, "y":4}, {"label":"Menu", "x":12.75, "y":4, "w":1.25}, {"label":"←", "x":14.25, "y":4.25}, {"label":"↓", "x":15.25, "y":4.25}, {"label":"→", "x":16.25, "y":4.25}, {"label":"0", "x":17.5, "y":4}, {"label":".", "x":18.5, "y":4}]
+ },
+ "LAYOUT_split_bs": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Insert", "x":15.25, "y":0}, {"label":"Num Lock", "x":16.5, "y":0}, {"label":"/", "x":17.5, "y":0}, {"label":"*", "x":18.5, "y":0}, {"label":"-", "x":19.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Delete", "x":15.25, "y":1}, {"label":"7", "x":16.5, "y":1}, {"label":"8", "x":17.5, "y":1}, {"label":"9", "x":18.5, "y":1}, {"label":"+", "x":19.5, "y":1, "h":2}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"4", "x":16.5, "y":2}, {"label":"5", "x":17.5, "y":2}, {"label":"6", "x":18.5, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"↑", "x":15.25, "y":3.25}, {"label":"1", "x":16.5, "y":3}, {"label":"2", "x":17.5, "y":3}, {"label":"3", "x":18.5, "y":3}, {"label":"Enter", "x":19.5, "y":3, "h":2}, {"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}, {"x":3.5, "y":4, "w":7}, {"label":"Alt", "x":10.5, "y":4, "w":1.25}, {"label":"Win", "x":11.75, "y":4}, {"label":"Menu", "x":12.75, "y":4, "w":1.25}, {"label":"←", "x":14.25, "y":4.25}, {"label":"↓", "x":15.25, "y":4.25}, {"label":"→", "x":16.25, "y":4.25}, {"label":"0", "x":17.5, "y":4}, {"label":".", "x":18.5, "y":4}]
+ }
}
}
diff --git a/keyboards/al1/keymaps/default/keymap.c b/keyboards/al1/keymaps/default/keymap.c
index a4d62191c..5da3b5a7b 100644
--- a/keyboards/al1/keymaps/default/keymap.c
+++ b/keyboards/al1/keymaps/default/keymap.c
@@ -20,22 +20,18 @@ 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_BSPC, KC_INS, 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_DELETE, 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_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_FN0, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_FN0, KC_RGUI, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT ),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(1), KC_RGUI, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT ),
[1] = LAYOUT(\
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_INS, 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_DELETE, KC_P7, KC_P8, KC_P9, KC_PPLS,\
+ KC_TAB, KC_Q, KC_W, KC_E, RESET, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DELETE, 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_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_FN0, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_FN0, KC_RGUI, KC_RCTRL, KC_FN1, KC_FN2, KC_FN3, KC_P0, KC_PDOT ),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_TRNS, KC_RGUI, KC_RCTRL, BL_TOGG, BL_DEC, BL_INC, KC_P0, KC_PDOT ),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
{
// MACRODOWN only works in this function
diff --git a/keyboards/al1/keymaps/splitbs/keymap.c b/keyboards/al1/keymaps/splitbs/keymap.c
index 1d752aef5..095c9b978 100644
--- a/keyboards/al1/keymaps/splitbs/keymap.c
+++ b/keyboards/al1/keymaps/splitbs/keymap.c
@@ -5,14 +5,14 @@ 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_GRAVE, KC_BSPC, KC_INS, 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_DELETE, 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_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_FN0, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_FN0, KC_RGUI, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT ),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(1), KC_RGUI, KC_RCTRL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT ),
[1] = LAYOUT_split_bs(\
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_GRAVE, KC_DELETE, KC_INS, 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_DELETE, KC_P7, KC_P8, KC_P9, KC_PPLS,\
+ KC_TAB, KC_Q, KC_W, KC_E, RESET, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DELETE, 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_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_FN0, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_FN0, KC_RGUI, KC_RCTRL, KC_FN1, KC_FN2, KC_FN3, KC_P0, KC_PDOT ),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_TRNS, KC_RGUI, KC_RCTRL, BL_TOGG, BL_DEC, BL_INC, KC_P0, KC_PDOT ),
};
const uint16_t PROGMEM fn_actions[] = {
diff --git a/keyboards/al1/rules.mk b/keyboards/al1/rules.mk
index c730f7e7c..3930f9ade 100644
--- a/keyboards/al1/rules.mk
+++ b/keyboards/al1/rules.mk
@@ -60,7 +60,8 @@ 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 = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/alf/dc60/config.h b/keyboards/alf/dc60/config.h
new file mode 100644
index 000000000..f6e527119
--- /dev/null
+++ b/keyboards/alf/dc60/config.h
@@ -0,0 +1,224 @@
+/*
+Copyright 2018 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Alf
+#define PRODUCT dc60
+#define DESCRIPTION custom 60% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4 }
+#define MATRIX_COL_PINS { B5, D0, D1, D2, D3, D4, D5, D6, D7, C6, C7, F4, F5, F6, F7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B6
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
+
+#define RGB_DI_PIN E6
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 20
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/alf/dc60/dc60.c b/keyboards/alf/dc60/dc60.c
new file mode 100644
index 000000000..70979adf4
--- /dev/null
+++ b/keyboards/alf/dc60/dc60.c
@@ -0,0 +1,49 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "dc60.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) {
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 7);
+ PORTB &= ~(1 << 7);
+ } else {
+ DDRB &= ~(1 << 7);
+ PORTB &= ~(1 << 7);
+ }
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/alf/dc60/dc60.h b/keyboards/alf/dc60/dc60.h
new file mode 100644
index 000000000..30e05b31f
--- /dev/null
+++ b/keyboards/alf/dc60/dc60.h
@@ -0,0 +1,42 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef DC60_H
+#define DC60_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguments representing the physical
+// layout of the board and position of the keys
+// The second converts the arguments into a two-dimensional array which
+// represents the switch matrix.
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KOD, KOE, \
+ K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
+ K40, K42, K43, K45, K47, K48, K4A, K4B, K4C, K4D, K4E \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KOD, KOE }, \
+ { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \
+ { K40, KC_NO, K42, K43, KC_NO, K45, KC_NO, K47, K48, KC_NO, K4A, K4B, K4C, K4D, K4E }, \
+}
+
+#endif
diff --git a/keyboards/alf/dc60/info.json b/keyboards/alf/dc60/info.json
new file mode 100644
index 000000000..392954520
--- /dev/null
+++ b/keyboards/alf/dc60/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "dc60",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/alf/dc60/keymaps/default/config.h b/keyboards/alf/dc60/keymaps/default/config.h
new file mode 100644
index 000000000..a3ed4f762
--- /dev/null
+++ b/keyboards/alf/dc60/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/alf/dc60/keymaps/default/keymap.c b/keyboards/alf/dc60/keymaps/default/keymap.c
new file mode 100644
index 000000000..b7425178b
--- /dev/null
+++ b/keyboards/alf/dc60/keymaps/default/keymap.c
@@ -0,0 +1,70 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_SPACE, KC_SPACE, KC_RALT, MO(1), KC_RGUI, KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ 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) {
+
+}
+
+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/alf/dc60/keymaps/default/readme.md b/keyboards/alf/dc60/keymaps/default/readme.md
new file mode 100644
index 000000000..85bef5fc7
--- /dev/null
+++ b/keyboards/alf/dc60/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for dc60
diff --git a/keyboards/alf/dc60/readme.md b/keyboards/alf/dc60/readme.md
new file mode 100644
index 000000000..d8e20a8f4
--- /dev/null
+++ b/keyboards/alf/dc60/readme.md
@@ -0,0 +1,15 @@
+# dc60
+
+![dc60](imgur.com image replace me!)
+
+A 60% PCB sold with the Alf DC60.
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: DC60 PCB
+Hardware Availability: [Geekhack GB](https://geekhack.org/index.php?topic=96616.0)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make alf/dc60: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/alf/dc60/rules.mk b/keyboards/alf/dc60/rules.mk
new file mode 100644
index 000000000..9ad6d7875
--- /dev/null
+++ b/keyboards/alf/dc60/rules.mk
@@ -0,0 +1,70 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/alf/x2/config.h b/keyboards/alf/x2/config.h
new file mode 100644
index 000000000..f2106fa88
--- /dev/null
+++ b/keyboards/alf/x2/config.h
@@ -0,0 +1,55 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ALF
+#define PRODUCT X2
+#define DESCRIPTION ALF X2 60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3, F4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 4
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+#endif
diff --git a/keyboards/alf_x2/info.json b/keyboards/alf/x2/info.json
index 85db6d69a..85db6d69a 100644
--- a/keyboards/alf_x2/info.json
+++ b/keyboards/alf/x2/info.json
diff --git a/keyboards/alf_x2/keymaps/default/keymap.c b/keyboards/alf/x2/keymaps/default/keymap.c
index 9470e38b5..9470e38b5 100644
--- a/keyboards/alf_x2/keymaps/default/keymap.c
+++ b/keyboards/alf/x2/keymaps/default/keymap.c
diff --git a/keyboards/alf_x2/keymaps/hhkb_60/keymap.c b/keyboards/alf/x2/keymaps/hhkb_60/keymap.c
index 8baba1ae9..8baba1ae9 100644
--- a/keyboards/alf_x2/keymaps/hhkb_60/keymap.c
+++ b/keyboards/alf/x2/keymaps/hhkb_60/keymap.c
diff --git a/keyboards/alf/x2/readme.md b/keyboards/alf/x2/readme.md
new file mode 100644
index 000000000..b171b5c79
--- /dev/null
+++ b/keyboards/alf/x2/readme.md
@@ -0,0 +1,15 @@
+# X2
+
+![x2](https://cdn.shopify.com/s/files/1/1674/0405/products/1_088c2862-1f68-4fdd-a346-965208c3a3de_1024x1024.png?v=1511296076)
+
+A customizable 60% keyboard.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: ALF X2 60%
+Hardware Availability: [zFrontier](https://en.zfrontier.com/products/group-buy-alf-x2-60)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make alf/x2: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/alf_x2/rules.mk b/keyboards/alf/x2/rules.mk
index 9c4082da2..9c4082da2 100644
--- a/keyboards/alf_x2/rules.mk
+++ b/keyboards/alf/x2/rules.mk
diff --git a/keyboards/alf/x2/x2.c b/keyboards/alf/x2/x2.c
new file mode 100644
index 000000000..111712f0b
--- /dev/null
+++ b/keyboards/alf/x2/x2.c
@@ -0,0 +1 @@
+#include "x2.h"
diff --git a/keyboards/alf/x2/x2.h b/keyboards/alf/x2/x2.h
new file mode 100644
index 000000000..c6c587aea
--- /dev/null
+++ b/keyboards/alf/x2/x2.h
@@ -0,0 +1,98 @@
+#ifndef X2_H
+#define X2_H
+
+#include "quantum.h"
+
+// K404 and K408 are the microswitches at the top of the PCB
+
+#define LAYOUT( \
+ K404, K408, \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
+ K400, K401, K403, K406, K410, K411, K412, K413, K414 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
+ { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
+}
+
+#define LAYOUT_std_ansi( \
+ K404, K408, \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
+ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
+ K400, K401, K403, K406, K410, K411, K413, K414 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \
+ { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \
+ { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, K414 } \
+}
+
+#define LAYOUT_std_splits( \
+ K404, K408, \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
+ K400, K401, K403, K406, K410, K411, K413, K414 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
+ { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, K414 } \
+}
+
+#define LAYOUT_hhkb( \
+ K404, K408, \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
+ K401, K403, K406, K410, K411 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
+ { KC_NO, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, KC_NO, KC_NO } \
+}
+
+#define LAYOUT_2u_split_arrows( \
+ K404, K408, \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
+ K400, K401, K403, K406, K410, K411, K412, K413, K414 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
+ { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
+}
+
+#define LAYOUT_split_arrows( \
+ K404, K408, \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
+ K400, K401, K403, K406, K410, K411, K412, K413, K414 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
+ { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
+}
+
+#endif
diff --git a/keyboards/alf_x2/alf_x2.c b/keyboards/alf_x2/alf_x2.c
deleted file mode 100644
index cc22d872a..000000000
--- a/keyboards/alf_x2/alf_x2.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "alf_x2.h"
diff --git a/keyboards/alf_x2/alf_x2.h b/keyboards/alf_x2/alf_x2.h
deleted file mode 100644
index ca40451d8..000000000
--- a/keyboards/alf_x2/alf_x2.h
+++ /dev/null
@@ -1,98 +0,0 @@
-#ifndef ALF_X2_H
-#define ALF_X2_H
-
-#include "quantum.h"
-
-// K404 and K408 are the microswitches at the top of the PCB
-
-#define LAYOUT( \
- K404, K408, \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
- K400, K401, K403, K406, K410, K411, K412, K413, K414 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
- { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
-}
-
-#define LAYOUT_std_ansi( \
- K404, K408, \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
- K400, K401, K403, K406, K410, K411, K413, K414 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \
- { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, K414 } \
-}
-
-#define LAYOUT_std_splits( \
- K404, K408, \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- K400, K401, K403, K406, K410, K411, K413, K414 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
- { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, K413, K414 } \
-}
-
-#define LAYOUT_hhkb( \
- K404, K408, \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- K401, K403, K406, K410, K411 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
- { KC_NO, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, KC_NO, KC_NO, KC_NO } \
-}
-
-#define LAYOUT_2u_split_arrows( \
- K404, K408, \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
- K400, K401, K403, K406, K410, K411, K412, K413, K414 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
- { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
-}
-
-#define LAYOUT_split_arrows( \
- K404, K408, \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- K400, K401, K403, K406, K410, K411, K412, K413, K414 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_N), K313, K314 }, \
- { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
-}
-
-#endif \ No newline at end of file
diff --git a/keyboards/alf_x2/config.h b/keyboards/alf_x2/config.h
deleted file mode 100644
index 31212ce33..000000000
--- a/keyboards/alf_x2/config.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER ALF
-#define PRODUCT X2
-#define DESCRIPTION ALF X2 60
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 15
-
-/* key matrix pins */
-#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
-#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3, F4 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* number of backlight levels */
-#define BACKLIGHT_PIN B6
-#ifdef BACKLIGHT_PIN
-#define BACKLIGHT_LEVELS 3
-#endif
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-#define RGB_DI_PIN E2
-#ifdef RGB_DI_PIN
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 4
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#endif
-
-#endif \ No newline at end of file
diff --git a/keyboards/alf_x2/readme.md b/keyboards/alf_x2/readme.md
deleted file mode 100644
index ece339fa9..000000000
--- a/keyboards/alf_x2/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# ALF X2
-
-![alf_x2](https://cdn.shopify.com/s/files/1/1674/0405/products/1_088c2862-1f68-4fdd-a346-965208c3a3de_1024x1024.png?v=1511296076)
-
-A customizable 60% keyboard.
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: ALF X2 60%
-Hardware Availability: [zFrontier](https://en.zfrontier.com/products/group-buy-alf-x2-60)
-
-Make example for this keyboard (after setting up your build environment):
-
- make alf_x2:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/alpha/config.h b/keyboards/alpha/config.h
index 029527563..1e16f5ca3 100755
--- a/keyboards/alpha/config.h
+++ b/keyboards/alpha/config.h
@@ -43,8 +43,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
#define RGB_DI_PIN F4
#ifdef RGB_DI_PIN
diff --git a/keyboards/alpha/keymaps/default/keymap.c b/keyboards/alpha/keymaps/default/keymap.c
index 03c47452d..e8d04b8e7 100755
--- a/keyboards/alpha/keymaps/default/keymap.c
+++ b/keyboards/alpha/keymaps/default/keymap.c
@@ -1,32 +1,18 @@
#include QMK_KEYBOARD_H
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TO(1),
- KC_Z, KC_X, KC_C, KC_V, MT(MOD_LSFT, KC_SPC), KC_B, KC_N, KC_M),
-
- LAYOUT(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
- KC_BSPC, KC_ESC, KC_TAB, KC_SCLN, KC_QUOT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TO(2),
- KC_LCTL, KC_LGUI, KC_LALT, TO(0), MT(MOD_LSFT, KC_ENT), KC_COMM, KC_DOT, KC_SLSH),
-
- LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
- KC_LSFT, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, TO(3),
- RGB_VAI, RGB_VAD, RGB_HUI, TO(0), RGB_MOD, KC_MPLY, KC_VOLD, KC_VOLU),
- LAYOUT(
- RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, M(0), KC_NO, KC_NO, KC_NO),
+#define HOME 0
+#define MODS 1
+#define MODS2 2
+#define OTHER 3
+enum custom_keycodes {
+ MACRO1
};
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
switch (keycode) {
- case 0:
+ case MACRO1:
SEND_STRING("I'm so sorry... -PyroL");
return false;
}
@@ -34,43 +20,30 @@ 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_NUM_LOCK)) {
-
- } else {
-
- }
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [HOME] = LAYOUT(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TO(1),
+ KC_Z, KC_X, KC_C, KC_V, MT(MOD_LSFT, KC_SPC), KC_B, KC_N, KC_M),
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
-
- } else {
-
- }
+ [MODS] = LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ KC_BSPC, KC_ESC, KC_TAB, KC_SCLN, KC_QUOT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TO(2),
+ KC_LCTL, KC_LGUI, KC_LALT, TO(0), MT(MOD_LSFT, KC_ENT), KC_COMM, KC_DOT, KC_SLSH),
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
-
- } else {
-
- }
+ [MODS2] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
+ KC_LSFT, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, TO(3),
+ RGB_VAI, RGB_VAD, RGB_HUI, TO(0), RGB_MOD, KC_MPLY, KC_VOLD, KC_VOLU),
- if (usb_led & (1 << USB_LED_COMPOSE)) {
-
- } else {
-
- }
+ [OTHER] = LAYOUT(
+ RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, TO(0), MACRO1, KC_NO, KC_NO, KC_NO),
+};
- if (usb_led & (1 << USB_LED_KANA)) {
-
- } else {
-
- }
+void matrix_init_user(void) {
+}
+void matrix_scan_user(void) {
}
diff --git a/keyboards/alpha/readme.md b/keyboards/alpha/readme.md
index 3a733d365..4b5c7fc80 100644
--- a/keyboards/alpha/readme.md
+++ b/keyboards/alpha/readme.md
@@ -14,4 +14,6 @@ Make example for Alpha (after setting up your build environment):
make alpha:default
-See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/faq/build-compile-qmk) for more information. \ No newline at end of file
+See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/faq/build-compile-qmk) for more information.
+
+Please see [PyrooL/Alpha](https://www.github.com/PyrooL/Alpha) for **build instructions**, parts lists, Gerbers, and case files.
diff --git a/keyboards/alps64/alps64.h b/keyboards/alps64/alps64.h
index 4e8587435..14ff55218 100644
--- a/keyboards/alps64/alps64.h
+++ b/keyboards/alps64/alps64.h
@@ -94,16 +94,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \
K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \
K31, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, \
- K30, K40, K50, K60, K70, K00, K20 \
+ K30, K40, K50, K60, K00, K10, K20 \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07 }, \
- { KC_NO, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
{ K20, K21, KC_NO, K23, K24, K25, KC_NO, K27 }, \
{ K30, K31, K32, K33, K34, K35, K36, K37 }, \
{ K40, KC_NO, K42, K43, K44, K45, K46, K47 }, \
{ K50, K51, K52, K53, K54, K55, K56, K57 }, \
{ K60, K61, K62, K63, K64, K65, K66, K67 }, \
- { K70, K71, K72, K73, K74, K75, K76, K77 } \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77 } \
}
#define LAYOUT_kc( \
diff --git a/keyboards/alps64/keymaps/crd/keymap.c b/keyboards/alps64/keymaps/crd/keymap.c
new file mode 100644
index 000000000..0b12f02ad
--- /dev/null
+++ b/keyboards/alps64/keymaps/crd/keymap.c
@@ -0,0 +1,32 @@
+#include QMK_KEYBOARD_H
+
+enum keyboard_layers {
+ _BL = 0, // Base Layer
+ _FL // Function Layer
+};
+
+// Custom #defined keycodes (shorter macros for readability)
+#define KC_CTES CTL_T(KC_ESC)
+#define KC_RSUP RSFT_T(KC_UP)
+#define KC_FNDN LT(_FL, KC_DOWN)
+#define KC_RGLT RCMD_T(KC_LEFT)
+#define KC_RCRT RCTL_T(KC_RIGHT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_aek_103(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP,
+ MO(_FL), KC_LALT, KC_LGUI, KC_SPC, KC_RGLT, KC_FNDN, KC_RCRT
+ ),
+ [_FL] = LAYOUT_aek_103(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, RESET,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {};
diff --git a/keyboards/alu84/config.h b/keyboards/alu84/config.h
index 9e013dbcc..9d2dca409 100755
--- a/keyboards/alu84/config.h
+++ b/keyboards/alu84/config.h
@@ -59,9 +59,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
#define RGBLED_NUM 16
diff --git a/keyboards/amj40/keymaps/default/rules.mk b/keyboards/amj40/keymaps/default/rules.mk
index 034e697bc..fe9867220 100644
--- a/keyboards/amj40/keymaps/default/rules.mk
+++ b/keyboards/amj40/keymaps/default/rules.mk
@@ -1,5 +1,5 @@
# 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)
@@ -13,14 +13,11 @@ 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 this with audio at the same time.
+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
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
-
ifndef QUANTUM_DIR
include ../../../../Makefile
diff --git a/keyboards/amj40/keymaps/fabian/rules.mk b/keyboards/amj40/keymaps/fabian/rules.mk
index a914e4c0c..90559e0dd 100644
--- a/keyboards/amj40/keymaps/fabian/rules.mk
+++ b/keyboards/amj40/keymaps/fabian/rules.mk
@@ -1,5 +1,5 @@
# 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)
@@ -13,15 +13,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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
-
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
-
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk b/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk
index d7f3e7605..2b613b28e 100644
--- a/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk
+++ b/keyboards/amj40/keymaps/jetpacktuxedo/rules.mk
@@ -13,15 +13,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. Do not enable this with audio at the same time.
+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
-
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
-
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/amj40/keymaps/myee/rules.mk b/keyboards/amj40/keymaps/myee/rules.mk
index 034e697bc..fe07e43d8 100644
--- a/keyboards/amj40/keymaps/myee/rules.mk
+++ b/keyboards/amj40/keymaps/myee/rules.mk
@@ -1,5 +1,5 @@
# 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)
@@ -13,15 +13,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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
-
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
-
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/amj60/amj60.h b/keyboards/amj60/amj60.h
index 400f0691e..07b406868 100644
--- a/keyboards/amj60/amj60.h
+++ b/keyboards/amj60/amj60.h
@@ -3,7 +3,7 @@
#include "quantum.h"
-// readability
+// readability
#define XXX KC_NO
/* AMJ60 layout to the best of my knowledge matrix layout
@@ -34,7 +34,7 @@
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
}
-/*
+/*
* ANSI
* ,-----------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
@@ -92,7 +92,7 @@
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
}
-/* ISO
+/* ISO
* ,-----------------------------------------------------------.
* | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
* |-----------------------------------------------------------|
@@ -116,7 +116,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, k2c, k2d}, \
- {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, XXX}, \
+ {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, XXX, k3d}, \
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
}
diff --git a/keyboards/amj60/keymaps/iso_split_rshift/rules.mk b/keyboards/amj60/keymaps/iso_split_rshift/rules.mk
index 2969ed8ae..931affcd5 100644
--- a/keyboards/amj60/keymaps/iso_split_rshift/rules.mk
+++ b/keyboards/amj60/keymaps/iso_split_rshift/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+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/amj96/amj96.h b/keyboards/amj96/amj96.h
index 37bb6566f..e8a83af0c 100644
--- a/keyboards/amj96/amj96.h
+++ b/keyboards/amj96/amj96.h
@@ -18,25 +18,28 @@
#include "quantum.h"
+// readability
+#define XXX KC_NO
+
// This a shortcut to help you visually see your layout.
// The following is an example using the Planck MIT layout
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT( \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K09, K0A, K0C, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K0B, K0F, K6F,\
- K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K0D, K6D,\
- K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K6E,\
- K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E, K5F, K0E, K07,\
- K60, K61, K62, K63, K64, K65, K66, K68, K69, K6A, K6B, K6C\
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K0B, K0F, K6F, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K0D, K6D, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K6E, \
+ K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E, K5F, K0E, K07, \
+ K60, K61, K62, K63, K64, K65, K66, K68, K69, K6A, K6B, K6C \
) { \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_##K07, KC_NO, KC_##K09, KC_##K0A, KC_##K0B, KC_##K0C, KC_##K0D, KC_##K0E, KC_##K0F}, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K1A, KC_##K1B, KC_##K1C, KC_##K1D, KC_##K1E, KC_##K1F}, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K2A, KC_##K2B, KC_##K2C, KC_##K2D, KC_##K2E, KC_##K2F}, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, KC_##K39, KC_##K3A, KC_##K3B, KC_##K3C, KC_##K3D, KC_##K3E, KC_##K3F}, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, KC_##K48, KC_##K49, KC_##K4A, KC_##K4B, KC_##K4C, KC_##K4D, KC_##K4E, KC_##K4F}, \
- { KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, KC_##K58, KC_##K59, KC_##K5A, KC_##K5B, KC_##K5C, KC_##K5D, KC_##K5E, KC_##K5F}, \
- { KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_NO, KC_##K68, KC_##K69, KC_##K6A, KC_##K6B, KC_##K6C, KC_##K6D, KC_##K6E, KC_##K6F} \
+ { XXX, XXX, XXX, XXX, XXX, XXX, XXX, K07, XXX, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E, K5F }, \
+ { K60, K61, K62, K63, K64, K65, K66, XXX, K68, K69, K6A, K6B, K6C, K6D, K6E, K6F } \
}
diff --git a/keyboards/amj96/config.h b/keyboards/amj96/config.h
index 1ba35b54d..6c51a2443 100644
--- a/keyboards/amj96/config.h
+++ b/keyboards/amj96/config.h
@@ -170,8 +170,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
/*
* MIDI options
diff --git a/keyboards/amj96/info.json b/keyboards/amj96/info.json
index ac399adbd..bcee81b07 100644
--- a/keyboards/amj96/info.json
+++ b/keyboards/amj96/info.json
@@ -5,8 +5,9 @@
"width": 19,
"height": 6,
"layouts": {
- "LAYOUT": {
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"PrtSc", "x":13, "y":0}, {"label":"Scroll Lock", "x":14, "y":0}, {"label":"Pause", "x":15, "y":0}, {"label":"Num Lock", "x":16, "y":0}, {"label":"/", "x":17, "y":0}, {"label":"*", "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":"Insert", "x":15, "y":1}, {"label":"Home", "x":16, "y":1}, {"label":"PgUp", "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":"Delete", "x":15, "y":2}, {"label":"End", "x":16, "y":2}, {"label":"PgDn", "x":17, "y":2}, {"label":"7", "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}, {"label":"8", "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":"1", "x":14, "y":4}, {"label":"\u2191", "x":15, "y":4}, {"label":"\u2190", "x":16, "y":4}, {"label":"\u2193", "x":17, "y":4}, {"label":"\u2192", "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, "w":1.25}, {"label":"Win", "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":"2", "x":15, "y":5}, {"label":".", "x":16, "y":5}, {"label":"3", "x":17, "y":5}, {"label":"9", "x":18, "y":5}]
- }
+ "LAYOUT": {
+ "key_count": 103,
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"Print Screen", "x":13, "y":0}, {"label":"Pause", "x":14, "y":0}, {"label":"Ins", "x":15, "y":0}, {"label":"Del", "x":16, "y":0}, {"label":"Page Up", "x":17, "y":0}, {"label":"Page Down", "x":18, "y":0}, {"label":"` ~", "x":0, "y":1}, {"label":"1 !", "x":1, "y":1}, {"label":"2 @", "x":2, "y":1}, {"label":"3 #", "x":3, "y":1}, {"label":"4 $", "x":4, "y":1}, {"label":"5 %", "x":5, "y":1}, {"label":"6 ^", "x":6, "y":1}, {"label":"7 &", "x":7, "y":1}, {"label":"8 *", "x":8, "y":1}, {"label":"9 (", "x":9, "y":1}, {"label":"0 )", "x":10, "y":1}, {"label":"- _", "x":11, "y":1}, {"label":"= +", "x":12, "y":1}, {"label":"Back Space", "x":13, "y":1}, {"label":"Back Space 2", "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}, {"label":"+", "x":18, "y":3}, {"label":"Shift", "x":0, "y":4, "w":1.25}, {"label":"ISO \\", "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":"Up", "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":"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.5}, {"label":"Fn", "x":11.5, "y":5, "w":1.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":5}]
+ }
}
}
diff --git a/keyboards/amj96/keymaps/default/keymap.c b/keyboards/amj96/keymaps/default/keymap.c
index 72a44eedf..0976d856e 100644
--- a/keyboards/amj96/keymaps/default/keymap.c
+++ b/keyboards/amj96/keymaps/default/keymap.c
@@ -13,25 +13,27 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "amj96.h"
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,PAUS, INS, DEL, PGUP,PGDN, \
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC,NO, NLCK,PSLS,PAST,PMNS, \
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, P7, P8, P9, PPLS, \
- CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS, \
- LSFT,NO, Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT,UP, P1, P2, P3, PENT,\
- LCTL,LGUI,LALT, SPC, RALT,FN0, LEFT,DOWN, RGHT,P0, PDOT, PENT),
+ [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_PAUS, KC_INS, KC_DEL, KC_PGUP, KC_PGDN, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NO, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_FN0, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
+ ),
- LAYOUT(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS,\
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,NO, TRNS,TRNS,TRNS,TRNS,\
- TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,\
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,\
- TRNS,NO, TRNS,TRNS, TRNS, TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, TRNS,TRNS,TRNS,TRNS,\
- TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, TRNS,TRNS, TRNS,TRNS,TRNS,TRNS)
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ )
};
const uint16_t PROGMEM fn_actions[] = {
diff --git a/keyboards/amj96/readme.md b/keyboards/amj96/readme.md
index 96bbb4a71..7c1b61c76 100644
--- a/keyboards/amj96/readme.md
+++ b/keyboards/amj96/readme.md
@@ -3,7 +3,7 @@
The AMD96 is a 96 key custom keyboard with anodized aluminum case, twin usb ports, and support for backlight LEDs and RGB underglow via SMD LEDs.
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: AMJ96
+Hardware Supported: AMJ96
Hardware Availability: Was previously available on a GB via [Flashquark](https://flashquark.com/product/amj96/)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/amj96/rules.mk b/keyboards/amj96/rules.mk
index 3421d5820..59451dee6 100644
--- a/keyboards/amj96/rules.mk
+++ b/keyboards/amj96/rules.mk
@@ -55,12 +55,12 @@ BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE ?= yes # USB Nkey Rollover
-# BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality on B7 by default
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
RGBLIGHT_ENABLE = yes
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
UNICODE_ENABLE = no # Unicode
diff --git a/keyboards/amjpad/info.json b/keyboards/amjpad/info.json
index dde839dd8..d362bc070 100644
--- a/keyboards/amjpad/info.json
+++ b/keyboards/amjpad/info.json
@@ -5,11 +5,11 @@
"width": 4,
"height": 6,
"layouts": {
- "LAYOUT": {
+ "LAYOUT_numpad_6x4": {
"key_count": 21,
- "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2, "h":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4, "h":2}, {"x":0, "y":5, "w":2}, {"x":2, "y":5}]
+ "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":"k10", "x":0, "y":1}, {"label":"k11", "x":1, "y":1}, {"label":"k12", "x":2, "y":1}, {"label":"k13", "x":3, "y":1}, {"label":"k20", "x":0, "y":2}, {"label":"k21", "x":1, "y":2}, {"label":"k22", "x":2, "y":2}, {"label":"k30", "x":0, "y":3}, {"label":"k31", "x":1, "y":3}, {"label":"k32", "x":2, "y":3}, {"label":"k23", "x":3, "y":2, "h":2}, {"label":"k40", "x":0, "y":4}, {"label":"k41", "x":1, "y":4}, {"label":"k42", "x":2, "y":4}, {"label":"k50", "x":0, "y":5, "w":2}, {"label":"k52", "x":2, "y":5}, {"label":"k43", "x":3, "y":4, "h":2}]
},
- "LAYOUT_all": {
+ "LAYOUT_ortho_6x4": {
"key_count": 24,
"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":"k10", "x":0, "y":1}, {"label":"k11", "x":1, "y":1}, {"label":"k12", "x":2, "y":1}, {"label":"k13", "x":3, "y":1}, {"label":"k20", "x":0, "y":2}, {"label":"k21", "x":1, "y":2}, {"label":"k22", "x":2, "y":2}, {"label":"k23", "x":3, "y":2}, {"label":"k30", "x":0, "y":3}, {"label":"k31", "x":1, "y":3}, {"label":"k32", "x":2, "y":3}, {"label":"k33", "x":3, "y":3}, {"label":"k40", "x":0, "y":4}, {"label":"k41", "x":1, "y":4}, {"label":"k42", "x":2, "y":4}, {"label":"k43", "x":3, "y":4}, {"label":"k50", "x":0, "y":5}, {"label":"k51", "x":1, "y":5}, {"label":"k52", "x":2, "y":5}, {"label":"k53", "x":3, "y":5}]
}
diff --git a/keyboards/at101_blackheart/at101_blackheart.c b/keyboards/at101_blackheart/at101_blackheart.c
new file mode 100644
index 000000000..aa07a7864
--- /dev/null
+++ b/keyboards/at101_blackheart/at101_blackheart.c
@@ -0,0 +1 @@
+#include "at101_blackheart.h"
diff --git a/keyboards/at101_blackheart/at101_blackheart.h b/keyboards/at101_blackheart/at101_blackheart.h
new file mode 100644
index 000000000..24ac1b7c5
--- /dev/null
+++ b/keyboards/at101_blackheart/at101_blackheart.h
@@ -0,0 +1,28 @@
+#ifndef at101_blackheart_H
+#define at101_blackheart_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K0000, K0100, K0001, K0101, K0002, K0102, K0003, K0103, K0004, K0104, K0005, K0105, K0006, K0106, K0007, K0107, \
+ K0200, K0300, K0201, K0301, K0202, K0302, K0203, K0303, K0204, K0304, K0205, K0305, K0206, K0306, K0207, K0307, K0208, K0308, K0209, K0309, K0009, \
+ K0400, K0500, K0401, K0501, K0402, K0502, K0403, K0503, K0404, K0504, K0405, K0505, K0406, K0506, K0407, K0507, K0408, K0508, K0409, K0509, K0109, \
+ K0600, K0700, K0601, K0701, K0602, K0702, K0603, K0703, K0604, K0704, K0605, K0705, K0606, K0608, K0708, K0609, K0709, \
+ K0800, K1101, K0900, K0801, K0901, K0802, K0902, K0803, K0903, K0804, K0904, K0805, K0905, K0806, K0807, K0808, K0908, K0809, K0909, \
+ K1000, K1100, K1001, K1102, K1005, K1105, K1006, K1106, K1007, K1107, K1008, K1108, K1009 \
+) { \
+ { K0000, K0001, K0002, K0003, K0004, K0005, K0006, K0007, KC_NO, K0009 }, \
+ { K0100, K0101, K0102, K0103, K0104, K0105, K0106, K0107, KC_NO, K0109 }, \
+ { K0200, K0201, K0202, K0203, K0204, K0205, K0206, K0207, K0208, K0209 }, \
+ { K0300, K0301, K0302, K0303, K0304, K0305, K0306, K0307, K0308, K0309 }, \
+ { K0400, K0401, K0402, K0403, K0404, K0405, K0406, K0407, K0408, K0409 }, \
+ { K0500, K0501, K0502, K0503, K0504, K0505, K0506, K0507, K0508, K0509 }, \
+ { K0600, K0601, K0602, K0603, K0604, K0605, K0606, KC_NO, K0608, K0609 }, \
+ { K0700, K0701, K0702, K0703, K0704, K0705, KC_NO, KC_NO, K0708, K0709 }, \
+ { K0800, K0801, K0802, K0803, K0804, K0805, K0806, K0807, K0808, K0809 }, \
+ { K0900, K0901, K0902, K0903, K0904, K0905, KC_NO, KC_NO, K0908, K0909 }, \
+ { K1000, K1001, KC_NO, KC_NO, KC_NO, K1005, K1006, K1007, K1008, K1009 }, \
+ { K1100, K1101, K1102, KC_NO, KC_NO, K1105, K1106, K1107, K1108, KC_NO } \
+}
+
+#endif
diff --git a/keyboards/at101_blackheart/config.h b/keyboards/at101_blackheart/config.h
new file mode 100644
index 000000000..237cb095e
--- /dev/null
+++ b/keyboards/at101_blackheart/config.h
@@ -0,0 +1,40 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER blindassassin111
+#define PRODUCT AT101_Blackheart PCB
+#define DESCRIPTION Replacement AT101 PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 10
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F0, F1, F4, D4, F6, F5, F7, B6, B5, D5, C7, C6 }
+#define MATRIX_COL_PINS { D1, D0, B7, B3, B2, B1, B0, E6, D2, D3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* force n-key rollover*/
+#define FORCE_NKRO
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
diff --git a/keyboards/at101_blackheart/info.json b/keyboards/at101_blackheart/info.json
new file mode 100644
index 000000000..4bef46712
--- /dev/null
+++ b/keyboards/at101_blackheart/info.json
@@ -0,0 +1,121 @@
+{
+ "keyboard_name": "AT101 Blackheart PCB",
+ "keyboard_folder": "at101_blackheart",
+ "url": "https://deskthority.net/group-buys-f50/programmable-vintage-board-pcbs-omnikey-at101-and-z-150-t19325.html",
+ "maintainer": "qmk, blindassassin111",
+ "width": 22.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"Grave", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Num Lock", "x":18.5, "y":1.5},
+ {"label":"Keypad /", "x":19.5, "y":1.5},
+ {"label":"Keypad *", "x":20.5, "y":1.5},
+ {"label":"Keypad -", "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":"LBracket", "x":11.5, "y":2.5},
+ {"label":"RBracket]", "x":12.5, "y":2.5},
+ {"label":"Backslash", "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":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Keypad 7", "x":18.5, "y":2.5},
+ {"label":"Keypad 8", "x":19.5, "y":2.5},
+ {"label":"Keypad 9", "x":20.5, "y":2.5},
+ {"label":"Keypad +", "x":21.5, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":"Semicolon", "x":10.75, "y":3.5},
+ {"label":"Quote", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"Keypad 4", "x":18.5, "y":3.5},
+ {"label":"Keypad 5", "x":19.5, "y":3.5},
+ {"label":"Keypad 6", "x":20.5, "y":3.5},
+ {"label":"Keypad =", "x":21.5, "y":3.5},
+ {"label":"LShift", "x":0, "y":4.5, "w":1.25},
+ {"label":"ISO Backslash", "x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":"Comma", "x":9.25, "y":4.5},
+ {"label":"Period", "x":10.25, "y":4.5},
+ {"label":"Slash", "x":11.25, "y":4.5},
+ {"label":"RShift", "x":12.25, "y":4.5, "w":1.75},
+ {"label":"Fn", "x":14, "y":4.5},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Keypad 1", "x":18.5, "y":4.5},
+ {"label":"Keypad 2", "x":19.5, "y":4.5},
+ {"label":"Keypad 3", "x":20.5, "y":4.5},
+ {"label":"Keypad Enter", "x":21.5, "y":4.5, "h":2},
+ {"label":"LCtrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"LGUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"LAlt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"RAlt", "x":10, "y":5.5, "w":1.25},
+ {"label":"RGUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"RCtrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5},
+ {"label":"Keypad 0", "x":18.5, "y":5.5, "w":2},
+ {"label":"Keypad .", "x":20.5, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/at101_blackheart/keymaps/default/keymap.c b/keyboards/at101_blackheart/keymaps/default/keymap.c
new file mode 100644
index 000000000..086c25e1c
--- /dev/null
+++ b/keyboards/at101_blackheart/keymaps/default/keymap.c
@@ -0,0 +1,53 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ 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_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT, KC_P4, KC_P5, KC_P6, KC_PEQL,
+ KC_LSFT,KC_BSLS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_LSFT,MO(1), KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT, KC_RGUI,KC_MENU, KC_RCTL, KC_LEFT,KC_DOWN, KC_RGHT, KC_P0, KC_PDOT),
+
+ 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,
+ RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+ DDRB |= (1 << 4);
+ DDRD |= (1 << 6) | (1 << 7);
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+ PORTD |= (1 << 7);
+ } else {
+ PORTD &= ~(1 << 7);
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ PORTB |= (1 << 4);
+ } else {
+ PORTB &= ~(1 << 4);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ PORTD |= (1 << 6);
+ } else {
+ PORTD &= ~(1 << 6);
+ }
+} \ No newline at end of file
diff --git a/keyboards/at101_blackheart/readme.md b/keyboards/at101_blackheart/readme.md
new file mode 100644
index 000000000..d435d6955
--- /dev/null
+++ b/keyboards/at101_blackheart/readme.md
@@ -0,0 +1,15 @@
+# AT101 Blackheart PCB
+
+![AT101 Blackheart PCB](https://deskthority.net/resources/image/48571)
+
+A replacement PCB for AT101 keyboards.
+
+Keyboard Maintainer: QMK Community and blindassassin111
+Hardware Supported: AT101 blackheart PCB
+Hardware Availability: https://deskthority.net/group-buys-f50/programmable-vintage-board-pcbs-omnikey-at101-and-z-150-t19325.html
+
+Make example for this keyboard (after setting up your build environment):
+
+ make at101_blackheart: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/at101_blackheart/rules.mk b/keyboards/at101_blackheart/rules.mk
new file mode 100644
index 000000000..fadff6f23
--- /dev/null
+++ b/keyboards/at101_blackheart/rules.mk
@@ -0,0 +1,59 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+BOOTLOADER = halfkay
+
+# Boot Section Size in *bytes*
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no \ No newline at end of file
diff --git a/keyboards/atom47/rev2/rev2.c b/keyboards/atom47/rev2/rev2.c
index 31a8561f0..06fce06da 100644
--- a/keyboards/atom47/rev2/rev2.c
+++ b/keyboards/atom47/rev2/rev2.c
@@ -17,6 +17,9 @@ void matrix_scan_kb(void) {
void led_init_ports(void) {
// * Set our LED pins as output
DDRB &= ~(1<<5);
+
+ //Set output high, so the capslock led is off
+ PORTB |= (1 << 5);
}
void led_set_kb(uint8_t usb_led) {
diff --git a/keyboards/atom47/rev3/config.h b/keyboards/atom47/rev3/config.h
index 8a91e2990..b94dc9773 100644
--- a/keyboards/atom47/rev3/config.h
+++ b/keyboards/atom47/rev3/config.h
@@ -61,7 +61,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGB_DI_PIN F5 // The pin the LED strip is connected to
#define RGBLED_NUM 6 // Number of LEDs in your strip
-
+#define RGBLIGHT_ANIMATIONS
#define QMK_ESC_OUTPUT B7 // usually COL
#define QMK_ESC_INPUT B3 // usually ROW
#define QMK_LED E6
diff --git a/keyboards/atom47/rev3/rev3.c b/keyboards/atom47/rev3/rev3.c
index 2cd04fa76..c541ed559 100644
--- a/keyboards/atom47/rev3/rev3.c
+++ b/keyboards/atom47/rev3/rev3.c
@@ -17,6 +17,9 @@ void matrix_scan_kb(void) {
void led_init_ports(void) {
// * Set our LED pins as output
DDRE |= (1 << 6);
+
+ //Set output high, so the capslock led is off
+ PORTE |= (1 << 6);
}
void led_set_kb(uint8_t usb_led) {
diff --git a/keyboards/atomic/keymaps/pvc/rules.mk b/keyboards/atomic/keymaps/pvc/rules.mk
index c7c04485f..8414b40fb 100644
--- a/keyboards/atomic/keymaps/pvc/rules.mk
+++ b/keyboards/atomic/keymaps/pvc/rules.mk
@@ -9,7 +9,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/atomic/rules.mk b/keyboards/atomic/rules.mk
index 3bd04a00a..eee6c2530 100644
--- a/keyboards/atomic/rules.mk
+++ b/keyboards/atomic/rules.mk
@@ -63,7 +63,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. Do not enable this with audio at the same time.
+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/atreus/keymaps/jeremy/keymap.c b/keyboards/atreus/keymaps/jeremy/keymap.c
index 42bef9d80..890980f41 100644
--- a/keyboards/atreus/keymaps/jeremy/keymap.c
+++ b/keyboards/atreus/keymaps/jeremy/keymap.c
@@ -4,8 +4,6 @@
#include "action_layer.h"
#include "keymap_colemak.h"
-#define PREVENT_STUCK_MODIFIERS
-
// Each layer gets a name for readability, which is then used in the keymap matrix below.
#define ALPH 0
#define NUMS 1
diff --git a/keyboards/atreus/keymaps/khitsule/config.h b/keyboards/atreus/keymaps/khitsule/config.h
index 19714ec7d..c74909a9f 100644
--- a/keyboards/atreus/keymaps/khitsule/config.h
+++ b/keyboards/atreus/keymaps/khitsule/config.h
@@ -3,8 +3,6 @@
#include "../../config.h"
-#define PREVENT_STUCK_MODIFIERS
-
#define IGNORE_MOD_TAP_INTERRUPT
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/atreus/keymaps/nojjan/config.h b/keyboards/atreus/keymaps/nojjan/config.h
new file mode 100644
index 000000000..90b7c4a6c
--- /dev/null
+++ b/keyboards/atreus/keymaps/nojjan/config.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#undef MATRIX_ROW_PINS
+#undef MATRIX_COL_PINS
+#undef UNUSED_PINS
+
+// Pin configuration for falbatech atreus
+#define MATRIX_ROW_PINS { D0, D1, D3, D2 }
+#define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
+#define UNUSED_PINS
diff --git a/keyboards/atreus/keymaps/nojjan/keymap.c b/keyboards/atreus/keymaps/nojjan/keymap.c
new file mode 100644
index 000000000..8f56e5746
--- /dev/null
+++ b/keyboards/atreus/keymaps/nojjan/keymap.c
@@ -0,0 +1,61 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QW 0
+#define _RS 1
+#define _LW 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = LAYOUT( /* Qwerty */
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P ,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN ,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH ,
+ KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT ),
+/*
+ * ! @ up { } || pgup 7 8 9 *
+ * # left down right $ || pgdn 4 5 6 +
+ * [ ] ( ) & || ` 1 2 3 \
+ * lower insert super shift bksp ctrl || alt space fn . 0 =
+ */
+[_RS] = LAYOUT( /* [> RAISE <] */
+ KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR ,
+ KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS ,
+ KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS ,
+ TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL ),
+/*
+ * insert home up end pgup || up F7 F8 F9 F10
+ * del left down right pgdn || down F4 F5 F6 F11
+ * volup reset || F1 F2 F3 F12
+ * voldn super shift bksp ctrl || alt space L0 prtsc scroll pause
+ */
+[_LW] = LAYOUT( /* [> LOWER <] */
+ KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 ,
+ KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 ,
+ 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 uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/atreus/keymaps/replicaJunction/config.h b/keyboards/atreus/keymaps/replicaJunction/config.h
index 437aa662c..8e786aa0d 100644
--- a/keyboards/atreus/keymaps/replicaJunction/config.h
+++ b/keyboards/atreus/keymaps/replicaJunction/config.h
@@ -1,94 +1,11 @@
-/*
-Config file - Atreus QMK with replicaJunction layout
+#pragma once
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
+// Layer definitions
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-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
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER Technomancy
-#define PRODUCT Atreus
-#define DESCRIPTION q.m.k. keyboard firmware for Atreus
-
-/* key matrix size */
-#define MATRIX_ROWS 4
-#define MATRIX_COLS 11
-
-// Change this to how you wired your keyboard
-// COLS: Left to right, ROWS: Top to bottom
-#if defined(ATREUS_ASTAR)
-# define MATRIX_ROW_PINS { D0, D1, D3, D2 }
-# define MATRIX_COL_PINS { D7, C6, B5, B4, E6, D4, B6, F6, F7, D6, B7 }
-# define UNUSED_PINS
-#elif defined(ATREUS_TEENSY2)
-# define MATRIX_ROW_PINS { D0, D1, D2, D3 }
-# define MATRIX_COL_PINS { F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0 }
-# define UNUSED_PINS
-#endif
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-//#define BACKLIGHT_LEVELS 3
-
-/* Set 0 if debouncing isn't needed */
-// Default: 5
-#define DEBOUNCING_DELAY 6
-
-// I don't have any locking keys, so I don't need these features
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-//#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-//#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* Prevent modifiers from sticking when switching layers */
-#define PREVENT_STUCK_MODIFIERS
-
-/*
- * 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
-
-#endif
+#define L_COLEMAK 0
+#define L_NUM 1
+#define L_EXTEND 2
+#define L_FUNC 3
+#define L_LL_R 4
+#define L_LL_E 5
+#define L_LL_I 6
diff --git a/keyboards/atreus/keymaps/replicaJunction/keymap.c b/keyboards/atreus/keymaps/replicaJunction/keymap.c
index 2d8f0d70f..c3cc37115 100644
--- a/keyboards/atreus/keymaps/replicaJunction/keymap.c
+++ b/keyboards/atreus/keymaps/replicaJunction/keymap.c
@@ -1,212 +1,78 @@
/*
* Keyboard: Atreus
* Keymap: replicaJunction
- * Version: 0.4
- *
- * This keymap is designed to complement my Ergodox keyboard layout, found in keyboards/ergodox_ez.
- * The Atreus keyboard is a 40% board whose design was heavily influenced by the Ergodox. I now
- * have both keyboards, so I've designed these layouts in an effort to make switching between the
- * two as easy as possible.
- *
- * Clearly, the Atreus is the limiting factor in this equation, so I've taken heavy advantage of
- * function and dual-role keys.
- *
- * The default key layout in this keymap is Colemak-ModDH. Information on that layout can be found
- * here: https://colemakmods.github.io/mod-dh/
+ * Version: 2.1
*/
#include QMK_KEYBOARD_H
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-
-// Note that whatever is set as layer 0 will be the default layer of the keyboard.
-
-#define _CO 0 // Colemak
-#define _QW 1 // QWERTY
-#define _GA 2 // Gaming
-#define _EX 3 // Extend
-#define _NU 4 // Numpad
-#define _FN 5 // Function
-
-// Some quick aliases, just to make it look pretty
-#define _______ KC_TRNS
-#define KCX_CA LCTL(KC_LALT)
-#define KCX_CS LCTL(KC_LSFT)
-#define KCX_CSA LCTL(LSFT(KC_LALT))
-#define KCX_LST LSFT(KC_TAB)
-#define KX_COPY LCTL(KC_C)
-#define KX_CUT LCTL(KC_X)
-#define KX_PAST LCTL(KC_V)
-#define KX_UNDO LCTL(KC_Z)
-
-#define _USER 0 // User macro
-
-; // This doesn't do anything. It's just for VSCode because its syntax highlighting is weird for the above #define statements.
+#include "replicaJunction.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /*
- * Colemak-ModDH
- *
- * ,----------------------------------. ,----------------------------------.
- * | Q | W | F | P | B | | J | L | U | Y | ; |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | A | R | S | T | G | | M | N | E | I | O |
- * +------+------+------+------+------| +------+------+------+------+------|
- * |Z Shft| X | C | D | V | ,------. ,------. | K | H | , | . |/ Shft|
- * +------+------+------+------+------| | Ctrl | | Alt | +------+------+------+------+------|
- * | Esc | Gui | Tab | _FN | Bksp | | Del | | Enter| |Sp/_NU| _EX | - | ' | = |
- * `----------------------------------' `------' `------' `----------------------------------'
- *
- */
- [_CO] = LAYOUT(
- KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
- KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O,
- SFT_T(KC_Z), KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
- KC_ESC, KC_LGUI, KC_TAB, MO(_FN), KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
- ),
-
- /*
- * QWERTY
- *
- * ,----------------------------------. ,----------------------------------.
- * | Q | W | E | R | T | | Y | U | I | O | P |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | A | S | D | F | G | | H | J | K | L | ; |
- * +------+------+------+------+------| +------+------+------+------+------|
- * |Z Shft| X | C | V | B | ,------. ,------. | N | M | , | . |/ Shft|
- * +------+------+------+------+------| | Ctrl | | Alt | +------+------+------+------+------|
- * | Esc | Gui | Tab | _FN | Bksp | | Del | | Enter| |Sp/_NU| _EX | - | ' | = |
- * `----------------------------------' `------' `------' `----------------------------------'
- *
- */
- [_QW] = LAYOUT( /* Qwerty */
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
- SFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, SFT_T(KC_SLSH),
- KC_ESC, KC_LGUI, KC_TAB, MO(_FN), KC_BSPC, CTL_T(KC_DEL), ALT_T(KC_ENT), LT(_NU, KC_SPC), MO(_EX), KC_MINS, KC_QUOT, KC_EQL
- ),
- /*
- * Extend
- *
- * Ctrl+` is a keyboard shortcut for the program ConEmu, which brings up a dropdown console window.
- *
- * Also note that some dual-role keys are overridden here with their modifiers
- *
- * ,----------------------------------. ,----------------------------------.
- * | | | | |Ctrl `| | PgUp | Home | Up | End | Del |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | Gui | Shift| Alt | Ctrl | | | PgDn | Left | Down | Right| Bksp |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | Shift| Cut | Copy | | Paste| ,------. ,------. | | ^Tab | Tab | |Insert|
- * +------+------+------+------+------| | Del | | Enter| +------+------+------+------+------|
- * | | | | | | | | | | | Space|XXXXXX| | |PrntSc|
- * `----------------------------------' `------' `------' `----------------------------------'
- *
- */
- [_EX] = LAYOUT( /* Extend */
- _______, _______, _______, _______, LCTL(KC_GRV), KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL,
- KC_LGUI, KC_LSFT, KC_LALT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
- KC_LSFT, KX_CUT, KX_COPY, _______, KX_PAST, _______, KCX_LST, KC_TAB, _______, KC_INS,
- _______, _______, _______, _______, _______, KC_DEL, KC_ENT, KC_SPC, _______, _______, _______, KC_PSCR
- ),
+[L_COLEMAK] = LAYOUT(
+ KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
+ KC_A, KC_R_LT, KC_S_LT, KC_T, KC_G, KC_M, KC_N, KC_E_LT, KC_I_LT, KC_O,
+ KX_Z_MT, KX_X_MT, KX_C_MT, KX_D_MT, KC_V, KC_K, KX_H_MT, KX_COMT, KX_DOMT, KX_SLMT,
+ TD_LAYR, KC_LGUI, KC_TAB, KC_LSFT, KX_BKNM, KX_DCTL, KX_NALT, KX_SPAC, KC_RSFT, KC_MINS, KC_QUOT, KC_EQL
+)
+,
+
+[L_NUM] = LAYOUT(
+ KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_SLSH, KC_COLN, KC_7, KC_8, KC_9, KC_SLSH,
+ KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_PIPE, KC_HASH, KC_4, KC_5, KC_6, KC_ASTR,
+ KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_BSLS, KC_BSPC, KC_1, KC_2, KC_3, KC_MINS,
+ _______, KC_AMPR, KC_TILD, KC_GRV, ooooooo, _______, KC_ENT, MO_FUNC, KC_0, KC_DOT, KC_EQL, KC_PLUS
+)
+,
+
+[L_EXTEND] = LAYOUT(
+ _______, _______, _______, KC_APP, KX_CGR, KC_PGUP, KC_HOME, KC_UP, KC_END, KC_DEL,
+ KC_LGUI, KC_LSFT, KC_LALT, KC_LCTL, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC,
+ _______, _______, _______, KX_SRCH, KX_PAST, _______, KX_STAB, KC_TAB, _______, KC_INS,
+ _______, _______, _______, _______, MO_FUNC, KC_DEL, KC_ENT, _______, _______, _______, _______, KC_PSCR
+)
+,
+
+[L_FUNC] = LAYOUT(
+ _______, _______, M_LCLIK, M_RCLIK, M_MCLIK, KC_VOLU, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_LGUI, KC_LSFT, KC_LALT, KC_LCTL, M_WHLUP, KC_MUTE, KC_F5, KC_F6, KC_F7, KC_F8,
+ M_LEFT, M_DOWN, M_UP, M_RIGHT, M_WHLDN, KC_VOLD, KC_F1, KC_F2, KC_F3, KC_F4,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+,
+
+[L_LL_R] = LAYOUT(
+ _______, _______, _______, _______, _______, KC_COLN, KC_P7, KC_P8, KC_P9, KC_PSLS,
+ _______, ooooooo, KC_AMPR, KC_PIPE, _______, KC_HASH, KC_P4, KC_P5, KC_P6, KC_PAST,
+ _______, _______, _______, _______, _______, KC_BSPC, KC_P1, KC_P2, KC_P3, KC_PMNS,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, KC_PLUS
+)
+,
+
+[L_LL_E] = LAYOUT(
+ RJ_MAKE, RJ_EQ, RJ_LEQ, RJ_GEQ, RJ_GEQR, _______, _______, _______, _______, _______,
+ _______, _______, RJ_SELS, RJ_DUND, _______, _______, _______, ooooooo, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+,
+
+[L_LL_I] = LAYOUT(
+ KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_SLSH, _______, KC_UNDS, KC_GRV, _______, _______,
+ KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_PIPE, _______, KC_MINS, KC_QUOT, ooooooo, _______,
+ KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_BSLS, _______, KC_TILD, KC_DQT, _______, _______,
+ _______, KC_AMPR, KC_LABK, KC_RABK, _______, _______, _______, _______, _______, _______, _______, _______
+)
- /*
- * Numbers and symbols
- *
- * ,----------------------------------. ,----------------------------------.
- * | ! | @ | { | } | & | | / | 7 | 8 | 9 | * |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | # | $ | ( | ) | ~ | | | | 4 | 5 | 6 | - |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | % | ^ | [ | ] | ` | ,------. ,------. | \ | 1 | 2 | 3 | + |
- * +------+------+------+------+------| | | | | +------+------+------+------+------|
- * | | _GA | | | | | | | | |XXXXXX| 0 | . | = | |
- * `----------------------------------' `------' `------' `----------------------------------'
- *
- */
- [_NU] = LAYOUT( /* Numbers and symbols */
- KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_AMPR, KC_SLSH, KC_7, KC_8, KC_9, KC_ASTR,
- KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_TILD, KC_PIPE, KC_4, KC_5, KC_6, KC_MINS,
- KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_GRV, KC_BSLS, KC_1, KC_2, KC_3, KC_PLUS,
- _______, TG(_GA), _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, _______
- ),
-
- /*
- * Functions
- *
- * ,----------------------------------. ,----------------------------------.
- * | Caps | F9 | F10 | F11 | F12 | | _USER|Whl Up| MUp |Whl Dn| |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | | F5 | F6 | F7 | F8 | | Vol ^| MLeft| MDown|MRight| |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | | F1 | F2 | F3 | F4 | ,------. ,------. | Vol v| | | | |
- * +------+------+------+------+------| | | |RClick| +------+------+------+------+------|
- * | | | |XXXXXX| | | | | | |LClick|MClick| _CO | _GA | RESET|
- * `----------------------------------' `------' `------' `----------------------------------'
- *
- */
- [_FN] = LAYOUT( /* Functions */
- KC_CAPS, KC_F9, KC_F10, KC_F11, KC_F12, M(_USER),KC_WH_U, KC_MS_U, KC_WH_D, _______,
- _______, KC_F5, KC_F6, KC_F7, KC_F8, KC_VOLU, KC_MS_L, KC_MS_D, KC_MS_R, _______,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_VOLD, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, KC_BTN2, KC_BTN1, KC_BTN3, DF(_CO), DF(_QW), RESET
- ),
-
- /*
- * Gaming
- *
- * ,----------------------------------. ,----------------------------------.
- * | | | | | | | |Whl Up| MUp |Whl Dn| |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | | | | | | | | MLeft| MDown|MRight| |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | Z | | | | | ,------. ,------. | | | | | |
- * +------+------+------+------+------| | Bksp | |RClick| +------+------+------+------+------|
- * | | _GA | | Shift| Space| | | | | |LClick|MClick| | | |
- * `----------------------------------' `------' `------' `----------------------------------'
- *
- */
- [_GA] = LAYOUT( /* Gaming */
- _______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______,
- _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______,
- KC_Z, _______, _______, _______, _______, _______, _______, KC_MS_D, _______, _______,
- _______, TG(_GA), _______, KC_LSFT, KC_SPC, KC_BSPC, KC_BTN2, KC_BTN1, KC_BTN3, _______, _______, _______
- )
};
-/*
- * Template
- *
- * ,----------------------------------. ,----------------------------------.
- * | | | | | | | | | | | |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | | | | | | | | | | | |
- * +------+------+------+------+------| +------+------+------+------+------|
- * | | | | | | ,------. ,------. | | | | | |
- * +------+------+------+------+------| | | | | +------+------+------+------+------|
- * | | | | | | | | | | | | | | | |
- * `----------------------------------' `------' `------' `----------------------------------'
- *
- */
+// Uncomment any of these to add keyboard-specific code. Otherwise, they
+// will use user defaults defined in the replicaJunction.h header file.
-const uint16_t PROGMEM fn_actions[] = {
+// bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+// return true;
+// }
-};
+// void matrix_init_keymap(void) {};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- // MACRODOWN only works in this function
- switch(id) {
- case _USER:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
+// void matrix_scan_keymap(void) {};
diff --git a/keyboards/atreus/keymaps/replicaJunction/kle/base-layer.txt b/keyboards/atreus/keymaps/replicaJunction/kle/base-layer.txt
new file mode 100644
index 000000000..aec41316f
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/kle/base-layer.txt
@@ -0,0 +1,34 @@
+[{r:10,rx:1,y:-0.1,x:2},"F"],
+[{y:-0.65,x:1},"W",{x:1},"P"],
+[{y:-0.75},"Q"],
+[{y:-0.9,x:4},"B"],
+[{y:-0.7,x:2},"S"],
+[{y:-0.65,x:1,c:"#45b866"},"R",{x:1,c:"#cccccc"},"T"],
+[{y:-0.75},"A"],
+[{y:-0.9,x:4},"G"],
+[{y:-0.7,x:2},"C\n\n\n<i class='fa fa-windows'></i>"],
+[{y:-0.65,x:1},"X\n\n\nCtrl",{x:1},"D\n\n\nCtrlAlt"],
+[{y:-0.75},"Z"],
+[{y:-0.9,x:4},"V\n\n\nAlt"],
+[{y:-0.75,x:5,h:1.5},"Del\nCtrl"],
+[{y:-0.95,x:2},"Tab"],
+[{y:-0.65,x:1,a:7,fa:[7]},"<i class='fa fa-windows'></i>",{x:1,a:4,f:3},"Shift"],
+[{y:-0.75,f:3},"Layer tap"],
+[{y:-0.9,x:4,f:3},"<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>"],
+[{r:-10,rx:7,ry:0.965,y:-0.2,x:2,f:3},"U"],
+[{y:-0.65,x:1,f:3},"L",{x:1,f:3},"Y"],
+[{y:-0.75,x:4,f:3},":\n;"],
+[{y:-0.9,f:3},"J"],
+[{y:-0.7,x:2,c:"#ffb07b",f:3},"E"],
+[{y:-0.65,x:1,c:"#cccccc",f:3},"N",{x:1,c:"#5dcde3",f:3},"I"],
+[{y:-0.75,x:4,c:"#cccccc",f:3},"O"],
+[{y:-0.9,f:3},"M"],
+[{y:-0.7,x:2,f:3},"<\n,\n\nCtrlAlt"],
+[{y:-0.65,x:1,f:3},"H\n\n\nAlt",{x:1,f:3},">\n.\n\n<i class='fa fa-windows'></i>"],
+[{y:-0.75,x:4,f:3},"?\n/\n\nCtrl"],
+[{y:-0.9,f:3},"K"],
+[{y:-0.75,x:-1,f:3,h:1.5},"Enter\nAlt"],
+[{y:-0.95,x:2,f:3},"_\n-"],
+[{y:-0.65,x:1,f:3},"Shift",{x:1,f:3},"\"\n'"],
+[{y:-0.75,x:4,f:3},"+\n="],
+[{y:-0.9,c:"#ffe08d",f:3},"Space"]
diff --git a/keyboards/atreus/keymaps/replicaJunction/kle/e-layer.txt b/keyboards/atreus/keymaps/replicaJunction/kle/e-layer.txt
new file mode 100644
index 000000000..2b4105b2b
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/kle/e-layer.txt
@@ -0,0 +1,34 @@
+[{r:10,rx:1,y:-0.1,x:2},"<="],
+[{y:-0.65,x:1},"==",{x:1},">="],
+[{y:-0.75},"make"],
+[{y:-0.9,x:4},"=>"],
+[{y:-0.7,x:2},"select *"],
+[{y:-0.65,x:1,a:7},"",{x:1,a:4},"$_"],
+[{y:-0.75,a:7},""],
+[{y:-0.9,x:4},""],
+[{y:-0.7,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75},""],
+[{y:-0.9,x:4},""],
+[{y:-0.75,x:5,h:1.5},""],
+[{y:-0.95,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75},""],
+[{y:-0.9,x:4},""],
+[{r:-10,rx:7,ry:0.965,y:-0.2,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75,x:4},""],
+[{y:-0.9},""],
+[{y:-0.7,x:2,c:"#ffb07b"},""],
+[{y:-0.65,x:1,c:"#cccccc"},"",{x:1},""],
+[{y:-0.75,x:4},""],
+[{y:-0.9},""],
+[{y:-0.7,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75,x:4},""],
+[{y:-0.9},""],
+[{y:-0.75,x:-1,h:1.5},""],
+[{y:-0.95,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75,x:4},""],
+[{y:-0.9},""]
diff --git a/keyboards/atreus/keymaps/replicaJunction/kle/fn-layer.txt b/keyboards/atreus/keymaps/replicaJunction/kle/fn-layer.txt
new file mode 100644
index 000000000..d45fb7e97
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/kle/fn-layer.txt
@@ -0,0 +1,35 @@
+[{r:10,rx:1,y:-0.1,x:2},"RClick"],
+[{y:-0.65,x:1,a:7},"",{x:1,a:4},"LClick"],
+[{y:-0.75,a:7},""],
+[{y:-0.9,x:4,a:4},"MClick"],
+[{y:-0.7,x:2},"Alt"],
+[{y:-0.65,x:1},"Shift",{x:1},"Ctrl"],
+[{y:-0.75,a:7,fa:[7]},"<i class='fa fa-windows'></i>"],
+[{y:-0.9,x:4,a:4,fa:[5,0,0,0,0,0,0,0,0,0,7]},"<i class='kb kb-Unicode-Scroll-1'></i>\n\n\n\n\n\n\n\n\n\n<i class='kb kb-Arrows-Top-4'></i>"],
+[{y:-0.7,x:2,fa:[0,0,0,0,0,0,0,0,0,0,7]},"<i class='fa fa-mouse-pointer'></i>\n\n\n\n\n\n\n\n\n\n<i class='kb kb-Arrows-Up'></i>"],
+[{y:-0.65,x:1},"<i class='fa fa-mouse-pointer'></i>\n\n\n\n\n\n\n\n\n\n<i class='kb kb-Arrows-Down'></i>",{x:1},"<i class='fa fa-mouse-pointer'></i>\n\n\n\n\n\n\n\n\n\n<i class='kb kb-Arrows-Right'></i>"],
+[{y:-0.75},"<i class='fa fa-mouse-pointer'></i>\n\n\n\n\n\n\n\n\n\n<i class='kb kb-Arrows-Left'></i>"],
+[{y:-0.9,x:4,fa:[5,0,0,0,0,0,0,0,0,0,7]},"<i class='kb kb-Unicode-Scroll-1'></i>\n\n\n\n\n\n\n\n\n\n<i class='kb kb-Arrows-Bottom-4'></i>"],
+[{y:-0.75,x:5,a:7,h:1.5},""],
+[{y:-0.95,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75},""],
+[{y:-0.9,x:4,c:"#ffe08d"},""],
+[{r:-10,rx:7,ry:0.965,y:-0.2,x:2,c:"#cccccc",a:4,f:3},"F10"],
+[{y:-0.65,x:1,f:3},"F9",{x:1,f:3},"F11"],
+[{y:-0.75,x:4,f:3},"F12"],
+[{y:-0.9,a:7},""],
+[{y:-0.7,x:2,a:4,f:3},"F6"],
+[{y:-0.65,x:1,f:3},"F5",{x:1,f:3},"F7"],
+[{y:-0.75,x:4,f:3},"F8"],
+[{y:-0.9,a:7},""],
+[{y:-0.7,x:2,a:4,f:3},"F2"],
+[{y:-0.65,x:1,f:3},"F1",{x:1,f:3},"F3"],
+[{y:-0.75,x:4,f:3},"F4"],
+[{y:-0.9,a:7},""],
+[{y:-0.75,x:-1,h:1.5},""],
+[{y:-0.95,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75,x:4},""],
+[{y:-0.9,c:"#ffe08d"},""]
+
diff --git a/keyboards/atreus/keymaps/replicaJunction/kle/i-layer.txt b/keyboards/atreus/keymaps/replicaJunction/kle/i-layer.txt
new file mode 100644
index 000000000..45bef783a
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/kle/i-layer.txt
@@ -0,0 +1,34 @@
+[{r:10,rx:1,y:-0.1,x:2},"{"],
+[{y:-0.65,x:1},"@",{x:1},"}"],
+[{y:-0.75},"!"],
+[{y:-0.9,x:4},"/"],
+[{y:-0.7,x:2},"("],
+[{y:-0.65,x:1},"$",{x:1},")"],
+[{y:-0.75},"#"],
+[{y:-0.9,x:4},"|"],
+[{y:-0.7,x:2},"["],
+[{y:-0.65,x:1},"^",{x:1},"]"],
+[{y:-0.75},"%"],
+[{y:-0.9,x:4},"\\"],
+[{y:-0.75,x:5,a:7,h:1.5},""],
+[{y:-0.95,x:2,a:4},"<"],
+[{y:-0.65,x:1},"&",{x:1},">"],
+[{y:-0.75,a:7},""],
+[{y:-0.9,x:4},""],
+[{r:-10,rx:7,ry:0.965,y:-0.2,x:2,a:4},"`"],
+[{y:-0.65,x:1},"_",{x:1,a:7},""],
+[{y:-0.75,x:4},""],
+[{y:-0.9},""],
+[{y:-0.7,x:2,a:4},"'"],
+[{y:-0.65,x:1},"-",{x:1,c:"#5dcde3",a:7},""],
+[{y:-0.75,x:4,c:"#cccccc"},""],
+[{y:-0.9},""],
+[{y:-0.7,x:2,a:4},"\""],
+[{y:-0.65,x:1},"~",{x:1,a:7},""],
+[{y:-0.75,x:4},""],
+[{y:-0.9},""],
+[{y:-0.75,x:-1,h:1.5},""],
+[{y:-0.95,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75,x:4},""],
+[{y:-0.9},""]
diff --git a/keyboards/atreus/keymaps/replicaJunction/kle/r-layer.txt b/keyboards/atreus/keymaps/replicaJunction/kle/r-layer.txt
new file mode 100644
index 000000000..3d4438386
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/kle/r-layer.txt
@@ -0,0 +1,34 @@
+[{r:10,rx:1,y:-0.1,x:2,a:7},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75},""],
+[{y:-0.9,x:4},""],
+[{y:-0.7,x:2,a:4},"&"],
+[{y:-0.65,x:1,c:"#45b866",a:7},"",{x:1,c:"#cccccc",a:4},"|"],
+[{y:-0.75,a:7},""],
+[{y:-0.9,x:4},""],
+[{y:-0.7,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75},""],
+[{y:-0.9,x:4},""],
+[{y:-0.75,x:5,h:1.5},""],
+[{y:-0.95,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75},""],
+[{y:-0.9,x:4},""],
+[{r:-10,rx:7,ry:0.965,y:-0.2,x:2,a:4},"8"],
+[{y:-0.65,x:1},"7",{x:1},"9"],
+[{y:-0.75,x:4},"/"],
+[{y:-0.9},":"],
+[{y:-0.7,x:2},"5"],
+[{y:-0.65,x:1},"4",{x:1},"6"],
+[{y:-0.75,x:4},"*"],
+[{y:-0.9},"#"],
+[{y:-0.7,x:2},"2"],
+[{y:-0.65,x:1},"1",{x:1},"3"],
+[{y:-0.75,x:4},"-"],
+[{y:-0.9},"<i class='kb kb-Unicode-BackSpace-DeleteLeft-Big'></i>"],
+[{y:-0.75,x:-1,a:7,h:1.5},""],
+[{y:-0.95,x:2,a:4},"."],
+[{y:-0.65,x:1},"0",{x:1},"="],
+[{y:-0.75,x:4},"+"],
+[{y:-0.9},"Space"]
diff --git a/keyboards/atreus/keymaps/replicaJunction/kle/space-layer.txt b/keyboards/atreus/keymaps/replicaJunction/kle/space-layer.txt
new file mode 100644
index 000000000..d1ffa35f8
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/kle/space-layer.txt
@@ -0,0 +1,34 @@
+[{r:10,rx:1,y:-0.1,x:2,a:7},""],
+[{y:-0.65,x:1},"",{x:1,fa:[7]},"<i class='kb kb-Hamburger-Menu'></i>"],
+[{y:-0.75},""],
+[{y:-0.9,x:4},"<i class='fa fa-terminal'></i>"],
+[{y:-0.7,x:2,a:4,f:3},"Alt"],
+[{y:-0.65,x:1,f:3},"Shift",{x:1,f:3},"Ctrl"],
+[{y:-0.75,a:7},"<i class='fa fa-windows'></i>"],
+[{y:-0.9,x:4},""],
+[{y:-0.7,x:2},""],
+[{y:-0.65,x:1},"",{x:1},"<i class='fa fa-search'></i>"],
+[{y:-0.75},""],
+[{y:-0.9,x:4},"<i class='fa fa-clipboard'></i>"],
+[{y:-0.75,x:5,h:1.5},""],
+[{y:-0.95,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75},""],
+[{y:-0.9,x:4},""],
+[{r:-10,rx:7,ry:0.965,y:-0.2,x:2},"<i class='kb kb-Arrows-Up'></i>"],
+[{y:-0.65,x:1,a:4,f:3},"Home",{x:1,f:3},"End"],
+[{y:-0.75,x:4,f:3},"Delete"],
+[{y:-0.9,f:3},"PgUp"],
+[{y:-0.7,x:2,a:7},"<i class='kb kb-Arrows-Down'></i>"],
+[{y:-0.65,x:1},"<i class='kb kb-Arrows-Left'></i>",{x:1},"<i class='kb kb-Arrows-Right'></i>"],
+[{y:-0.75,x:4,a:4,f:3},"Bksp"],
+[{y:-0.9,f:3},"PgDn"],
+[{y:-0.7,x:2,f:3},"Tab"],
+[{y:-0.65,x:1,f:3},"Shift+\n\n\n\n\n\nTab",{x:1,a:7},""],
+[{y:-0.75,x:4,a:4,f:3},"Insert"],
+[{y:-0.9,a:7},""],
+[{y:-0.75,x:-1,h:1.5},""],
+[{y:-0.95,x:2},""],
+[{y:-0.65,x:1},"",{x:1},""],
+[{y:-0.75,x:4,a:4,f:3},"Prnt Scrn"],
+[{y:-0.9,c:"#ffe08d",a:7},""]
diff --git a/keyboards/atreus/keymaps/replicaJunction/readme.md b/keyboards/atreus/keymaps/replicaJunction/readme.md
index 6a330bdbf..f1d6c47b1 100644
--- a/keyboards/atreus/keymaps/replicaJunction/readme.md
+++ b/keyboards/atreus/keymaps/replicaJunction/readme.md
@@ -1,61 +1,103 @@
-# replicaJunction - Atreus Layout #
+# replicaJunction - Atreus Layout
This layout is designed to make the absolute most out of the Atreus 40% keyboard.
-I was enchanted with the idea of the Atreus keyboard after using my Ergodox for several months. I wanted something of a similar form factor that was easily portable, so I could bring and transport a keyboard to my workplace without much hassle. After building the Atreus keyboard, though, I realized very quickly that the 40% form factor requires a lot more creativity than a full-size keyboard (even one as strangely-shaped as the Ergodox).
+This layout is probably not perfect for you. That's okay! Use it for ideas as you design your own perfect layout.
-The default Atreus keyboard layout provides all the necessary keys in order to function with the keyboard, but as a programmer, I needed quicker access to just about everything. I noticed that the default layer didn't include any dual-role keys, and so I started on my journey to build my perfect layout for the Atreus.
+Most of the custom logic in this keyboard is actually not in these files. Instead, it's in the directory `/users/replicaJunction` (from the root of the QMK repo). This allows me to share macros and custom logic between multiple keyboards. A `process_record_keyboard()` function defined weakly in `replicaJunction.h` allows keyboards to process records individually as well without overriding the `process_record_user()` function. (My Ergodox uses this to handle its LEDs, for example.)
-I won't claim that this layout is perfect for everyone. It does make several significant changes from the "normal" Atreus layout. In my own use, though, I've found this keyboard turbocharges my Atreus, and gives it the power of a full-size keyboard without the size.
+The default letter layout in this keymap is [Colemak-ModDH](https://colemakmods.github.io/mod-dh/). I use the "matrix version" of that layout, which retains the M key on the home row as in normal Colemak.
-## Base Layer ##
+## Design Goals
-![Atreus base layout](http://imgur.com/YbOjS7O)
+I designed this layout with the following goals in mind:
-The letters on this layout are arranged in the [Colemak Mod-DH layout](https://colemakmods.github.io/mod-dh/).
+* Nothing may interfere with ordinary typing.
+* Symbols need to be accessible quickly and organized in a manner I can remember.
+* Limit more difficult finger movements (and pinky usage in general).
-The primary mechanism for the Shift keys in this keyboard are the dual-role Z and slash keys. Pressing the key sends the keystroke, while holding the key sends a shift. This is a design choice taken from the xyverz layout, and one I find much more intuitive than a thumb shift. In addition, the pinky doesn't need to stretch as far to reach these keys as it does to reach a standard Shift key.
+### Nothing may interfere with ordinary typing
-Occasionally, when typing the letter Z, I'll hold the key down a fraction of a second too long, and the keyboard will shift instead. If you're not a confident typist, this dual-role Shift key layout is probably not a good solution. In that case, I'd suggest moving Shift onto the Backspace key (press for Backspace, hold for Shift).
+For a long time, this meant that I couldn't use letters or home row keys as dual-role keys. I'm a fast typer, and I'm sometimes already typing the next letter before I've fully released the previous one. Normal keyboards don't care about this, but if I started adding dual-role functionality to letters, I found that I would sometimes type the next letter before releasing the layer toggle, and the letter I tried to send would still be sent under the layer I thought I'd left off.
-In addition to the Shift keys, there are three dual-purpose keys: Ctrl (Delete), Alt (Enter), and Space (Number layer). In QMK, these dual-role keys can be made to hold their primary key with a tap and hold. For example, if I wanted to insert a long string of Spaces, I would tap the Space key, then tap it again and hold. A single press and hold would trigger the secondary function of the key instead.
+Fortunately, though, QMK has addressed this with the `PERMISSIVE_HOLD` flag. [Details are on the QMK docs page.](https://docs.qmk.fm/#/feature_advanced_keycodes?id=permissive-hold)
-## Extend Layer ##
+Using that flag, I'm comfortable having layer shift keys on the home row, and this goes a long way to eliminate finger stress.
-![Atreus extend layer](http://imgur.com/WiKkMQw)
+### Sympols need to be accessible quickly
-This layout is designed primarily for keyboard navigation. Arrow keys are easily accessible under the right hand (a welcome change from the original Atreus layout, which places them under the left hand), along with Home/End and PgUp/PgDn.
+Symbols are available under my left hand by holding the I key (on my right hand). I've grouped parenthesis, slashes, and braces together; the remaining symbols are ordered in the same way as they appear on USA keycap legends (for example, 1 is !, so that symbol is first in my lineup). Practically, I just had to get used to these other "misc" symbols.
-Modifiers are also placed under the home row of the left hand. One of the single keyboard actions I use most is Shift+Ctrl+Left/Right to select a whole word; this layer makes those keypresses simple by adding the Ctrl key in an easy-to-reach location.
+This also means that some symbols are accessible in more than one way. For example, the carats (greater than and less than) are available both in the "normal" location (Shift+Comma / Shift+Period) and on the symbol layer. I make regular changes to some of the symbols I don't use as commonly as I think of them.
-For the common Ctrl shortcuts, I also added some hotkeys to this layer over the letter keys they are associated with. This gives the Extend key some extra utility by letting it "feel" like a Ctrl key in some cases.
+### Limit more difficult finger movements
-The Space key exists to prevent going from this layer directly into the Number layer. Similarly, the Shift key on the left pinky helps make sure that the normal letter (Z) doesn't fire.
+This is why I kept trying to put layer toggles on the home row keys instead of just placing them on random thumb keys. I suffer from RSI, and it's important for me to watch out for more "stressful" finger movements.
-## Number and Symbol Layer ##
+The home row is the easiest row for your fingers to hit, followed by the upper row, and the lower row is noticeably more difficult to press. Because of this, I favored the upper row over the lower one any time I had the option to do so.
-![Atreus number and symbol layer](http://imgur.com/gfTXcjC)
+## Features
-This layer provides the only way of accessing number keys on this keyboard, since it's too small for its own number row. Note that even though they are laid out in the number pad fashion, they send the "regular" number keystrokes. Games and programs that specifically use NumPad keys are not supported in this layout at the moment.
+### ZXC Mods
-This layer also provides plenty of symbol shortcuts. Most of these can be accessed through other means (like Shift+8 for the asterisk), but having shortcut keys to them makes for one less keypress, which adds up quickly when using these symbols on a regular basis. I've been through many revisions of this concept on my Ergodox as well as the Atreus, and I've finally arrived at this layout as the one that provides the symbols I need most frequently in places I can think to expect them. The Ordinary layout from the Ergodox-EZ keyboard in this repository was a large influence in this design.
+Keys on the bottom row of each half of this keyboard can be held to send modifier keys. I've tried to map this in a relatively logical manner:
-## Function Layer ##
+* Z / Slash: Ctrl
+* X / Period: GUI
+* C / Comma: Ctrl+Alt
+* D / H: Alt
-![Atreus function layer](http://imgur.com/m5x0MxZ)
+Combined with Shift keys on the thumbs, this makes all modifiers quick to access on either hand.
-Function keys (F1-F12) are on this layer. Their layout in groups of four comes from Jeremy's Atreus layout in this repository. I'd been using 1-9 in a numpad layout, then adding 10-12 on the side...I suppose it took seeing someone else do it this way for me to realize how much more sense it makes.
+### Layer tap dance
-On the right side are mouse keys - cursor left/right/up/down, and scroll up/down. Volume keys are also here, though really only because there was room for them (I'm not entirely happy with their positions).
+The lower-left key on the left hand can be used to apply or remove layers based on a number of taps:
-Finally, the reset key is on this layer, as well as toggles from Colemak to QWERTY and back. The QWERTY layer is not currently documented, but it is functionally identical to the base layer except for letter positions.
+* 1 tap sends Escape, and also disables any persistent layers.
+* 2 taps enables the Number pad layer.
+* 5 or more taps resets the keyboard.
-## Gaming Layer ##
+## Extend Layer
-![Atreus gaming layer](http://imgur.com/4S5AO4E)
+[Originally found on the Colemak forums](https://forum.colemak.com/topic/2014-extend-extra-extreme/), having a QMK-powered keyboard allows a super easy implementation of this concept. The idea is to place commonly-used keys under easy reach of your hands. Since I work with text often, my most common needs are things like Ctrl+Shift+arrow keys, and they're easy to access using this layer. (While technically it's four keypresses instead of just three, since it takes one key to enter the layer, that one key is a thumb button and the other three are all on the home row, so I find it much more comfortable than modifiers on a traditional keyboard.)
-This is a small layer developed to allow some simple gameplay without a mouse. This layer is a toggle (from the Number layer), so it is designed to stay on while in use.
+Also featured in this layer is easy access to Tab, plus a Shift+Tab key. Alt-Tabbing back and forth, along with Ctrl-Tab, are super easy and friendly. When I need Ctrl+Alt+Delete, I typically use the ones found on this layer.
-The keys on the left hand bring Space into the left thumb's reach, as well as overriding the dual-role Shift with its standard function (Z in both QWERTY and in Colemak). This allows easy Shift presses without blocking the Z key, commonly used in games.
+## Layout Images
-I would probably not consider the Atreus a hard-core gaming keyboard in the first place, and this layout does have the huge problem of blocking access to the number keys, but for more casual games, it plays quite well. I've used it quite a bit on Minecraft, for example, and I'm quite pleased with it. \ No newline at end of file
+Colored keys indicate keys that swap to another layer when held.
+
+These images are located in the `kle` folder of this directory. Also included is the "raw data" from Keyboard-Layout-Editor in a corresponding text file.
+
+### Base layer
+
+![Base layer](kle/base-layer.png)
+
+### R layer
+
+![R layer](kle/r-layer.png)
+
+### E layer
+
+![E layer](kle/i-layer.png)
+
+### I layer
+
+![I layer](kle/i-layer.png)
+
+### Space layer
+
+![Space layer](kle/space-layer.png)
+
+### Function layer
+
+![Function layer](kle/fn-layer.png)
+
+## Credits
+
+* [Drashna](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/readme.md)
+ * User / keymap function ideas
+* [Jeremy](https://github.com/qmk/qmk_firmware/blob/master/keyboards/atreus/keymaps/jeremy/readme.md)
+ * Sanity check on the Function keys (_of course they should be in rows of 4, not rows of 3 like a number pad. Why did I ever use anything else?_)
+* [DreymaR of the Colemak forums](https://forum.colemak.com/topic/2014-extend-extra-extreme/)
+ * Original idea of the Extend layer
diff --git a/keyboards/atreus/keymaps/replicaJunction/rules.mk b/keyboards/atreus/keymaps/replicaJunction/rules.mk
new file mode 100644
index 000000000..9ff9c3fbb
--- /dev/null
+++ b/keyboards/atreus/keymaps/replicaJunction/rules.mk
@@ -0,0 +1,12 @@
+# https://docs.qmk.fm/getting_started_make_guide.html
+
+MOUSEKEY_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+# KEY_LOCK_ENABLE = yes
+# CONSOLE_ENABLE = no
+# COMMAND_ENABLE = no
+
+# Use the "Unicode map" method
+# UNICODE_ENABLE = no
+# UNICODEMAP_ENABLE = yes
+
diff --git a/keyboards/atreus/keymaps/talljoe-atreus/config.h b/keyboards/atreus/keymaps/talljoe-atreus/config.h
new file mode 100644
index 000000000..87b68ffc6
--- /dev/null
+++ b/keyboards/atreus/keymaps/talljoe-atreus/config.h
@@ -0,0 +1,42 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include QMK_KEYBOARD_CONFIG_H
+
+#define PREVENT_STUCK_MODIFIERS
+#define SPACE_COUNT 2
+
+#define TEMPLATE( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
+) LAYOUT( \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
+ K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
+ K10, K41, K42, K30, K44, K1D, K20, K45, K3C, K0D, K2B, K3D \
+)
+
+#define TEMPLATE_NUM( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
+) LAYOUT( \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, \
+ K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
+ K10, K41, K42, K30, K44, K1D, K20, K45, K48, K49, K2B, K3D \
+)
+
+
+#define TEMPLATE_RESET LAYOUT( \
+ RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+)
+#endif
diff --git a/keyboards/bananasplit/keymaps/talljoe/keymap.c b/keyboards/atreus/keymaps/talljoe-atreus/keymap.c
index 7812add81..7812add81 100644
--- a/keyboards/bananasplit/keymaps/talljoe/keymap.c
+++ b/keyboards/atreus/keymaps/talljoe-atreus/keymap.c
diff --git a/keyboards/atreus/keymaps/talljoe-atreus/rules.mk b/keyboards/atreus/keymaps/talljoe-atreus/rules.mk
new file mode 100644
index 000000000..92007fe8a
--- /dev/null
+++ b/keyboards/atreus/keymaps/talljoe-atreus/rules.mk
@@ -0,0 +1 @@
+USER_NAME := talljoe
diff --git a/keyboards/atreus/keymaps/xk/config.h b/keyboards/atreus/keymaps/xk/config.h
index 2f8110167..a8b9c8805 100644
--- a/keyboards/atreus/keymaps/xk/config.h
+++ b/keyboards/atreus/keymaps/xk/config.h
@@ -30,8 +30,7 @@ the Free Software Foundation, either version 2 of the License, or
#define MOUSEKEY_WHEEL_MAX_SPEED 8
#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
-#define PREVENT_STUCK_MODIFIERS
#define IGNORE_MOD_TAP_INTERRUPT
#define PERMISSIVE_HOLD
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/atreus/keymaps/xk/rules.mk b/keyboards/atreus/keymaps/xk/rules.mk
index fe431f28a..2e76f9da5 100644
--- a/keyboards/atreus/keymaps/xk/rules.mk
+++ b/keyboards/atreus/keymaps/xk/rules.mk
@@ -10,7 +10,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
ifndef QUANTUM_DIR
diff --git a/keyboards/atreus/readme.md b/keyboards/atreus/readme.md
index 221c7fac4..0756c186c 100644
--- a/keyboards/atreus/readme.md
+++ b/keyboards/atreus/readme.md
@@ -5,12 +5,17 @@ A small mechanical keyboard that is based around the shape of the human hand.
These configuration files are specifically for the Atreus keyboards created by Phil Hagelberg (@technomancy). This keyboard is available in two variants: one powered by a Teensy 2, (usually hand-wired) one powered by an A-Star. (usually using a PCB) This repository currently assumes that you have an A-Star powered Atreus. If you are using a Teensy2, specify that by adding `TEENSY2=yes` to your `make` commands.
-Keyboard Maintainer: QMK Community
-Hardware Supported: Atreus PCB
+Keyboard Maintainer: [Phil Hagelberg](https://github.com/technomancy)
+Hardware Supported: Atreus, PCB-based or hand-wired
Hardware Availability: https://atreus.technomancy.us
Make example for this keyboard (after setting up your build environment):
make atreus:default:avrdude
+Unlike the TMK firmware, this command should be run from the root of
+the repository, not the directory containing this readme.
+
+If your keyboard layout is a mirror image of what you expected (i.e. you do not get QWERTY on the left but YTREWQ on the right), then you have an A-Star powered Atreus (older than March 2016) with PCB labels facing *down* instead of up. Specify that by adding `PCBDOWN=yes` to your `make` commands.
+
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/atreus/rules.mk b/keyboards/atreus/rules.mk
index 2c8418beb..2488fd5e8 100644
--- a/keyboards/atreus/rules.mk
+++ b/keyboards/atreus/rules.mk
@@ -5,6 +5,9 @@ ifdef TEENSY2
ATREUS_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex
else
OPT_DEFS += -DATREUS_ASTAR
+ifdef PCBDOWN
+ OPT_DEFS += -DPCBDOWN
+endif
ATREUS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
endif
diff --git a/keyboards/atreus62/keymaps/194h/config.h b/keyboards/atreus62/keymaps/194h/config.h
new file mode 100644
index 000000000..f5306a07f
--- /dev/null
+++ b/keyboards/atreus62/keymaps/194h/config.h
@@ -0,0 +1,6 @@
+#pragma once
+#define ONESHOT_TIMEOUT 3000
+#define TAPPING_TERM 200
+#define FORCE_NKRO
+#define LEADER_TIMEOUT 1000
+#define TAPPING_TOGGLE 3
diff --git a/keyboards/atreus62/keymaps/194h/keymap.c b/keyboards/atreus62/keymaps/194h/keymap.c
new file mode 100644
index 000000000..1d069e9d4
--- /dev/null
+++ b/keyboards/atreus62/keymaps/194h/keymap.c
@@ -0,0 +1,149 @@
+#include QMK_KEYBOARD_H
+
+//The current Nordic and Norwegian layout files are a mess. I'll do it myself:
+//Norwegian
+#define NO_AE KC_QUOT // Æ
+#define NO_AO KC_LBRC // Å
+#define NO_BSLS KC_EQL // Backslash
+#define NO_LT KC_NUBS // <
+#define NO_MINS KC_SLSH // -
+#define NO_OE KC_SCLN // Ø
+#define NO_PIPE KC_GRV // |
+#define NO_PLUS KC_MINS // +
+#define NO_QUOT KC_NUHS // '
+#define NO_UMLA KC_RBRC // ¨
+//Norwegian - Modifier dependant definitions
+#define NO_EXLM LSFT(KC_1) // !
+#define NO_DQT LSFT(KC_2) // "
+#define NO_AT RALT(KC_2) // @
+#define NO_HASH LSFT(KC_3) // #
+#define NO_EUR LSFT(KC_4) // €
+#define NO_DLR RALT(KC_4) // $
+#define NO_PERC LSFT(KC_5) // %
+#define NO_AND LSFT(KC_6) // &
+#define NO_SLSH LSFT(KC_7) // /
+#define NO_PO LSFT(KC_8) // (
+#define NO_PC LSFT(KC_9) // )
+#define NO_EQL LSFT(KC_0) // =
+#define NO_LCBR RALT(KC_7) // {
+#define NO_LBRC RALT(KC_8) // [
+#define NO_RBRC RALT(KC_9) // ]
+#define NO_RCBR RALT(KC_0) // }
+#define NO_COLN LSFT(KC_DOT) // :
+#define NO_SCLN LSFT(KC_COMM) // ;
+#define NO_MU RALT(KC_M) // µ
+#define NO_EURO RALT(KC_E) // €
+#define NO_SECT LSFT(KC_GRV) // §
+#define NO_GERC RALT(KC_COMM) // ¸
+#define NO_QUAR LSFT(RALT(KC_4)) // ¼
+//Norwegian layout - dependant on previous definitions
+#define NO_UNDS LSFT(NO_MINS) // _
+#define NO_QUES LSFT(NO_PLUS) // ?
+#define NO_ACUT RALT(NO_BSLS) // Acute
+#define NO_GRAV LSFT(NO_BSLS) // `
+#define NO_GT LSFT(NO_LT) // >
+#define NO_HALF RALT(NO_LT) // ½
+#define NO_HAT LSFT(NO_UMLA) // ^
+#define NO_ASTR LSFT(NO_QUOT) // *
+#define NO_TILD RALT(NO_UMLA) // ~
+
+//One Shot Modifier
+#define OSM_LCTL OSM(MOD_LCTL)
+#define OSM_LALT OSM(MOD_LALT)
+#define OSM_LSFT OSM(MOD_LSFT)
+#define OSM_LGUI OSM(MOD_LGUI)
+#define OSM_RCTL OSM(MOD_RCTL)
+#define OSM_RALT OSM(MOD_RALT)
+#define OSM_RSFT OSM(MOD_RSFT)
+#define OSM_RGUI OSM(MOD_RGUI)
+
+//CTRL on hold, ESC on tap
+#define CTL_ESC CTL_T(KC_ESC)
+
+//Layers
+#define L1 0
+#define L2 1
+#define L3 2
+#define L4 3
+#define L5 4
+
+// Momentary switch to layer
+#define MO_L2 MO(L2)
+#define MO_L4 MO(L4)
+#define MO_L5 MO(L5)
+// Momentary switch to layer - One Shot Layer
+#define OSL_L2 OSL(L2)
+#define OSL_L3 OSL(L3)
+#define OSL_L4 OSL(L4)
+
+//Tap Dance Declarations
+enum {
+ SCLN_OE = 0,
+ QUOT_AE,
+ DQT_AO
+};
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for semicolon, twice for ø
+ [SCLN_OE] = ACTION_TAP_DANCE_DOUBLE(NO_SCLN, NO_OE),
+ //Tap once for single quote, twice for æ
+ [QUOT_AE] = ACTION_TAP_DANCE_DOUBLE(NO_QUOT, NO_AE),
+ //Tap once for double quote, twice for å
+ [DQT_AO] = ACTION_TAP_DANCE_DOUBLE(NO_DQT, NO_AO),
+// Other declarations would go here, separated by commas, if you have them
+};
+
+//Tap Dance keys
+#define TD_SCLN_OE TD(SCLN_OE)
+#define TD_QUOT_AE TD(QUOT_AE)
+#define TD_DQT_AO TD(DQT_AO)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [L1] = LAYOUT(
+ KC_LGUI, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_RGUI,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, TD_DQT_AO,
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, TD_SCLN_OE, TD_QUOT_AE,
+ OSM_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, NO_MINS, OSM_RSFT,
+ CTL_ESC, MO_L5, KC_TAB, OSM_LALT, MO_L4, OSL_L3, KC_SPC, KC_ENT, OSL_L3, MO_L4, OSM_LALT, NO_EQL, NO_PLUS, KC_RCTL
+ ),
+ [L2] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_DQT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, NO_SCLN, NO_QUOT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [L3] = LAYOUT(
+ NO_LBRC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_RBRC,
+ NO_LCBR, XXXXXXX, XXXXXXX, NO_AT, XXXXXXX, NO_TILD, NO_QUES, NO_EXLM, NO_PIPE, XXXXXXX, XXXXXXX, NO_RCBR,
+ _______, NO_ASTR, NO_BSLS, NO_DLR, NO_HASH, XXXXXXX, NO_HAT, XXXXXXX, NO_COLN, NO_SLSH, NO_SCLN, NO_QUOT,
+ NO_PO, KC_0, NO_SECT, NO_PERC, XXXXXXX, NO_GRAV, NO_AND, NO_UMLA, NO_LT, NO_GT, NO_UNDS, NO_PC,
+ XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX
+ ),
+ [L4] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, XXXXXXX,
+ _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, XXXXXXX, KC_DEL,
+ XXXXXXX, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, XXXXXXX, KC_APP, XXXXXXX, XXXXXXX, KC_VOLD, XXXXXXX,
+ OSM_LCTL, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, OSM_RALT, KC_MUTE, KC_VOLU, OSM_RCTL
+ ),
+ [L5] = LAYOUT(
+ XXXXXXX, TO(L1), TO(L2), TO(L3), TO(L4), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_CAPS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ )
+};
+
+//TODO: Is there productivity gain in the use of unicode?
+// - Won't work in xterm.
+// Create a layer for macros and/or unicode?
+// Are macros useful?
+// - Found no gain in having sendstring for commands.
+// - Find repeated tasks that cannot be done easily on the OS.
+// - Most other keymaps have macros for game/fun stuff, hard to find "serious" onces.
+// Screw Norwegian layout, switch to US with unicode æøå or US/English International?
+// - Will be different from laptop keyboard, requiring a switch on the OS side when only using the laptop.
diff --git a/keyboards/atreus62/keymaps/194h/rules.mk b/keyboards/atreus62/keymaps/194h/rules.mk
new file mode 100644
index 000000000..2c97aee09
--- /dev/null
+++ b/keyboards/atreus62/keymaps/194h/rules.mk
@@ -0,0 +1,7 @@
+TAP_DANCE_ENABLE = yes
+NKRO_ENABLE = true
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = no
+KEY_LOCK_ENABLE = no
+LEADER_ENABLE = no
diff --git a/keyboards/atreus62/keymaps/mneme/config.h b/keyboards/atreus62/keymaps/mneme/config.h
index 73eb0fa33..a89bf5503 100644
--- a/keyboards/atreus62/keymaps/mneme/config.h
+++ b/keyboards/atreus62/keymaps/mneme/config.h
@@ -1,6 +1,5 @@
#define ONESHOT_TIMEOUT 3000
#define TAPPING_TERM 200
-#define PREVENT_STUCK_MODIFIERS
#define FORCE_NKRO
#define LEADER_TIMEOUT 1000
diff --git a/keyboards/atreus62/keymaps/mneme/rules.mk b/keyboards/atreus62/keymaps/mneme/rules.mk
index 046aec273..160ce6edb 100644
--- a/keyboards/atreus62/keymaps/mneme/rules.mk
+++ b/keyboards/atreus62/keymaps/mneme/rules.mk
@@ -3,3 +3,4 @@ NKRO_ENABLE = true
MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes
CONSOLE_ENABLE = no
+LEADER_ENABLE = yes
diff --git a/keyboards/atreus62/keymaps/xyverz/keymap.c b/keyboards/atreus62/keymaps/xyverz/keymap.c
index 378831737..0f2e8ea08 100644
--- a/keyboards/atreus62/keymaps/xyverz/keymap.c
+++ b/keyboards/atreus62/keymaps/xyverz/keymap.c
@@ -127,8 +127,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
+void matrix_init_user(void) {
+#ifdef BOOTLOADER_CATERINA
+ // This will disable the red LEDs on the ProMicros
+ DDRD &= ~(1<<5);
+ PORTD &= ~(1<<5);
+ DDRB &= ~(1<<0);
+ PORTB &= ~(1<<0);
+#endif
+};
+const uint16_t PROGMEM fn_actions[] = {
};
void persistent_default_layer_set(uint16_t default_layer) {
diff --git a/keyboards/baguette/baguette.c b/keyboards/baguette/baguette.c
new file mode 100644
index 000000000..6a8df873a
--- /dev/null
+++ b/keyboards/baguette/baguette.c
@@ -0,0 +1,71 @@
+/* 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 "baguette.h"
+
+void bootmagic_lite(void)
+{
+ // The lite version of TMK's bootmagic made by Wilba.
+ // 100% less potential for accidentally making the
+ // keyboard do stupid things.
+
+ // We need multiple scans because debouncing can't be turned off.
+ matrix_scan();
+ wait_ms(DEBOUNCING_DELAY);
+ matrix_scan();
+
+ // If the Esc and space bar are held down on power up,
+ // reset the EEPROM valid state and jump to bootloader.
+ // Assumes Esc is at [0,0] and spacebar is at [4,7].
+ // This isn't very generalized, but we need something that doesn't
+ // rely on user's keymaps in firmware or EEPROM.
+ if ( ( matrix_get_row(0) & (1<<0) ) &&
+ ( matrix_get_row(4) & (1<<7) ) )
+ {
+ // Set the TMK/QMK EEPROM state as invalid.
+ eeconfig_disable();
+ //eeprom_set_valid(false);
+ // Jump to bootloader.
+ bootloader_jump();
+ }
+}
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ bootmagic_lite();
+
+ 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/baguette/baguette.h b/keyboards/baguette/baguette.h
new file mode 100644
index 000000000..e3945bea7
--- /dev/null
+++ b/keyboards/baguette/baguette.h
@@ -0,0 +1,59 @@
+/* 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/>.
+ */
+#ifndef BAGUETTE_H
+#define BAGUETTE_H
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1F, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K42, K43, K47, K4B, K4C, K4D, K4E, K4F \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO }, \
+ { KC_NO, KC_NO, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D, K4E, K4F } \
+}
+
+#define LAYOUT_iso( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1F, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K1D, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K42, K43, K47, K4B, K4C, K4D, K4E, K4F \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO, KC_NO, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K1D, K2D, KC_NO, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO }, \
+ { KC_NO, KC_NO, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D, K4E, K4F } \
+}
+
+#endif
diff --git a/keyboards/baguette/config.h b/keyboards/baguette/config.h
new file mode 100644
index 000000000..806f9fb4f
--- /dev/null
+++ b/keyboards/baguette/config.h
@@ -0,0 +1,224 @@
+/*
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x5050
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Yiancar
+#define PRODUCT Baguette
+#define DESCRIPTION A French Custom
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B3, B2, B1, E6, D6 }
+#define MATRIX_COL_PINS { B6, C6, C7, F7, F6, F5, F4, F1, F0, B0, D0, D1, D2, D3, D5, D4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/baguette/info.json b/keyboards/baguette/info.json
new file mode 100644
index 000000000..f3c9b308f
--- /dev/null
+++ b/keyboards/baguette/info.json
@@ -0,0 +1,153 @@
+{
+ "keyboard_name": "Baguette",
+ "url": "",
+ "maintainer": "qmk",
+ "bootloader": "atmel-dfu",
+ "width": 16.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ansi": {
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0},
+ {"label":"Backspace2", "x":14, "y":0},
+ {"label":"Insert", "x":15.5, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"\\", "x":13.5, "y":1, "w":1.5},
+ {"label":"Delete", "x":15.5, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"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":"JP RO", "x":12.25, "y":3},
+ {"label":"Shift", "x":13.25, "y":3, "w":1.25},
+ {"label":"Up", "x":14.5, "y":3},
+ {"label":"GUI", "x":1.25, "y":4},
+ {"label":"Alt", "x":2.25, "y":4, "w":1.25},
+ {"label":"Space", "x":3.5, "y":4, "w":6.25},
+ {"label":"Ctrl", "x":9.75, "y":4, "w":1.25},
+ {"label":"Fn", "x":11, "y":4},
+ {"label":"Left", "x":13.5, "y":4},
+ {"label":"Down", "x":14.5, "y":4},
+ {"label":"Right", "x":15.5, "y":4}
+ ]
+ },
+
+ "LAYOUT_iso": {
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0},
+ {"label":"Backspace2", "x":14, "y":0},
+ {"label":"Insert", "x":15.5, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"Delete", "x":15.5, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"ISO #", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":2, "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":"JP_RO", "x":12.25, "y":3},
+ {"label":"Shift", "x":13.25, "y":3, "w":1.25},
+ {"label":"Up", "x":14.5, "y":3},
+ {"label":"GUI", "x":1.25, "y":4},
+ {"label":"Alt", "x":2.25, "y":4, "w":1.25},
+ {"label":"Space", "x":3.5, "y":4, "w":6.25},
+ {"label":"Ctrl", "x":9.75, "y":4, "w":1.25},
+ {"label":"Fn", "x":11, "y":4},
+ {"label":"Left", "x":13.5, "y":4},
+ {"label":"Down", "x":14.5, "y":4},
+ {"label":"Right", "x":15.5, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/baguette/keymaps/default/keymap.c b/keyboards/baguette/keymaps/default/keymap.c
new file mode 100644
index 000000000..4dfcb837a
--- /dev/null
+++ b/keyboards/baguette/keymaps/default/keymap.c
@@ -0,0 +1,50 @@
+/* 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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_ansi( /* Base */
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_INS,\
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_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_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS, KC_RSFT, KC_UP, \
+ KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_ansi( /* FN */
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,\
+ 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_STEP, BL_BRTG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/baguette/keymaps/default/readme.md b/keyboards/baguette/keymaps/default/readme.md
new file mode 100644
index 000000000..1e74a02cd
--- /dev/null
+++ b/keyboards/baguette/keymaps/default/readme.md
@@ -0,0 +1,9 @@
+# The default ANSI keymap for baguette
+
+Typical ANSI keymap. Please note:
+- Left key from split backspace is connected to 2u key.
+- Left key from split left Shift is connected to 2u key.
+- Right key from split right Shift is connected to 2u key.
+- Backlight control is on the Z, X and C keys of the FN layer.
+- Reset key combination is FN + ].
+- Holding ESC and Space while plugging in the USB erases the EEPROM.
diff --git a/keyboards/baguette/keymaps/iso/keymap.c b/keyboards/baguette/keymaps/iso/keymap.c
new file mode 100644
index 000000000..ea8baf08e
--- /dev/null
+++ b/keyboards/baguette/keymaps/iso/keymap.c
@@ -0,0 +1,50 @@
+/* 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
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_iso( /* Base */
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_TRNS, KC_INS,\
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,\
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_TRNS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_TRNS, KC_RSFT, KC_UP, \
+ KC_LGUI, KC_LALT, KC_SPC, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+[0] = LAYOUT_iso( /* FN */
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS, KC_TRNS,\
+ 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_STEP, BL_BRTG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_RCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/baguette/keymaps/iso/readme.md b/keyboards/baguette/keymaps/iso/readme.md
new file mode 100644
index 000000000..9256820a5
--- /dev/null
+++ b/keyboards/baguette/keymaps/iso/readme.md
@@ -0,0 +1,10 @@
+# The default ISO keymap for baguette
+
+Typical ISO keymap. Please note:
+- Left key from split backspace is connected to 2u key.
+- Left key from split left Shift is connected to 2u key.
+- Right key from split right Shift is connected to 2u key.
+- Backlight control is on the Z, X and C keys of the FN layer.
+- Reset key combination is FN + ].
+- Holding ESC and Space while plugging in the USB erases the EEPROM.
+
diff --git a/keyboards/baguette/readme.md b/keyboards/baguette/readme.md
new file mode 100644
index 000000000..d211af16a
--- /dev/null
+++ b/keyboards/baguette/readme.md
@@ -0,0 +1,16 @@
+Baguette
+========
+
+![Baguette](https://cdn.discordapp.com/attachments/426880953143525384/479788409263489035/scecre2.png)
+
+This is a custom keyboard with backlight inspired by France.
+
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+Hardware Supported: ATMEGA 32u4 MCU with backlight support.
+Hardware Availability: Closed group-buy please contact the runners (Tesletron and Enjoy)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make baguette: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/baguette/rules.mk b/keyboards/baguette/rules.mk
new file mode 100644
index 000000000..062ff1b22
--- /dev/null
+++ b/keyboards/baguette/rules.mk
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = 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 = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/bananasplit/README.md b/keyboards/bananasplit/README.md
deleted file mode 100644
index cd1e15d77..000000000
--- a/keyboards/bananasplit/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-BananaSplit60
-===
-
-A 60% PCB featuring a split spacebar.
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: BananaSplit60 PCB
-Hardware Availability: https://thevankeyboards.com/products/gb-bananasplit-60-keyboard-kit?variant=42149104910
-
-Make example for this keyboard (after setting up your build environment):
-
- make bananasplit:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-
diff --git a/keyboards/bananasplit/keymaps/0010/rules.mk b/keyboards/bananasplit/keymaps/0010/rules.mk
deleted file mode 100644
index 7d09c322e..000000000
--- a/keyboards/bananasplit/keymaps/0010/rules.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2017 Balz Guenat
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-# QMK Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-# MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-# EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-# CONSOLE_ENABLE = no # Console for debug(+400)
-# COMMAND_ENABLE = yes # Commands for debug and configuration
-# NKRO_ENABLE = yes # 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 support (+2400 to 4200, depending on config)
-# AUDIO_ENABLE = no # Audio output on port C6
-# UNICODE_ENABLE = no # Unicode
-# BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-# SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/bananasplit/keymaps/coloneljesus/rules.mk b/keyboards/bananasplit/keymaps/coloneljesus/rules.mk
deleted file mode 100644
index 7d09c322e..000000000
--- a/keyboards/bananasplit/keymaps/coloneljesus/rules.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2017 Balz Guenat
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-# QMK Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-# MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-# EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-# CONSOLE_ENABLE = no # Console for debug(+400)
-# COMMAND_ENABLE = yes # Commands for debug and configuration
-# NKRO_ENABLE = yes # 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 support (+2400 to 4200, depending on config)
-# AUDIO_ENABLE = no # Audio output on port C6
-# UNICODE_ENABLE = no # Unicode
-# BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-# SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/bananasplit/keymaps/default/rules.mk b/keyboards/bananasplit/keymaps/default/rules.mk
deleted file mode 100644
index 7d09c322e..000000000
--- a/keyboards/bananasplit/keymaps/default/rules.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2017 Balz Guenat
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-# QMK Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-# MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-# EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-# CONSOLE_ENABLE = no # Console for debug(+400)
-# COMMAND_ENABLE = yes # Commands for debug and configuration
-# NKRO_ENABLE = yes # 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 support (+2400 to 4200, depending on config)
-# AUDIO_ENABLE = no # Audio output on port C6
-# UNICODE_ENABLE = no # Unicode
-# BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-# SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/bananasplit/keymaps/kamon/rules.mk b/keyboards/bananasplit/keymaps/kamon/rules.mk
deleted file mode 100644
index 7d09c322e..000000000
--- a/keyboards/bananasplit/keymaps/kamon/rules.mk
+++ /dev/null
@@ -1,37 +0,0 @@
-# Copyright 2017 Balz Guenat
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-# QMK Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-# MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-# EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-# CONSOLE_ENABLE = no # Console for debug(+400)
-# COMMAND_ENABLE = yes # Commands for debug and configuration
-# NKRO_ENABLE = yes # 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 support (+2400 to 4200, depending on config)
-# AUDIO_ENABLE = no # Audio output on port C6
-# UNICODE_ENABLE = no # Unicode
-# BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-# RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-# SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/bananasplit/keymaps/talljoe/config.h b/keyboards/bananasplit/keymaps/talljoe/config.h
deleted file mode 100644
index bb2aadfa6..000000000
--- a/keyboards/bananasplit/keymaps/talljoe/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include QMK_KEYBOARD_CONFIG_H
-
-#define PREVENT_STUCK_MODIFIERS
-#define SPACE_COUNT 3
-
-#define TEMPLATE( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
- K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
- K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
-) { \
- { 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, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
- { K40, K41, K42, KC_NO, K44, K45, K46, KC_NO, K48, K49, KC_NO, K4B, K4C, KC_NO }\
-}
-
-#endif
diff --git a/keyboards/bface/README.md b/keyboards/bface/README.md
new file mode 100644
index 000000000..4120e3bc2
--- /dev/null
+++ b/keyboards/bface/README.md
@@ -0,0 +1,44 @@
+# B.face
+
+A 60% keyboard with RGB that runs ps2avrgb natively. Please note that the B.face and B.fake have different switch matrices. Firmware on one, will not work on the other.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: B.face PCB
+Hardware Availability: [Winkeyless](https://winkeyless.kr/product/b-face-x2-pcb/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bface:default
+
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+ ```
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/bface/backlight_ps2avrGB.c b/keyboards/bface/backlight_ps2avrGB.c
new file mode 100644
index 000000000..c0f642840
--- /dev/null
+++ b/keyboards/bface/backlight_ps2avrGB.c
@@ -0,0 +1,94 @@
+/* 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/bface/backlight_ps2avrGB.h b/keyboards/bface/backlight_ps2avrGB.h
new file mode 100644
index 000000000..d5ca90399
--- /dev/null
+++ b/keyboards/bface/backlight_ps2avrGB.h
@@ -0,0 +1,35 @@
+/* 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/>.
+ */
+
+
+#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"
+
+#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);
+
+#endif
diff --git a/keyboards/bface/bface.c b/keyboards/bface/bface.c
new file mode 100644
index 000000000..8422a4a40
--- /dev/null
+++ b/keyboards/bface/bface.c
@@ -0,0 +1,46 @@
+/*
+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"
+#include "rgblight.h"
+
+#include <avr/pgmspace.h>
+
+#include "action_layer.h"
+#include "i2c.h"
+#include "quantum.h"
+
+extern rgblight_config_t rgblight_config;
+
+void rgblight_set(void) {
+ if (!rgblight_config.enable) {
+ for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+ led[i].r = 0;
+ led[i].g = 0;
+ led[i].b = 0;
+ }
+ }
+
+ i2c_init();
+ i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+ rgblight_task();
+}
diff --git a/keyboards/bface/bface.h b/keyboards/bface/bface.h
new file mode 100644
index 000000000..62d62f695
--- /dev/null
+++ b/keyboards/bface/bface.h
@@ -0,0 +1,44 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+Copyright 2017 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/>.
+*/
+
+#ifndef KEYMAP_COMMON_H
+#define KEYMAP_COMMON_H
+
+#include "quantum_keycodes.h"
+#include "keycode.h"
+#include "action.h"
+
+#define LAYOUT_60_ansi( \
+ 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 \
+){ \
+ { 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 }, \
+ { K02, K12, K22, K32, K42, K52, KC_NO, KC_NO, KC_NO, KC_NO, KA2, KB2, KC_NO, KD2, KC_NO }, \
+ { K03, K13, K23, K33, K43, K53, KC_NO, KC_NO, KC_NO, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \
+ { K04, K14, K24, K34, K44, K54, KC_NO, KC_NO, KC_NO, KC_NO, KA4, KB4, KC4, 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 } \
+}
+
+
+#endif
diff --git a/keyboards/bface/config.h b/keyboards/bface/config.h
new file mode 100644
index 000000000..3d74af4f1
--- /dev/null
+++ b/keyboards/bface/config.h
@@ -0,0 +1,49 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+Copyright 2017 Sebastian Kaim <sebastian.kaim@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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#define VENDOR_ID 0x20A0
+#define PRODUCT_ID 0x422D
+// You can edit those at usbconfig.h about line 250. These values will
+// unforunatly be ignored so far
+#define MANUFACTURER winkeyless.kr
+#define PRODUCT b.face
+
+/* matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 15
+
+#define RGBLED_NUM 16
+#define RGBLIGHT_ANIMATIONS
+
+#define NO_UART 1
+#define BOOTLOADHID_BOOTLOADER 1
+
+/* key combination for command */
+#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+#ifdef BACKLIGHT_ENABLE
+ // the backlight PWM does not work (yet). Therefore, we only have two backlight levels (on/off)
+ #define BACKLIGHT_LEVELS 1
+ #define LED_PIN PORTD
+ #define BACKLIGHT_PORT_NUM (1 << 4)
+#endif
+
+#endif
diff --git a/keyboards/bface/i2c.c b/keyboards/bface/i2c.c
new file mode 100644
index 000000000..c27f3e3d1
--- /dev/null
+++ b/keyboards/bface/i2c.c
@@ -0,0 +1,104 @@
+/*
+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/bface/i2c.h b/keyboards/bface/i2c.h
new file mode 100644
index 000000000..27c9d3d05
--- /dev/null
+++ b/keyboards/bface/i2c.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef __I2C_H__
+#define __I2C_H__
+
+void i2c_init(void);
+void i2c_set_bitrate(uint16_t bitrate_khz);
+uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
+
+#endif
diff --git a/keyboards/bface/info.json b/keyboards/bface/info.json
new file mode 100644
index 000000000..f5ecf173d
--- /dev/null
+++ b/keyboards/bface/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "b.face",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/bface/keymaps/default/keymap.c b/keyboards/bface/keymaps/default/keymap.c
new file mode 100644
index 000000000..9c41014bc
--- /dev/null
+++ b/keyboards/bface/keymaps/default/keymap.c
@@ -0,0 +1,47 @@
+/*
+Copyright 2017 Sebastian Kaim <sebastian.kaim@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 QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_60_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS,
+ KC_F1, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT,
+ KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL,KC_LALT,KC_LGUI, KC_SPC, KC_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_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,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_INC, BL_DEC, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,RGB_MOD,KC_TRNS,BL_ON, BL_OFF, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
+ ),
+ /* You can copy this layer as base for a new fn layer * /
+ [n] = LAYOUT_60_ansi(
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
+ ), // */
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(1),
+};
diff --git a/keyboards/bface/keymaps/kpeatt/keymap.c b/keyboards/bface/keymaps/kpeatt/keymap.c
new file mode 100644
index 000000000..84de7872f
--- /dev/null
+++ b/keyboards/bface/keymaps/kpeatt/keymap.c
@@ -0,0 +1,79 @@
+/*
+Copyright 2017 Kyle Peatt <kpeatt@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+#define ______ KC_TRNS
+
+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 | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------+
+ * | Caps/FN | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | GUI | Alt | Space | Alt | GUI | Ctrl | Fn |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ [0] = LAYOUT_60_ansi(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS,
+ LT(1, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_RCTL, MO(1)
+ ),
+
+ /* FN Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | `~ | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | Up | | | | | | | |RGBMOD| Val+| Val- |RBGTOG|
+ * |-----------------------------------------------------------------------------------------+
+ * | | Left| Down|Right| | | | | Sat+| Sat-| Hue+| Hue-| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ [1] = LAYOUT_60_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ______,
+ ______,______,KC_UP,______,______,______,______,______,______,______,RGB_MOD,RGB_VAI,RGB_VAD,RGB_TOG,
+ ______,KC_LEFT,KC_DOWN,KC_RGHT,______, ______, ______,______,RGB_SAI,RGB_SAD,RGB_HUI,RGB_HUD,______,
+ ______,______,______,______,______, ______, ______,______,______,______,______, ______,
+ ______,______,______, ______, ______,______,______,______
+ ),
+ /* You can copy this layer as base for a new fn layer * /
+ [n] = LAYOUT_60_ansi(
+ ______,______,______,______,______,______,______,______,______,______,______,______,______,______,
+ ______,______,______,______,______,______,______,______,______,______,______,______,______,______,
+ ______,______,______,______,______,______,______,______,______,______,______,______,______,
+ ______,______,______,______,______,______,______,______,______,______,______, ______,
+ ______,______,______, ______, ______,______,______,______
+ ), // */
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(1),
+};
diff --git a/keyboards/bface/keymaps/kpeatt/readme.md b/keyboards/bface/keymaps/kpeatt/readme.md
new file mode 100644
index 000000000..a7eef1e5f
--- /dev/null
+++ b/keyboards/bface/keymaps/kpeatt/readme.md
@@ -0,0 +1,10 @@
+kpeatt's bface layout
+======================
+
+## Keyboard Notes
+- This is for a clone bface PCB that is no longer for sale as far as I can tell. [Used to be sold on KBDFans](https://www.aliexpress.com/item/bface-60-RGB-underground-copy-pcb-from-china-gh60-pcb-Customize-keyboard-PCB/32731084597.html).
+- To put in reset mode hold `left ctrl` while inserting the USB cable
+- Use flashing instructions in the main `bface` directory
+
+### Build
+To build this keymap, run `make bface:kpeatt` from the qmk_firmware directory.
diff --git a/keyboards/bface/matrix.c b/keyboards/bface/matrix.c
new file mode 100644
index 000000000..b3761a63c
--- /dev/null
+++ b/keyboards/bface/matrix.c
@@ -0,0 +1,113 @@
+/*
+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/bface/program b/keyboards/bface/program
new file mode 100755
index 000000000..298e64547
--- /dev/null
+++ b/keyboards/bface/program
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>, Sebastian Kaim <sebb@sebb767.de>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from __future__ import print_function
+
+import os
+import sys
+import time
+import usb
+
+
+def checkForKeyboardInNormalMode():
+ """Returns a device if a ps2avrGB device in normal made (that is in keyboard mode) or None if it is not found."""
+ return usb.core.find(idVendor=0x20A0, idProduct=0x422D)
+
+def checkForKeyboardInBootloaderMode():
+ """Returns True if a ps2avrGB device in bootloader (flashable) mode is found and False otherwise."""
+ return (usb.core.find(idVendor=0x16c0, idProduct=0x05df) is not None)
+
+def flashKeyboard(firmware_file):
+ """Calls bootloadHID to flash the given file to the device."""
+ print('Flashing firmware to device ...')
+ if os.system('bootloadHID -r "%s"' % firmware_file) == 0:
+ print('\nDone!')
+ else:
+ print('\nbootloadHID returned an error.')
+
+def printDeviceInfo(dev):
+ """Prints all infos for a given USB device"""
+ print('Device Information:')
+ print(' idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor))
+ print(' idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct))
+ print('Manufacturer: %s' % (dev.iManufacturer))
+ print('Serial: %s' % (dev.iSerialNumber))
+ print('Product: %s' % (dev.iProduct), end='\n\n')
+
+def sendDeviceToBootloaderMode(dev):
+ """Tries to send a given ps2avrGB keyboard to bootloader mode to allow flashing."""
+ try:
+ dev.set_configuration()
+
+ request_type = usb.util.build_request_type(
+ usb.util.CTRL_OUT,
+ usb.util.CTRL_TYPE_CLASS,
+ usb.util.CTRL_RECIPIENT_DEVICE)
+
+ USBRQ_HID_SET_REPORT = 0x09
+ HID_REPORT_OPTION = 0x0301
+
+ dev.ctrl_transfer(request_type, USBRQ_HID_SET_REPORT, HID_REPORT_OPTION, 0, [0, 0, 0xFF] + [0] * 5)
+ except usb.core.USBError:
+ # for some reason I keep getting USBError, but it works!
+ pass
+
+
+if len(sys.argv) < 2:
+ print('Usage: %s <firmware.hex>' % sys.argv[0])
+ sys.exit(1)
+
+kb = checkForKeyboardInNormalMode()
+
+if kb is not None:
+ print('Found a keyboad in normal mode. Attempting to send it to bootloader mode ...', end='')
+ sendDeviceToBootloaderMode(kb)
+ print(' done.')
+ print("Hint: If your keyboard can't be set to bootloader mode automatically, plug it in while pressing the bootloader key to do so manually.")
+ print(" You can find more infos about this here: https://github.com/qmk/qmk_firmware/tree/master/keyboards/ps2avrGB#setting-the-board-to-bootloader-mode")
+
+attempts = 12 # 60 seconds
+found = False
+for attempt in range(1, attempts + 1):
+ print("Searching for keyboard in bootloader mode (%i/%i) ... " % (attempt, attempts), end='')
+
+ if checkForKeyboardInBootloaderMode():
+ print('Found', end='\n\n')
+ flashKeyboard(sys.argv[1])
+ found = True
+ break
+ else:
+ print('Nothing.', end='')
+
+ if attempt != attempts: # no need to wait on the last attempt
+ print(' Sleeping 5 seconds.', end='')
+ time.sleep(5)
+
+ # print a newline
+ print()
+
+if not found:
+ print("Couldn't find a flashable keyboard. Aborting.")
+ sys.exit(2)
+
diff --git a/keyboards/bface/rules.mk b/keyboards/bface/rules.mk
new file mode 100644
index 000000000..95b6c8a97
--- /dev/null
+++ b/keyboards/bface/rules.mk
@@ -0,0 +1,49 @@
+# 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
+
+# build options
+BOOTMAGIC_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+BACKLIGHT_CUSTOM_DRIVER = yes
+BACKLIGHT_BREATHING = no
+RGBLIGHT_ENABLE = yes
+RGBLIGHT_CUSTOM_DRIVER = yes
+
+OPT_DEFS = -DDEBUG_LEVEL=0
+OPT_DEFS += -DBOOTLOADER_SIZE=2048
+
+# custom matrix setup
+CUSTOM_MATRIX = yes
+SRC = matrix.c i2c.c backlight_ps2avrGB.c
+
+# programming options
+PROGRAM_CMD = ./keyboards/bface/program .build/$(TARGET).hex
+
+LAYOUTS = 60_ansi
diff --git a/keyboards/bface/usbconfig.h b/keyboards/bface/usbconfig.h
new file mode 100644
index 000000000..f87922615
--- /dev/null
+++ b/keyboards/bface/usbconfig.h
@@ -0,0 +1,396 @@
+/* Name: usbconfig.h
+ * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
+ * Author: Christian Starkjohann
+ * Creation Date: 2005-04-01
+ * Tabsize: 4
+ * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
+ * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
+ * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
+ */
+
+#ifndef __usbconfig_h_included__
+#define __usbconfig_h_included__
+
+#include "config.h"
+
+/*
+General Description:
+This file is an example configuration (with inline documentation) for the USB
+driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
+also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
+wire the lines to any other port, as long as D+ is also wired to INT0 (or any
+other hardware interrupt, as long as it is the highest level interrupt, see
+section at the end of this file).
+*/
+
+/* ---------------------------- Hardware Config ---------------------------- */
+
+#define USB_CFG_IOPORTNAME D
+/* This is the port where the USB bus is connected. When you configure it to
+ * "B", the registers PORTB, PINB and DDRB will be used.
+ */
+#define USB_CFG_DMINUS_BIT 3
+/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
+ * This may be any bit in the port.
+ */
+#define USB_CFG_DPLUS_BIT 2
+/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
+ * This may be any bit in the port. Please note that D+ must also be connected
+ * to interrupt pin INT0! [You can also use other interrupts, see section
+ * "Optional MCU Description" below, or you can connect D- to the interrupt, as
+ * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
+ * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
+ * markers every millisecond.]
+ */
+#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
+/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
+ * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
+ * require no crystal, they tolerate +/- 1% deviation from the nominal
+ * frequency. All other rates require a precision of 2000 ppm and thus a
+ * crystal!
+ * Since F_CPU should be defined to your actual clock rate anyway, you should
+ * not need to modify this setting.
+ */
+#define USB_CFG_CHECK_CRC 0
+/* Define this to 1 if you want that the driver checks integrity of incoming
+ * data packets (CRC checks). CRC checks cost quite a bit of code size and are
+ * currently only available for 18 MHz crystal clock. You must choose
+ * USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
+ */
+
+/* ----------------------- Optional Hardware Config ------------------------ */
+
+/* #define USB_CFG_PULLUP_IOPORTNAME D */
+/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
+ * V+, you can connect and disconnect the device from firmware by calling
+ * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
+ * This constant defines the port on which the pullup resistor is connected.
+ */
+/* #define USB_CFG_PULLUP_BIT 4 */
+/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
+ * above) where the 1.5k pullup resistor is connected. See description
+ * above for details.
+ */
+
+/* --------------------------- Functional Range ---------------------------- */
+
+#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
+/* Define this to 1 if you want to compile a version with two endpoints: The
+ * default control endpoint 0 and an interrupt-in endpoint (any other endpoint
+ * number).
+ */
+#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1
+/* Define this to 1 if you want to compile a version with three endpoints: The
+ * default control endpoint 0, an interrupt-in endpoint 3 (or the number
+ * configured below) and a catch-all default interrupt-in endpoint as above.
+ * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
+ */
+#define USB_CFG_EP3_NUMBER 3
+/* If the so-called endpoint 3 is used, it can now be configured to any other
+ * endpoint number (except 0) with this macro. Default if undefined is 3.
+ */
+/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
+/* The above macro defines the startup condition for data toggling on the
+ * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
+ * Since the token is toggled BEFORE sending any data, the first packet is
+ * sent with the oposite value of this configuration!
+ */
+#define USB_CFG_IMPLEMENT_HALT 0
+/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
+ * for endpoint 1 (interrupt endpoint). Although you may not need this feature,
+ * it is required by the standard. We have made it a config option because it
+ * bloats the code considerably.
+ */
+#define USB_CFG_SUPPRESS_INTR_CODE 0
+/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
+ * want to send any data over them. If this macro is defined to 1, functions
+ * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
+ * you need the interrupt-in endpoints in order to comply to an interface
+ * (e.g. HID), but never want to send any data. This option saves a couple
+ * of bytes in flash memory and the transmit buffers in RAM.
+ */
+#define USB_CFG_INTR_POLL_INTERVAL 1
+/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
+ * interval. The value is in milliseconds and must not be less than 10 ms for
+ * low speed devices.
+ */
+#define USB_CFG_IS_SELF_POWERED 0
+/* Define this to 1 if the device has its own power supply. Set it to 0 if the
+ * device is powered from the USB bus.
+ */
+#define USB_CFG_MAX_BUS_POWER 500
+/* Set this variable to the maximum USB bus power consumption of your device.
+ * The value is in milliamperes. [It will be divided by two since USB
+ * communicates power requirements in units of 2 mA.]
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITE 1
+/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
+ * transfers. Set it to 0 if you don't need it and want to save a couple of
+ * bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_READ 0
+/* Set this to 1 if you need to send control replies which are generated
+ * "on the fly" when usbFunctionRead() is called. If you only want to send
+ * data from a static buffer, set it to 0 and return the data from
+ * usbFunctionSetup(). This saves a couple of bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
+/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
+ * You must implement the function usbFunctionWriteOut() which receives all
+ * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
+ * can be found in 'usbRxToken'.
+ */
+#define USB_CFG_HAVE_FLOWCONTROL 0
+/* Define this to 1 if you want flowcontrol over USB data. See the definition
+ * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
+ * usbdrv.h.
+ */
+#define USB_CFG_DRIVER_FLASH_PAGE 0
+/* If the device has more than 64 kBytes of flash, define this to the 64 k page
+ * where the driver's constants (descriptors) are located. Or in other words:
+ * Define this to 1 for boot loaders on the ATMega128.
+ */
+#define USB_CFG_LONG_TRANSFERS 0
+/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
+ * in a single control-in or control-out transfer. Note that the capability
+ * for long transfers increases the driver size.
+ */
+/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
+/* This macro is a hook if you want to do unconventional things. If it is
+ * defined, it's inserted at the beginning of received message processing.
+ * If you eat the received message and don't want default processing to
+ * proceed, do a return after doing your things. One possible application
+ * (besides debugging) is to flash a status LED on each packet.
+ */
+/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
+/* This macro is a hook if you need to know when an USB RESET occurs. It has
+ * one parameter which distinguishes between the start of RESET state and its
+ * end.
+ */
+/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
+/* This macro (if defined) is executed when a USB SET_ADDRESS request was
+ * received.
+ */
+#define USB_COUNT_SOF 1
+/* define this macro to 1 if you need the global variable "usbSofCount" which
+ * counts SOF packets. This feature requires that the hardware interrupt is
+ * connected to D- instead of D+.
+ */
+/* #ifdef __ASSEMBLER__
+ * macro myAssemblerMacro
+ * in YL, TCNT0
+ * sts timer0Snapshot, YL
+ * endm
+ * #endif
+ * #define USB_SOF_HOOK myAssemblerMacro
+ * This macro (if defined) is executed in the assembler module when a
+ * Start Of Frame condition is detected. It is recommended to define it to
+ * the name of an assembler macro which is defined here as well so that more
+ * than one assembler instruction can be used. The macro may use the register
+ * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
+ * immediately after an SOF pulse may be lost and must be retried by the host.
+ * What can you do with this hook? Since the SOF signal occurs exactly every
+ * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
+ * designs running on the internal RC oscillator.
+ * Please note that Start Of Frame detection works only if D- is wired to the
+ * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
+ */
+#define USB_CFG_CHECK_DATA_TOGGLING 0
+/* define this macro to 1 if you want to filter out duplicate data packets
+ * sent by the host. Duplicates occur only as a consequence of communication
+ * errors, when the host does not receive an ACK. Please note that you need to
+ * implement the filtering yourself in usbFunctionWriteOut() and
+ * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
+ * for each control- and out-endpoint to check for duplicate packets.
+ */
+#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
+/* define this macro to 1 if you want the function usbMeasureFrameLength()
+ * compiled in. This function can be used to calibrate the AVR's RC oscillator.
+ */
+#define USB_USE_FAST_CRC 0
+/* The assembler module has two implementations for the CRC algorithm. One is
+ * faster, the other is smaller. This CRC routine is only used for transmitted
+ * messages where timing is not critical. The faster routine needs 31 cycles
+ * per byte while the smaller one needs 61 to 69 cycles. The faster routine
+ * may be worth the 32 bytes bigger code size if you transmit lots of data and
+ * run the AVR close to its limit.
+ */
+
+/* -------------------------- Device Description --------------------------- */
+
+#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
+/* USB vendor ID for the device, low byte first. If you have registered your
+ * own Vendor ID, define it here. Otherwise you may use one of obdev's free
+ * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
+/* This is the ID of the product, low byte first. It is interpreted in the
+ * scope of the vendor ID. If you have registered your own VID with usb.org
+ * or if you have licensed a PID from somebody else, define it here. Otherwise
+ * you may use one of obdev's free shared VID/PID pairs. See the file
+ * USB-IDs-for-free.txt for details!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
+#define USB_CFG_VENDOR_NAME_LEN 13
+/* 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 'b', '.', 'f', 'a', 'c', 'e'
+#define USB_CFG_DEVICE_NAME_LEN 6
+/* Same as above for the device name. If you don't want a device name, undefine
+ * the macros. See the file USB-IDs-for-free.txt before you assign a name if
+ * you use a shared VID/PID.
+ */
+/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
+/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
+/* Same as above for the serial number. If you don't want a serial number,
+ * undefine the macros.
+ * It may be useful to provide the serial number through other means than at
+ * compile time. See the section about descriptor properties below for how
+ * to fine tune control over USB descriptors such as the string descriptor
+ * for the serial number.
+ */
+#define USB_CFG_DEVICE_CLASS 0
+#define USB_CFG_DEVICE_SUBCLASS 0
+/* See USB specification if you want to conform to an existing device class.
+ * Class 0xff is "vendor specific".
+ */
+#define USB_CFG_INTERFACE_CLASS 3 /* HID */
+#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
+#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
+/* See USB specification if you want to conform to an existing device class or
+ * protocol. The following classes must be set at interface level:
+ * HID class is 3, no subclass and protocol required (but may be useful!)
+ * CDC class is 2, use subclass 2 and protocol 1 for ACM
+ */
+#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
+/* Define this to the length of the HID report descriptor, if you implement
+ * an HID device. Otherwise don't define it or define it to 0.
+ * If you use this define, you must add a PROGMEM character array named
+ * "usbHidReportDescriptor" to your code which contains the report descriptor.
+ * Don't forget to keep the array and this define in sync!
+ */
+
+/* #define USB_PUBLIC static */
+/* Use the define above if you #include usbdrv.c instead of linking against it.
+ * This technique saves a couple of bytes in flash memory.
+ */
+
+/* ------------------- Fine Control over USB Descriptors ------------------- */
+/* If you don't want to use the driver's default USB descriptors, you can
+ * provide our own. These can be provided as (1) fixed length static data in
+ * flash memory, (2) fixed length static data in RAM or (3) dynamically at
+ * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
+ * information about this function.
+ * Descriptor handling is configured through the descriptor's properties. If
+ * no properties are defined or if they are 0, the default descriptor is used.
+ * Possible properties are:
+ * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
+ * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
+ * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
+ * you want RAM pointers.
+ * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
+ * in static memory is in RAM, not in flash memory.
+ * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
+ * the driver must know the descriptor's length. The descriptor itself is
+ * found at the address of a well known identifier (see below).
+ * List of static descriptor names (must be declared PROGMEM if in flash):
+ * char usbDescriptorDevice[];
+ * char usbDescriptorConfiguration[];
+ * char usbDescriptorHidReport[];
+ * char usbDescriptorString0[];
+ * int usbDescriptorStringVendor[];
+ * int usbDescriptorStringDevice[];
+ * int usbDescriptorStringSerialNumber[];
+ * Other descriptors can't be provided statically, they must be provided
+ * dynamically at runtime.
+ *
+ * Descriptor properties are or-ed or added together, e.g.:
+ * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
+ *
+ * The following descriptors are defined:
+ * USB_CFG_DESCR_PROPS_DEVICE
+ * USB_CFG_DESCR_PROPS_CONFIGURATION
+ * USB_CFG_DESCR_PROPS_STRINGS
+ * USB_CFG_DESCR_PROPS_STRING_0
+ * USB_CFG_DESCR_PROPS_STRING_VENDOR
+ * USB_CFG_DESCR_PROPS_STRING_PRODUCT
+ * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
+ * USB_CFG_DESCR_PROPS_HID
+ * USB_CFG_DESCR_PROPS_HID_REPORT
+ * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
+ *
+ * Note about string descriptors: String descriptors are not just strings, they
+ * are Unicode strings prefixed with a 2 byte header. Example:
+ * int serialNumberDescriptor[] = {
+ * USB_STRING_DESCRIPTOR_HEADER(6),
+ * 'S', 'e', 'r', 'i', 'a', 'l'
+ * };
+ */
+
+#define USB_CFG_DESCR_PROPS_DEVICE 0
+#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0
+#define USB_CFG_DESCR_PROPS_STRINGS 0
+#define USB_CFG_DESCR_PROPS_STRING_0 0
+#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
+#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
+#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
+#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID 0
+#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_HID_REPORT 0
+#define USB_CFG_DESCR_PROPS_UNKNOWN 0
+
+#define usbMsgPtr_t unsigned short
+/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to
+ * a scalar type here because gcc generates slightly shorter code for scalar
+ * arithmetics than for pointer arithmetics. Remove this define for backward
+ * type compatibility or define it to an 8 bit type if you use data in RAM only
+ * and all RAM is below 256 bytes (tiny memory model in IAR CC).
+ */
+
+/* ----------------------- Optional MCU Description ------------------------ */
+
+/* The following configurations have working defaults in usbdrv.h. You
+ * usually don't need to set them explicitly. Only if you want to run
+ * the driver on a device which is not yet supported or with a compiler
+ * which is not fully supported (such as IAR C) or if you use a differnt
+ * interrupt than INT0, you may have to define some of these.
+ */
+/* #define USB_INTR_CFG MCUCR */
+/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */
+/* #define USB_INTR_CFG_CLR 0 */
+/* #define USB_INTR_ENABLE GIMSK */
+/* #define USB_INTR_ENABLE_BIT INT0 */
+/* #define USB_INTR_PENDING GIFR */
+/* #define USB_INTR_PENDING_BIT INTF0 */
+/* #define USB_INTR_VECTOR INT0_vect */
+
+/* Set INT1 for D- falling edge to count SOF */
+/* #define USB_INTR_CFG EICRA */
+#define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10))
+/* #define USB_INTR_CFG_CLR 0 */
+/* #define USB_INTR_ENABLE EIMSK */
+#define USB_INTR_ENABLE_BIT INT1
+/* #define USB_INTR_PENDING EIFR */
+#define USB_INTR_PENDING_BIT INTF1
+#define USB_INTR_VECTOR INT1_vect
+
+#endif /* __usbconfig_h_included__ */
diff --git a/keyboards/bfake/readme.md b/keyboards/bfake/readme.md
index 47db91498..ca12b4996 100644
--- a/keyboards/bfake/readme.md
+++ b/keyboards/bfake/readme.md
@@ -11,4 +11,34 @@ Make example for this keyboard (after setting up your build environment):
make bfake:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/bfo9000/config.h b/keyboards/bfo9000/config.h
index 561d2d114..893fa5ab6 100644
--- a/keyboards/bfo9000/config.h
+++ b/keyboards/bfo9000/config.h
@@ -53,7 +53,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN B4
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 20 // Number of LEDs
/*
diff --git a/keyboards/bfo9000/keymaps/andylikescandy6x18/config.h b/keyboards/bfo9000/keymaps/andylikescandy6x18/config.h
index 9d124a98e..be57e385e 100644
--- a/keyboards/bfo9000/keymaps/andylikescandy6x18/config.h
+++ b/keyboards/bfo9000/keymaps/andylikescandy6x18/config.h
@@ -37,7 +37,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PERMISSIVE_HOLD
- #define PREVENT_STUCK_MODIFIERS
-
-
#endif
diff --git a/keyboards/bfo9000/rules.mk b/keyboards/bfo9000/rules.mk
index 8a7e56f46..d11f9a54e 100644
--- a/keyboards/bfo9000/rules.mk
+++ b/keyboards/bfo9000/rules.mk
@@ -63,7 +63,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. Do not enable this with audio at the same time.
+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/bigseries/1key/1key.c b/keyboards/bigseries/1key/1key.c
new file mode 100755
index 000000000..6036bd999
--- /dev/null
+++ b/keyboards/bigseries/1key/1key.c
@@ -0,0 +1,26 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "1key.h"
+
+void matrix_scan_kb(void) {
+ // Looping keyboard code goes here
+ // This runs every cycle (a lot)
+ matrix_scan_user();
+#ifdef BACKLIGHT_ENABLE
+ backlight_task();
+#endif
+};
diff --git a/keyboards/bigseries/bigseries.h b/keyboards/bigseries/1key/1key.h
index 344140779..344140779 100755
--- a/keyboards/bigseries/bigseries.h
+++ b/keyboards/bigseries/1key/1key.h
diff --git a/keyboards/bigseries/1key/config.h b/keyboards/bigseries/1key/config.h
new file mode 100755
index 000000000..966f2062c
--- /dev/null
+++ b/keyboards/bigseries/1key/config.h
@@ -0,0 +1,60 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6071
+#define DEVICE_VER 0x0002
+#define MANUFACTURER WoodKeys.click
+#define PRODUCT BigSeries Single Keyboard
+#define DESCRIPTION Single key board for Novelkeys Big Series Switch
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 1
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0 }
+#define MATRIX_COL_PINS { B4 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 50
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ false \
+)
+
+#ifdef RGBLIGHT_ENABLE
+#define RGB_DI_PIN D3
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 5
+#ifdef RGBLIGHT_LIMIT_VAL
+#undef RGBLIGHT_LIMIT_VAL
+#endif
+#define RGBLIGHT_LIMIT_VAL 128
+#endif
+
+#endif
diff --git a/keyboards/bigseries/info.json b/keyboards/bigseries/1key/info.json
index ff2fd54c5..ff2fd54c5 100644
--- a/keyboards/bigseries/info.json
+++ b/keyboards/bigseries/1key/info.json
diff --git a/keyboards/bigseries/keymaps/8ball/keymap.c b/keyboards/bigseries/1key/keymaps/8ball/keymap.c
index 1097eb94a..1097eb94a 100755
--- a/keyboards/bigseries/keymaps/8ball/keymap.c
+++ b/keyboards/bigseries/1key/keymaps/8ball/keymap.c
diff --git a/keyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c b/keyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c
new file mode 100755
index 000000000..eb2d23682
--- /dev/null
+++ b/keyboards/bigseries/1key/keymaps/ctrl-alt-del/keymap.c
@@ -0,0 +1,91 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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(
+ LCTL(LALT(KC_DEL))
+ ),
+
+
+};
+
+
+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");
+ // Disable to set a known state
+ rgblight_disable();
+ rgblight_init();
+ // None of the subsequent operations take effect if not enabled
+ rgblight_enable();
+ rgblight_sethsv(0,0,255);
+ rgblight_mode(7);
+ initialized = 1;
+ }
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ }
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/bigseries/keymaps/default/keymap.c b/keyboards/bigseries/1key/keymaps/default/keymap.c
index 7ce837357..7ce837357 100755
--- a/keyboards/bigseries/keymaps/default/keymap.c
+++ b/keyboards/bigseries/1key/keymaps/default/keymap.c
diff --git a/keyboards/bigseries/keymaps/dudeofawesome/README.md b/keyboards/bigseries/1key/keymaps/dudeofawesome/README.md
index 86b79b462..86b79b462 100644
--- a/keyboards/bigseries/keymaps/dudeofawesome/README.md
+++ b/keyboards/bigseries/1key/keymaps/dudeofawesome/README.md
diff --git a/keyboards/bigseries/keymaps/dudeofawesome/config.h b/keyboards/bigseries/1key/keymaps/dudeofawesome/config.h
index 30b86224c..30b86224c 100644
--- a/keyboards/bigseries/keymaps/dudeofawesome/config.h
+++ b/keyboards/bigseries/1key/keymaps/dudeofawesome/config.h
diff --git a/keyboards/bigseries/keymaps/dudeofawesome/keymap.c b/keyboards/bigseries/1key/keymaps/dudeofawesome/keymap.c
index 4c3739bbe..4c3739bbe 100755
--- a/keyboards/bigseries/keymaps/dudeofawesome/keymap.c
+++ b/keyboards/bigseries/1key/keymaps/dudeofawesome/keymap.c
diff --git a/keyboards/bigseries/keymaps/dudeofawesome/rules.mk b/keyboards/bigseries/1key/keymaps/dudeofawesome/rules.mk
index e5ddcae8d..e5ddcae8d 100644
--- a/keyboards/bigseries/keymaps/dudeofawesome/rules.mk
+++ b/keyboards/bigseries/1key/keymaps/dudeofawesome/rules.mk
diff --git a/keyboards/bigseries/keymaps/leddance/config.h b/keyboards/bigseries/1key/keymaps/leddance/config.h
index 57398fb99..57398fb99 100644
--- a/keyboards/bigseries/keymaps/leddance/config.h
+++ b/keyboards/bigseries/1key/keymaps/leddance/config.h
diff --git a/keyboards/bigseries/keymaps/leddance/keymap.c b/keyboards/bigseries/1key/keymaps/leddance/keymap.c
index 3cd8f1db7..3cd8f1db7 100755
--- a/keyboards/bigseries/keymaps/leddance/keymap.c
+++ b/keyboards/bigseries/1key/keymaps/leddance/keymap.c
diff --git a/keyboards/bigseries/keymaps/leddance/rules.mk b/keyboards/bigseries/1key/keymaps/leddance/rules.mk
index 1ba2fa8fb..1ba2fa8fb 100644
--- a/keyboards/bigseries/keymaps/leddance/rules.mk
+++ b/keyboards/bigseries/1key/keymaps/leddance/rules.mk
diff --git a/keyboards/bigseries/1key/keymaps/lock/keymap.c b/keyboards/bigseries/1key/keymaps/lock/keymap.c
new file mode 100755
index 000000000..3d3b002b0
--- /dev/null
+++ b/keyboards/bigseries/1key/keymaps/lock/keymap.c
@@ -0,0 +1,88 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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(
+ LGUI(KC_L)),
+
+
+};
+
+
+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");
+ // Disable to set a known state
+ rgblight_disable();
+ rgblight_init();
+ // None of the subsequent operations take effect if not enabled
+ rgblight_enable();
+ rgblight_sethsv(0,0,255);
+ rgblight_mode(7);
+ initialized = 1;
+ }
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/bigseries/1key/keymaps/tester/keymap.c b/keyboards/bigseries/1key/keymaps/tester/keymap.c
new file mode 100755
index 000000000..31553cef7
--- /dev/null
+++ b/keyboards/bigseries/1key/keymaps/tester/keymap.c
@@ -0,0 +1,96 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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(
+ KC_A),
+
+
+};
+
+
+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");
+ // Disable to set a known state
+ rgblight_disable();
+ rgblight_init();
+ // None of the subsequent operations take effect if not enabled
+ rgblight_enable();
+ rgblight_sethsv(0,0,255);
+ rgblight_mode(35);
+ initialized = 1;
+ }
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_A:
+ if (record->event.pressed) {
+ SEND_STRING("Howdy!!\n");
+ rgblight_step();
+ return false;
+ }
+ }
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/bigseries/1key/readme.md b/keyboards/bigseries/1key/readme.md
new file mode 100644
index 000000000..ad3ee28b1
--- /dev/null
+++ b/keyboards/bigseries/1key/readme.md
@@ -0,0 +1,15 @@
+# Big Series Keyboard
+
+![Big Series 1-Key](https://woodkeys.click/wp-content/uploads/2017/12/woodkeys_419.jpg)
+
+A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
+
+Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
+Hardware Supported: Big Series PCBs
+Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bigseries/1key:default
+
+See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/1key/rules.mk b/keyboards/bigseries/1key/rules.mk
new file mode 100755
index 000000000..772d56beb
--- /dev/null
+++ b/keyboards/bigseries/1key/rules.mk
@@ -0,0 +1 @@
+# Dummy file to make the QMK build system happy \ No newline at end of file
diff --git a/keyboards/bigseries/2key/2key.c b/keyboards/bigseries/2key/2key.c
new file mode 100755
index 000000000..cffb71907
--- /dev/null
+++ b/keyboards/bigseries/2key/2key.c
@@ -0,0 +1,26 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "2key.h"
+
+void matrix_scan_kb(void) {
+ // Looping keyboard code goes here
+ // This runs every cycle (a lot)
+ matrix_scan_user();
+#ifdef BACKLIGHT_ENABLE
+ backlight_task();
+#endif
+};
diff --git a/keyboards/bigseries/2key/2key.h b/keyboards/bigseries/2key/2key.h
new file mode 100755
index 000000000..dcbf2f764
--- /dev/null
+++ b/keyboards/bigseries/2key/2key.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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 BIGSWITCH_H
+#define BIGSWITCH_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01 \
+) { \
+ { K00, K01 } \
+}
+
+#endif
diff --git a/keyboards/bigseries/2key/config.h b/keyboards/bigseries/2key/config.h
new file mode 100755
index 000000000..79b9ed378
--- /dev/null
+++ b/keyboards/bigseries/2key/config.h
@@ -0,0 +1,60 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6071
+#define DEVICE_VER 0x0002
+#define MANUFACTURER WoodKeys.click
+#define PRODUCT BigSeries Single Keyboard
+#define DESCRIPTION Single key board for Novelkeys Big Series Switch
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 2
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0 }
+#define MATRIX_COL_PINS { B4, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 50
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ false \
+)
+
+#ifdef RGBLIGHT_ENABLE
+#define RGB_DI_PIN D3
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8
+#ifdef RGBLIGHT_LIMIT_VAL
+#undef RGBLIGHT_LIMIT_VAL
+#endif
+#define RGBLIGHT_LIMIT_VAL 128
+#endif
+
+#endif
diff --git a/keyboards/bigseries/2key/info.json b/keyboards/bigseries/2key/info.json
new file mode 100644
index 000000000..2aea4d200
--- /dev/null
+++ b/keyboards/bigseries/2key/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Big Series 2-Key",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 8,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0, "w":4, "h":4}, {"x":4, "y":0, "w":4, "h":4}]
+ }
+ }
+}
diff --git a/keyboards/bigseries/2key/keymaps/default/keymap.c b/keyboards/bigseries/2key/keymaps/default/keymap.c
new file mode 100755
index 000000000..704649632
--- /dev/null
+++ b/keyboards/bigseries/2key/keymaps/default/keymap.c
@@ -0,0 +1,87 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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(
+ KC_Z, KC_X),
+
+
+};
+
+
+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
+ rgblight_disable();
+ rgblight_init();
+ // None of the subsequent operations take effect if not enabled
+ rgblight_enable();
+ rgblight_sethsv(0,0,255);
+ rgblight_mode(35);
+ initialized = 1;
+ }
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/bigseries/2key/keymaps/lock/keymap.c b/keyboards/bigseries/2key/keymaps/lock/keymap.c
new file mode 100755
index 000000000..55a9240f3
--- /dev/null
+++ b/keyboards/bigseries/2key/keymaps/lock/keymap.c
@@ -0,0 +1,89 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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(
+ LGUI(KC_L), LCTL(LALT(KC_DEL))
+ ),
+
+
+};
+
+
+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");
+ // Disable to set a known state
+ rgblight_disable();
+ rgblight_init();
+ // None of the subsequent operations take effect if not enabled
+ rgblight_enable();
+ rgblight_sethsv(0,0,255);
+ rgblight_mode(7);
+ initialized = 1;
+ }
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/bigseries/2key/keymaps/tester/keymap.c b/keyboards/bigseries/2key/keymaps/tester/keymap.c
new file mode 100755
index 000000000..5b574824d
--- /dev/null
+++ b/keyboards/bigseries/2key/keymaps/tester/keymap.c
@@ -0,0 +1,88 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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(
+ KC_A, KC_B),
+
+
+};
+
+
+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");
+ // Disable to set a known state
+ rgblight_disable();
+ rgblight_init();
+ // None of the subsequent operations take effect if not enabled
+ rgblight_enable();
+ rgblight_sethsv(0,0,255);
+ rgblight_mode(35);
+ initialized = 1;
+ }
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/bigseries/2key/readme.md b/keyboards/bigseries/2key/readme.md
new file mode 100644
index 000000000..e88243301
--- /dev/null
+++ b/keyboards/bigseries/2key/readme.md
@@ -0,0 +1,15 @@
+# Big Series Keyboard
+
+![Big Series 2-Key](https://woodkeys.click/wp-content/uploads/2018/04/BigSeries_2u_Case_2018-Apr-03_08-45-05PM-000_CustomizedView8990071229.png)
+
+A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
+
+Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
+Hardware Supported: Big Series PCBs
+Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bigseries/2key:default
+
+See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/2key/rules.mk b/keyboards/bigseries/2key/rules.mk
new file mode 100755
index 000000000..772d56beb
--- /dev/null
+++ b/keyboards/bigseries/2key/rules.mk
@@ -0,0 +1 @@
+# Dummy file to make the QMK build system happy \ No newline at end of file
diff --git a/keyboards/bigseries/3key/3key.c b/keyboards/bigseries/3key/3key.c
new file mode 100755
index 000000000..3735c1054
--- /dev/null
+++ b/keyboards/bigseries/3key/3key.c
@@ -0,0 +1,26 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "3key.h"
+
+void matrix_scan_kb(void) {
+ // Looping keyboard code goes here
+ // This runs every cycle (a lot)
+ matrix_scan_user();
+#ifdef BACKLIGHT_ENABLE
+ backlight_task();
+#endif
+};
diff --git a/keyboards/bigseries/3key/3key.h b/keyboards/bigseries/3key/3key.h
new file mode 100755
index 000000000..6aa843c26
--- /dev/null
+++ b/keyboards/bigseries/3key/3key.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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 BIGSWITCH_H
+#define BIGSWITCH_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02 \
+) { \
+ { K00, K01, K02 } \
+}
+
+#endif
diff --git a/keyboards/bigseries/3key/config.h b/keyboards/bigseries/3key/config.h
new file mode 100755
index 000000000..9963a8219
--- /dev/null
+++ b/keyboards/bigseries/3key/config.h
@@ -0,0 +1,60 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6073
+#define DEVICE_VER 0x0001
+#define MANUFACTURER WoodKeys.click
+#define PRODUCT BigSeries Triple Keyboard
+#define DESCRIPTION Triple key board for Novelkeys Big Series Switch
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 3
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0 }
+#define MATRIX_COL_PINS { B4, B3, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 50
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ false \
+)
+
+#ifdef RGBLIGHT_ENABLE
+#define RGB_DI_PIN D3
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 11
+#ifdef RGBLIGHT_LIMIT_VAL
+#undef RGBLIGHT_LIMIT_VAL
+#endif
+#define RGBLIGHT_LIMIT_VAL 128
+#endif
+
+#endif
diff --git a/keyboards/bigseries/3key/info.json b/keyboards/bigseries/3key/info.json
new file mode 100644
index 000000000..8f0b8c55c
--- /dev/null
+++ b/keyboards/bigseries/3key/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Big Series 3-Key",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0, "w":4, "h":4}, {"x":4, "y":0, "w":4, "h":4}, {"x":8, "y":0, "w":4, "h":4}]
+ }
+ }
+}
diff --git a/keyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c b/keyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c
new file mode 100755
index 000000000..8e5b10db8
--- /dev/null
+++ b/keyboards/bigseries/3key/keymaps/ctrl-alt-del/keymap.c
@@ -0,0 +1,91 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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(
+ KC_LCTL, KC_LALT, KC_DEL
+ ),
+
+
+};
+
+
+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");
+ // Disable to set a known state
+ rgblight_disable();
+ rgblight_init();
+ // None of the subsequent operations take effect if not enabled
+ rgblight_enable();
+ rgblight_sethsv(0,0,255);
+ rgblight_mode(7);
+ initialized = 1;
+ }
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ }
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/bigseries/3key/keymaps/default/keymap.c b/keyboards/bigseries/3key/keymaps/default/keymap.c
new file mode 100755
index 000000000..6f0ffc9e1
--- /dev/null
+++ b/keyboards/bigseries/3key/keymaps/default/keymap.c
@@ -0,0 +1,95 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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(
+ KC_A, KC_B, KC_C
+ ),
+};
+
+
+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");
+ // Disable to set a known state
+ rgblight_disable();
+ rgblight_init();
+ // None of the subsequent operations take effect if not enabled
+ rgblight_enable();
+ rgblight_sethsv(0,0,255);
+ rgblight_mode(7);
+ initialized = 1;
+ }
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_A:
+ if (record->event.pressed) {
+ SEND_STRING("Howdy!!\n");
+ rgblight_step();
+ return false;
+ }
+ }
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/bigseries/3key/keymaps/tester/keymap.c b/keyboards/bigseries/3key/keymaps/tester/keymap.c
new file mode 100755
index 000000000..896a781fc
--- /dev/null
+++ b/keyboards/bigseries/3key/keymaps/tester/keymap.c
@@ -0,0 +1,88 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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(
+ KC_1, KC_2, KC_3),
+
+
+};
+
+
+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");
+ // Disable to set a known state
+ rgblight_disable();
+ rgblight_init();
+ // None of the subsequent operations take effect if not enabled
+ rgblight_enable();
+ rgblight_sethsv(0,0,255);
+ rgblight_mode(35);
+ initialized = 1;
+ }
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/bigseries/3key/readme.md b/keyboards/bigseries/3key/readme.md
new file mode 100644
index 000000000..d32ec486a
--- /dev/null
+++ b/keyboards/bigseries/3key/readme.md
@@ -0,0 +1,15 @@
+# Big Series Keyboard
+
+![Big Series 3-Key](https://woodkeys.click/wp-content/uploads/2018/04/BigSeries_3u_Case_2018-Apr-03_07-03-31PM-000_CustomizedView20086357020.png)
+
+A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
+
+Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
+Hardware Supported: Big Series PCBs
+Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bigseries/3key:default
+
+See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/3key/rules.mk b/keyboards/bigseries/3key/rules.mk
new file mode 100755
index 000000000..772d56beb
--- /dev/null
+++ b/keyboards/bigseries/3key/rules.mk
@@ -0,0 +1 @@
+# Dummy file to make the QMK build system happy \ No newline at end of file
diff --git a/keyboards/bigseries/4key/4key.c b/keyboards/bigseries/4key/4key.c
new file mode 100755
index 000000000..891f11bbb
--- /dev/null
+++ b/keyboards/bigseries/4key/4key.c
@@ -0,0 +1,23 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "4key.h"
+
+void matrix_scan_kb(void) {
+ // Looping keyboard code goes here
+ // This runs every cycle (a lot)
+ matrix_scan_user();
+};
diff --git a/keyboards/bigseries/4key/4key.h b/keyboards/bigseries/4key/4key.h
new file mode 100755
index 000000000..21373fded
--- /dev/null
+++ b/keyboards/bigseries/4key/4key.h
@@ -0,0 +1,30 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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 BIGSWITCH_H
+#define BIGSWITCH_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, \
+ K10, K11 \
+) { \
+ { K00, K01 }, \
+ { K10, K11 } \
+}
+
+#endif
diff --git a/keyboards/bigseries/4key/config.h b/keyboards/bigseries/4key/config.h
new file mode 100755
index 000000000..a222512d3
--- /dev/null
+++ b/keyboards/bigseries/4key/config.h
@@ -0,0 +1,60 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6074
+#define DEVICE_VER 0x0002
+#define MANUFACTURER WoodKeys.click
+#define PRODUCT BigSeries Quad Keyboard
+#define DESCRIPTION 4-key board for Novelkeys Big Series Switch
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#define MATRIX_COLS 2
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0, B5 }
+#define MATRIX_COL_PINS { B4, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 50
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ false \
+)
+
+#ifdef RGBLIGHT_ENABLE
+#define RGB_DI_PIN D3
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#ifdef RGBLIGHT_LIMIT_VAL
+#undef RGBLIGHT_LIMIT_VAL
+#endif
+#define RGBLIGHT_LIMIT_VAL 128
+#endif
+
+#endif
diff --git a/keyboards/bigseries/4key/info.json b/keyboards/bigseries/4key/info.json
new file mode 100644
index 000000000..0bdee578a
--- /dev/null
+++ b/keyboards/bigseries/4key/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Big Series 4-Key",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 8,
+ "height": 8,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0, "w":4, "h":4}, {"x":4, "y":0, "w":4, "h":4}, {"x":0, "y":4, "w":4, "h":4}, {"x":4, "y":4, "w":4, "h":4}]
+ }
+ }
+}
diff --git a/keyboards/bigseries/4key/keymaps/default/keymap.c b/keyboards/bigseries/4key/keymaps/default/keymap.c
new file mode 100755
index 000000000..1c65f44b0
--- /dev/null
+++ b/keyboards/bigseries/4key/keymaps/default/keymap.c
@@ -0,0 +1,89 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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(
+ KC_HOME, KC_PGUP,
+ KC_END, KC_PGDN),
+
+
+};
+
+
+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");
+ rgblight_enable();
+ rgblight_mode(7);
+ rgblight_sethsv(0,255,255);
+ rgblight_setrgb(0x00, 0x00, 0xFF);
+ initialized = 1;
+ }
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ rgblight_step();
+ }
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/bigseries/4key/keymaps/tester/keymap.c b/keyboards/bigseries/4key/keymaps/tester/keymap.c
new file mode 100755
index 000000000..5d5fe0d38
--- /dev/null
+++ b/keyboards/bigseries/4key/keymaps/tester/keymap.c
@@ -0,0 +1,88 @@
+/*
+Copyright 2018 Cole Markham
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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(
+ KC_A, KC_B, KC_C, KC_D),
+
+
+};
+
+
+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");
+ // Disable to set a known state
+ rgblight_disable();
+ rgblight_init();
+ // None of the subsequent operations take effect if not enabled
+ rgblight_enable();
+ rgblight_sethsv(0,0,255);
+ rgblight_mode(35);
+ initialized = 1;
+ }
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/bigseries/4key/readme.md b/keyboards/bigseries/4key/readme.md
new file mode 100644
index 000000000..ec40e83f2
--- /dev/null
+++ b/keyboards/bigseries/4key/readme.md
@@ -0,0 +1,15 @@
+# Big Series Keyboard
+
+![Big Series 4-Key](https://woodkeys.click/wp-content/uploads/2017/09/BigSeries_4u_with_keys_2018-Apr-01_04-54-09AM-000_CustomizedView38438685666_png.png)
+
+A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
+
+Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
+Hardware Supported: Big Series PCBs
+Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bigseries/4key:default
+
+See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/4key/rules.mk b/keyboards/bigseries/4key/rules.mk
new file mode 100755
index 000000000..772d56beb
--- /dev/null
+++ b/keyboards/bigseries/4key/rules.mk
@@ -0,0 +1 @@
+# Dummy file to make the QMK build system happy \ No newline at end of file
diff --git a/keyboards/bigseries/bigseries.c b/keyboards/bigseries/bigseries.c
deleted file mode 100755
index 0ef84478b..000000000
--- a/keyboards/bigseries/bigseries.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-Copyright 2018 Cole Markham
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#include "bigseries.h"
-
-void matrix_scan_kb(void) {
- // Looping keyboard code goes here
- // This runs every cycle (a lot)
- matrix_scan_user();
-#ifdef BACKLIGHT_ENABLE
- backlight_task();
-#endif
-};
diff --git a/keyboards/bigseries/config.h b/keyboards/bigseries/config.h
deleted file mode 100755
index 3c401f563..000000000
--- a/keyboards/bigseries/config.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-Copyright 2018 Cole Markham
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-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
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6071
-#define DEVICE_VER 0x0002
-#define MANUFACTURER WoodKeys.click
-#define PRODUCT BigSeries Single Keyboard
-#define DESCRIPTION Single key board for Novelkeys Big Series Switch
-
-/* key matrix size */
-#define MATRIX_ROWS 1
-#define MATRIX_COLS 1
-
-/* key matrix pins */
-#define MATRIX_ROW_PINS { B0 }
-#define MATRIX_COL_PINS { B4 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION ROW2COL
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 50
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- false \
-)
-
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-#ifdef RGBLIGHT_ENABLE
-#define RGB_DI_PIN D3
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 5
-#endif
-
-#endif
diff --git a/keyboards/bigseries/readme.md b/keyboards/bigseries/readme.md
index 528df0de0..0b4066735 100644
--- a/keyboards/bigseries/readme.md
+++ b/keyboards/bigseries/readme.md
@@ -1,15 +1,16 @@
-# Big Series Keyboard
+# Big Series Keyboards
-![Big Series 1-Key](https://woodkeys.click/wp-content/uploads/2017/12/woodkeys_419.jpg)
+![Big Series Keyboards](https://woodkeys.click/wp-content/uploads/2017/12/woodkeys_419.jpg)
-A PCB for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
+The is the parent folder for all PCBs made by [Woodkeys](https://woodkeys.click) for the Big Series Switch by [NovelKeys](https://novelkeys.xyz). Available in 1, 2, 3, and 4 switch versions from [Woodkeys.click](https://woodkeys.click/product-category/big-series/).
Keyboard Maintainer: [Cole Markham](https://github.com/colemarkham) / [Woodkeys.click](https://woodkeys.click)
Hardware Supported: Big Series PCBs
Hardware Availability: [Woodkeys.click](https://woodkeys.click), [NovelKeys](https://novelkeys.xyz)
-Make example for this keyboard (after setting up your build environment):
+Make example for these keyboards (after setting up your build environment):
- make bigseries:default
+ make bigseries/1key:default
+ make bigseries/3key:ctrl-alt-del
See [build environment setup](https://docs.qmk.fm/install-build-tools) then the [make instructions](https://docs.qmk.fm/build-compile-instructions) for more information.
diff --git a/keyboards/bigseries/rules.mk b/keyboards/bigseries/rules.mk
index 4cac07f72..c862f0b25 100755
--- a/keyboards/bigseries/rules.mk
+++ b/keyboards/bigseries/rules.mk
@@ -1,5 +1,3 @@
-#SRC += rgb_backlight.c
-
# MCU name
MCU = atmega32u2
diff --git a/keyboards/bigswitch/bigswitch.c b/keyboards/bigswitch/bigswitch.c
index dfd9710e2..32f9f7fab 100644
--- a/keyboards/bigswitch/bigswitch.c
+++ b/keyboards/bigswitch/bigswitch.c
@@ -19,15 +19,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
volatile uint8_t runonce = true;
static uint16_t my_timer;
+__attribute__ ((weak))
void matrix_init_user(void) {
my_timer = timer_read();
}
+__attribute__ ((weak))
void matrix_scan_user(void) {
+#if defined(RGBLIGHT_ENABLE)
if (runonce && timer_elapsed(my_timer) > 1000) {
runonce = false;
rgblight_sethsv_noeeprom(0x0, 0xff, 0x80);
rgblight_mode_noeeprom(9);
rgblight_enable_noeeprom();
}
+#endif
}
diff --git a/keyboards/bigswitch/config.h b/keyboards/bigswitch/config.h
index cc290fd79..a0ef6b555 100755
--- a/keyboards/bigswitch/config.h
+++ b/keyboards/bigswitch/config.h
@@ -47,8 +47,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
false \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
#ifdef RGBLIGHT_ENABLE
#define RGB_DI_PIN D3
diff --git a/keyboards/bigswitch/keymaps/333fred/config.h b/keyboards/bigswitch/keymaps/333fred/config.h
new file mode 100644
index 000000000..76f13f08b
--- /dev/null
+++ b/keyboards/bigswitch/keymaps/333fred/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2018 Fredric Silberberg (333fred)
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+// Long tapping term on the big switch, because it takes so long to press
+#define TAPPING_TERM 500
diff --git a/keyboards/bigswitch/keymaps/333fred/keymap.c b/keyboards/bigswitch/keymaps/333fred/keymap.c
new file mode 100644
index 000000000..be40fecb2
--- /dev/null
+++ b/keyboards/bigswitch/keymaps/333fred/keymap.c
@@ -0,0 +1,123 @@
+#include QMK_KEYBOARD_H
+
+typedef enum {
+ SINGLE_TAP, SINGLE_HOLD, DOUBLE, TRIPLE, QUAD
+} tap_dance_state_enum;
+
+enum {
+ TD_KEY = 0
+};
+
+static tap_dance_state_enum tap_dance_state;
+static bool tap_dance_active = false;
+static uint16_t timer;
+
+void dance_cycle(bool override_timer) {
+ if (tap_dance_active)
+ {
+ if (timer_elapsed(timer) > 100 || override_timer)
+ {
+ switch (tap_dance_state)
+ {
+ case SINGLE_HOLD:
+ {
+ rgblight_increase_hue_noeeprom();
+ break;
+ }
+
+ case DOUBLE:
+ {
+ rgblight_step_noeeprom();
+ break;
+ }
+
+ case TRIPLE:
+ {
+ rgblight_toggle_noeeprom();
+ break;
+ }
+
+ default:
+ // Not needed
+ break;
+ }
+
+ timer = timer_read();
+ }
+ }
+}
+
+void dance_finished(qk_tap_dance_state_t *state, void* user_data) {
+ // Determine the current state
+ switch (state->count)
+ {
+ case 1:
+ {
+ if (state->interrupted || state->pressed == 0) tap_dance_state = SINGLE_TAP;
+ else tap_dance_state = SINGLE_HOLD;
+ break;
+ }
+ case 2:
+ {
+ tap_dance_state = DOUBLE;
+ break;
+ }
+ case 3:
+ {
+ tap_dance_state = TRIPLE;
+ break;
+ }
+ default:
+ {
+ tap_dance_state = QUAD;
+ break;
+ }
+ }
+
+ switch (tap_dance_state)
+ {
+ case SINGLE_TAP:
+ {
+ // VS Build: CTRL+SHIFT+B
+ send_string_with_delay_P(PSTR(SS_DOWN(X_LCTRL) SS_DOWN(X_LSHIFT) "b" SS_UP(X_LSHIFT) SS_UP(X_LCTRL)), 10);
+ tap_dance_active = false;
+ break;
+ }
+
+ case SINGLE_HOLD:
+ case DOUBLE:
+ case TRIPLE:
+ {
+ // These are handled by the matrix_scan, which will register the appropriate rgb
+ // functions every scan
+ tap_dance_active = true;
+ timer = timer_read();
+ dance_cycle(true);
+ break;
+ }
+
+ case QUAD:
+ {
+ // Reprogram
+ reset_keyboard();
+ break;
+ }
+ }
+}
+
+void dance_reset(qk_tap_dance_state_t *state, void* user_data)
+{
+ tap_dance_active = false;
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_KEY] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_finished, dance_reset)
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(TD(TD_KEY))
+};
+
+void matrix_scan_user(void) {
+ dance_cycle(false);
+}
diff --git a/keyboards/bigswitch/keymaps/333fred/rules.mk b/keyboards/bigswitch/keymaps/333fred/rules.mk
new file mode 100644
index 000000000..20aaadacb
--- /dev/null
+++ b/keyboards/bigswitch/keymaps/333fred/rules.mk
@@ -0,0 +1,5 @@
+# I'm not using things from my userpace in this one
+USER_NAME = disable
+
+RGBLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/bigswitch/keymaps/wanleg/config.h b/keyboards/bigswitch/keymaps/wanleg/config.h
new file mode 100644
index 000000000..8ac82f40d
--- /dev/null
+++ b/keyboards/bigswitch/keymaps/wanleg/config.h
@@ -0,0 +1,42 @@
+/* Copyright 2018 wanleg
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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
+#undef MATRIX_ROW_PINS
+#define MATRIX_ROW_PINS { B4 }
+#undef MATRIX_COL_PINS
+#define MATRIX_COL_PINS { B6 }
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#undef DIODE_DIRECTION
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+#define BREATHING_PERIOD 5
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#undef DEBOUNCING_DELAY
+#define DEBOUNCING_DELAY 5
+
+// set flashing LED with QMK DFU
+#define QMK_LED B0
+
+// set audio pin
+#define C6_AUDIO
diff --git a/keyboards/bigswitch/keymaps/wanleg/keymap.c b/keyboards/bigswitch/keymaps/wanleg/keymap.c
new file mode 100644
index 000000000..76d0808fd
--- /dev/null
+++ b/keyboards/bigswitch/keymaps/wanleg/keymap.c
@@ -0,0 +1,26 @@
+/* Copyright 2018 wanleg
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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 "wanleg.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+TD(CAD_TD) \
+),
+[1] = LAYOUT( /*Secondary*/
+TD(BSW_TAP_DANCE) \
+),
+}; \ No newline at end of file
diff --git a/keyboards/bigswitch/keymaps/wanleg/rules.mk b/keyboards/bigswitch/keymaps/wanleg/rules.mk
new file mode 100644
index 000000000..a6c7d1d3f
--- /dev/null
+++ b/keyboards/bigswitch/keymaps/wanleg/rules.mk
@@ -0,0 +1,16 @@
+#If using a ProMicro and it has the QMK DFU bootloader instead of Caterina,
+#run "make <keyboard>:<keymap> dfu=qmk" when compiling to ensure it is flagged properly after being flashed
+ifeq ($(strip $(dfu)), qmk)
+ BOOTLOADER = qmk-dfu
+endif
+
+AUDIO_ENABLE = yes # Audio output on port C6
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+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
+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
diff --git a/keyboards/blockey/blockey.h b/keyboards/blockey/blockey.h
new file mode 100644
index 000000000..fa7624be7
--- /dev/null
+++ b/keyboards/blockey/blockey.h
@@ -0,0 +1,48 @@
+/* Copyright 2018 Eucalyn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 BLOCKEY_H
+#define BLOCKEY_H
+
+#include "quantum.h"
+
+// readability
+#define XXX KC_NO
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#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 \
+) \
+{ \
+ { k01, k02, k03, k04, k05, k06, k07 }, \
+ { k15, k16, k17, k18, k19, k20, k21 }, \
+ { k29, k30, k31, k32, k33, k34, k35 }, \
+ { k42, k43, k44, k45, k46, k47, k48 }, \
+ { k55, k56, k57, k58, XXX, XXX, k59 }, \
+ { k08, k09, k10, k11, k12, k13, k14 }, \
+ { k22, k23, k24, k25, k26, k27, k28 }, \
+ { k36, k37, k38, k39, k40, k41, XXX }, \
+ { k49, k50, k51, k52, k53, k54, XXX }, \
+ { XXX, XXX, XXX, k60, k61, k62, XXX }, \
+}
+
+#endif
diff --git a/keyboards/blockey/config.h b/keyboards/blockey/config.h
new file mode 100644
index 000000000..53860bfbc
--- /dev/null
+++ b/keyboards/blockey/config.h
@@ -0,0 +1,196 @@
+/*
+Copyright 2018 Eucalyn
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Eucalyn
+#define PRODUCT Blockey
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 7
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D3, D1, D4, E6, B5, D2, F6, B3, B2, B6 }
+#define MATRIX_COL_PINS { D0, B4, C6, D7, F4, F5, F7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN B1
+
+#define RGBLED_NUM 4
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#define RGBLIGHT_ANIMATIONS
+
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+#endif
diff --git a/keyboards/blockey/info.json b/keyboards/blockey/info.json
new file mode 100644
index 000000000..618048972
--- /dev/null
+++ b/keyboards/blockey/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "BlocKey",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 14.16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"`", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"label":"Back Space", "x":13, "y":0}, {"label":"Tab", "x":0.16, "y":1}, {"label":"Q", "x":1.16, "y":1}, {"label":"W", "x":2.16, "y":1}, {"label":"E", "x":3.16, "y":1}, {"label":"R", "x":4.16, "y":1}, {"label":"T", "x":5.16, "y":1}, {"label":"Y", "x":6.16, "y":1}, {"label":"U", "x":7.16, "y":1}, {"label":"I", "x":8.16, "y":1}, {"label":"O", "x":9.16, "y":1}, {"label":"P", "x":10.16, "y":1}, {"label":"[", "x":11.16, "y":1}, {"label":"]", "x":12.16, "y":1}, {"label":"\\", "x":13.16, "y":1}, {"label":"LCtrl", "x":0.33, "y":2}, {"label":"A", "x":1.33, "y":2}, {"label":"S", "x":2.33, "y":2}, {"label":"D", "x":3.33, "y":2}, {"label":"F", "x":4.33, "y":2}, {"label":"G", "x":5.33, "y":2}, {"label":"H", "x":6.33, "y":2}, {"label":"J", "x":7.33, "y":2}, {"label":"K", "x":8.33, "y":2}, {"label":"L", "x":9.33, "y":2}, {"label":";", "x":10.33, "y":2}, {"label":"\"", "x":11.33, "y":2}, {"label":"Enter", "x":12.66, "y":2}, {"label":"LShift", "x":0.5, "y":3}, {"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":"Up", "x":11.5, "y":3}, {"label":"Fn", "x":12.83, "y":3}, {"label":"Esc", "x":0, "y":4}, {"label":"Caps Lock", "x":1, "y":4}, {"label":"LAlt", "x":2, "y":4}, {"label":"LGUI", "x":3, "y":4}, {"label":"Space", "x":4, "y":4, "w":6}, {"label":"Left", "x":10.5, "y":4}, {"label":"Down", "x":11.5, "y":4}, {"label":"Right", "x":12.5, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/blockey/keymaps/default/keymap.c b/keyboards/blockey/keymaps/default/keymap.c
new file mode 100644
index 000000000..5b1145482
--- /dev/null
+++ b/keyboards/blockey/keymaps/default/keymap.c
@@ -0,0 +1,60 @@
+/* Copyright 2018 Eucalyn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, MO(1), \
+ KC_ESC, KC_CAPS, KC_LALT, KC_LGUI, KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ [1] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, \
+ _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, _______, \
+ _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/blockey/keymaps/eucalyn/keymap.c b/keyboards/blockey/keymaps/eucalyn/keymap.c
new file mode 100644
index 000000000..33d1051a1
--- /dev/null
+++ b/keyboards/blockey/keymaps/eucalyn/keymap.c
@@ -0,0 +1,60 @@
+/* Copyright 2018 Eucalyn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_COMM, KC_DOT, KC_SCLN, KC_M, KC_R, KC_D, KC_Y, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_LCTL, KC_A, KC_O, KC_E, KC_I, KC_U, KC_G, KC_T, KC_K, KC_S, KC_N, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_B, KC_H, KC_J, KC_L, KC_SLSH, KC_UP, MO(1), \
+ KC_ESC, KC_CAPS, KC_LALT, KC_LGUI, KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ [1] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, \
+ _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, _______, \
+ _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/blockey/readme.md b/keyboards/blockey/readme.md
new file mode 100644
index 000000000..24626318f
--- /dev/null
+++ b/keyboards/blockey/readme.md
@@ -0,0 +1,15 @@
+# BlocKey
+
+![BlocKey](https://i.imgur.com/VDdnuHo.jpg)
+
+A small keyboard.
+
+Keyboard Maintainer: [Eucalyn](https://github.com/eucalyn/) [@eucalyn_](https://twitter.com/eucalyn_)
+Hardware Supported: BlocKey PCB, Pro Micro
+Hardware Availability:
+
+Make example for this keyboard (after setting up your build environment):
+
+ make blockey:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/blockey/rules.mk b/keyboards/blockey/rules.mk
new file mode 100644
index 000000000..fb628cfaa
--- /dev/null
+++ b/keyboards/blockey/rules.mk
@@ -0,0 +1,70 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/bmini/bmini.h b/keyboards/bmini/bmini.h
index 9a70f9204..7bdf66fd2 100644
--- a/keyboards/bmini/bmini.h
+++ b/keyboards/bmini/bmini.h
@@ -38,6 +38,24 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
}
+#define LAYOUT_splitbs( \
+ K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, \
+ K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD4, KD0, \
+ K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, \
+ K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KD2, KE0, \
+ K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, \
+ K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96 \
+){ \
+ { K00, K10, K20, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB0, KC0, KD0, KE0 }, \
+ { K01, K11, K21, K31, K41, K51, KC_NO, KC_NO, KC_NO, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \
+ { K02, K12, K22, K32, K42, K52, KC_NO, KC_NO, KC_NO, KC_NO, KA2, KB2, KC_NO, KD2, KE2 }, \
+ { K03, K13, K23, K33, K43, K53, KC_NO, KC_NO, KC_NO, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \
+ { K04, K14, K24, K34, K44, K54, KC_NO, KC_NO, KC_NO, KC_NO, KA4, KB4, KC4, KD4, KE4 }, \
+ { K05, KC_NO, K25, K35, K45, K55, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KB5, KC5, KD5, KE5 }, \
+ { K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \
+ { K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
+}
+
#define LAYOUT_kc( \
K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, \
K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, \
diff --git a/keyboards/bmini/info.json b/keyboards/bmini/info.json
index a047a3ef5..ab4d01c02 100644
--- a/keyboards/bmini/info.json
+++ b/keyboards/bmini/info.json
@@ -8,6 +8,10 @@
"LAYOUT": {
"key_count": 84,
"layout": [{"label":"K05", "x":0, "y":0}, {"label":"K25", "x":1, "y":0}, {"label":"K35", "x":2, "y":0}, {"label":"K45", "x":3, "y":0}, {"label":"K55", "x":4, "y":0}, {"label":"K06", "x":5, "y":0}, {"label":"KA6", "x":6, "y":0}, {"label":"KA7", "x":7, "y":0}, {"label":"K07", "x":8, "y":0}, {"label":"KB5", "x":9, "y":0}, {"label":"KC5", "x":10, "y":0}, {"label":"KD5", "x":11, "y":0}, {"label":"KE5", "x":12, "y":0}, {"label":"KD1", "x":13, "y":0}, {"label":"KE1", "x":14, "y":0}, {"label":"KE2", "x":15, "y":0}, {"label":"K04", "x":0, "y":1}, {"label":"K14", "x":1, "y":1}, {"label":"K24", "x":2, "y":1}, {"label":"K34", "x":3, "y":1}, {"label":"K44", "x":4, "y":1}, {"label":"K54", "x":5, "y":1}, {"label":"K16", "x":6, "y":1}, {"label":"KB6", "x":7, "y":1}, {"label":"KB7", "x":8, "y":1}, {"label":"K17", "x":9, "y":1}, {"label":"KA4", "x":10, "y":1}, {"label":"KB4", "x":11, "y":1}, {"label":"KC4", "x":12, "y":1}, {"label":"KE4", "x":13, "y":1, "w":2}, {"label":"KD0", "x":15, "y":1}, {"label":"K03", "x":0, "y":2, "w":1.5}, {"label":"K13", "x":1.5, "y":2}, {"label":"K23", "x":2.5, "y":2}, {"label":"K33", "x":3.5, "y":2}, {"label":"K43", "x":4.5, "y":2}, {"label":"K53", "x":5.5, "y":2}, {"label":"K26", "x":6.5, "y":2}, {"label":"KC6", "x":7.5, "y":2}, {"label":"KC7", "x":8.5, "y":2}, {"label":"K27", "x":9.5, "y":2}, {"label":"KA3", "x":10.5, "y":2}, {"label":"KB3", "x":11.5, "y":2}, {"label":"KC3", "x":12.5, "y":2}, {"label":"KD3", "x":13.5, "y":2, "w":1.5}, {"label":"K67", "x":15, "y":2}, {"label":"K02", "x":0, "y":3, "w":1.75}, {"label":"K12", "x":1.75, "y":3}, {"label":"K22", "x":2.75, "y":3}, {"label":"K32", "x":3.75, "y":3}, {"label":"K42", "x":4.75, "y":3}, {"label":"K52", "x":5.75, "y":3}, {"label":"K36", "x":6.75, "y":3}, {"label":"KD6", "x":7.75, "y":3}, {"label":"KD7", "x":8.75, "y":3}, {"label":"K37", "x":9.75, "y":3}, {"label":"KA2", "x":10.75, "y":3}, {"label":"KB2", "x":11.75, "y":3}, {"label":"KD2", "x":12.75, "y":3, "w":2.25}, {"label":"KE0", "x":15, "y":3}, {"label":"K01", "x":0, "y":4, "w":2.25}, {"label":"K11", "x":2.25, "y":4}, {"label":"K21", "x":3.25, "y":4}, {"label":"K31", "x":4.25, "y":4}, {"label":"K41", "x":5.25, "y":4}, {"label":"K51", "x":6.25, "y":4}, {"label":"K46", "x":7.25, "y":4}, {"label":"KE6", "x":8.25, "y":4}, {"label":"KE7", "x":9.25, "y":4}, {"label":"K47", "x":10.25, "y":4}, {"label":"KA1", "x":11.25, "y":4}, {"label":"KB1", "x":12.25, "y":4, "w":1.75}, {"label":"K86", "x":14, "y":4}, {"label":"K77", "x":15, "y":4}, {"label":"K00", "x":0, "y":5, "w":1.25}, {"label":"K10", "x":1.25, "y":5, "w":1.25}, {"label":"K20", "x":2.5, "y":5, "w":1.25}, {"label":"K56", "x":3.75, "y":5, "w":6.25}, {"label":"K57", "x":10, "y":5}, {"label":"KB0", "x":11, "y":5}, {"label":"KC0", "x":12, "y":5}, {"label":"K66", "x":13, "y":5}, {"label":"K76", "x":14, "y":5}, {"label":"K96", "x":15, "y":5}]
+ },
+ "LAYOUT_splitbs": {
+ "key_count": 85,
+ "layout": [{"label":"K05", "x":0, "y":0}, {"label":"K25", "x":1, "y":0}, {"label":"K35", "x":2, "y":0}, {"label":"K45", "x":3, "y":0}, {"label":"K55", "x":4, "y":0}, {"label":"K06", "x":5, "y":0}, {"label":"KA6", "x":6, "y":0}, {"label":"KA7", "x":7, "y":0}, {"label":"K07", "x":8, "y":0}, {"label":"KB5", "x":9, "y":0}, {"label":"KC5", "x":10, "y":0}, {"label":"KD5", "x":11, "y":0}, {"label":"KE5", "x":12, "y":0}, {"label":"KD1", "x":13, "y":0}, {"label":"KE1", "x":14, "y":0}, {"label":"KE2", "x":15, "y":0}, {"label":"K04", "x":0, "y":1}, {"label":"K14", "x":1, "y":1}, {"label":"K24", "x":2, "y":1}, {"label":"K34", "x":3, "y":1}, {"label":"K44", "x":4, "y":1}, {"label":"K54", "x":5, "y":1}, {"label":"K16", "x":6, "y":1}, {"label":"KB6", "x":7, "y":1}, {"label":"KB7", "x":8, "y":1}, {"label":"K17", "x":9, "y":1}, {"label":"KA4", "x":10, "y":1}, {"label":"KB4", "x":11, "y":1}, {"label":"KC4", "x":12, "y":1}, {"label":"KE4", "x":13, "y":1}, {"label":"KD4", "x":14, "y":1}, {"label":"KD0", "x":15, "y":1}, {"label":"K03", "x":0, "y":2, "w":1.5}, {"label":"K13", "x":1.5, "y":2}, {"label":"K23", "x":2.5, "y":2}, {"label":"K33", "x":3.5, "y":2}, {"label":"K43", "x":4.5, "y":2}, {"label":"K53", "x":5.5, "y":2}, {"label":"K26", "x":6.5, "y":2}, {"label":"KC6", "x":7.5, "y":2}, {"label":"KC7", "x":8.5, "y":2}, {"label":"K27", "x":9.5, "y":2}, {"label":"KA3", "x":10.5, "y":2}, {"label":"KB3", "x":11.5, "y":2}, {"label":"KC3", "x":12.5, "y":2}, {"label":"KD3", "x":13.5, "y":2, "w":1.5}, {"label":"K67", "x":15, "y":2}, {"label":"K02", "x":0, "y":3, "w":1.75}, {"label":"K12", "x":1.75, "y":3}, {"label":"K22", "x":2.75, "y":3}, {"label":"K32", "x":3.75, "y":3}, {"label":"K42", "x":4.75, "y":3}, {"label":"K52", "x":5.75, "y":3}, {"label":"K36", "x":6.75, "y":3}, {"label":"KD6", "x":7.75, "y":3}, {"label":"KD7", "x":8.75, "y":3}, {"label":"K37", "x":9.75, "y":3}, {"label":"KA2", "x":10.75, "y":3}, {"label":"KB2", "x":11.75, "y":3}, {"label":"KD2", "x":12.75, "y":3, "w":2.25}, {"label":"KE0", "x":15, "y":3}, {"label":"K01", "x":0, "y":4, "w":2.25}, {"label":"K11", "x":2.25, "y":4}, {"label":"K21", "x":3.25, "y":4}, {"label":"K31", "x":4.25, "y":4}, {"label":"K41", "x":5.25, "y":4}, {"label":"K51", "x":6.25, "y":4}, {"label":"K46", "x":7.25, "y":4}, {"label":"KE6", "x":8.25, "y":4}, {"label":"KE7", "x":9.25, "y":4}, {"label":"K47", "x":10.25, "y":4}, {"label":"KA1", "x":11.25, "y":4}, {"label":"KB1", "x":12.25, "y":4, "w":1.75}, {"label":"K86", "x":14, "y":4}, {"label":"K77", "x":15, "y":4}, {"label":"K00", "x":0, "y":5, "w":1.25}, {"label":"K10", "x":1.25, "y":5, "w":1.25}, {"label":"K20", "x":2.5, "y":5, "w":1.25}, {"label":"K56", "x":3.75, "y":5, "w":6.25}, {"label":"K57", "x":10, "y":5}, {"label":"KB0", "x":11, "y":5}, {"label":"KC0", "x":12, "y":5}, {"label":"K66", "x":13, "y":5}, {"label":"K76", "x":14, "y":5}, {"label":"K96", "x":15, "y":5}]
}
}
}
diff --git a/keyboards/bmini/readme.md b/keyboards/bmini/readme.md
index 01017e175..38dc49307 100644
--- a/keyboards/bmini/readme.md
+++ b/keyboards/bmini/readme.md
@@ -11,4 +11,34 @@ Make example for this keyboard (after setting up your build environment):
make bmini:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/bmini/rules.mk b/keyboards/bmini/rules.mk
index 73c361e2a..3d7bc0215 100644
--- a/keyboards/bmini/rules.mk
+++ b/keyboards/bmini/rules.mk
@@ -26,13 +26,13 @@ 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
+# 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 = yes
-MOUSEKEY_ENABLE = yes
+BOOTMAGIC_ENABLE = full
+MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes
CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
diff --git a/keyboards/bminiex/backlight.c b/keyboards/bminiex/backlight.c
new file mode 100644
index 000000000..94e8126d8
--- /dev/null
+++ b/keyboards/bminiex/backlight.c
@@ -0,0 +1,211 @@
+/**
+ * Backlighting code for PS2AVRGB boards (ATMEGA32A)
+ * Kenneth A. (github.com/krusli | krusli.me)
+ */
+
+#include "backlight.h"
+#include "quantum.h"
+
+#include <avr/pgmspace.h>
+#include <avr/interrupt.h>
+
+#include "backlight_custom.h"
+#include "breathing_custom.h"
+
+// DEBUG
+#include <stdlib.h>
+#include <stdio.h>
+
+// Port D: digital pins of the AVR chipset
+#define NUMLOCK_PORT (1 << 0) // D0
+#define CAPSLOCK_PORT (1 << 1) // D1
+#define BACKLIGHT_PORT (1 << 4) // D4
+#define SCROLLLOCK_PORT (1 << 6) // D6
+
+#define TIMER_CLK_DIV64 0x03 ///< Timer clocked at F_CPU/64
+#define TIMER1PRESCALE TIMER_CLK_DIV64 ///< timer 1 prescaler default
+
+#define TIMER_PRESCALE_MASK 0x07 ///< Timer Prescaler Bit-Mask
+
+#define PWM_MAX 0xFF
+#define TIMER_TOP 255 // 8 bit PWM
+
+extern backlight_config_t backlight_config;
+
+/**
+ * References
+ * Port Registers: https://www.arduino.cc/en/Reference/PortManipulation
+ * TCCR1A: https://electronics.stackexchange.com/questions/92350/what-is-the-difference-between-tccr1a-and-tccr1b
+ * Timers: http://www.avrbeginners.net/architecture/timers/timers.html
+ * 16-bit timer setup: http://sculland.com/ATmega168/Interrupts-And-Timers/16-Bit-Timer-Setup/
+ * PS2AVRGB firmware: https://github.com/showjean/ps2avrU/tree/master/firmware
+ */
+
+// @Override
+// turn LEDs on and off depending on USB caps/num/scroll lock states.
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+ // turn on
+ DDRD |= NUMLOCK_PORT;
+ PORTD |= NUMLOCK_PORT;
+ } else {
+ // turn off
+ DDRD &= ~NUMLOCK_PORT;
+ PORTD &= ~NUMLOCK_PORT;
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRD |= CAPSLOCK_PORT;
+ PORTD |= CAPSLOCK_PORT;
+ } else {
+ DDRD &= ~CAPSLOCK_PORT;
+ PORTD &= ~CAPSLOCK_PORT;
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ DDRD |= SCROLLLOCK_PORT;
+ PORTD |= SCROLLLOCK_PORT;
+ } else {
+ DDRD &= ~SCROLLLOCK_PORT;
+ PORTD &= ~SCROLLLOCK_PORT;
+ }
+}
+
+#ifdef BACKLIGHT_ENABLE
+
+// sets up Timer 1 for 8-bit PWM
+void timer1PWMSetup(void) { // NOTE ONLY CALL THIS ONCE
+ // default 8 bit mode
+ TCCR1A &= ~(1 << 1); // cbi(TCCR1A,PWM11); <- set PWM11 bit to HIGH
+ TCCR1A |= (1 << 0); // sbi(TCCR1A,PWM10); <- set PWM10 bit to LOW
+
+ // clear output compare value A
+ // outb(OCR1AH, 0);
+ // outb(OCR1AL, 0);
+
+ // clear output comparator registers for B
+ OCR1BH = 0; // outb(OCR1BH, 0);
+ OCR1BL = 0; // outb(OCR1BL, 0);
+}
+
+bool is_init = false;
+void timer1Init(void) {
+ // timer1SetPrescaler(TIMER1PRESCALE)
+ // set to DIV/64
+ (TCCR1B) = ((TCCR1B) & ~TIMER_PRESCALE_MASK) | TIMER1PRESCALE;
+
+ // reset TCNT1
+ TCNT1H = 0; // outb(TCNT1H, 0);
+ TCNT1L = 0; // outb(TCNT1L, 0);
+
+ // TOIE1: Timer Overflow Interrupt Enable (Timer 1);
+ TIMSK |= _BV(TOIE1); // sbi(TIMSK, TOIE1);
+
+ is_init = true;
+}
+
+void timer1UnInit(void) {
+ // set prescaler back to NONE
+ (TCCR1B) = ((TCCR1B) & ~TIMER_PRESCALE_MASK) | 0x00; // TIMERRTC_CLK_STOP
+
+ // disable timer overflow interrupt
+ TIMSK &= ~_BV(TOIE1); // overflow bit?
+
+ setPWM(0);
+
+ is_init = false;
+}
+
+
+// handle TCNT1 overflow
+//! Interrupt handler for tcnt1 overflow interrupt
+ISR(TIMER1_OVF_vect, ISR_NOBLOCK)
+{
+ // sei();
+ // handle breathing here
+ #ifdef BACKLIGHT_BREATHING
+ if (is_breathing()) {
+ custom_breathing_handler();
+ }
+ #endif
+}
+
+// enable timer 1 PWM
+// timer1PWMBOn()
+void timer1PWMBEnable(void) {
+ // turn on channel B (OC1B) PWM output
+ // set OC1B as non-inverted PWM
+ TCCR1A |= _BV(COM1B1);
+ TCCR1A &= ~_BV(COM1B0);
+}
+
+// disable timer 1 PWM
+// timer1PWMBOff()
+void timer1PWMBDisable(void) {
+ TCCR1A &= ~_BV(COM1B1);
+ TCCR1A &= ~_BV(COM1B0);
+}
+
+void enableBacklight(void) {
+ DDRD |= BACKLIGHT_PORT; // set digital pin 4 as output
+ PORTD |= BACKLIGHT_PORT; // set digital pin 4 to high
+}
+
+void disableBacklight(void) {
+ // DDRD &= ~BACKLIGHT_PORT; // set digital pin 4 as input
+ PORTD &= ~BACKLIGHT_PORT; // set digital pin 4 to low
+}
+
+void startPWM(void) {
+ timer1Init();
+ timer1PWMBEnable();
+ enableBacklight();
+}
+
+void stopPWM(void) {
+ timer1UnInit();
+ disableBacklight();
+ timer1PWMBDisable();
+}
+
+void b_led_init_ports(void) {
+ /* turn backlight on/off depending on user preference */
+ #if BACKLIGHT_ON_STATE == 0
+ // DDRx register: sets the direction of Port D
+ // DDRD &= ~BACKLIGHT_PORT; // set digital pin 4 as input
+ PORTD &= ~BACKLIGHT_PORT; // set digital pin 4 to low
+ #else
+ DDRD |= BACKLIGHT_PORT; // set digital pin 4 as output
+ PORTD |= BACKLIGHT_PORT; // set digital pin 4 to high
+ #endif
+
+ timer1PWMSetup();
+ startPWM();
+
+ #ifdef BACKLIGHT_BREATHING
+ breathing_enable();
+ #endif
+}
+
+void b_led_set(uint8_t level) {
+ if (level > BACKLIGHT_LEVELS) {
+ level = BACKLIGHT_LEVELS;
+ }
+
+ setPWM((int)(TIMER_TOP * (float) level / BACKLIGHT_LEVELS));
+}
+
+// called every matrix scan
+void b_led_task(void) {
+ // do nothing for now
+}
+
+void setPWM(uint16_t xValue) {
+ if (xValue > TIMER_TOP) {
+ xValue = TIMER_TOP;
+ }
+ OCR1B = xValue; // timer1PWMBSet(xValue);
+}
+
+#endif // BACKLIGHT_ENABLE
diff --git a/keyboards/bminiex/backlight_custom.h b/keyboards/bminiex/backlight_custom.h
new file mode 100644
index 000000000..51365fe3b
--- /dev/null
+++ b/keyboards/bminiex/backlight_custom.h
@@ -0,0 +1,13 @@
+/**
+ * Backlighting code for PS2AVRGB boards (ATMEGA32A)
+ * Kenneth A. (github.com/krusli | krusli.me)
+ */
+
+#pragma once
+
+#include <avr/pgmspace.h>
+void b_led_init_ports(void);
+void b_led_set(uint8_t level);
+void b_led_task(void);
+void setPWM(uint16_t xValue);
+
diff --git a/keyboards/bminiex/bminiex.c b/keyboards/bminiex/bminiex.c
new file mode 100644
index 000000000..d9b05aba5
--- /dev/null
+++ b/keyboards/bminiex/bminiex.c
@@ -0,0 +1,97 @@
+/*
+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 "bminiex.h"
+#include "rgblight.h"
+
+#include <avr/pgmspace.h>
+
+#include "action_layer.h"
+#include "i2c.h"
+#include "quantum.h"
+
+#include "backlight.h"
+#include "backlight_custom.h"
+
+// for keyboard subdirectory level init functions
+// @Override
+void matrix_init_kb(void) {
+ // call user level keymaps, if any
+ matrix_init_user();
+}
+
+#ifdef BACKLIGHT_ENABLE
+/// Overrides functions in `quantum.c`
+void backlight_init_ports(void) {
+ b_led_init_ports();
+}
+
+void backlight_task(void) {
+ b_led_task();
+}
+
+void backlight_set(uint8_t level) {
+ b_led_set(level);
+}
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+
+// custom RGB driver
+void rgblight_set(void) {
+ if (!rgblight_config.enable) {
+ for (uint8_t i=0; i<RGBLED_NUM; i++) {
+ led[i].r = 0;
+ led[i].g = 0;
+ led[i].b = 0;
+ }
+ }
+
+ i2c_init();
+ i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+}
+
+bool rgb_init = false;
+
+void matrix_scan_kb(void) {
+ // if LEDs were previously on before poweroff, turn them back on
+ if (rgb_init == false && rgblight_config.enable) {
+ i2c_init();
+ i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+ rgb_init = true;
+ }
+
+ rgblight_task();
+#else
+void matrix_scan_kb(void) {
+#endif
+ matrix_scan_user();
+ /* Nothing else for now. */
+}
+
+__attribute__((weak)) // overridable
+void matrix_init_user(void) {
+
+}
+
+__attribute__((weak)) // overridable
+void matrix_scan_user(void) {
+
+}
+
+
diff --git a/keyboards/bminiex/bminiex.h b/keyboards/bminiex/bminiex.h
new file mode 100644
index 000000000..8d897f639
--- /dev/null
+++ b/keyboards/bminiex/bminiex.h
@@ -0,0 +1,94 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \
+ K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \
+ K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, K63, K73, K83, \
+ K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KC2, KD2, KE0, K62, K72, K82, K92, \
+ K01, K30, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, K61, K71, K81, \
+ K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96, K60, K80, K90 \
+){ \
+ { K00, K10, K20, K30, KC_NO, KC_NO, K60, KC_NO, K80, K90, KC_NO, KB0, KC0, KD0, KE0 }, \
+ { K01, K11, K21, K31, K41, K51, K61, K71, K81, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \
+ { K02, K12, K22, K32, K42, K52, K62, K72, K82, K92, KA2, KB2, KC2, KD2, KE2 }, \
+ { K03, K13, K23, K33, K43, K53, K63, K73, K83, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \
+ { K04, K14, K24, K34, K44, K54, K64, K74, K84, K94, KA4, KB4, KC4, KC_NO, KE4 }, \
+ { K05, KC_NO, K25, K35, K45, K55, K65, K75, K85, K95, KC_NO, KB5, KC5, KD5, KE5 }, \
+ { K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \
+ { K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
+}
+
+#define LAYOUT_ansi( \
+ K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \
+ K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \
+ K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, K63, K73, K83, \
+ K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KD2, KE0, K62, K72, K82, K92, \
+ K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, K61, K71, K81, \
+ K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96, K60, K80, K90 \
+){ \
+ { K00, K10, K20, KC_NO, KC_NO, KC_NO, K60, KC_NO, K80, K90, KC_NO, KB0, KC0, KD0, KE0 }, \
+ { K01, K11, K21, K31, K41, K51, K61, K71, K81, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \
+ { K02, K12, K22, K32, K42, K52, K62, K72, K82, K92, KA2, KB2, KC_NO, KD2, KE2 }, \
+ { K03, K13, K23, K33, K43, K53, K63, K73, K83, KC_NO, KA3, KB3, KC3, KD3, KC_NO }, \
+ { K04, K14, K24, K34, K44, K54, K64, K74, K84, K94, KA4, KB4, KC4, KC_NO, KE4 }, \
+ { K05, KC_NO, K25, K35, K45, K55, K65, K75, K85, K95, KC_NO, KB5, KC5, KD5, KE5 }, \
+ { K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \
+ { K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
+}
+
+#define LAYOUT_iso( \
+ K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \
+ K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \
+ K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, K67, K63, K73, K83, \
+ K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KC2, KD2, KE0, K62, K72, K82, K92, \
+ K01, K30, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, K61, K71, K81, \
+ K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96, K60, K80, K90 \
+){ \
+ { K00, K10, K20, K30, KC_NO, KC_NO, K60, KC_NO, K80, K90, KC_NO, KB0, KC0, KD0, KE0 }, \
+ { K01, K11, K21, K31, K41, K51, K61, K71, K81, KC_NO, KA1, KB1, KC_NO, KD1, KE1 }, \
+ { K02, K12, K22, K32, K42, K52, K62, K72, K82, K92, KA2, KB2, KC2, KD2, KE2 }, \
+ { K03, K13, K23, K33, K43, K53, K63, K73, K83, KC_NO, KA3, KB3, KC3, KC_NO, KC_NO }, \
+ { K04, K14, K24, K34, K44, K54, K64, K74, K84, K94, KA4, KB4, KC4, KC_NO, KE4 }, \
+ { K05, KC_NO, K25, K35, K45, K55, K65, K75, K85, K95, KC_NO, KB5, KC5, KD5, KE5 }, \
+ { K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \
+ { K07, K17, K27, K37, K47, K57, K67, K77, KC_NO, KC_NO, KA7, KB7, KC7, KD7, KE7 } \
+}
+
+#define LAYOUT_kc( \
+ K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE1, KE2, K65, K75, K85, K95, \
+ K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, KD0, K64, K74, K84, K94, \
+ K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K67, K63, K73, K83, \
+ K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KC2, KD2, KE0, K62, K72, K82, K92, \
+ K01, K30, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K77, K61, K71, K81, \
+ K00, K10, K20, K56, K57, KB0, KC0, K66, K76, K96, K60, K80, K90 \
+) \
+{ \
+ { KC_##K00, KC_##K10, KC_##K20, KC_##K30, KC_NO, KC_NO, KC_##K60, KC_NO, KC_##K80, KC_##K90, KC_NO, KC_##KB0, KC_##KC0, KC_##KD0, KC_##KE0 }, \
+ { KC_##K01, KC_##K11, KC_##K21, KC_##K31, KC_##K41, KC_##K51, KC_##K61, KC_##K71, KC_##K81, KC_NO, KC_##KA1, KC_##KB1, KC_NO, KC_##KD1, KC_##KE1 }, \
+ { KC_##K02, KC_##K12, KC_##K22, KC_##K32, KC_##K42, KC_##K52, KC_##K62, KC_##K72, KC_##K82, KC_##K92, KC_##KA2, KC_##KB2, KC_##KC2, KC_##KD2, KC_##KE2 }, \
+ { KC_##K03, KC_##K13, KC_##K23, KC_##K33, KC_##K43, KC_##K53, KC_##K63, KC_##K73, KC_##K83, KC_NO, KC_##KA3, KC_##KB3, KC_##KC3, KC_##KD3, KC_NO }, \
+ { KC_##K04, KC_##K14, KC_##K24, KC_##K34, KC_##K44, KC_##K54, KC_##K64, KC_##K74, KC_##K84, KC_##K94, KC_##KA4, KC_##KB4, KC_##KC4, KC_NO, KC_##KE4 }, \
+ { KC_##K05, KC_NO, KC_##K25, KC_##K35, KC_##K45, KC_##K55, KC_##K65, KC_##K75, KC_##K85, KC_##K95, KC_NO, KC_##KB5, KC_##KC5, KC_##KD5, KC_##KE5 }, \
+ { KC_##K06, KC_##K16, KC_##K26, KC_##K36, KC_##K46, KC_##K56, KC_##K66, KC_##K76, KC_##K86, KC_##K96, KC_##KA6, KC_##KB6, KC_##KC6, KC_##KD6, KC_##KE6 }, \
+ { KC_##K07, KC_##K17, KC_##K27, KC_##K37, KC_##K47, KC_##K57, KC_##K67, KC_##K77, KC_NO, KC_NO, KC_##KA7, KC_##KB7, KC_##KC7, KC_##KD7, KC_##KE7 } \
+}
+
diff --git a/keyboards/bminiex/breathing_custom.h b/keyboards/bminiex/breathing_custom.h
new file mode 100644
index 000000000..71416b1b4
--- /dev/null
+++ b/keyboards/bminiex/breathing_custom.h
@@ -0,0 +1,140 @@
+/**
+ * Breathing effect code for PS2AVRGB boards (ATMEGA32A)
+ * Works in conjunction with `backlight.c`.
+ *
+ * Code adapted from `quantum.c` to register with the existing TIMER1 overflow
+ * handler in `backlight.c` instead of setting up its own timer.
+ * Kenneth A. (github.com/krusli | krusli.me)
+ */
+
+#ifdef BACKLIGHT_ENABLE
+#ifdef BACKLIGHT_BREATHING
+
+#include "backlight_custom.h"
+
+#ifndef BREATHING_PERIOD
+#define BREATHING_PERIOD 6
+#endif
+
+#define breathing_min() do {breathing_counter = 0;} while (0)
+#define breathing_max() do {breathing_counter = breathing_period * 244 / 2;} while (0)
+
+// TODO make this share code with quantum.c
+
+#define BREATHING_NO_HALT 0
+#define BREATHING_HALT_OFF 1
+#define BREATHING_HALT_ON 2
+#define BREATHING_STEPS 128
+
+static uint8_t breathing_period = BREATHING_PERIOD;
+static uint8_t breathing_halt = BREATHING_NO_HALT;
+static uint16_t breathing_counter = 0;
+
+static bool breathing = false;
+
+bool is_breathing(void) {
+ return breathing;
+}
+
+// See http://jared.geek.nz/2013/feb/linear-led-pwm
+static uint16_t cie_lightness(uint16_t v) {
+ if (v <= 5243) // if below 8% of max
+ return v / 9; // same as dividing by 900%
+ else {
+ uint32_t y = (((uint32_t) v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
+ // to get a useful result with integer division, we shift left in the expression above
+ // and revert what we've done again after squaring.
+ y = y * y * y >> 8;
+ if (y > 0xFFFFUL) // prevent overflow
+ return 0xFFFFU;
+ else
+ return (uint16_t) y;
+ }
+}
+
+void breathing_enable(void) {
+ breathing = true;
+ breathing_counter = 0;
+ breathing_halt = BREATHING_NO_HALT;
+ // interrupt already registered
+}
+
+void breathing_pulse(void) {
+ if (get_backlight_level() == 0)
+ breathing_min();
+ else
+ breathing_max();
+ breathing_halt = BREATHING_HALT_ON;
+ // breathing_interrupt_enable();
+ breathing = true;
+}
+
+void breathing_disable(void) {
+ breathing = false;
+ // backlight_set(get_backlight_level());
+ b_led_set(get_backlight_level()); // custom implementation of backlight_set()
+}
+
+void breathing_self_disable(void)
+{
+ if (get_backlight_level() == 0)
+ breathing_halt = BREATHING_HALT_OFF;
+ else
+ breathing_halt = BREATHING_HALT_ON;
+}
+
+void breathing_toggle(void) {
+ if (is_breathing())
+ breathing_disable();
+ else
+ breathing_enable();
+}
+
+void breathing_period_set(uint8_t value)
+{
+ if (!value)
+ value = 1;
+ breathing_period = value;
+}
+
+void breathing_period_default(void) {
+ breathing_period_set(BREATHING_PERIOD);
+}
+
+void breathing_period_inc(void)
+{
+ breathing_period_set(breathing_period+1);
+}
+
+void breathing_period_dec(void)
+{
+ breathing_period_set(breathing_period-1);
+}
+
+/* To generate breathing curve in python:
+ * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
+ */
+static const uint8_t breathing_table[BREATHING_STEPS] PROGMEM = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+// Use this before the cie_lightness function.
+static inline uint16_t scale_backlight(uint16_t v) {
+ return v / BACKLIGHT_LEVELS * get_backlight_level();
+}
+
+void custom_breathing_handler(void) {
+ uint16_t interval = (uint16_t) breathing_period * 244 / BREATHING_STEPS;
+ // resetting after one period to prevent ugly reset at overflow.
+ breathing_counter = (breathing_counter + 1) % (breathing_period * 244);
+ uint8_t index = breathing_counter / interval % BREATHING_STEPS;
+
+ if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) ||
+ ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1)))
+ {
+ // breathing_interrupt_disable();
+ }
+
+ setPWM(cie_lightness(scale_backlight((uint16_t) pgm_read_byte(&breathing_table[index]) * 0x0101U)));
+}
+
+#endif // BACKLIGHT_BREATHING
+#endif // BACKLIGHT_ENABLE
diff --git a/keyboards/bminiex/config.h b/keyboards/bminiex/config.h
new file mode 100644
index 000000000..3f160109e
--- /dev/null
+++ b/keyboards/bminiex/config.h
@@ -0,0 +1,41 @@
+/*
+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 0x422E
+#define MANUFACTURER winkeyless.kr
+#define PRODUCT B.mini Ex
+
+#define RGBLED_NUM 20
+
+/* matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 15
+
+#define RGBLIGHT_ANIMATIONS
+
+#define BACKLIGHT_LEVELS 5
+
+#define NO_UART 1
+
+/* key combination for command */
+#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
diff --git a/keyboards/bminiex/i2c.c b/keyboards/bminiex/i2c.c
new file mode 100644
index 000000000..a4f952135
--- /dev/null
+++ b/keyboards/bminiex/i2c.c
@@ -0,0 +1,106 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Please do not modify this file
+
+#include <avr/io.h>
+#include <util/twi.h>
+
+#include "i2c.h"
+
+void i2c_set_bitrate(uint16_t bitrate_khz) {
+ uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
+ if (bitrate_div >= 16) {
+ bitrate_div = (bitrate_div - 16) / 2;
+ }
+ TWBR = bitrate_div;
+}
+
+void i2c_init(void) {
+ // set pull-up resistors on I2C bus pins
+ PORTC |= 0b11;
+
+ i2c_set_bitrate(400);
+
+ // enable TWI (two-wire interface)
+ TWCR |= (1 << TWEN);
+
+ // enable TWI interrupt and slave address ACK
+ TWCR |= (1 << TWIE);
+ TWCR |= (1 << TWEA);
+}
+
+uint8_t i2c_start(uint8_t address) {
+ // reset TWI control register
+ TWCR = 0;
+
+ // begin transmission and wait for it to end
+ TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ // check if the start condition was successfully transmitted
+ if ((TWSR & 0xF8) != TW_START) {
+ return 1;
+ }
+
+ // transmit address and wait
+ TWDR = address;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ // check if the device has acknowledged the READ / WRITE mode
+ uint8_t twst = TW_STATUS & 0xF8;
+ if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
+ return 1;
+ }
+
+ return 0;
+}
+
+void i2c_stop(void) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+}
+
+uint8_t i2c_write(uint8_t data) {
+ TWDR = data;
+
+ // transmit data and wait
+ TWCR = (1<<TWINT) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
+ return 1;
+ }
+
+ return 0;
+}
+
+uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
+ if (i2c_start(address)) {
+ return 1;
+ }
+
+ for (uint16_t i = 0; i < length; i++) {
+ if (i2c_write(data[i])) {
+ return 1;
+ }
+ }
+
+ i2c_stop();
+
+ return 0;
+}
diff --git a/keyboards/bminiex/i2c.h b/keyboards/bminiex/i2c.h
new file mode 100644
index 000000000..ada8cc7bf
--- /dev/null
+++ b/keyboards/bminiex/i2c.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Please do not modify this file
+
+#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);
+
diff --git a/keyboards/bminiex/info.json b/keyboards/bminiex/info.json
new file mode 100644
index 000000000..8e38fbfb9
--- /dev/null
+++ b/keyboards/bminiex/info.json
@@ -0,0 +1,340 @@
+{
+ "keyboard_name": "winkeyless.kr B.mini EX",
+ "keyboard_folder": "bminiex",
+ "url": "https://winkeyless.kr/product/b-mini-ex-x2-pcb/",
+ "maintainer": "qmk",
+ "width": 20.25,
+ "height": 6.25,
+ "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":"PSCR", "x":13, "y":0},
+ {"label":"HOME", "x":14, "y":0},
+ {"label":"END", "x":15, "y":0},
+ {"label":"NO", "x":16.25, "y":0},
+ {"label":"NO", "x":17.25, "y":0},
+ {"label":"NO", "x":18.25, "y":0},
+ {"label":"NO", "x":19.25, "y":0},
+ {"label":"GRV", "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":7, "y":1.25},
+ {"label":"8", "x":8, "y":1.25},
+ {"label":"9", "x":9, "y":1.25},
+ {"label":"0", "x":10, "y":1.25},
+ {"label":"MINS", "x":11, "y":1.25},
+ {"label":"EQL", "x":12, "y":1.25},
+ {"label":"BSPC", "x":13, "y":1.25, "w":2},
+ {"label":"DEL", "x":15, "y":1.25},
+ {"label":"NLCK", "x":16.25, "y":1.25},
+ {"label":"PSLS", "x":17.25, "y":1.25},
+ {"label":"PAST", "x":18.25, "y":1.25},
+ {"label":"PMNS", "x":19.25, "y":1.25},
+ {"label":"TAB", "x":0, "y":2.25, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.25},
+ {"label":"W", "x":2.5, "y":2.25},
+ {"label":"E", "x":3.5, "y":2.25},
+ {"label":"R", "x":4.5, "y":2.25},
+ {"label":"T", "x":5.5, "y":2.25},
+ {"label":"Y", "x":6.5, "y":2.25},
+ {"label":"U", "x":7.5, "y":2.25},
+ {"label":"I", "x":8.5, "y":2.25},
+ {"label":"O", "x":9.5, "y":2.25},
+ {"label":"P", "x":10.5, "y":2.25},
+ {"label":"LBRC", "x":11.5, "y":2.25},
+ {"label":"RBRC", "x":12.5, "y":2.25},
+ {"label":"NO", "x":13.5, "y":2.25, "w":1.5},
+ {"label":"INS", "x":15, "y":2.25},
+ {"label":"P7", "x":16.25, "y":2.25},
+ {"label":"P8", "x":17.25, "y":2.25},
+ {"label":"P9", "x":18.25, "y":2.25},
+ {"label":"CAPS", "x":0, "y":3.25, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.25},
+ {"label":"S", "x":2.75, "y":3.25},
+ {"label":"D", "x":3.75, "y":3.25},
+ {"label":"F", "x":4.75, "y":3.25},
+ {"label":"G", "x":5.75, "y":3.25},
+ {"label":"H", "x":6.75, "y":3.25},
+ {"label":"J", "x":7.75, "y":3.25},
+ {"label":"K", "x":8.75, "y":3.25},
+ {"label":"L", "x":9.75, "y":3.25},
+ {"label":"SCLN", "x":10.75, "y":3.25},
+ {"label":"QUOT", "x":11.75, "y":3.25},
+ {"label":"NUHS", "x":12.75, "y":3.25},
+ {"label":"ENT", "x":13.75, "y":3.25, "w":1.25},
+ {"label":"PGUP", "x":15, "y":3.25},
+ {"label":"P4", "x":16.25, "y":3.25},
+ {"label":"P5", "x":17.25, "y":3.25},
+ {"label":"P6", "x":18.25, "y":3.25},
+ {"label":"PPLS", "x":19.25, "y":2.25, "h":2},
+ {"label":"LSFT", "x":0, "y":4.25, "w":1.25},
+ {"label":"NUBS", "x":1.25, "y":4.25},
+ {"label":"Z", "x":2.25, "y":4.25},
+ {"label":"X", "x":3.25, "y":4.25},
+ {"label":"C", "x":4.25, "y":4.25},
+ {"label":"V", "x":5.25, "y":4.25},
+ {"label":"B", "x":6.25, "y":4.25},
+ {"label":"N", "x":7.25, "y":4.25},
+ {"label":"M", "x":8.25, "y":4.25},
+ {"label":"COMM", "x":9.25, "y":4.25},
+ {"label":"DOT", "x":10.25, "y":4.25},
+ {"label":"SLSH", "x":11.25, "y":4.25},
+ {"label":"RSFT", "x":12.25, "y":4.25, "w":1.75},
+ {"label":"UP", "x":14, "y":4.25},
+ {"label":"PGDN", "x":15, "y":4.25},
+ {"label":"P1", "x":16.25, "y":4.25},
+ {"label":"P2", "x":17.25, "y":4.25},
+ {"label":"P3", "x":18.25, "y":4.25},
+ {"label":"LCTL", "x":0, "y":5.25, "w":1.25},
+ {"label":"LGUI", "x":1.25, "y":5.25, "w":1.25},
+ {"label":"LALT", "x":2.5, "y":5.25, "w":1.25},
+ {"label":"SPC", "x":3.75, "y":5.25, "w":6.25},
+ {"label":"RALT", "x":10, "y":5.25},
+ {"label":"APP", "x":11, "y":5.25},
+ {"label":"RCTL", "x":12, "y":5.25},
+ {"label":"LEFT", "x":13, "y":5.25},
+ {"label":"DOWN", "x":14, "y":5.25},
+ {"label":"RGHT", "x":15, "y":5.25},
+ {"label":"P0", "x":16.25, "y":5.25, "w":2},
+ {"label":"PDOT", "x":18.25, "y":5.25},
+ {"label":"PENT", "x":19.25, "y":4.25, "h":2}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "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":"PSCR", "x":13, "y":0},
+ {"label":"HOME", "x":14, "y":0},
+ {"label":"END", "x":15, "y":0},
+ {"label":"NO", "x":16.25, "y":0},
+ {"label":"NO", "x":17.25, "y":0},
+ {"label":"NO", "x":18.25, "y":0},
+ {"label":"NO", "x":19.25, "y":0},
+ {"label":"GRV", "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":7, "y":1.25},
+ {"label":"8", "x":8, "y":1.25},
+ {"label":"9", "x":9, "y":1.25},
+ {"label":"0", "x":10, "y":1.25},
+ {"label":"MINS", "x":11, "y":1.25},
+ {"label":"EQL", "x":12, "y":1.25},
+ {"label":"BSPC", "x":13, "y":1.25, "w":2},
+ {"label":"DEL", "x":15, "y":1.25},
+ {"label":"NLCK", "x":16.25, "y":1.25},
+ {"label":"PSLS", "x":17.25, "y":1.25},
+ {"label":"PAST", "x":18.25, "y":1.25},
+ {"label":"PMNS", "x":19.25, "y":1.25},
+ {"label":"TAB", "x":0, "y":2.25, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.25},
+ {"label":"W", "x":2.5, "y":2.25},
+ {"label":"E", "x":3.5, "y":2.25},
+ {"label":"R", "x":4.5, "y":2.25},
+ {"label":"T", "x":5.5, "y":2.25},
+ {"label":"Y", "x":6.5, "y":2.25},
+ {"label":"U", "x":7.5, "y":2.25},
+ {"label":"I", "x":8.5, "y":2.25},
+ {"label":"O", "x":9.5, "y":2.25},
+ {"label":"P", "x":10.5, "y":2.25},
+ {"label":"LBRC", "x":11.5, "y":2.25},
+ {"label":"RBRC", "x":12.5, "y":2.25},
+ {"label":"BSLS", "x":13.5, "y":2.25, "w":1.5},
+ {"label":"INS", "x":15, "y":2.25},
+ {"label":"P7", "x":16.25, "y":2.25},
+ {"label":"P8", "x":17.25, "y":2.25},
+ {"label":"P9", "x":18.25, "y":2.25},
+ {"label":"CAPS", "x":0, "y":3.25, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.25},
+ {"label":"S", "x":2.75, "y":3.25},
+ {"label":"D", "x":3.75, "y":3.25},
+ {"label":"F", "x":4.75, "y":3.25},
+ {"label":"G", "x":5.75, "y":3.25},
+ {"label":"H", "x":6.75, "y":3.25},
+ {"label":"J", "x":7.75, "y":3.25},
+ {"label":"K", "x":8.75, "y":3.25},
+ {"label":"L", "x":9.75, "y":3.25},
+ {"label":"SCLN", "x":10.75, "y":3.25},
+ {"label":"QUOT", "x":11.75, "y":3.25},
+ {"label":"ENT", "x":12.75, "y":3.25, "w":2.25},
+ {"label":"PGUP", "x":15, "y":3.25},
+ {"label":"P4", "x":16.25, "y":3.25},
+ {"label":"P5", "x":17.25, "y":3.25},
+ {"label":"P6", "x":18.25, "y":3.25},
+ {"label":"PPLS", "x":19.25, "y":2.25, "h":2},
+ {"label":"LSFT", "x":0, "y":4.25, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.25},
+ {"label":"X", "x":3.25, "y":4.25},
+ {"label":"C", "x":4.25, "y":4.25},
+ {"label":"V", "x":5.25, "y":4.25},
+ {"label":"B", "x":6.25, "y":4.25},
+ {"label":"N", "x":7.25, "y":4.25},
+ {"label":"M", "x":8.25, "y":4.25},
+ {"label":"COMM", "x":9.25, "y":4.25},
+ {"label":"DOT", "x":10.25, "y":4.25},
+ {"label":"SLSH", "x":11.25, "y":4.25},
+ {"label":"RSFT", "x":12.25, "y":4.25, "w":1.75},
+ {"label":"UP", "x":14, "y":4.25},
+ {"label":"PGDN", "x":15, "y":4.25},
+ {"label":"P1", "x":16.25, "y":4.25},
+ {"label":"P2", "x":17.25, "y":4.25},
+ {"label":"P3", "x":18.25, "y":4.25},
+ {"label":"LCTL", "x":0, "y":5.25, "w":1.25},
+ {"label":"LGUI", "x":1.25, "y":5.25, "w":1.25},
+ {"label":"LALT", "x":2.5, "y":5.25, "w":1.25},
+ {"label":"SPC", "x":3.75, "y":5.25, "w":6.25},
+ {"label":"RALT", "x":10, "y":5.25},
+ {"label":"APP", "x":11, "y":5.25},
+ {"label":"RCTL", "x":12, "y":5.25},
+ {"label":"LEFT", "x":13, "y":5.25},
+ {"label":"DOWN", "x":14, "y":5.25},
+ {"label":"RGHT", "x":15, "y":5.25},
+ {"label":"P0", "x":16.25, "y":5.25, "w":2},
+ {"label":"PDOT", "x":18.25, "y":5.25},
+ {"label":"PENT", "x":19.25, "y":4.25, "h":2}
+ ]
+ },
+ "LAYOUT_iso": {
+ "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":"PSCR", "x":13, "y":0},
+ {"label":"HOME", "x":14, "y":0},
+ {"label":"END", "x":15, "y":0},
+ {"label":"NO", "x":16.25, "y":0},
+ {"label":"NO", "x":17.25, "y":0},
+ {"label":"NO", "x":18.25, "y":0},
+ {"label":"NO", "x":19.25, "y":0},
+ {"label":"GRV", "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":7, "y":1.25},
+ {"label":"8", "x":8, "y":1.25},
+ {"label":"9", "x":9, "y":1.25},
+ {"label":"0", "x":10, "y":1.25},
+ {"label":"MINS", "x":11, "y":1.25},
+ {"label":"EQL", "x":12, "y":1.25},
+ {"label":"BSPC", "x":13, "y":1.25, "w":2},
+ {"label":"DEL", "x":15, "y":1.25},
+ {"label":"NLCK", "x":16.25, "y":1.25},
+ {"label":"PSLS", "x":17.25, "y":1.25},
+ {"label":"PAST", "x":18.25, "y":1.25},
+ {"label":"PMNS", "x":19.25, "y":1.25},
+ {"label":"TAB", "x":0, "y":2.25, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.25},
+ {"label":"W", "x":2.5, "y":2.25},
+ {"label":"E", "x":3.5, "y":2.25},
+ {"label":"R", "x":4.5, "y":2.25},
+ {"label":"T", "x":5.5, "y":2.25},
+ {"label":"Y", "x":6.5, "y":2.25},
+ {"label":"U", "x":7.5, "y":2.25},
+ {"label":"I", "x":8.5, "y":2.25},
+ {"label":"O", "x":9.5, "y":2.25},
+ {"label":"P", "x":10.5, "y":2.25},
+ {"label":"LBRC", "x":11.5, "y":2.25},
+ {"label":"RBRC", "x":12.5, "y":2.25},
+ {"label":"INS", "x":15, "y":2.25},
+ {"label":"P7", "x":16.25, "y":2.25},
+ {"label":"P8", "x":17.25, "y":2.25},
+ {"label":"P9", "x":18.25, "y":2.25},
+ {"label":"CAPS", "x":0, "y":3.25, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.25},
+ {"label":"S", "x":2.75, "y":3.25},
+ {"label":"D", "x":3.75, "y":3.25},
+ {"label":"F", "x":4.75, "y":3.25},
+ {"label":"G", "x":5.75, "y":3.25},
+ {"label":"H", "x":6.75, "y":3.25},
+ {"label":"J", "x":7.75, "y":3.25},
+ {"label":"K", "x":8.75, "y":3.25},
+ {"label":"L", "x":9.75, "y":3.25},
+ {"label":"SCLN", "x":10.75, "y":3.25},
+ {"label":"QUOT", "x":11.75, "y":3.25},
+ {"label":"NUHS", "x":12.75, "y":3.25},
+ {"label":"ENT", "x":13.75, "y":2.25, "w":1.25, "h":2},
+ {"label":"PGUP", "x":15, "y":3.25},
+ {"label":"P4", "x":16.25, "y":3.25},
+ {"label":"P5", "x":17.25, "y":3.25},
+ {"label":"P6", "x":18.25, "y":3.25},
+ {"label":"PPLS", "x":19.25, "y":2.25, "h":2},
+ {"label":"LSFT", "x":0, "y":4.25, "w":1.25},
+ {"label":"NUBS", "x":1.25, "y":4.25},
+ {"label":"Z", "x":2.25, "y":4.25},
+ {"label":"X", "x":3.25, "y":4.25},
+ {"label":"C", "x":4.25, "y":4.25},
+ {"label":"V", "x":5.25, "y":4.25},
+ {"label":"B", "x":6.25, "y":4.25},
+ {"label":"N", "x":7.25, "y":4.25},
+ {"label":"M", "x":8.25, "y":4.25},
+ {"label":"COMM", "x":9.25, "y":4.25},
+ {"label":"DOT", "x":10.25, "y":4.25},
+ {"label":"SLSH", "x":11.25, "y":4.25},
+ {"label":"RSFT", "x":12.25, "y":4.25, "w":1.75},
+ {"label":"UP", "x":14, "y":4.25},
+ {"label":"PGDN", "x":15, "y":4.25},
+ {"label":"P1", "x":16.25, "y":4.25},
+ {"label":"P2", "x":17.25, "y":4.25},
+ {"label":"P3", "x":18.25, "y":4.25},
+ {"label":"LCTL", "x":0, "y":5.25, "w":1.25},
+ {"label":"LGUI", "x":1.25, "y":5.25, "w":1.25},
+ {"label":"LALT", "x":2.5, "y":5.25, "w":1.25},
+ {"label":"SPC", "x":3.75, "y":5.25, "w":6.25},
+ {"label":"RALT", "x":10, "y":5.25},
+ {"label":"APP", "x":11, "y":5.25},
+ {"label":"RCTL", "x":12, "y":5.25},
+ {"label":"LEFT", "x":13, "y":5.25},
+ {"label":"DOWN", "x":14, "y":5.25},
+ {"label":"RGHT", "x":15, "y":5.25},
+ {"label":"P0", "x":16.25, "y":5.25, "w":2},
+ {"label":"PDOT", "x":18.25, "y":5.25},
+ {"label":"PENT", "x":19.25, "y":4.25, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/bminiex/keymaps/ansi/keymap.c b/keyboards/bminiex/keymaps/ansi/keymap.c
new file mode 100644
index 000000000..12c0714b1
--- /dev/null
+++ b/keyboards/bminiex/keymaps/ansi/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_HOME, KC_END, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_BSLS, KC_INS, KC_P7, KC_P8, KC_P9, \
+ KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
+ )
+};
diff --git a/keyboards/bminiex/keymaps/ansi/readme.md b/keyboards/bminiex/keymaps/ansi/readme.md
new file mode 100644
index 000000000..853fa05c5
--- /dev/null
+++ b/keyboards/bminiex/keymaps/ansi/readme.md
@@ -0,0 +1,17 @@
+# ansi
+
+An ANSI-layout keymap based on the default.
+
+ ,-------------------------------------------------------------------------------.
+ |Esc|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|PSc|Hm |End|NO |NO |NO |NO |
+ |-------------------------------------------------------------------------------|
+ |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Bksp |Del|NLck|P/|P* |P- |
+ |-------------------------------------------------------------------------------|
+ |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Ins|P7 |P8 |P9 | |
+ |---------------------------------------------------------------------------|P+ |
+ |CapsLk|A |S |D |F |G |H |J |K |L |; |' |Enter |PgU|P4 |P5 |P6 | |
+ |-------------------------------------------------------------------------------|
+ |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Up |PgD|P1 |P2 |P3 | |
+ |---------------------------------------------------------------------------|Ent|
+ |Ctrl|GUI |Alt |Space |Alt|App|Ctl|Lft|Dwn|Rgt|P0 |P. | |
+ `-------------------------------------------------------------------------------'
diff --git a/keyboards/bminiex/keymaps/default/keymap.c b/keyboards/bminiex/keymaps/default/keymap.c
new file mode 100644
index 000000000..ed949d74f
--- /dev/null
+++ b/keyboards/bminiex/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_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_NO, KC_NO, KC_NO, KC_NO,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_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_NO, KC_INS, KC_P7, KC_P8, KC_P9,
+ KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_NUHS,KC_ENT, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3,
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_APP ,KC_RCTL,KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ )
+};
diff --git a/keyboards/bminiex/keymaps/iso/keymap.c b/keyboards/bminiex/keymaps/iso/keymap.c
new file mode 100644
index 000000000..aa4ddf063
--- /dev/null
+++ b/keyboards/bminiex/keymaps/iso/keymap.c
@@ -0,0 +1,29 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_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_HOME, KC_END, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_INS, KC_P7, KC_P8, KC_P9, \
+ KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
+ )
+};
diff --git a/keyboards/bminiex/keymaps/iso/readme.md b/keyboards/bminiex/keymaps/iso/readme.md
new file mode 100644
index 000000000..74c42a618
--- /dev/null
+++ b/keyboards/bminiex/keymaps/iso/readme.md
@@ -0,0 +1,17 @@
+# iso
+
+An ISO-layout keymap based on the default.
+
+ ,-------------------------------------------------------------------------------.
+ |Esc|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|PSc|Hm |End|NO |NO |NO |NO |
+ |-------------------------------------------------------------------------------|
+ |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Bksp |Del|NLck|P/|P* |P- |
+ |-------------------------------------------------------------------------------|
+ |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] | |Ins|P7 |P8 |P9 | |
+ |------------------------------------------------------.Ent |---------------|P+ |
+ |CapsLk|A |S |D |F |G |H |J |K |L |; |' |# | |PgU|P4 |P5 |P6 | |
+ |-------------------------------------------------------------------------------|
+ |Sft |\ |Z |X |C |V |B |N |M |, |. |/ |Shift |Up |PgD|P1 |P2 |P3 | |
+ |---------------------------------------------------------------------------|Ent|
+ |Ctrl|GUI |Alt |Space |Alt|App|Ctl|Lft|Dwn|Rgt|P0 |P. | |
+ `-------------------------------------------------------------------------------'
diff --git a/keyboards/bminiex/matrix.c b/keyboards/bminiex/matrix.c
new file mode 100644
index 000000000..8faaed8ac
--- /dev/null
+++ b/keyboards/bminiex/matrix.c
@@ -0,0 +1,122 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <avr/io.h>
+#include <util/delay.h>
+
+#include "matrix.h"
+#include "backlight.h"
+
+#ifndef DEBOUNCE
+#define DEBOUNCE 5
+#endif
+
+static uint8_t debouncing = DEBOUNCE;
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+__attribute__ ((weak))
+void matrix_init_user(void) {}
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+void matrix_init(void) {
+ // all outputs for rows high
+ DDRB = 0xFF;
+ PORTB = 0xFF;
+ // all inputs for columns
+ DDRA = 0x00;
+ DDRC &= ~(0x111111<<2);
+ DDRD &= ~(1<<PIND7);
+ // all columns are pulled-up
+ PORTA = 0xFF;
+ PORTC |= (0b111111<<2);
+ PORTD |= (1<<PIND7);
+
+ // initialize matrix state: all keys off
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix[row] = 0x00;
+ matrix_debouncing[row] = 0x00;
+ }
+
+ matrix_init_quantum();
+}
+
+void matrix_set_row_status(uint8_t row) {
+ DDRB = (1 << row);
+ PORTB = ~(1 << row);
+}
+
+uint8_t bit_reverse(uint8_t x) {
+ x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
+ x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
+ x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
+ return x;
+}
+
+uint8_t matrix_scan(void) {
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix_set_row_status(row);
+ _delay_us(5);
+
+ matrix_row_t cols = (
+ // cols 0..7, PORTA 0 -> 7
+ (~PINA) & 0xFF
+ ) | (
+ // cols 8..13, PORTC 7 -> 0
+ bit_reverse((~PINC) & 0xFF) << 8
+ ) | (
+ // col 14, PORTD 7
+ ((~PIND) & (1 << PIND7)) << 7
+ );
+
+ if (matrix_debouncing[row] != cols) {
+ matrix_debouncing[row] = cols;
+ debouncing = DEBOUNCE;
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+
+ matrix_scan_quantum();
+
+ return 1;
+}
+
+inline matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+}
diff --git a/keyboards/bminiex/readme.md b/keyboards/bminiex/readme.md
new file mode 100644
index 000000000..204bcbbb1
--- /dev/null
+++ b/keyboards/bminiex/readme.md
@@ -0,0 +1,14 @@
+B.mini EX
+=========
+
+A compact fullsize keyboard with RGB
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: B.mini EX PCB
+Hardware Availability: https://winkeyless.kr/product/b-mini-ex-x2-pcb/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bminiex: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/bminiex/rules.mk b/keyboards/bminiex/rules.mk
new file mode 100644
index 000000000..e5d3a2a88
--- /dev/null
+++ b/keyboards/bminiex/rules.mk
@@ -0,0 +1,56 @@
+# 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 = yes
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = no
+DEBUG_ENABLE = no
+COMMAND_ENABLE = no
+BACKLIGHT_ENABLE = yes
+BACKLIGHT_CUSTOM_DRIVER = yes
+RGBLIGHT_ENABLE = yes
+RGBLIGHT_CUSTOM_DRIVER = yes
+TAP_DANCE_ENABLE = no
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+# custom matrix setup
+CUSTOM_MATRIX = yes
+SRC = matrix.c i2c.c backlight.c
+
+# programming options
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
diff --git a/keyboards/bminiex/usbconfig.h b/keyboards/bminiex/usbconfig.h
new file mode 100644
index 000000000..d2d848fcd
--- /dev/null
+++ b/keyboards/bminiex/usbconfig.h
@@ -0,0 +1,396 @@
+/* Name: usbconfig.h
+ * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
+ * Author: Christian Starkjohann
+ * Creation Date: 2005-04-01
+ * Tabsize: 4
+ * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
+ * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
+ * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
+ */
+
+#ifndef __usbconfig_h_included__
+#define __usbconfig_h_included__
+
+#include "config.h"
+
+/*
+General Description:
+This file is an example configuration (with inline documentation) for the USB
+driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
+also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
+wire the lines to any other port, as long as D+ is also wired to INT0 (or any
+other hardware interrupt, as long as it is the highest level interrupt, see
+section at the end of this file).
+*/
+
+/* ---------------------------- Hardware Config ---------------------------- */
+
+#define USB_CFG_IOPORTNAME D
+/* This is the port where the USB bus is connected. When you configure it to
+ * "B", the registers PORTB, PINB and DDRB will be used.
+ */
+#define USB_CFG_DMINUS_BIT 3
+/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
+ * This may be any bit in the port.
+ */
+#define USB_CFG_DPLUS_BIT 2
+/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
+ * This may be any bit in the port. Please note that D+ must also be connected
+ * to interrupt pin INT0! [You can also use other interrupts, see section
+ * "Optional MCU Description" below, or you can connect D- to the interrupt, as
+ * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
+ * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
+ * markers every millisecond.]
+ */
+#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
+/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
+ * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
+ * require no crystal, they tolerate +/- 1% deviation from the nominal
+ * frequency. All other rates require a precision of 2000 ppm and thus a
+ * crystal!
+ * Since F_CPU should be defined to your actual clock rate anyway, you should
+ * not need to modify this setting.
+ */
+#define USB_CFG_CHECK_CRC 0
+/* Define this to 1 if you want that the driver checks integrity of incoming
+ * data packets (CRC checks). CRC checks cost quite a bit of code size and are
+ * currently only available for 18 MHz crystal clock. You must choose
+ * USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
+ */
+
+/* ----------------------- Optional Hardware Config ------------------------ */
+
+/* #define USB_CFG_PULLUP_IOPORTNAME D */
+/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
+ * V+, you can connect and disconnect the device from firmware by calling
+ * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
+ * This constant defines the port on which the pullup resistor is connected.
+ */
+/* #define USB_CFG_PULLUP_BIT 4 */
+/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
+ * above) where the 1.5k pullup resistor is connected. See description
+ * above for details.
+ */
+
+/* --------------------------- Functional Range ---------------------------- */
+
+#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
+/* Define this to 1 if you want to compile a version with two endpoints: The
+ * default control endpoint 0 and an interrupt-in endpoint (any other endpoint
+ * number).
+ */
+#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1
+/* Define this to 1 if you want to compile a version with three endpoints: The
+ * default control endpoint 0, an interrupt-in endpoint 3 (or the number
+ * configured below) and a catch-all default interrupt-in endpoint as above.
+ * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
+ */
+#define USB_CFG_EP3_NUMBER 3
+/* If the so-called endpoint 3 is used, it can now be configured to any other
+ * endpoint number (except 0) with this macro. Default if undefined is 3.
+ */
+/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
+/* The above macro defines the startup condition for data toggling on the
+ * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
+ * Since the token is toggled BEFORE sending any data, the first packet is
+ * sent with the oposite value of this configuration!
+ */
+#define USB_CFG_IMPLEMENT_HALT 0
+/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
+ * for endpoint 1 (interrupt endpoint). Although you may not need this feature,
+ * it is required by the standard. We have made it a config option because it
+ * bloats the code considerably.
+ */
+#define USB_CFG_SUPPRESS_INTR_CODE 0
+/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
+ * want to send any data over them. If this macro is defined to 1, functions
+ * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
+ * you need the interrupt-in endpoints in order to comply to an interface
+ * (e.g. HID), but never want to send any data. This option saves a couple
+ * of bytes in flash memory and the transmit buffers in RAM.
+ */
+#define USB_CFG_INTR_POLL_INTERVAL 1
+/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
+ * interval. The value is in milliseconds and must not be less than 10 ms for
+ * low speed devices.
+ */
+#define USB_CFG_IS_SELF_POWERED 0
+/* Define this to 1 if the device has its own power supply. Set it to 0 if the
+ * device is powered from the USB bus.
+ */
+#define USB_CFG_MAX_BUS_POWER 500
+/* Set this variable to the maximum USB bus power consumption of your device.
+ * The value is in milliamperes. [It will be divided by two since USB
+ * communicates power requirements in units of 2 mA.]
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITE 1
+/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
+ * transfers. Set it to 0 if you don't need it and want to save a couple of
+ * bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_READ 0
+/* Set this to 1 if you need to send control replies which are generated
+ * "on the fly" when usbFunctionRead() is called. If you only want to send
+ * data from a static buffer, set it to 0 and return the data from
+ * usbFunctionSetup(). This saves a couple of bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
+/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
+ * You must implement the function usbFunctionWriteOut() which receives all
+ * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
+ * can be found in 'usbRxToken'.
+ */
+#define USB_CFG_HAVE_FLOWCONTROL 0
+/* Define this to 1 if you want flowcontrol over USB data. See the definition
+ * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
+ * usbdrv.h.
+ */
+#define USB_CFG_DRIVER_FLASH_PAGE 0
+/* If the device has more than 64 kBytes of flash, define this to the 64 k page
+ * where the driver's constants (descriptors) are located. Or in other words:
+ * Define this to 1 for boot loaders on the ATMega128.
+ */
+#define USB_CFG_LONG_TRANSFERS 0
+/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
+ * in a single control-in or control-out transfer. Note that the capability
+ * for long transfers increases the driver size.
+ */
+/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
+/* This macro is a hook if you want to do unconventional things. If it is
+ * defined, it's inserted at the beginning of received message processing.
+ * If you eat the received message and don't want default processing to
+ * proceed, do a return after doing your things. One possible application
+ * (besides debugging) is to flash a status LED on each packet.
+ */
+/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
+/* This macro is a hook if you need to know when an USB RESET occurs. It has
+ * one parameter which distinguishes between the start of RESET state and its
+ * end.
+ */
+/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
+/* This macro (if defined) is executed when a USB SET_ADDRESS request was
+ * received.
+ */
+#define USB_COUNT_SOF 1
+/* define this macro to 1 if you need the global variable "usbSofCount" which
+ * counts SOF packets. This feature requires that the hardware interrupt is
+ * connected to D- instead of D+.
+ */
+/* #ifdef __ASSEMBLER__
+ * macro myAssemblerMacro
+ * in YL, TCNT0
+ * sts timer0Snapshot, YL
+ * endm
+ * #endif
+ * #define USB_SOF_HOOK myAssemblerMacro
+ * This macro (if defined) is executed in the assembler module when a
+ * Start Of Frame condition is detected. It is recommended to define it to
+ * the name of an assembler macro which is defined here as well so that more
+ * than one assembler instruction can be used. The macro may use the register
+ * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
+ * immediately after an SOF pulse may be lost and must be retried by the host.
+ * What can you do with this hook? Since the SOF signal occurs exactly every
+ * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
+ * designs running on the internal RC oscillator.
+ * Please note that Start Of Frame detection works only if D- is wired to the
+ * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
+ */
+#define USB_CFG_CHECK_DATA_TOGGLING 0
+/* define this macro to 1 if you want to filter out duplicate data packets
+ * sent by the host. Duplicates occur only as a consequence of communication
+ * errors, when the host does not receive an ACK. Please note that you need to
+ * implement the filtering yourself in usbFunctionWriteOut() and
+ * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
+ * for each control- and out-endpoint to check for duplicate packets.
+ */
+#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
+/* define this macro to 1 if you want the function usbMeasureFrameLength()
+ * compiled in. This function can be used to calibrate the AVR's RC oscillator.
+ */
+#define USB_USE_FAST_CRC 0
+/* The assembler module has two implementations for the CRC algorithm. One is
+ * faster, the other is smaller. This CRC routine is only used for transmitted
+ * messages where timing is not critical. The faster routine needs 31 cycles
+ * per byte while the smaller one needs 61 to 69 cycles. The faster routine
+ * may be worth the 32 bytes bigger code size if you transmit lots of data and
+ * run the AVR close to its limit.
+ */
+
+/* -------------------------- Device Description --------------------------- */
+
+#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
+/* USB vendor ID for the device, low byte first. If you have registered your
+ * own Vendor ID, define it here. Otherwise you may use one of obdev's free
+ * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
+/* This is the ID of the product, low byte first. It is interpreted in the
+ * scope of the vendor ID. If you have registered your own VID with usb.org
+ * or if you have licensed a PID from somebody else, define it here. Otherwise
+ * you may use one of obdev's free shared VID/PID pairs. See the file
+ * USB-IDs-for-free.txt for details!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
+#define USB_CFG_VENDOR_NAME_LEN 13
+/* These two values define the vendor name returned by the USB device. The name
+ * must be given as a list of characters under single quotes. The characters
+ * are interpreted as Unicode (UTF-16) entities.
+ * If you don't want a vendor name string, undefine these macros.
+ * ALWAYS define a vendor name containing your Internet domain name if you use
+ * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
+ * details.
+ */
+#define USB_CFG_DEVICE_NAME 'p', 's', '2', 'a', 'v', 'r', 'G', 'B'
+#define USB_CFG_DEVICE_NAME_LEN 8
+/* Same as above for the device name. If you don't want a device name, undefine
+ * the macros. See the file USB-IDs-for-free.txt before you assign a name if
+ * you use a shared VID/PID.
+ */
+/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
+/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
+/* Same as above for the serial number. If you don't want a serial number,
+ * undefine the macros.
+ * It may be useful to provide the serial number through other means than at
+ * compile time. See the section about descriptor properties below for how
+ * to fine tune control over USB descriptors such as the string descriptor
+ * for the serial number.
+ */
+#define USB_CFG_DEVICE_CLASS 0
+#define USB_CFG_DEVICE_SUBCLASS 0
+/* See USB specification if you want to conform to an existing device class.
+ * Class 0xff is "vendor specific".
+ */
+#define USB_CFG_INTERFACE_CLASS 3 /* HID */
+#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
+#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
+/* See USB specification if you want to conform to an existing device class or
+ * protocol. The following classes must be set at interface level:
+ * HID class is 3, no subclass and protocol required (but may be useful!)
+ * CDC class is 2, use subclass 2 and protocol 1 for ACM
+ */
+#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
+/* Define this to the length of the HID report descriptor, if you implement
+ * an HID device. Otherwise don't define it or define it to 0.
+ * If you use this define, you must add a PROGMEM character array named
+ * "usbHidReportDescriptor" to your code which contains the report descriptor.
+ * Don't forget to keep the array and this define in sync!
+ */
+
+/* #define USB_PUBLIC static */
+/* Use the define above if you #include usbdrv.c instead of linking against it.
+ * This technique saves a couple of bytes in flash memory.
+ */
+
+/* ------------------- Fine Control over USB Descriptors ------------------- */
+/* If you don't want to use the driver's default USB descriptors, you can
+ * provide our own. These can be provided as (1) fixed length static data in
+ * flash memory, (2) fixed length static data in RAM or (3) dynamically at
+ * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
+ * information about this function.
+ * Descriptor handling is configured through the descriptor's properties. If
+ * no properties are defined or if they are 0, the default descriptor is used.
+ * Possible properties are:
+ * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
+ * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
+ * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
+ * you want RAM pointers.
+ * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
+ * in static memory is in RAM, not in flash memory.
+ * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
+ * the driver must know the descriptor's length. The descriptor itself is
+ * found at the address of a well known identifier (see below).
+ * List of static descriptor names (must be declared PROGMEM if in flash):
+ * char usbDescriptorDevice[];
+ * char usbDescriptorConfiguration[];
+ * char usbDescriptorHidReport[];
+ * char usbDescriptorString0[];
+ * int usbDescriptorStringVendor[];
+ * int usbDescriptorStringDevice[];
+ * int usbDescriptorStringSerialNumber[];
+ * Other descriptors can't be provided statically, they must be provided
+ * dynamically at runtime.
+ *
+ * Descriptor properties are or-ed or added together, e.g.:
+ * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
+ *
+ * The following descriptors are defined:
+ * USB_CFG_DESCR_PROPS_DEVICE
+ * USB_CFG_DESCR_PROPS_CONFIGURATION
+ * USB_CFG_DESCR_PROPS_STRINGS
+ * USB_CFG_DESCR_PROPS_STRING_0
+ * USB_CFG_DESCR_PROPS_STRING_VENDOR
+ * USB_CFG_DESCR_PROPS_STRING_PRODUCT
+ * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
+ * USB_CFG_DESCR_PROPS_HID
+ * USB_CFG_DESCR_PROPS_HID_REPORT
+ * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
+ *
+ * Note about string descriptors: String descriptors are not just strings, they
+ * are Unicode strings prefixed with a 2 byte header. Example:
+ * int serialNumberDescriptor[] = {
+ * USB_STRING_DESCRIPTOR_HEADER(6),
+ * 'S', 'e', 'r', 'i', 'a', 'l'
+ * };
+ */
+
+#define USB_CFG_DESCR_PROPS_DEVICE 0
+#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_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/frosty_flake/config.h b/keyboards/bpiphany/frosty_flake/config.h
index 2c73f1074..2c73f1074 100644
--- a/keyboards/frosty_flake/config.h
+++ b/keyboards/bpiphany/frosty_flake/config.h
diff --git a/keyboards/frosty_flake/frosty_flake.c b/keyboards/bpiphany/frosty_flake/frosty_flake.c
index 1cd476038..1cd476038 100644
--- a/keyboards/frosty_flake/frosty_flake.c
+++ b/keyboards/bpiphany/frosty_flake/frosty_flake.c
diff --git a/keyboards/frosty_flake/frosty_flake.h b/keyboards/bpiphany/frosty_flake/frosty_flake.h
index 953172a8b..824287396 100644
--- a/keyboards/frosty_flake/frosty_flake.h
+++ b/keyboards/bpiphany/frosty_flake/frosty_flake.h
@@ -1,5 +1,4 @@
-#ifndef FROSTY_FLAKE_H
-#define FROSTY_FLAKE_H
+#pragma once
#include "quantum.h"
@@ -26,7 +25,7 @@
| A4 | P2 | C6 | K6 | C0 | M3 | D0 | A1 | | O0 | K0 | L0 | | L6 | Q6 | |
`-------------------------------------------------------------------------' `--------------' `-------------------'
*/
-#define KEYMAP( \
+#define LAYOUT( \
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, KK1, KL1, KQ1, KQ0, \
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, KK5, KL5, KQ5, KO5, \
@@ -66,7 +65,7 @@
`-------------------------------------------------------------------------' `--------------'
*/
-#define KEYMAP_TKL( \
+#define LAYOUT_tkl( \
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
@@ -94,7 +93,7 @@
KI2, KJ3, KI3, KH3, KG3, KG6, KF6, KF3, KE3, KD3, KR3, KR6, KB1, \
KN2, KJ1, KI1, KH1, KG1, KG0, KF0, KF1, KE1, KD1, KR0, KN3, KO6, \
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
-) KEYMAP_TKL( \
+) LAYOUT_tkl( \
KJ6, KI4, KH4, KH2, KH6, KA7, KE6, KD2, KD4, KB4, KB7, KB6, KB0, KC7, KC5, KA5, \
KJ4, KJ7, KI7, KH7, KG7, KG4, KF4, KF7, KE7, KD7, KR7, KR4, KE4, KB2, KL4, KO4, KQ4, \
KJ2, KJ5, KI5, KH5, KG5, KG2, KF2, KF5, KE5, KD5, KR5, KR2, KE2, KB3, KK4, KO7, KQ7, \
@@ -103,4 +102,3 @@
KA4, KP2, KC6, KK6, KC0, KM3, KD0, KA1, KO0, KK0, KL0 \
)
-#endif
diff --git a/keyboards/bpiphany/frosty_flake/info.json b/keyboards/bpiphany/frosty_flake/info.json
new file mode 100644
index 000000000..15fb23d73
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/info.json
@@ -0,0 +1,301 @@
+{
+ "keyboard_name": "Frosty Flake",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 22.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"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":"Page Down", "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":1.25},
+ {"label":"ISO \\", "x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"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.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"Alt", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5},
+ {"label":"0", "x":18.5, "y":5.5, "w":2},
+ {"label":".", "x":20.5, "y":5.5}
+ ]
+ },
+ "LAYOUT_tkl": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"[", "x":11.5, "y":2.5},
+ {"label":"]", "x":12.5, "y":2.5},
+ {"label":"\\", "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":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":";", "x":10.75, "y":3.5},
+ {"label":"'", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"Shift", "x":0, "y":4.5, "w":1.25},
+ {"label":"ISO \\", "x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"Alt", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5}
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"[", "x":11.5, "y":2.5},
+ {"label":"]", "x":12.5, "y":2.5},
+ {"label":"\\", "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":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":";", "x":10.75, "y":3.5},
+ {"label":"'", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"Alt", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5}
+ ]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/config.h b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/config.h
new file mode 100644
index 000000000..017ead425
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/config.h
@@ -0,0 +1,4 @@
+#pragma once
+
+// place overrides here
+#define TAPPING_TERM 150 //reduce time required to register a held key
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/keymap.c
new file mode 100644
index 000000000..684987e36
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/keymap.c
@@ -0,0 +1,123 @@
+#include QMK_KEYBOARD_H
+
+enum QFR_layers {
+ _COLEMAK,
+ _QWERTY,
+ _DVORAK,
+ _LOWER,
+ _MOUSE
+};
+
+enum QFR_keycodes {
+ COLEMAK = SAFE_RANGE,
+ QWERTY,
+ DVORAK,
+ LOWER,
+ MOUSE
+};
+
+enum custom_macros {
+ R_PIPE,
+ R_POINT
+};
+
+ const uint16_t PROGMEM fn_actions[] = { //ACTION_LAYER_TAP_TOGGLE requires that number of taps be defined in *config.h* - default set to 5
+ [0] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC), //Hold for momentary Lower layer, Tap for Space,
+ [1] = ACTION_LAYER_MOMENTARY(_MOUSE) //Hold for momentary MOUSE
+
+ };
+
+#define SPC_LW FUNC(0)
+#define MSE FUNC(1)
+#define PIPE M(R_PIPE)
+#define POINT M(R_POINT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_COLEMAK] = LAYOUT_tkl(\
+ 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_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
+ KC_BSPC, 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_LSPO,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, \
+ KC_LCTL,KC_LGUI, KC_LALT, SPC_LW, MSE, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
+ ),
+
+[_QWERTY] = LAYOUT_tkl(\
+ 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_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL,KC_LGUI,KC_LALT, SPC_LW, MSE, KC_RGUI , KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+[_DVORAK] = LAYOUT_tkl(\
+ 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_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_END, KC_PGDN, \
+ KC_BSPC,KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_QUOT, KC_ENT, \
+ KC_LSFT,KC_NUBS,KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \
+ KC_LCTL,KC_LGUI,KC_LALT, SPC_LW, MSE, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+[_LOWER] = LAYOUT_tkl(\
+ RESET, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, _______, KC_MUTE, KC_VOLD, KC_VOLU, QWERTY, COLEMAK,DVORAK, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_UNDS, KC_PLUS, KC_BSPC, _______,_______,_______, \
+ KC_TAB, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE, _______,_______,_______, \
+ KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, \
+ _______,XXXXXXX,POINT,PIPE, KC_LCBR, KC_LBRC, KC_GRV, KC_PIPE, KC_RBRC, KC_RCBR, _______, _______, _______, _______, \
+ _______, _______, _______, _______, KC_RALT, _______, _______, _______, _______,_______,_______ \
+ ),
+
+[_MOUSE] = LAYOUT_tkl(\
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, _______,_______,_______, \
+ KC_TAB, KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN4, KC_BTN5, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, _______,_______,_______, \
+ KC_BSPC, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
+ _______,XXXXXXX,PIPE,POINT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, \
+ _______, _______, _______, KC_ACL2, MSE, _______, _______, _______, _______,_______,_______ \
+ )
+};
+
+// Macros to send R pointer & dplyr pipe
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch(id) {
+ case R_POINT:
+ if (record->event.pressed) { // pointer
+ SEND_STRING("<- ");
+// return MACRO(D(LSFT), T(COMM), U(LSFT), T(MINS), END);
+ }
+ break;
+ case R_PIPE:
+ if (record->event.pressed) { // dplyr pipe
+ SEND_STRING("%>% ");
+// return MACRO(D(LSFT), T(5), T(DOT), T(5), U(LSFT), END);
+ }
+ break;
+ }
+ return MACRO_NONE;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/frosty_flake/keymaps/QFR_JM/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/readme.md
index f12a0ffba..f12a0ffba 100644
--- a/keyboards/frosty_flake/keymaps/QFR_JM/readme.md
+++ b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/readme.md
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk
new file mode 100644
index 000000000..856481d03
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/QFR_JM/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/default/config.h b/keyboards/bpiphany/frosty_flake/keymaps/default/config.h
new file mode 100644
index 000000000..271f48d00
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/default/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/default/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/default/keymap.c
new file mode 100644
index 000000000..9d40d4c9c
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/default/keymap.c
@@ -0,0 +1,12 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(\
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
+ )
+};
diff --git a/keyboards/frosty_flake/keymaps/default/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/default/readme.md
index 11bf4825f..11bf4825f 100644
--- a/keyboards/frosty_flake/keymaps/default/readme.md
+++ b/keyboards/bpiphany/frosty_flake/keymaps/default/readme.md
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk
new file mode 100644
index 000000000..5dcea8467
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/default/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/nikchi/config.h b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/config.h
new file mode 100644
index 000000000..4bc6d2c3c
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/config.h
@@ -0,0 +1,18 @@
+#pragma once
+
+// place overrides here
+#define TAPPING_TERM 200
+#define LEADER_TIMEOUT 800
+
+#define DISABLE_SPACE_CADET_ROLLOVER
+
+#define UNICODE_TYPE_DELAY 0
+
+#define LSPO_KEY KC_9
+#define RSPC_KEY KC_0
+
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/keymap.c
new file mode 100644
index 000000000..dd2098d94
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/keymap.c
@@ -0,0 +1,225 @@
+#include QMK_KEYBOARD_H
+
+#define MAXEMOJITAPS 80
+
+
+//declarations for tap dancing emojis
+void register_hex32(uint32_t hex);
+void cycleEmojis(qk_tap_dance_state_t *state, void *user_data);
+void cycleAnimals(qk_tap_dance_state_t *state, void *user_data);
+void cycleFoods(qk_tap_dance_state_t *state, void *user_data);
+void cycleEtc(qk_tap_dance_state_t *state, void *user_data);
+void cycleAll(qk_tap_dance_state_t *state, void *user_data);
+
+void tap(uint16_t keycode){
+ register_code(keycode);
+ unregister_code(keycode);
+};
+
+//Tap Dance Declarations
+enum taps{
+ TD_CTCPS = 0,
+ EMOJIS,
+ ANIMAL,
+ HAND,
+ MEMES,
+ COPA,
+ ALLS
+};
+
+enum unicode_name {
+ EMOTIS = 1,//80, //1F60x - 1F64x
+ ANIMALS, //64, //1F40x - 1F43x
+ SYMBOLS,// = 45, //1F300 - 1F32C
+ FOODS,// = 87 , //1F32D -
+ ETC,// = 192, //1F44x -1F4Fx
+ VEHICLES,// = 83, //1F68x - 1F6Dx
+ SUPPLEMENT,// = 32, //1F91x-1F92x
+ ALCHEMY,// = 116 //1F70x - 1F773
+
+};
+
+enum my_macros {
+ NEWDESK = 0,
+ LEFTDESK,
+ RIGHTDESK,
+ CLOSEDESK
+};
+
+
+// Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ // Tap once for CTRL, twice for Caps Lock
+ [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS),
+ [COPA] = ACTION_TAP_DANCE_DOUBLE(LCTL(KC_C), LCTL(KC_V)),
+ [EMOJIS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleEmojis, NULL, NULL, 800),
+ [ANIMAL] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleAnimals, NULL, NULL, 800),
+ //[SYMBOLS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleSymbols, NULL, NULL, 800),
+ [FOODS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleFoods, NULL, NULL, 800),
+ [ETC] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleEtc, NULL, NULL, 800),
+ //[VEHICLES] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleVehicles, NULL, NULL, 800),
+ //[SUPPLEMENT] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleSupplement, NULL, NULL, 800),
+ [ALLS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleAll, NULL, NULL, 800)
+// Other declarations would go here, separated by commas, if you have them
+};
+
+// macros
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch(id) {
+ case NEWDESK: // this would trigger when you hit a key mapped as M(0)
+ if (record->event.pressed) {
+ return MACRO( I(1), D(LGUI), D(LCTL), D(D), U(LGUI), U(LCTL), U(D), END ); // NEW DESKTOP
+ }
+ break;
+ case LEFTDESK: // this would trigger when you hit a key mapped as M(0)
+ if (record->event.pressed) {
+ return MACRO( I(1), D(LGUI), D(LCTL), D(LEFT), U(LGUI), U(LCTL), U(LEFT), END ); // LEFT DESKTOP
+ }
+ break;
+ case RIGHTDESK: // this would trigger when you hit a key mapped as M(0)
+ if (record->event.pressed) {
+ return MACRO( I(1), D(LGUI), D(LCTL), D(RGHT), U(LGUI), U(LCTL), U(RGHT), END ); // RIGHT DESKTOP
+ }
+ break;
+ case CLOSEDESK: // this would trigger when you hit a key mapped as M(0)
+ if (record->event.pressed) {
+ return MACRO( I(1), D(LGUI), D(LCTL), D(F4), U(LGUI), U(LCTL), U(F4), END ); // CLOSE DESKTOP
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+// emojis in unicode
+const uint32_t PROGMEM unicode_map[] = {
+ [EMOTIS] = 0x1F600,
+ [ANIMALS] = 0x1F400,
+ [SYMBOLS] = 0x1F300,
+ [FOODS] = 0x1F32D,
+ [ETC] = 0x1F440,
+ [VEHICLES] = 0x1F680,
+ [SUPPLEMENT] = 0x1F910,
+ [ALCHEMY] = 0x1F700
+ };
+// Layouts
+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_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
+ KC_LSPO, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ TD(TD_CTCPS), KC_LGUI, KC_LALT, KC_SPC, KC_LEAD, KC_RGUI, KC_APP, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
+ ),
+ [1] = LAYOUT(\
+ TD(ALLS), KC_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, TD(EMOJIS), TD(ANIMAL), TD(ETC), TD(FOODS), KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_MPRV, KC_MPLY, KC_MNXT, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_TAB, KC_Q, M(0), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_UP, KC_RBRC, KC_BSLS, KC_MUTE, KC_VOLD, KC_VOLU, KC_P7, KC_P8, KC_P9, KC_PPLS, \
+ KC_LCTL, M(1), M(3), M(2), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_LEFT, KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_BTN1, KC_BTN3, KC_BTN2, KC_SPC, KC_RALT, KC_RGUI, TG(2), _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_P0, KC_PDOT \
+ ),
+ [2] = 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_MPRV, KC_MPLY, KC_MNXT, 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_MUTE, KC_VOLD, KC_VOLU, KC_P7, KC_P8, KC_P9, KC_PPLS, \
+ KC_LCTL, KC_D, 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_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_BTN1, KC_BTN3, KC_BTN2, KC_SPC, KC_RALT, KC_RGUI, TG(2), KC_NO, KC_MS_L, KC_MS_D, KC_MS_R, KC_P0, KC_PDOT \
+ ),
+};
+
+LEADER_EXTERNS();
+
+void matrix_scan_user(void) {
+ LEADER_DICTIONARY() {
+ leading = false;
+ leader_end();
+
+ SEQ_TWO_KEYS(KC_A, KC_A) { // select all and copy
+ register_code(KC_LCTL);
+ tap(KC_A);
+ tap(KC_C);
+ unregister_code(KC_LCTL);
+ }
+ }
+}
+
+void matrix_init_user(void) {
+ _delay_ms(500);
+ set_unicode_input_mode(UC_WINC);
+};
+
+void cycleAll(qk_tap_dance_state_t *state, void *user_data) {
+ if(state->count == 1) {
+ unicode_input_start();
+ register_hex32(pgm_read_dword(&unicode_map[EMOTIS]));
+ unicode_input_finish();
+ }
+ else if(state->count <= 1642) {
+ tap(KC_BSPC);
+ unicode_input_start();
+ register_hex32(pgm_read_dword(&unicode_map[1])+state->count);
+ unicode_input_finish();
+ }
+};
+
+
+void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) {
+ if(state->count == 1) {
+ unicode_input_start();
+ register_hex32(pgm_read_dword(&unicode_map[EMOTIS]));
+ unicode_input_finish();
+ }
+ else if(state->count <= 80) {
+ tap(KC_BSPC);
+ unicode_input_start();
+ register_hex32(pgm_read_dword(&unicode_map[EMOTIS])+state->count);
+ unicode_input_finish();
+ }
+};
+
+void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) {
+ if(state->count == 1) {
+ unicode_input_start();
+ register_hex32(pgm_read_dword(&unicode_map[ANIMALS]));
+ unicode_input_finish();
+ }
+ else if(state->count <= MAXEMOJITAPS) {
+ tap(KC_BSPC);
+ unicode_input_start();
+ register_hex32(pgm_read_dword(&unicode_map[ANIMALS])+state->count);
+ unicode_input_finish();
+ }
+};
+
+void cycleFoods(qk_tap_dance_state_t *state, void *user_data) {
+ if(state->count == 1) {
+ unicode_input_start();
+ register_hex32(pgm_read_dword(&unicode_map[FOODS]));
+ unicode_input_finish();
+ }
+ else if(state->count <= 87) {
+ tap(KC_BSPC);
+ unicode_input_start();
+ register_hex32(pgm_read_dword(&unicode_map[FOODS])+state->count);
+ unicode_input_finish();
+ }
+};
+
+
+void cycleEtc(qk_tap_dance_state_t *state, void *user_data) {
+ if(state->count == 1) {
+ unicode_input_start();
+ register_hex32(pgm_read_dword(&unicode_map[ETC]));
+ unicode_input_finish();
+ }
+ else if(state->count <= MAXEMOJITAPS) {
+ tap(KC_BSPC);
+ unicode_input_start();
+ register_hex32(pgm_read_dword(&unicode_map[ETC])+state->count);
+ unicode_input_finish();
+ }
+};
+
diff --git a/keyboards/frosty_flake/keymaps/nikchi/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/readme.md
index 0b01f9dbf..0b01f9dbf 100644
--- a/keyboards/frosty_flake/keymaps/nikchi/readme.md
+++ b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/readme.md
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk
new file mode 100644
index 000000000..de0f30e48
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/rules.mk
@@ -0,0 +1,20 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # 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
+UNICODEMAP_ENABLE = yes # unicodemap
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = yes
+LEADER_ENABLE = yes
diff --git a/keyboards/frosty_flake/keymaps/nikchi/variableTapDance.md b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/variableTapDance.md
index b2e504139..b2e504139 100644
--- a/keyboards/frosty_flake/keymaps/nikchi/variableTapDance.md
+++ b/keyboards/bpiphany/frosty_flake/keymaps/nikchi/variableTapDance.md
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/tkl/config.h b/keyboards/bpiphany/frosty_flake/keymaps/tkl/config.h
new file mode 100644
index 000000000..271f48d00
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/tkl/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/tkl/keymap.c b/keyboards/bpiphany/frosty_flake/keymaps/tkl/keymap.c
new file mode 100644
index 000000000..8e8723971
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/tkl/keymap.c
@@ -0,0 +1,11 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_tkl(\
+ 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_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT )
+};
diff --git a/keyboards/frosty_flake/keymaps/tkl/readme.md b/keyboards/bpiphany/frosty_flake/keymaps/tkl/readme.md
index a076a65de..a076a65de 100644
--- a/keyboards/frosty_flake/keymaps/tkl/readme.md
+++ b/keyboards/bpiphany/frosty_flake/keymaps/tkl/readme.md
diff --git a/keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk b/keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk
new file mode 100644
index 000000000..c76a5a80e
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/keymaps/tkl/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/bpiphany/frosty_flake/matrix.c b/keyboards/bpiphany/frosty_flake/matrix.c
new file mode 100644
index 000000000..480e3455b
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/matrix.c
@@ -0,0 +1,155 @@
+/*
+ Copyright 2017 Gabriel Young <gabeplaysdrums@live.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+static uint8_t debouncing = DEBOUNCING_DELAY;
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+static matrix_row_t scan_col(void) {
+ return (
+ (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<0)) |
+ (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<1)) |
+ (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) |
+ (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<3)) |
+ (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) |
+ (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<5)) |
+ (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<6)) |
+ (PINB&(1<<0) ? 0 : ((matrix_row_t)1<<7))
+ );
+}
+
+static void select_col(uint8_t col) {
+ switch (col) {
+ case 0: PORTD = (PORTD & ~0b01111011) | 0b00011011; break;
+ case 1: PORTD = (PORTD & ~0b01111011) | 0b01000011; break;
+ case 2: PORTD = (PORTD & ~0b01111011) | 0b01101010; break;
+ case 3: PORTD = (PORTD & ~0b01111011) | 0b01111001; break;
+ case 4: PORTD = (PORTD & ~0b01111011) | 0b01100010; break;
+ case 5: PORTD = (PORTD & ~0b01111011) | 0b01110001; break;
+ case 6: PORTD = (PORTD & ~0b01111011) | 0b01100001; break;
+ case 7: PORTD = (PORTD & ~0b01111011) | 0b01110000; break;
+ case 8: PORTD = (PORTD & ~0b01111011) | 0b01100000; break;
+ case 9: PORTD = (PORTD & ~0b01111011) | 0b01101000; break;
+ case 10: PORTD = (PORTD & ~0b01111011) | 0b00101011; break;
+ case 11: PORTD = (PORTD & ~0b01111011) | 0b00110011; break;
+ case 12: PORTD = (PORTD & ~0b01111011) | 0b00100011; break;
+ case 13: PORTD = (PORTD & ~0b01111011) | 0b01111000; break;
+ case 14: PORTD = (PORTD & ~0b01111011) | 0b00010011; break;
+ case 15: PORTD = (PORTD & ~0b01111011) | 0b01101001; break;
+ case 16: PORTD = (PORTD & ~0b01111011) | 0b00001011; break;
+ case 17: PORTD = (PORTD & ~0b01111011) | 0b00111011; break;
+ }
+}
+
+void matrix_init(void) {
+ /* Row output pins */
+ DDRD |= 0b01111011;
+ /* Column input pins */
+ DDRC &= ~0b10000000;
+ DDRB &= ~0b01111111;
+ PORTC |= 0b10000000;
+ PORTB |= 0b01111111;
+
+ for (uint8_t i=0; i < MATRIX_ROWS; i++)
+ matrix[i] = matrix_debouncing[i] = 0;
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ select_col(col);
+ _delay_us(3);
+ matrix_row_t col_scan = scan_col();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+ bool curr_bit = col_scan & (1<<row);
+ if (prev_bit != curr_bit) {
+ matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
+ debouncing = DEBOUNCING_DELAY;
+ }
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing)
+ _delay_ms(1);
+ else
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++)
+ matrix[i] = matrix_debouncing[i];
+ }
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+inline matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+#ifndef NO_PRINT
+ print("\nr\\c ABCDEFGHIJKLMNOPQR\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix_row_t matrix_row = matrix_get_row(row);
+ xprintf("%02X: ", row);
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ bool curr_bit = matrix_row & (1<<col);
+ xprintf("%c", curr_bit ? '*' : '.');
+ }
+ print("\n");
+ }
+#endif
+}
+
+uint8_t matrix_key_count(void) {
+ uint8_t count = 0;
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++)
+ count += bitpop32(matrix[row]);
+ return count;
+}
diff --git a/keyboards/bpiphany/frosty_flake/readme.md b/keyboards/bpiphany/frosty_flake/readme.md
new file mode 100644
index 000000000..5917022a8
--- /dev/null
+++ b/keyboards/bpiphany/frosty_flake/readme.md
@@ -0,0 +1,43 @@
+# Frosty Flake Controller
+
+This is the firmware for Rev. 20140521 of the Frosty Flake controller
+by [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/),
+a replacement controller for the [Cooler Master Quick Fire
+Rapid](http://www.coolermaster.com/peripheral/keyboards/quickfirerapid/).
+
+The code was adapted from the [BathroomEpiphanies TMK
+Firmware](https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers),
+but has been cleaned up to match the
+[schematic](https://deskthority.net/wiki/File:Frosty_Flake_Schematics.pdf)
+and gone through some minor refactoring for QMK.
+
+## 104 and 87 layout support
+
+Support for both 104 key and 87 key layouts is provided. See the
+keymaps `default` (104) and `tkl` (87) for example layouts.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Frosty Flake
+Hardware Availability: [1upkeyboards](https://www.1upkeyboards.com/shop/controllers/qfr-frosty-flake-controller/)
+
+Make example for this keyboard (after setting up your build environment):
+
+104 key default layout:
+
+```
+make bpiphany/frosty_flake:default
+```
+
+To directly flash the frosty_flake after compiling use:
+
+```
+make bpiphany/frosty_flake:default:dfu
+```
+
+87 key tkl layout:
+
+```
+make bpiphany/frosty_flake:tkl: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/frosty_flake/rules.mk b/keyboards/bpiphany/frosty_flake/rules.mk
index 94619e03d..94619e03d 100644
--- a/keyboards/frosty_flake/rules.mk
+++ b/keyboards/bpiphany/frosty_flake/rules.mk
diff --git a/keyboards/kitten_paw/config.h b/keyboards/bpiphany/kitten_paw/config.h
index d7089734a..d7089734a 100644
--- a/keyboards/kitten_paw/config.h
+++ b/keyboards/bpiphany/kitten_paw/config.h
diff --git a/keyboards/kitten_paw/info.json b/keyboards/bpiphany/kitten_paw/info.json
index 7d2574710..7d2574710 100644
--- a/keyboards/kitten_paw/info.json
+++ b/keyboards/bpiphany/kitten_paw/info.json
diff --git a/keyboards/kitten_paw/keymaps/default/keymap.c b/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c
index 6767f0414..6767f0414 100644
--- a/keyboards/kitten_paw/keymaps/default/keymap.c
+++ b/keyboards/bpiphany/kitten_paw/keymaps/default/keymap.c
diff --git a/keyboards/kitten_paw/keymaps/ickerwx/config.h b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/config.h
index 142aba890..142aba890 100644
--- a/keyboards/kitten_paw/keymaps/ickerwx/config.h
+++ b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/config.h
diff --git a/keyboards/kitten_paw/keymaps/ickerwx/keymap.c b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c
index 856cef9cc..856cef9cc 100644
--- a/keyboards/kitten_paw/keymaps/ickerwx/keymap.c
+++ b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/keymap.c
diff --git a/keyboards/kitten_paw/keymaps/ickerwx/readme.md b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/readme.md
index 0d23be4ea..0d23be4ea 100644
--- a/keyboards/kitten_paw/keymaps/ickerwx/readme.md
+++ b/keyboards/bpiphany/kitten_paw/keymaps/ickerwx/readme.md
diff --git a/keyboards/kitten_paw/kitten_paw.c b/keyboards/bpiphany/kitten_paw/kitten_paw.c
index 26cb533f2..26cb533f2 100644
--- a/keyboards/kitten_paw/kitten_paw.c
+++ b/keyboards/bpiphany/kitten_paw/kitten_paw.c
diff --git a/keyboards/kitten_paw/kitten_paw.h b/keyboards/bpiphany/kitten_paw/kitten_paw.h
index 4de550f81..4de550f81 100644
--- a/keyboards/kitten_paw/kitten_paw.h
+++ b/keyboards/bpiphany/kitten_paw/kitten_paw.h
diff --git a/keyboards/bpiphany/kitten_paw/matrix.c b/keyboards/bpiphany/kitten_paw/matrix.c
new file mode 100644
index 000000000..6fdbfffd6
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/matrix.c
@@ -0,0 +1,183 @@
+/*
+ Copyright 2014 Ralf Schmitt <ralf@bunkertor.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 <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+static uint8_t debouncing = DEBOUNCING_DELAY;
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static uint8_t read_rows(void);
+static void select_col(uint8_t col);
+
+__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;
+}
+
+/* Column pin configuration
+ *
+ * col: 0 1 2 3 4 5 6 7
+ * pin: PC7 PD5 PD3 PD1 PC2 PD6 PD4 PD2
+ *
+ * Rrr pin configuration
+ *
+ * These rrrs uses one 74HC154 4 to 16 bit demultiplexer (low
+ * active), together with 2 rrrs driven directly from the micro
+ * controller, to control the 18 rrrs. The rrrs are driven from
+ * pins B6,5,4,3,2,1,0.
+ */
+void matrix_init(void) {
+ DDRC &= ~0b10000100; // Row input pins
+ DDRD &= ~0b01111110;
+ PORTC |= 0b10000100;
+ PORTD |= 0b01111110;
+
+ DDRB |= 0b01111111; // Column output pins
+
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ select_col(col);
+ _delay_us(3);
+ uint8_t rows = read_rows();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+ bool curr_bit = rows & (1<<row);
+ if (prev_bit != curr_bit) {
+ matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
+ debouncing = DEBOUNCING_DELAY;
+ }
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ }
+ else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+ matrix_scan_quantum();
+ return 1;
+}
+
+bool matrix_is_modified(void) {
+ if (debouncing)
+ return false;
+ else
+ 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++) {
+ xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row)));
+ }
+}
+
+uint8_t matrix_key_count(void) {
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop32(matrix[i]);
+ }
+ return count;
+}
+
+static uint8_t read_rows(void) {
+ return
+ (PINC&(1<<7) ? 0 : (1<<0)) |
+ (PIND&(1<<5) ? 0 : (1<<1)) |
+ (PIND&(1<<3) ? 0 : (1<<2)) |
+ (PIND&(1<<1) ? 0 : (1<<3)) |
+ (PINC&(1<<2) ? 0 : (1<<4)) |
+ (PIND&(1<<2) ? 0 : (1<<5)) |
+ (PIND&(1<<4) ? 0 : (1<<6)) |
+ (PIND&(1<<6) ? 0 : (1<<7));
+}
+
+static void select_col(uint8_t col) {
+ switch (col) {
+ case 0: PORTB = (PORTB & ~0b01111111) | 0b01100100; break;
+ case 1: PORTB = (PORTB & ~0b01111111) | 0b01101100; break;
+ case 2: PORTB = (PORTB & ~0b01111111) | 0b01100010; break;
+ case 3: PORTB = (PORTB & ~0b01111111) | 0b01111010; break;
+ case 4: PORTB = (PORTB & ~0b01111111) | 0b01100110; break;
+ case 5: PORTB = (PORTB & ~0b01111111) | 0b01110110; break;
+ case 6: PORTB = (PORTB & ~0b01111111) | 0b01101110; break;
+ case 7: PORTB = (PORTB & ~0b01111111) | 0b01111110; break;
+ case 8: PORTB = (PORTB & ~0b01111111) | 0b01000001; break;
+ case 9: PORTB = (PORTB & ~0b01111111) | 0b00100001; break;
+ case 10: PORTB = (PORTB & ~0b01111111) | 0b01101010; break;
+ case 11: PORTB = (PORTB & ~0b01111111) | 0b01110010; break;
+ case 12: PORTB = (PORTB & ~0b01111111) | 0b01111100; break;
+ case 13: PORTB = (PORTB & ~0b01111111) | 0b01110100; break;
+ case 14: PORTB = (PORTB & ~0b01111111) | 0b01111000; break;
+ case 15: PORTB = (PORTB & ~0b01111111) | 0b01110000; break;
+ case 16: PORTB = (PORTB & ~0b01111111) | 0b01100000; break;
+ case 17: PORTB = (PORTB & ~0b01111111) | 0b01101000; break;
+ }
+}
diff --git a/keyboards/bpiphany/kitten_paw/readme.md b/keyboards/bpiphany/kitten_paw/readme.md
new file mode 100644
index 000000000..15737a3a9
--- /dev/null
+++ b/keyboards/bpiphany/kitten_paw/readme.md
@@ -0,0 +1,16 @@
+kitten_paw
+==========
+
+This is the firmware for the 2016 revision of the Kitten Paw controller by Bathroom Epiphanies. Most of the boilerplate code is the work of [BathroomEpiphanies](https://github.com/BathroomEpiphanies).
+
+NKRO doesn't work at the moment, I don't know if I will take the time to find out how to fix this, so far 6KRO is enough for me.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Kitten Paw PCB
+Hardware Availability: https://geekhack.org/index.php?topic=46700.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bpiphany/kitten_paw: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/kitten_paw/rules.mk b/keyboards/bpiphany/kitten_paw/rules.mk
index fab9c422f..fab9c422f 100644
--- a/keyboards/kitten_paw/rules.mk
+++ b/keyboards/bpiphany/kitten_paw/rules.mk
diff --git a/keyboards/pegasushoof/config.h b/keyboards/bpiphany/pegasushoof/config.h
index 0dbec26e4..0dbec26e4 100644
--- a/keyboards/pegasushoof/config.h
+++ b/keyboards/bpiphany/pegasushoof/config.h
diff --git a/keyboards/bpiphany/pegasushoof/info.json b/keyboards/bpiphany/pegasushoof/info.json
new file mode 100644
index 000000000..c4fa28ac4
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/info.json
@@ -0,0 +1,192 @@
+{
+ "keyboard_name": "Pegasus Hoof",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"[", "x":11.5, "y":2.5},
+ {"label":"]", "x":12.5, "y":2.5},
+ {"label":"\\", "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":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":";", "x":10.75, "y":3.5},
+ {"label":"'", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"Shift", "x":0, "y":4.5, "w":1.25},
+ {"label":"ISO \\", "x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"x":3.75, "y":5.5, "w":6.25},
+ {"label":"AltGr", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5}
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"[", "x":11.5, "y":2.5},
+ {"label":"]", "x":12.5, "y":2.5},
+ {"label":"\\", "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":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":";", "x":10.75, "y":3.5},
+ {"label":"'", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"x":3.75, "y":5.5, "w":6.25},
+ {"label":"AltGr", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c b/keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c
new file mode 100644
index 000000000..7db7e5d39
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/keymaps/blowrak/keymap.c
@@ -0,0 +1,110 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+/* Swedish keys */
+#define SE_HALF KC_GRV
+#define SE_PLUS KC_MINS
+#define SE_ACUT KC_EQL
+#define SE_AO KC_LBRC
+#define SE_CIRC KC_RBRC
+#define SE_QUOT KC_BSLS
+#define SE_OE KC_SCLN
+#define SE_AE KC_QUOT
+#define SE_MINS KC_SLSH
+#define SE_LTGT KC_NUBS
+#define SE_LCBR RALT(KC_7)
+#define SE_LBRC RALT(KC_8)
+#define SE_RBRC RALT(KC_9)
+#define SE_RCBR RALT(KC_0)
+#define SE_PIPE RALT(SE_LTGT)
+#define SE_BSLS RALT(SE_PLUS)
+
+#define KM_BLOWRAK 0
+#define KM_QWERTY 1
+#define KM_MEDIA 2
+#define KM_HAXHAX 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Blowrak ISO layer, a Swedish take on Dvorak */
+ [KM_BLOWRAK] = 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, \
+ SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
+ KC_TAB, SE_AO, SE_AE, SE_OE, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_COMM,SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
+ KC_LCTRL,KC_A, KC_O, KC_E, KC_U, KC_I, KC_H, KC_D, KC_T, KC_N, KC_S, SE_MINS, KC_ENT, \
+ KC_LSFT, SE_LTGT,KC_DOT, KC_Q, KC_J, KC_K, KC_B, KC_X, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \
+ KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
+ /* Layer 1: Standard ISO layer */
+ [KM_QWERTY] = LAYOUT( \
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
+ SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,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, SE_AO, SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
+ KC_LCTRL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SE_OE, SE_AE, KC_ENT, \
+ KC_LSFT, SE_LTGT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, SE_MINS, KC_RSFT, KC_UP, \
+ KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
+ /* Layer 2: Media layer */
+ [KM_MEDIA] = LAYOUT( \
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_MUTE,_______,KC_VOLD, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_MPLY, \
+ _______,_______,_______, _______, _______,_______,RESET ,_______, KC_MPRV,KC_MSTP,KC_MNXT),
+ /* Layer 3: Programming layer */
+ [KM_HAXHAX] = LAYOUT( \
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ _______,SE_LCBR,SE_PIPE,SE_RCBR,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ _______,SE_LBRC,SE_BSLS,SE_RBRC,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, \
+ _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(KM_MEDIA),
+ [1] = ACTION_LAYER_TOGGLE(KM_QWERTY)
+};
+
+void matrix_scan_user(void)
+{
+ uint8_t layer = biton32(layer_state);
+ switch (layer) {
+ case KM_BLOWRAK:
+ ph_caps_led_on();
+ ph_sclk_led_off();
+ break;
+ case KM_QWERTY:
+ ph_sclk_led_on();
+ ph_caps_led_off();
+ break;
+ }
+}
+
+/* Mixes in KM_HAXHAX via RALT modifier without shadowing the RALT key combinations. */
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint8_t modifiers = get_mods();
+ if (modifiers & MOD_BIT(KC_RALT) && record->event.pressed) {
+ uint16_t kc = keymap_key_to_keycode(KM_HAXHAX, record->event.key);
+ if (kc != KC_TRNS) {
+ register_code(kc);
+ unregister_code(kc);
+ return false;
+ }
+ }
+ return true;
+}
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk b/keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk
new file mode 100644
index 000000000..8254a8389
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/keymaps/blowrak/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+CUSTOM_MATRIX = yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42
+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.
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/citadel/config.h b/keyboards/bpiphany/pegasushoof/keymaps/citadel/config.h
new file mode 100644
index 000000000..122627e88
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/keymaps/citadel/config.h
@@ -0,0 +1,6 @@
+#pragma once
+
+/* overridden settings: */
+
+#undef PRODUCT
+#define PRODUCT Pegasus Hoof Citadel
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c b/keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c
new file mode 100644
index 000000000..79f07d3bb
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/keymaps/citadel/keymap.c
@@ -0,0 +1,128 @@
+/* Copyright 2018 Daniel Rose <droseger@protonmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+/* Allow shortcuts for combos like RALT(KC_RBRC) that don't take up more than 7 characters: */
+#define G(kc) RALT(KC_##kc)
+#define A(kc) LALT(KC_##kc)
+#define C(kc) LCTL(KC_##kc)
+#undef S /* Original shortcut (quantum_keycodes.h) takes full-sized keycodes: too long! */
+#define S(kc) LSFT(KC_##kc)
+#define CTALDEL LCTL(LALT(KC_DEL))
+
+enum layers {
+ DEF,
+ FUN,
+ RES,
+};
+
+enum tap_dance {
+ AF4,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Layer 0: default layer (ISO-DE)
+ * .----. .-------------------. .-------------------. .-------------------. .--------------.
+ * |Esc | |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10 |F11 |F12 | |PrSc|SLck|2Tp:|
+ * | | | | | | | | | | | | | | | | | |SyRq| |A+F4|
+ * '----' '-------------------' '-------------------' '-------------------' '--------------'
+ * .------------------------------------------------------------------------. .--------------.
+ * |° |! |" |§ |$ |% |& |/ |( |) |= |? |` |Backspa| |Ins |Home|PgUp|
+ * |^ |1 |2 ²|3 ³|4 |5 |6 |7 {|8 [|9 ]|0 }|ß \|´ | | | | | |
+ * |------------------------------------------------------------------------| |--------------|
+ * |Tab |Q |W |E |R |T |Z |U |I |O |P |Ü |* | E | |Del |End |PgDn|
+ * | | | | €| | | | | | | | |+ ~| n | | | | |
+ * |------------------------------------------------------------------\ t | '--------------'
+ * |Fn: |A |S |D |F |G |H |J |K |L |Ö |Ä |' | e |
+ * |Layer 2| | | | | | | | | | | |# | r |
+ * |------------------------------------------------------------------------| .----.
+ * |Shift|> |Y |X |C |V |B |N |M |; |: |_ |Shift | |Up |
+ * | |< ¦| | | | | | | µ|, |. |- | | | |
+ * |------------------------------------------------------------------------| .--------------.
+ * |Ctrl |Super|Alt | |AltGr|Alt |Fn: |Ctrl | |Left|Down|Righ|
+ * | | | | | | |Lay 2| | | | | |
+ * '------------------------------------------------------------------------' '--------------'
+ * NUHS = true position of KC_NUHS
+ */
+[DEF] = 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,TD(AF4), \
+ 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_NUHS, KC_DEL, KC_END, KC_PGDN, \
+ MO(FUN),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,/*NUHS*/KC_ENT, \
+ KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_LALT,MO(FUN),KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT),
+
+ /* Layer 1: function layer
+ * .----. .-------------------. .-------------------. .-------------------. .--------------.
+ * |Ctl+| |My |WWW:|Calc|Medi| |Mus:|Mus:|Mus:|Mus:| |Vol:|Vol:|Vol:|See:| | | |Paus|
+ * |A+De| |Comp|Home| |Play| |Prev|Next|Paus|Stop| |Mute|Down|Up |[3] | | | |Brea|
+ * '----' '-------------------' '-------------------' '-------------------' '--------------'
+ * .------------------------------------------------------------------------. .--------------.
+ * | | | | | | | | | | | | | | | | | |Mou:|
+ * | | | | | | | |{ |[ |] |} |\ | | | | | |WhUp|
+ * |------------------------------------------------------------------------| |--------------|
+ * | | | | | | | | | | | | |~ | | | | |Mou:|
+ * | | | | | | | | | | | | | | | | | |WhDn|
+ * |------------------------------------------------------------------\ | '--------------'
+ * |CapsLck|Mou:|Mou:| | | | | | | | | | | |
+ * | |Fast|Slow| | | | | | | | | | | |
+ * |------------------------------------------------------------------------| .----.
+ * | | | | | | | | |µ | | | | | |Mou:|
+ * | | | | | | | | | | | | | | |Up |
+ * |------------------------------------------------------------------------| .--------------.
+ * |Mous:|Mous:| | | |Super|App | | |Mou:|Mou:|Mou:|
+ * |Bttn2|Bttn1| | | | | | | |Left|Down|Righ|
+ * '------------------------------------------------------------------------' '--------------'
+ *
+ */
+[FUN] = LAYOUT( \
+ CTALDEL, KC_MYCM,KC_WHOM,KC_CALC,KC_MSEL,KC_MPRV,KC_MNXT,KC_MPLY,KC_MSTP,KC_MUTE,KC_VOLD,KC_VOLU,MO(RES), _______,KC_SLCK,KC_PAUS, \
+ _______,_______,_______,_______,_______,_______,_______,G(7), G(8), G(9), G(0), G(MINS),_______,_______, _______,_______,KC_WH_U, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,G(RBRC),_______, _______,_______,KC_WH_D, \
+ KC_CAPS,KC_ACL2,KC_ACL0,_______,_______,_______,_______,_______,_______,_______,_______,_______,/*NUHS*/_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,G(M), _______,_______,_______, _______, KC_MS_U, \
+ KC_BTN2,KC_BTN1,_______, _______, _______,KC_RGUI,KC_APP ,_______, KC_MS_L,KC_MS_D,KC_MS_R),
+
+
+/* Layer 3: Reset layer (prevents accidental resets) */
+[RES] = LAYOUT( \
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,/*NUHS*/_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, \
+ _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______),
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ /* Tap once: nothing. Tap twice: Alt+F4 */
+ [AF4] = ACTION_TAP_DANCE_DOUBLE(XXXXXXX,A(F4)),
+};
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ ph_caps_led_on();
+ } else {
+ ph_caps_led_off();
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ ph_sclk_led_on();
+ } else {
+ ph_sclk_led_off();
+ }
+}
diff --git a/keyboards/pegasushoof/keymaps/citadel/readme.md b/keyboards/bpiphany/pegasushoof/keymaps/citadel/readme.md
index 3618bae86..3618bae86 100644
--- a/keyboards/pegasushoof/keymaps/citadel/readme.md
+++ b/keyboards/bpiphany/pegasushoof/keymaps/citadel/readme.md
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk b/keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk
new file mode 100644
index 000000000..3eb289a71
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/keymaps/citadel/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+CUSTOM_MATRIX = yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42
+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.
+TAP_DANCE_ENABLE = yes # see https://docs.qmk.fm/#/feature_tap_dance (+1000)
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/default/keymap.c b/keyboards/bpiphany/pegasushoof/keymaps/default/keymap.c
new file mode 100644
index 000000000..621441b90
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/keymaps/default/keymap.c
@@ -0,0 +1,56 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+#define KM_QWERTY 0
+#define KM_MEDIA 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Layer 0: Standard ISO layer */
+ [KM_QWERTY] = LAYOUT( \
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_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_CLCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ /* Layer 1: Function layer */
+ [KM_MEDIA] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WAKE, KC_PWR, KC_SLEP, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, \
+ _______, _______, _______, _______, _______, _______, RESET, _______, KC_MPRV, KC_MSTP, KC_MNXT \
+ )
+};
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ ph_caps_led_on();
+ } else {
+ ph_caps_led_off();
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ ph_sclk_led_on();
+ } else {
+ ph_sclk_led_off();
+ }
+}
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk b/keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk
new file mode 100644
index 000000000..8254a8389
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/keymaps/default/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+CUSTOM_MATRIX = yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42
+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.
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/default_jis/keymap.c b/keyboards/bpiphany/pegasushoof/keymaps/default_jis/keymap.c
new file mode 100644
index 000000000..a77474182
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/keymaps/default_jis/keymap.c
@@ -0,0 +1,54 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+ 2018 Charlie McMackin <charliemac@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+#define KM_JIS 0
+#define KM_MEDIA 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] =
+ {
+ /* Layer 0: Standard JIS layer */
+ [KM_JIS] = LAYOUT_tkl_jis(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_JYEN, KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_DEL, KC_END, KC_PGDN, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_BSLS,KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RO, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI,KC_LALT,KC_MHEN, KC_SPC, KC_HENK,KC_KANA,KC_RALT,MO(1), KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT),
+ /* Layer 1: Function layer */
+ [KM_MEDIA] = LAYOUT_tkl_jis(_______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLD, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_MPLY, \
+ _______,_______,_______,_______, _______, _______,_______,_______,_______,RESET , KC_MPRV,KC_MSTP,KC_MNXT)
+ };
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ ph_caps_led_on();
+ } else {
+ ph_caps_led_off();
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ ph_sclk_led_on();
+ } else {
+ ph_sclk_led_off();
+ }
+}
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/default_jis/rules.mk b/keyboards/bpiphany/pegasushoof/keymaps/default_jis/rules.mk
new file mode 100644
index 000000000..8254a8389
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/keymaps/default_jis/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+CUSTOM_MATRIX = yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42
+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.
diff --git a/keyboards/bpiphany/pegasushoof/matrix.c b/keyboards/bpiphany/pegasushoof/matrix.c
new file mode 100644
index 000000000..127433875
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/matrix.c
@@ -0,0 +1,222 @@
+/*
+Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
+Copyright 2016 Daniel Svensson <dsvensson@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 <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+static uint8_t debouncing = DEBOUNCING_DELAY;
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t read_cols(void);
+static void select_row(uint8_t col);
+
+__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)
+{
+ /* Column output pins */
+ DDRD |= 0b01111011;
+ /* Row input pins */
+ DDRC &= ~0b10000000;
+ DDRB &= ~0b01111111;
+ PORTC |= 0b10000000;
+ PORTB |= 0b01111111;
+
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ select_row(col);
+ wait_us(30);
+ matrix_row_t rows = read_cols();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+ bool curr_bit = rows & (1<<row);
+ if (prev_bit != curr_bit) {
+ matrix_debouncing[row] ^= (matrix_row_t) 1 << col;
+ debouncing = DEBOUNCING_DELAY;
+ }
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ wait_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+
+ matrix_scan_quantum();
+
+ return 1;
+}
+
+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] & 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 matrix_row_t read_cols(void)
+{
+ return
+ (PINB & (1 << 5) ? 0 : 1 << 0) |
+ (PINC & (1 << 7) ? 0 : 1 << 1) |
+ (PINB & (1 << 4) ? 0 : 1 << 2) |
+ (PINB & (1 << 6) ? 0 : 1 << 3) |
+ (PINB & (1 << 1) ? 0 : 1 << 4) |
+ (PINB & (1 << 0) ? 0 : 1 << 5) |
+ (PINB & (1 << 3) ? 0 : 1 << 6) |
+ (PINB & (1 << 2) ? 0 : 1 << 7);
+}
+
+static void select_row(uint8_t col)
+{
+ switch (col) {
+ case 0:
+ PORTD = (PORTD & ~0b01111011) | 0b00110011;
+ break;
+ case 1:
+ PORTD = (PORTD & ~0b01111011) | 0b01110000;
+ break;
+ case 2:
+ PORTD = (PORTD & ~0b01111011) | 0b00010011;
+ break;
+ case 3:
+ PORTD = (PORTD & ~0b01111011) | 0b01101000;
+ break;
+ case 4:
+ PORTD = (PORTD & ~0b01111011) | 0b00001011;
+ break;
+ case 5:
+ PORTD = (PORTD & ~0b01111011) | 0b00111011;
+ break;
+ case 6:
+ PORTD = (PORTD & ~0b01111011) | 0b01111000;
+ break;
+ case 7:
+ PORTD = (PORTD & ~0b01111011) | 0b01100001;
+ break;
+ case 8:
+ PORTD = (PORTD & ~0b01111011) | 0b01101001;
+ break;
+ case 9:
+ PORTD = (PORTD & ~0b01111011) | 0b01110001;
+ break;
+ case 10:
+ PORTD = (PORTD & ~0b01111011) | 0b01101010;
+ break;
+ case 11:
+ PORTD = (PORTD & ~0b01111011) | 0b01100010;
+ break;
+ case 12:
+ PORTD = (PORTD & ~0b01111011) | 0b01111001;
+ break;
+ case 13:
+ PORTD = (PORTD & ~0b01111011) | 0b01100000;
+ break;
+ case 14:
+ PORTD = (PORTD & ~0b01111011) | 0b01000011;
+ break;
+ case 15:
+ PORTD = (PORTD & ~0b01111011) | 0b00011011;
+ break;
+ case 16:
+ PORTD = (PORTD & ~0b01111011) | 0b00100011;
+ break;
+ case 17:
+ PORTD = (PORTD & ~0b01111011) | 0b00101011;
+ break;
+ }
+}
diff --git a/keyboards/pegasushoof/pegasushoof.c b/keyboards/bpiphany/pegasushoof/pegasushoof.c
index cde814812..cde814812 100644
--- a/keyboards/pegasushoof/pegasushoof.c
+++ b/keyboards/bpiphany/pegasushoof/pegasushoof.c
diff --git a/keyboards/bpiphany/pegasushoof/pegasushoof.h b/keyboards/bpiphany/pegasushoof/pegasushoof.h
new file mode 100644
index 000000000..b91235aad
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/pegasushoof.h
@@ -0,0 +1,83 @@
+/*
+Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef PEGASUSHOOF_H
+#define PEGASUSHOOF_H
+
+#include "matrix.h"
+#include "quantum.h"
+
+#define LAYOUT( \
+ KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
+ KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
+ KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
+ KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
+ KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
+ KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
+ ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
+ /* 0 */ { KC_NO , KC_NO , KC0 , KC_NO , KC_NO , KF0 , KC_NO , KC_NO , KC_NO , KJ0 , KK0 , KC_NO , KM0 , KN0 , KO0 , KC_NO , KQ0 , KR0 }, \
+ /* 1 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , KC_NO , KO1 , KP1 , KC_NO , KC_NO }, \
+ /* 2 */ { KC_NO , KB2 , KC_NO , KD2 , KC_NO , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , KC_NO , KO2 , KC_NO , KC_NO , KC_NO }, \
+ /* 3 */ { KA3 , KB3 , KC_NO , KC_NO , KC_NO , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , KC_NO , KO3 , KC_NO , KC_NO , KC_NO }, \
+ /* 4 */ { KC_NO , KC_NO , KC4 , KC_NO , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , KC_NO , KO4 , KP4 , KQ4 , KR4 }, \
+ /* 5 */ { KC_NO , KC_NO , KC5 , KC_NO , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , KC_NO , KC_NO }, \
+ /* 6 */ { KC_NO , KC_NO , KC6 , KC_NO , KC_NO , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , KC_NO , KN6 , KO6 , KC_NO , KQ6 , KC_NO }, \
+ /* 7 */ { KC_NO , KC_NO , KC_NO , KC_NO , KC_NO , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , KC_NO , KP7 , KC_NO , KC_NO } \
+ }
+
+#define LAYOUT_tkl_ansi( \
+ KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
+ KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
+ KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
+ KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
+ KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
+ KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
+ ) LAYOUT( \
+ KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
+ KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
+ KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
+ KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
+ KB2,KC_NO,KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
+ KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
+ )
+
+#define LAYOUT_tkl_jis( \
+ KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
+ KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO7, KO2, KR4, KC4, KE4, \
+ KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KQ4, KC5, KE5, \
+ KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO3, KO1, \
+ KB2, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KL0, KB3, KC6, \
+ KP4, KD2, KN6, KG0, KQ6, KH0, KI0, KN0, KM0, KP1, KC0, KQ0, KR0 \
+ ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
+ /* 0 */ { KC_NO, KC_NO, KC0, KC_NO, KC_NO, KF0, KG0, KH0, KI0, KJ0, KK0, KL0, KM0, KN0, KO0, KC_NO, KQ0, KR0 }, \
+ /* 1 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KG1, KH1, KI1, KJ1, KK1, KL1, KM1, KC_NO, KO1, KP1, KC_NO, KC_NO }, \
+ /* 2 */ { KC_NO, KB2, KC_NO, KD2, KC_NO, KF2, KG2, KH2, KI2, KJ2, KK2, KL2, KM2, KC_NO, KO2, KC_NO, KC_NO, KC_NO }, \
+ /* 3 */ { KC_NO, KB3, KC_NO, KC_NO, KC_NO, KF3, KG3, KH3, KI3, KJ3, KK3, KL3, KM3, KC_NO, KO3, KC_NO, KC_NO, KC_NO }, \
+ /* 4 */ { KC_NO, KC_NO, KC4, KC_NO, KE4, KF4, KG4, KH4, KI4, KJ4, KK4, KL4, KM4, KC_NO, KO4, KP4, KQ4, KR4 }, \
+ /* 5 */ { KC_NO, KC_NO, KC5, KC_NO, KE5, KF5, KG5, KH5, KI5, KJ5, KK5, KL5, KM5, KN5, KO5, KP5, KC_NO, KC_NO }, \
+ /* 6 */ { KC_NO, KC_NO, KC6, KC_NO, KC_NO, KF6, KG6, KC_NO, KI6, KJ6, KK6, KL6, KC_NO, KN6, KO6, KC_NO, KQ6, KC_NO }, \
+ /* 7 */ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KF7, KG7, KH7, KI7, KJ7, KK7, KL7, KK7, KL7, KO7, KP7, KC_NO, KC_NO } \
+}
+
+inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); }
+inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
+
+inline void ph_sclk_led_on(void) { DDRC |= (1<<5); PORTC &= ~(1<<5); }
+inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
+
+
+#endif
diff --git a/keyboards/bpiphany/pegasushoof/readme.md b/keyboards/bpiphany/pegasushoof/readme.md
new file mode 100644
index 000000000..10ec79300
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/readme.md
@@ -0,0 +1,13 @@
+# Pegasus Hoof Controller
+
+A replacement controller that turns your Filco Majestouch 87/88 mechanical keyboard into a fully programmable keyboard.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Pegasus Hoof
+Hardware Availability: [1upkeyboards](https://www.1upkeyboards.com/shop/controllers/filco-pegasus-hoof-controller/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bpiphany/pegasus_hoof: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/bpiphany/pegasushoof/rules.mk b/keyboards/bpiphany/pegasushoof/rules.mk
new file mode 100644
index 000000000..00e4bb0ea
--- /dev/null
+++ b/keyboards/bpiphany/pegasushoof/rules.mk
@@ -0,0 +1,68 @@
+# 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
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = 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.
+
+LAYOUTS = tkl_ansi
+
+CUSTOM_MATRIX = yes
+SRC = matrix.c
diff --git a/keyboards/bpiphany/readme.md b/keyboards/bpiphany/readme.md
new file mode 100644
index 000000000..992b7c908
--- /dev/null
+++ b/keyboards/bpiphany/readme.md
@@ -0,0 +1,6 @@
+# Bathroom Epiphanies
+
+bpiphany is the owner and designer of [Bathroom Epiphanies](http://bathroomepiphanies.com/).
+
+He is based in Sweden and creates several controller boards as a swappable component for some off the shelf keyboards.
+
diff --git a/keyboards/tiger_lily/config.h b/keyboards/bpiphany/tiger_lily/config.h
index 490819290..490819290 100644
--- a/keyboards/tiger_lily/config.h
+++ b/keyboards/bpiphany/tiger_lily/config.h
diff --git a/keyboards/tiger_lily/info.json b/keyboards/bpiphany/tiger_lily/info.json
index 1a2194b06..1a2194b06 100644
--- a/keyboards/tiger_lily/info.json
+++ b/keyboards/bpiphany/tiger_lily/info.json
diff --git a/keyboards/frosty_flake/keymaps/default/config.h b/keyboards/bpiphany/tiger_lily/keymaps/default/config.h
index 8893d122e..8893d122e 100644
--- a/keyboards/frosty_flake/keymaps/default/config.h
+++ b/keyboards/bpiphany/tiger_lily/keymaps/default/config.h
diff --git a/keyboards/tiger_lily/keymaps/default/keymap.c b/keyboards/bpiphany/tiger_lily/keymaps/default/keymap.c
index 46c17aca8..46c17aca8 100644
--- a/keyboards/tiger_lily/keymaps/default/keymap.c
+++ b/keyboards/bpiphany/tiger_lily/keymaps/default/keymap.c
diff --git a/keyboards/tiger_lily/keymaps/default/readme.md b/keyboards/bpiphany/tiger_lily/keymaps/default/readme.md
index 4626859df..4626859df 100644
--- a/keyboards/tiger_lily/keymaps/default/readme.md
+++ b/keyboards/bpiphany/tiger_lily/keymaps/default/readme.md
diff --git a/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk b/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk
new file mode 100644
index 000000000..93f927c7d
--- /dev/null
+++ b/keyboards/bpiphany/tiger_lily/keymaps/default/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/frosty_flake/keymaps/tkl/config.h b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/config.h
index 8893d122e..8893d122e 100644
--- a/keyboards/frosty_flake/keymaps/tkl/config.h
+++ b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/config.h
diff --git a/keyboards/tiger_lily/keymaps/default_ansi/keymap.c b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/keymap.c
index 6457b0282..6457b0282 100644
--- a/keyboards/tiger_lily/keymaps/default_ansi/keymap.c
+++ b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/keymap.c
diff --git a/keyboards/tiger_lily/keymaps/default_ansi/readme.md b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/readme.md
index 2cb8c8993..2cb8c8993 100644
--- a/keyboards/tiger_lily/keymaps/default_ansi/readme.md
+++ b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/readme.md
diff --git a/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk
new file mode 100644
index 000000000..93f927c7d
--- /dev/null
+++ b/keyboards/bpiphany/tiger_lily/keymaps/default_ansi/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/bpiphany/tiger_lily/matrix.c b/keyboards/bpiphany/tiger_lily/matrix.c
new file mode 100644
index 000000000..3b48f6b36
--- /dev/null
+++ b/keyboards/bpiphany/tiger_lily/matrix.c
@@ -0,0 +1,155 @@
+/*
+ Copyright 2017 Gabriel Young <gabeplaysdrums@live.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+static uint8_t debouncing = DEBOUNCING_DELAY;
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+static matrix_row_t scan_col(void) {
+ return (
+ (PINC&(1<<2) ? 0 : ((matrix_row_t)1<<0)) | \
+ (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<1)) | \
+ (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) | \
+ (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<3)) | \
+ (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) | \
+ (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<5)) | \
+ (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<6)) | \
+ (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<7))
+ );
+}
+
+static void select_col(uint8_t col) {
+ switch (col) {
+ case 0: PORTD = (PORTD & ~0b01110111) | 0b01110110; break; \
+ case 1: PORTD = (PORTD & ~0b01110111) | 0b01100001; break; \
+ case 2: PORTD = (PORTD & ~0b01110111) | 0b01100101; break; \
+ case 3: PORTD = (PORTD & ~0b01110111) | 0b00000011; break; \
+ case 4: PORTD = (PORTD & ~0b01110111) | 0b00000111; break; \
+ case 5: PORTD = (PORTD & ~0b01110111) | 0b00010011; break; \
+ case 6: PORTD = (PORTD & ~0b01110111) | 0b00010111; break; \
+ case 7: PORTD = (PORTD & ~0b01110111) | 0b00100011; break; \
+ case 8: PORTD = (PORTD & ~0b01110111) | 0b00100111; break; \
+ case 9: PORTD = (PORTD & ~0b01110111) | 0b00110011; break; \
+ case 10: PORTD = (PORTD & ~0b01110111) | 0b01110010; break; \
+ case 11: PORTD = (PORTD & ~0b01110111) | 0b01100110; break; \
+ case 12: PORTD = (PORTD & ~0b01110111) | 0b01110000; break; \
+ case 13: PORTD = (PORTD & ~0b01110111) | 0b01100100; break; \
+ case 14: PORTD = (PORTD & ~0b01110111) | 0b01100000; break; \
+ case 15: PORTD = (PORTD & ~0b01110111) | 0b01000111; break; \
+ case 16: PORTD = (PORTD & ~0b01110111) | 0b01000011; break; \
+ case 17: PORTD = (PORTD & ~0b01110111) | 0b00110111; break;
+ }
+}
+
+void matrix_init(void) {
+ /* Column output pins */ \
+ DDRD |= 0b01110111; \
+ /* Row input pins */ \
+ DDRC &= ~0b10000100; \
+ DDRB &= ~0b01111110; \
+ PORTC |= 0b10000100; \
+ PORTB |= 0b01111110;
+
+ for (uint8_t i=0; i < MATRIX_ROWS; i++)
+ matrix[i] = matrix_debouncing[i] = 0;
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ select_col(col);
+ _delay_us(3);
+ matrix_row_t col_scan = scan_col();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+ bool curr_bit = col_scan & (1<<row);
+ if (prev_bit != curr_bit) {
+ matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
+ debouncing = DEBOUNCING_DELAY;
+ }
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing)
+ _delay_ms(1);
+ else
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++)
+ matrix[i] = matrix_debouncing[i];
+ }
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+inline matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+ #ifndef NO_PRINT
+ print("\nr\\c ABCDEFGHIJKLMNOPQR\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix_row_t matrix_row = matrix_get_row(row);
+ xprintf("%02X: ", row);
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ bool curr_bit = matrix_row & (1<<col);
+ xprintf("%c", curr_bit ? '*' : '.');
+ }
+ print("\n");
+ }
+ #endif
+}
+
+uint8_t matrix_key_count(void) {
+ uint8_t count = 0;
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++)
+ count += bitpop32(matrix[row]);
+ return count;
+}
diff --git a/keyboards/bpiphany/tiger_lily/readme.md b/keyboards/bpiphany/tiger_lily/readme.md
new file mode 100644
index 000000000..1fcb6c3d6
--- /dev/null
+++ b/keyboards/bpiphany/tiger_lily/readme.md
@@ -0,0 +1,16 @@
+tiger_lily
+==========
+
+This is the firmware for Rev. 20161114 of the Tiger Lily controller by [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/), a replacement controller for the [Filco Majestouch 2 104 key](https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=1819). Bathroom Epiphanies has advised that the source is also compatible with the Black Petal controller, however I do not own an example to test against.
+
+The code was adapted from the [BathroomEpiphanies TMK Firmware](https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers).
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Tiger Lily
+Hardware Availability: https://geekhack.org/index.php?topic=46700.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bpiphany/tiger_lily: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/tiger_lily/rules.mk b/keyboards/bpiphany/tiger_lily/rules.mk
index 8f07bb006..8f07bb006 100644
--- a/keyboards/tiger_lily/rules.mk
+++ b/keyboards/bpiphany/tiger_lily/rules.mk
diff --git a/keyboards/tiger_lily/tiger_lily.c b/keyboards/bpiphany/tiger_lily/tiger_lily.c
index d2e7ba709..d2e7ba709 100644
--- a/keyboards/tiger_lily/tiger_lily.c
+++ b/keyboards/bpiphany/tiger_lily/tiger_lily.c
diff --git a/keyboards/tiger_lily/tiger_lily.h b/keyboards/bpiphany/tiger_lily/tiger_lily.h
index 65e4d9156..65e4d9156 100644
--- a/keyboards/tiger_lily/tiger_lily.h
+++ b/keyboards/bpiphany/tiger_lily/tiger_lily.h
diff --git a/keyboards/unloved_bastard/config.h b/keyboards/bpiphany/unloved_bastard/config.h
index d89e85862..d89e85862 100644
--- a/keyboards/unloved_bastard/config.h
+++ b/keyboards/bpiphany/unloved_bastard/config.h
diff --git a/keyboards/unloved_bastard/info.json b/keyboards/bpiphany/unloved_bastard/info.json
index efa995088..efa995088 100644
--- a/keyboards/unloved_bastard/info.json
+++ b/keyboards/bpiphany/unloved_bastard/info.json
diff --git a/keyboards/unloved_bastard/keymaps/default/config.h b/keyboards/bpiphany/unloved_bastard/keymaps/default/config.h
index c55f7f9f7..c55f7f9f7 100644
--- a/keyboards/unloved_bastard/keymaps/default/config.h
+++ b/keyboards/bpiphany/unloved_bastard/keymaps/default/config.h
diff --git a/keyboards/unloved_bastard/keymaps/default/keymap.c b/keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c
index ea103154e..ea103154e 100644
--- a/keyboards/unloved_bastard/keymaps/default/keymap.c
+++ b/keyboards/bpiphany/unloved_bastard/keymaps/default/keymap.c
diff --git a/keyboards/unloved_bastard/keymaps/default/readme.md b/keyboards/bpiphany/unloved_bastard/keymaps/default/readme.md
index a2b5f1192..a2b5f1192 100644
--- a/keyboards/unloved_bastard/keymaps/default/readme.md
+++ b/keyboards/bpiphany/unloved_bastard/keymaps/default/readme.md
diff --git a/keyboards/unloved_bastard/keymaps/default_ansi/config.h b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/config.h
index c55f7f9f7..c55f7f9f7 100644
--- a/keyboards/unloved_bastard/keymaps/default_ansi/config.h
+++ b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/config.h
diff --git a/keyboards/unloved_bastard/keymaps/default_ansi/keymap.c b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c
index 16c0342d2..16c0342d2 100644
--- a/keyboards/unloved_bastard/keymaps/default_ansi/keymap.c
+++ b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/keymap.c
diff --git a/keyboards/unloved_bastard/keymaps/default_ansi/readme.md b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/readme.md
index 00d90f12c..00d90f12c 100644
--- a/keyboards/unloved_bastard/keymaps/default_ansi/readme.md
+++ b/keyboards/bpiphany/unloved_bastard/keymaps/default_ansi/readme.md
diff --git a/keyboards/bpiphany/unloved_bastard/matrix.c b/keyboards/bpiphany/unloved_bastard/matrix.c
new file mode 100644
index 000000000..bb6de8613
--- /dev/null
+++ b/keyboards/bpiphany/unloved_bastard/matrix.c
@@ -0,0 +1,156 @@
+/*
+ Copyright 2017 Gabriel Young <gabeplaysdrums@live.com>
+ Copyright 2018 Alexander Fougner <fougner89 at 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 <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+__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) {
+}
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+static uint8_t debouncing = DEBOUNCING_DELAY;
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static matrix_row_t scan_col(void) {
+ return (
+ (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<0)) |
+ (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<1)) |
+ (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<2)) |
+ (PINB&(1<<0) ? 0 : ((matrix_row_t)1<<3)) |
+ (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<4)) |
+ (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<5)) |
+ (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<6)) |
+ (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<7))
+ );
+}
+
+static void select_col(uint8_t col) {
+ switch (col) {
+ case 0: PORTD = (PORTD & ~0b00111111) | 0b00110011; break;
+ case 1: PORTD = (PORTD & ~0b00111111) | 0b00100011; break;
+ case 2: PORTD = (PORTD & ~0b00111111) | 0b00010111; break;
+ case 3: PORTD = (PORTD & ~0b00111111) | 0b00110011; break;
+ case 4: PORTD = (PORTD & ~0b00111111) | 0b00010011; break;
+ case 5: PORTD = (PORTD & ~0b00111111) | 0b00011011; break;
+ case 6: PORTD = (PORTD & ~0b00111111) | 0b00110100; break;
+ case 7: PORTD = (PORTD & ~0b00111111) | 0b00111010; break;
+ case 8: PORTD = (PORTD & ~0b00111111) | 0b00111000; break;
+ case 9: PORTD = (PORTD & ~0b00111111) | 0b00111100; break;
+ case 10: PORTD = (PORTD & ~0b00111111) | 0b00110010; break;
+ case 11: PORTD = (PORTD & ~0b00111111) | 0b00011111; break;
+ case 12: PORTD = (PORTD & ~0b00111111) | 0b00001111; break;
+ case 13: PORTD = (PORTD & ~0b00111111) | 0b00100111; break;
+ case 14: PORTD = (PORTD & ~0b00111111) | 0b00000111; break;
+ case 15: PORTD = (PORTD & ~0b00111111) | 0b00110110; break;
+ case 16: PORTD = (PORTD & ~0b00111111) | 0b00001011; break;
+ case 17: PORTD = (PORTD & ~0b00111111) | 0b00000011; break;
+ }
+}
+
+void matrix_init(void) {
+ /* Row output pins */
+ DDRD |= 0b00111111;
+ /* Column input pins */
+ DDRC &= ~0b10000000;
+ DDRB &= ~0b01111111;
+ PORTC |= 0b10000000;
+ PORTB |= 0b01111111;
+
+ for (uint8_t i=0; i < MATRIX_ROWS; i++)
+ matrix[i] = matrix_debouncing[i] = 0;
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ select_col(col);
+ _delay_us(3);
+ matrix_row_t col_scan = scan_col();
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+ bool curr_bit = col_scan & (1<<row);
+ if (prev_bit != curr_bit) {
+ matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
+ debouncing = DEBOUNCING_DELAY;
+ }
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing)
+ _delay_ms(1);
+ else
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++)
+ matrix[i] = matrix_debouncing[i];
+ }
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+inline matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+#ifndef NO_PRINT
+ print("\nr\\c ABCDEFGHIJKLMNOPQR\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix_row_t matrix_row = matrix_get_row(row);
+ xprintf("%02X: ", row);
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ bool curr_bit = matrix_row & (1<<col);
+ xprintf("%c", curr_bit ? '*' : '.');
+ }
+ print("\n");
+ }
+#endif
+}
+
+uint8_t matrix_key_count(void) {
+ uint8_t count = 0;
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++)
+ count += bitpop32(matrix[row]);
+ return count;
+}
diff --git a/keyboards/bpiphany/unloved_bastard/readme.md b/keyboards/bpiphany/unloved_bastard/readme.md
new file mode 100644
index 000000000..9909d5af3
--- /dev/null
+++ b/keyboards/bpiphany/unloved_bastard/readme.md
@@ -0,0 +1,15 @@
+# unloved_bastard
+
+![unloved_bastard](imgur.com image replace me!)
+
+A short description of the keyboard/project
+
+Keyboard Maintainer: [Alexander Fougner](https://github.com/fougner)
+Hardware Supported: CoolerMaster Masterkeys S PBT (Not the Pro versions with backlighting etc)
+Hardware Availability: Pretty much anywhere
+
+Make example for this keyboard (after setting up your build environment):
+
+ make bpiphany/unloved_bastard: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/unloved_bastard/rules.mk b/keyboards/bpiphany/unloved_bastard/rules.mk
index 2db321c57..2db321c57 100644
--- a/keyboards/unloved_bastard/rules.mk
+++ b/keyboards/bpiphany/unloved_bastard/rules.mk
diff --git a/keyboards/unloved_bastard/unloved_bastard.c b/keyboards/bpiphany/unloved_bastard/unloved_bastard.c
index 197593060..197593060 100644
--- a/keyboards/unloved_bastard/unloved_bastard.c
+++ b/keyboards/bpiphany/unloved_bastard/unloved_bastard.c
diff --git a/keyboards/unloved_bastard/unloved_bastard.h b/keyboards/bpiphany/unloved_bastard/unloved_bastard.h
index 9eaf587d7..9eaf587d7 100644
--- a/keyboards/unloved_bastard/unloved_bastard.h
+++ b/keyboards/bpiphany/unloved_bastard/unloved_bastard.h
diff --git a/keyboards/canoe/readme.md b/keyboards/canoe/readme.md
index 4a83efd82..f58ffe4fd 100644
--- a/keyboards/canoe/readme.md
+++ b/keyboards/canoe/readme.md
@@ -11,4 +11,34 @@ Make example for this keyboard (after setting up your build environment):
make canoe:default
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/canoe/rules.mk b/keyboards/canoe/rules.mk
index 73c361e2a..3d7bc0215 100644
--- a/keyboards/canoe/rules.mk
+++ b/keyboards/canoe/rules.mk
@@ -26,13 +26,13 @@ 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
+# 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 = yes
-MOUSEKEY_ENABLE = yes
+BOOTMAGIC_ENABLE = full
+MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes
CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
diff --git a/keyboards/catch22/config.h b/keyboards/catch22/config.h
index cb7ca7d84..c5cf8233d 100644
--- a/keyboards/catch22/config.h
+++ b/keyboards/catch22/config.h
@@ -39,16 +39,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DIODE_DIRECTION COL2ROW
/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 50
+// #define DEBOUNCING_DELAY 0
/* key combination for command */
#define IS_COMMAND() ( \
false \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#ifdef RGBLIGHT_ENABLE
#define RGB_DI_PIN F6
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/catch22/keymaps/default/keymap.c b/keyboards/catch22/keymaps/default/keymap.c
index f0300d27f..f36478d44 100644
--- a/keyboards/catch22/keymaps/default/keymap.c
+++ b/keyboards/catch22/keymaps/default/keymap.c
@@ -7,11 +7,11 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT( /* Base */
- KC_A, KC_B, KC_C, KC_D, \
- KC_E, KC_F, KC_G, KC_H, \
- MO(_FN), KC_I, KC_J, KC_K, KC_L, \
- KC_1, KC_M, KC_N, KC_O, KC_P, \
- KC_Q, KC_R, KC_S, KC_T \
+ KC_NLCK, KC_PSLS, KC_PAST, KC_BSPC, \
+ KC_P7, KC_P8, KC_P9, KC_PEQL, \
+ MO(_FN), KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_PENT, KC_P1, KC_P2, KC_P3, KC_PMNS, \
+ KC_SPC, KC_P0, KC_PDOT, KC_TAB \
),
[_FN] = LAYOUT(
RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUI, \
diff --git a/keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.c b/keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.c
new file mode 100644
index 000000000..7e9f90853
--- /dev/null
+++ b/keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.c
@@ -0,0 +1,111 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/*
+ * This file has been automatically generated using ChibiStudio board
+ * generator plugin. Do not edit manually.
+ */
+
+#include "hal.h"
+
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+/**
+ * @brief PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ * This variable is used by the HAL when initializing the PAL driver.
+ */
+const PALConfig pal_default_config = {
+#if STM32_HAS_GPIOA
+ {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
+ VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
+#endif
+#if STM32_HAS_GPIOB
+ {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
+ VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
+#endif
+#if STM32_HAS_GPIOC
+ {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
+ VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
+#endif
+#if STM32_HAS_GPIOD
+ {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
+ VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
+#endif
+#if STM32_HAS_GPIOE
+ {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
+ VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
+#endif
+#if STM32_HAS_GPIOF
+ {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
+ VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
+#endif
+#if STM32_HAS_GPIOG
+ {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
+ VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
+#endif
+#if STM32_HAS_GPIOH
+ {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
+ VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
+#endif
+#if STM32_HAS_GPIOI
+ {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
+ VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}
+#endif
+};
+#endif
+
+void enter_bootloader_mode_if_requested(void);
+
+/**
+ * @brief Early initialization code.
+ * @details This initialization must be performed just after stack setup
+ * and before any other initialization.
+ */
+void __early_init(void) {
+ enter_bootloader_mode_if_requested();
+ stm32_clock_init();
+}
+
+
+
+#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
+/**
+ * @brief MMC_SPI card detection.
+ */
+bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return true;
+}
+
+/**
+ * @brief MMC_SPI card write protection detection.
+ */
+bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return false;
+}
+#endif
+
+/**
+ * @brief Board-specific initialization code.
+ * @todo Add your board-specific code, if any.
+ */
+void boardInit(void) {
+}
diff --git a/keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.h b/keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.h
new file mode 100644
index 000000000..173f7b605
--- /dev/null
+++ b/keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.h
@@ -0,0 +1,923 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/*
+ * This file has been automatically generated using ChibiStudio board
+ * generator plugin. Do not edit manually.
+ */
+
+#ifndef BOARD_H
+#define BOARD_H
+
+/*
+ * Setup for ST STM32F072B-Discovery board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_ST_STM32F072B_DISCOVERY
+#define BOARD_NAME "ST STM32F072B-Discovery"
+
+/*
+ * Board oscillators-related settings.
+ * NOTE: LSE not fitted.
+ * NOTE: HSE not fitted.
+ */
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK 0U
+#endif
+
+#define STM32_LSEDRV (3U << 3U)
+
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK 0U
+#endif
+
+#define STM32_HSE_BYPASS
+
+/*
+ * MCU type as defined in the ST header.
+ */
+#define STM32F072xB
+
+/*
+ * IO pins assignments.
+ */
+#define GPIOA_BUTTON 0U
+#define GPIOA_PIN1 1U
+#define GPIOA_PIN2 2U
+#define GPIOA_PIN3 3U
+#define GPIOA_PIN4 4U
+#define GPIOA_PIN5 5U
+#define GPIOA_PIN6 6U
+#define GPIOA_PIN7 7U
+#define GPIOA_PIN8 8U
+#define GPIOA_PIN9 9U
+#define GPIOA_PIN10 10U
+#define GPIOA_USB_DM 11U
+#define GPIOA_USB_DP 12U
+#define GPIOA_SWDIO 13U
+#define GPIOA_SWCLK 14U
+#define GPIOA_PIN15 15U
+
+#define GPIOB_PIN0 0U
+#define GPIOB_PIN1 1U
+#define GPIOB_PIN2 2U
+#define GPIOB_PIN3 3U
+#define GPIOB_PIN4 4U
+#define GPIOB_PIN5 5U
+#define GPIOB_PIN6 6U
+#define GPIOB_PIN7 7U
+#define GPIOB_PIN8 8U
+#define GPIOB_PIN9 9U
+#define GPIOB_PIN10 10U
+#define GPIOB_PIN11 11U
+#define GPIOB_PIN12 12U
+#define GPIOB_SPI2_SCK 13U
+#define GPIOB_SPI2_MISO 14U
+#define GPIOB_SPI2_MOSI 15U
+
+#define GPIOC_MEMS_CS 0U
+#define GPIOC_PIN1 1U
+#define GPIOC_PIN2 2U
+#define GPIOC_PIN3 3U
+#define GPIOC_PIN4 4U
+#define GPIOC_PIN5 5U
+#define GPIOC_LED_RED 6U
+#define GPIOC_LED_BLUE 7U
+#define GPIOC_LED_ORANGE 8U
+#define GPIOC_LED_GREEN 9U
+#define GPIOC_PIN10 10U
+#define GPIOC_PIN11 11U
+#define GPIOC_PIN12 12U
+#define GPIOC_PIN13 13U
+#define GPIOC_OSC32_IN 14U
+#define GPIOC_OSC32_OUT 15U
+
+#define GPIOD_PIN0 0U
+#define GPIOD_PIN1 1U
+#define GPIOD_PIN2 2U
+#define GPIOD_PIN3 3U
+#define GPIOD_PIN4 4U
+#define GPIOD_PIN5 5U
+#define GPIOD_PIN6 6U
+#define GPIOD_PIN7 7U
+#define GPIOD_PIN8 8U
+#define GPIOD_PIN9 9U
+#define GPIOD_PIN10 10U
+#define GPIOD_PIN11 11U
+#define GPIOD_PIN12 12U
+#define GPIOD_PIN13 13U
+#define GPIOD_PIN14 14U
+#define GPIOD_PIN15 15U
+
+#define GPIOE_PIN0 0U
+#define GPIOE_PIN1 1U
+#define GPIOE_PIN2 2U
+#define GPIOE_PIN3 3U
+#define GPIOE_PIN4 4U
+#define GPIOE_PIN5 5U
+#define GPIOE_PIN6 6U
+#define GPIOE_PIN7 7U
+#define GPIOE_PIN8 8U
+#define GPIOE_PIN9 9U
+#define GPIOE_PIN10 10U
+#define GPIOE_PIN11 11U
+#define GPIOE_PIN12 12U
+#define GPIOE_PIN13 13U
+#define GPIOE_PIN14 14U
+#define GPIOE_PIN15 15U
+
+#define GPIOF_OSC_IN 0U
+#define GPIOF_OSC_OUT 1U
+#define GPIOF_PIN2 2U
+#define GPIOF_PIN3 3U
+#define GPIOF_PIN4 4U
+#define GPIOF_PIN5 5U
+#define GPIOF_PIN6 6U
+#define GPIOF_PIN7 7U
+#define GPIOF_PIN8 8U
+#define GPIOF_PIN9 9U
+#define GPIOF_PIN10 10U
+#define GPIOF_PIN11 11U
+#define GPIOF_PIN12 12U
+#define GPIOF_PIN13 13U
+#define GPIOF_PIN14 14U
+#define GPIOF_PIN15 15U
+
+/*
+ * IO lines assignments.
+ */
+#define LINE_BUTTON PAL_LINE(GPIOA, 0U)
+#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
+#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
+#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
+#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
+
+#define LINE_SPI2_SCK PAL_LINE(GPIOB, 13U)
+#define LINE_SPI2_MISO PAL_LINE(GPIOB, 14U)
+#define LINE_SPI2_MOSI PAL_LINE(GPIOB, 15U)
+
+#define LINE_MEMS_CS PAL_LINE(GPIOC, 0U)
+#define LINE_LED_RED PAL_LINE(GPIOC, 6U)
+#define LINE_LED_BLUE PAL_LINE(GPIOC, 7U)
+#define LINE_LED_ORANGE PAL_LINE(GPIOC, 8U)
+#define LINE_LED_GREEN PAL_LINE(GPIOC, 9U)
+#define LINE_OSC32_IN PAL_LINE(GPIOC, 14U)
+#define LINE_OSC32_OUT PAL_LINE(GPIOC, 15U)
+
+
+
+#define LINE_OSC_IN PAL_LINE(GPIOF, 0U)
+#define LINE_OSC_OUT PAL_LINE(GPIOF, 1U)
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
+#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
+#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
+#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
+#define PIN_ODR_LOW(n) (0U << (n))
+#define PIN_ODR_HIGH(n) (1U << (n))
+#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
+#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
+#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
+#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
+#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
+#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
+#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
+#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
+#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
+#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
+
+/*
+ * GPIOA setup:
+ *
+ * PA0 - BUTTON (input floating).
+ * PA1 - PIN1 (input pullup).
+ * PA2 - PIN2 (input pullup).
+ * PA3 - PIN3 (input pullup).
+ * PA4 - PIN4 (input pullup).
+ * PA5 - PIN5 (input pullup).
+ * PA6 - PIN6 (input pullup).
+ * PA7 - PIN7 (input pullup).
+ * PA8 - PIN8 (input pullup).
+ * PA9 - PIN9 (input pullup).
+ * PA10 - PIN10 (input pullup).
+ * PA11 - USB_DM (input floating).
+ * PA12 - USB_DP (input floating).
+ * PA13 - SWDIO (alternate 0).
+ * PA14 - SWCLK (alternate 0).
+ * PA15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_BUTTON) | \
+ PIN_MODE_INPUT(GPIOA_PIN1) | \
+ PIN_MODE_INPUT(GPIOA_PIN2) | \
+ PIN_MODE_INPUT(GPIOA_PIN3) | \
+ PIN_MODE_INPUT(GPIOA_PIN4) | \
+ PIN_MODE_INPUT(GPIOA_PIN5) | \
+ PIN_MODE_INPUT(GPIOA_PIN6) | \
+ PIN_MODE_INPUT(GPIOA_PIN7) | \
+ PIN_MODE_INPUT(GPIOA_PIN8) | \
+ PIN_MODE_INPUT(GPIOA_PIN9) | \
+ PIN_MODE_INPUT(GPIOA_PIN10) | \
+ PIN_MODE_INPUT(GPIOA_USB_DM) | \
+ PIN_MODE_INPUT(GPIOA_USB_DP) | \
+ PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \
+ PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \
+ PIN_MODE_INPUT(GPIOA_PIN15))
+#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_BUTTON) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
+#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_BUTTON) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOA_USB_DM) | \
+ PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
+ PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
+ PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
+ PIN_OSPEED_HIGH(GPIOA_PIN15))
+#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_BUTTON) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
+ PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
+ PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
+ PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
+ PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN15))
+#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_BUTTON) | \
+ PIN_ODR_HIGH(GPIOA_PIN1) | \
+ PIN_ODR_HIGH(GPIOA_PIN2) | \
+ PIN_ODR_HIGH(GPIOA_PIN3) | \
+ PIN_ODR_HIGH(GPIOA_PIN4) | \
+ PIN_ODR_HIGH(GPIOA_PIN5) | \
+ PIN_ODR_HIGH(GPIOA_PIN6) | \
+ PIN_ODR_HIGH(GPIOA_PIN7) | \
+ PIN_ODR_HIGH(GPIOA_PIN8) | \
+ PIN_ODR_HIGH(GPIOA_PIN9) | \
+ PIN_ODR_HIGH(GPIOA_PIN10) | \
+ PIN_ODR_HIGH(GPIOA_USB_DM) | \
+ PIN_ODR_HIGH(GPIOA_USB_DP) | \
+ PIN_ODR_HIGH(GPIOA_SWDIO) | \
+ PIN_ODR_HIGH(GPIOA_SWCLK) | \
+ PIN_ODR_HIGH(GPIOA_PIN15))
+#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_BUTTON, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN7, 0U))
+#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOA_USB_DM, 0U) | \
+ PIN_AFIO_AF(GPIOA_USB_DP, 0U) | \
+ PIN_AFIO_AF(GPIOA_SWDIO, 0U) | \
+ PIN_AFIO_AF(GPIOA_SWCLK, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN15, 0U))
+
+/*
+ * GPIOB setup:
+ *
+ * PB0 - PIN0 (input pullup).
+ * PB1 - PIN1 (input pullup).
+ * PB2 - PIN2 (input pullup).
+ * PB3 - PIN3 (input pullup).
+ * PB4 - PIN4 (input pullup).
+ * PB5 - PIN5 (input pullup).
+ * PB6 - PIN6 (input pullup).
+ * PB7 - PIN7 (input pullup).
+ * PB8 - PIN8 (input pullup).
+ * PB9 - PIN9 (input pullup).
+ * PB10 - PIN10 (input pullup).
+ * PB11 - PIN11 (input pullup).
+ * PB12 - PIN12 (input pullup).
+ * PB13 - SPI2_SCK (alternate 0).
+ * PB14 - SPI2_MISO (alternate 0).
+ * PB15 - SPI2_MOSI (alternate 0).
+ */
+#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
+ PIN_MODE_INPUT(GPIOB_PIN1) | \
+ PIN_MODE_INPUT(GPIOB_PIN2) | \
+ PIN_MODE_INPUT(GPIOB_PIN3) | \
+ PIN_MODE_INPUT(GPIOB_PIN4) | \
+ PIN_MODE_INPUT(GPIOB_PIN5) | \
+ PIN_MODE_INPUT(GPIOB_PIN6) | \
+ PIN_MODE_INPUT(GPIOB_PIN7) | \
+ PIN_MODE_INPUT(GPIOB_PIN8) | \
+ PIN_MODE_INPUT(GPIOB_PIN9) | \
+ PIN_MODE_INPUT(GPIOB_PIN10) | \
+ PIN_MODE_INPUT(GPIOB_PIN11) | \
+ PIN_MODE_INPUT(GPIOB_PIN12) | \
+ PIN_MODE_ALTERNATE(GPIOB_SPI2_SCK) | \
+ PIN_MODE_ALTERNATE(GPIOB_SPI2_MISO) | \
+ PIN_MODE_ALTERNATE(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_SPI2_SCK) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_SPI2_MISO) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOB_SPI2_SCK) | \
+ PIN_OSPEED_VERYLOW(GPIOB_SPI2_MISO) | \
+ PIN_OSPEED_VERYLOW(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
+ PIN_PUPDR_FLOATING(GPIOB_SPI2_SCK) | \
+ PIN_PUPDR_FLOATING(GPIOB_SPI2_MISO) | \
+ PIN_PUPDR_FLOATING(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
+ PIN_ODR_HIGH(GPIOB_PIN1) | \
+ PIN_ODR_HIGH(GPIOB_PIN2) | \
+ PIN_ODR_HIGH(GPIOB_PIN3) | \
+ PIN_ODR_HIGH(GPIOB_PIN4) | \
+ PIN_ODR_HIGH(GPIOB_PIN5) | \
+ PIN_ODR_HIGH(GPIOB_PIN6) | \
+ PIN_ODR_HIGH(GPIOB_PIN7) | \
+ PIN_ODR_HIGH(GPIOB_PIN8) | \
+ PIN_ODR_HIGH(GPIOB_PIN9) | \
+ PIN_ODR_HIGH(GPIOB_PIN10) | \
+ PIN_ODR_HIGH(GPIOB_PIN11) | \
+ PIN_ODR_HIGH(GPIOB_PIN12) | \
+ PIN_ODR_HIGH(GPIOB_SPI2_SCK) | \
+ PIN_ODR_HIGH(GPIOB_SPI2_MISO) | \
+ PIN_ODR_HIGH(GPIOB_SPI2_MOSI))
+#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN7, 0U))
+#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOB_SPI2_SCK, 0U) | \
+ PIN_AFIO_AF(GPIOB_SPI2_MISO, 0U) | \
+ PIN_AFIO_AF(GPIOB_SPI2_MOSI, 0U))
+
+/*
+ * GPIOC setup:
+ *
+ * PC0 - MEMS_CS (output pushpull maximum).
+ * PC1 - PIN1 (input pullup).
+ * PC2 - PIN2 (input pullup).
+ * PC3 - PIN3 (input pullup).
+ * PC4 - PIN4 (input pullup).
+ * PC5 - PIN5 (input pullup).
+ * PC6 - LED_RED (output pushpull maximum).
+ * PC7 - LED_BLUE (output pushpull maximum).
+ * PC8 - LED_ORANGE (output pushpull maximum).
+ * PC9 - LED_GREEN (output pushpull maximum).
+ * PC10 - PIN10 (input pullup).
+ * PC11 - PIN11 (input pullup).
+ * PC12 - PIN12 (input pullup).
+ * PC13 - PIN13 (input pullup).
+ * PC14 - OSC32_IN (input floating).
+ * PC15 - OSC32_OUT (input floating).
+ */
+#define VAL_GPIOC_MODER (PIN_MODE_OUTPUT(GPIOC_MEMS_CS) | \
+ PIN_MODE_INPUT(GPIOC_PIN1) | \
+ PIN_MODE_INPUT(GPIOC_PIN2) | \
+ PIN_MODE_INPUT(GPIOC_PIN3) | \
+ PIN_MODE_INPUT(GPIOC_PIN4) | \
+ PIN_MODE_INPUT(GPIOC_PIN5) | \
+ PIN_MODE_OUTPUT(GPIOC_LED_RED) | \
+ PIN_MODE_OUTPUT(GPIOC_LED_BLUE) | \
+ PIN_MODE_OUTPUT(GPIOC_LED_ORANGE) | \
+ PIN_MODE_OUTPUT(GPIOC_LED_GREEN) | \
+ PIN_MODE_INPUT(GPIOC_PIN10) | \
+ PIN_MODE_INPUT(GPIOC_PIN11) | \
+ PIN_MODE_INPUT(GPIOC_PIN12) | \
+ PIN_MODE_INPUT(GPIOC_PIN13) | \
+ PIN_MODE_INPUT(GPIOC_OSC32_IN) | \
+ PIN_MODE_INPUT(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_MEMS_CS) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_LED_RED) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_LED_BLUE) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_LED_ORANGE) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_LED_GREEN) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_OSC32_IN) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_HIGH(GPIOC_MEMS_CS) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOC_LED_RED) | \
+ PIN_OSPEED_HIGH(GPIOC_LED_BLUE) | \
+ PIN_OSPEED_HIGH(GPIOC_LED_ORANGE) | \
+ PIN_OSPEED_HIGH(GPIOC_LED_GREEN) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOC_OSC32_IN) | \
+ PIN_OSPEED_HIGH(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_PUPDR (PIN_PUPDR_FLOATING(GPIOC_MEMS_CS) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
+ PIN_PUPDR_FLOATING(GPIOC_LED_RED) | \
+ PIN_PUPDR_FLOATING(GPIOC_LED_BLUE) | \
+ PIN_PUPDR_FLOATING(GPIOC_LED_ORANGE) | \
+ PIN_PUPDR_FLOATING(GPIOC_LED_GREEN) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
+ PIN_PUPDR_FLOATING(GPIOC_OSC32_IN) | \
+ PIN_PUPDR_FLOATING(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_MEMS_CS) | \
+ PIN_ODR_HIGH(GPIOC_PIN1) | \
+ PIN_ODR_HIGH(GPIOC_PIN2) | \
+ PIN_ODR_HIGH(GPIOC_PIN3) | \
+ PIN_ODR_HIGH(GPIOC_PIN4) | \
+ PIN_ODR_HIGH(GPIOC_PIN5) | \
+ PIN_ODR_LOW(GPIOC_LED_RED) | \
+ PIN_ODR_LOW(GPIOC_LED_BLUE) | \
+ PIN_ODR_LOW(GPIOC_LED_ORANGE) | \
+ PIN_ODR_LOW(GPIOC_LED_GREEN) | \
+ PIN_ODR_HIGH(GPIOC_PIN10) | \
+ PIN_ODR_HIGH(GPIOC_PIN11) | \
+ PIN_ODR_HIGH(GPIOC_PIN12) | \
+ PIN_ODR_HIGH(GPIOC_PIN13) | \
+ PIN_ODR_HIGH(GPIOC_OSC32_IN) | \
+ PIN_ODR_HIGH(GPIOC_OSC32_OUT))
+#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_MEMS_CS, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOC_LED_RED, 0U) | \
+ PIN_AFIO_AF(GPIOC_LED_BLUE, 0U))
+#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_LED_ORANGE, 0U) | \
+ PIN_AFIO_AF(GPIOC_LED_GREEN, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOC_OSC32_IN, 0U) | \
+ PIN_AFIO_AF(GPIOC_OSC32_OUT, 0U))
+
+/*
+ * GPIOD setup:
+ *
+ * PD0 - PIN0 (input pullup).
+ * PD1 - PIN1 (input pullup).
+ * PD2 - PIN2 (input pullup).
+ * PD3 - PIN3 (input pullup).
+ * PD4 - PIN4 (input pullup).
+ * PD5 - PIN5 (input pullup).
+ * PD6 - PIN6 (input pullup).
+ * PD7 - PIN7 (input pullup).
+ * PD8 - PIN8 (input pullup).
+ * PD9 - PIN9 (input pullup).
+ * PD10 - PIN10 (input pullup).
+ * PD11 - PIN11 (input pullup).
+ * PD12 - PIN12 (input pullup).
+ * PD13 - PIN13 (input pullup).
+ * PD14 - PIN14 (input pullup).
+ * PD15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
+ PIN_MODE_INPUT(GPIOD_PIN1) | \
+ PIN_MODE_INPUT(GPIOD_PIN2) | \
+ PIN_MODE_INPUT(GPIOD_PIN3) | \
+ PIN_MODE_INPUT(GPIOD_PIN4) | \
+ PIN_MODE_INPUT(GPIOD_PIN5) | \
+ PIN_MODE_INPUT(GPIOD_PIN6) | \
+ PIN_MODE_INPUT(GPIOD_PIN7) | \
+ PIN_MODE_INPUT(GPIOD_PIN8) | \
+ PIN_MODE_INPUT(GPIOD_PIN9) | \
+ PIN_MODE_INPUT(GPIOD_PIN10) | \
+ PIN_MODE_INPUT(GPIOD_PIN11) | \
+ PIN_MODE_INPUT(GPIOD_PIN12) | \
+ PIN_MODE_INPUT(GPIOD_PIN13) | \
+ PIN_MODE_INPUT(GPIOD_PIN14) | \
+ PIN_MODE_INPUT(GPIOD_PIN15))
+#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
+#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN15))
+#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN15))
+#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
+ PIN_ODR_HIGH(GPIOD_PIN1) | \
+ PIN_ODR_HIGH(GPIOD_PIN2) | \
+ PIN_ODR_HIGH(GPIOD_PIN3) | \
+ PIN_ODR_HIGH(GPIOD_PIN4) | \
+ PIN_ODR_HIGH(GPIOD_PIN5) | \
+ PIN_ODR_HIGH(GPIOD_PIN6) | \
+ PIN_ODR_HIGH(GPIOD_PIN7) | \
+ PIN_ODR_HIGH(GPIOD_PIN8) | \
+ PIN_ODR_HIGH(GPIOD_PIN9) | \
+ PIN_ODR_HIGH(GPIOD_PIN10) | \
+ PIN_ODR_HIGH(GPIOD_PIN11) | \
+ PIN_ODR_HIGH(GPIOD_PIN12) | \
+ PIN_ODR_HIGH(GPIOD_PIN13) | \
+ PIN_ODR_HIGH(GPIOD_PIN14) | \
+ PIN_ODR_HIGH(GPIOD_PIN15))
+#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN7, 0U))
+#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN15, 0U))
+
+/*
+ * GPIOE setup:
+ *
+ * PE0 - PIN0 (input pullup).
+ * PE1 - PIN1 (input pullup).
+ * PE2 - PIN2 (input pullup).
+ * PE3 - PIN3 (input pullup).
+ * PE4 - PIN4 (input pullup).
+ * PE5 - PIN5 (input pullup).
+ * PE6 - PIN6 (input pullup).
+ * PE7 - PIN7 (input pullup).
+ * PE8 - PIN8 (input pullup).
+ * PE9 - PIN9 (input pullup).
+ * PE10 - PIN10 (input pullup).
+ * PE11 - PIN11 (input pullup).
+ * PE12 - PIN12 (input pullup).
+ * PE13 - PIN13 (input pullup).
+ * PE14 - PIN14 (input pullup).
+ * PE15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
+ PIN_MODE_INPUT(GPIOE_PIN1) | \
+ PIN_MODE_INPUT(GPIOE_PIN2) | \
+ PIN_MODE_INPUT(GPIOE_PIN3) | \
+ PIN_MODE_INPUT(GPIOE_PIN4) | \
+ PIN_MODE_INPUT(GPIOE_PIN5) | \
+ PIN_MODE_INPUT(GPIOE_PIN6) | \
+ PIN_MODE_INPUT(GPIOE_PIN7) | \
+ PIN_MODE_INPUT(GPIOE_PIN8) | \
+ PIN_MODE_INPUT(GPIOE_PIN9) | \
+ PIN_MODE_INPUT(GPIOE_PIN10) | \
+ PIN_MODE_INPUT(GPIOE_PIN11) | \
+ PIN_MODE_INPUT(GPIOE_PIN12) | \
+ PIN_MODE_INPUT(GPIOE_PIN13) | \
+ PIN_MODE_INPUT(GPIOE_PIN14) | \
+ PIN_MODE_INPUT(GPIOE_PIN15))
+#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
+#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN15))
+#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN15))
+#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
+ PIN_ODR_HIGH(GPIOE_PIN1) | \
+ PIN_ODR_HIGH(GPIOE_PIN2) | \
+ PIN_ODR_HIGH(GPIOE_PIN3) | \
+ PIN_ODR_HIGH(GPIOE_PIN4) | \
+ PIN_ODR_HIGH(GPIOE_PIN5) | \
+ PIN_ODR_HIGH(GPIOE_PIN6) | \
+ PIN_ODR_HIGH(GPIOE_PIN7) | \
+ PIN_ODR_HIGH(GPIOE_PIN8) | \
+ PIN_ODR_HIGH(GPIOE_PIN9) | \
+ PIN_ODR_HIGH(GPIOE_PIN10) | \
+ PIN_ODR_HIGH(GPIOE_PIN11) | \
+ PIN_ODR_HIGH(GPIOE_PIN12) | \
+ PIN_ODR_HIGH(GPIOE_PIN13) | \
+ PIN_ODR_HIGH(GPIOE_PIN14) | \
+ PIN_ODR_HIGH(GPIOE_PIN15))
+#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN7, 0U))
+#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN15, 0U))
+
+/*
+ * GPIOF setup:
+ *
+ * PF0 - OSC_IN (input floating).
+ * PF1 - OSC_OUT (input floating).
+ * PF2 - PIN2 (input pullup).
+ * PF3 - PIN3 (input pullup).
+ * PF4 - PIN4 (input pullup).
+ * PF5 - PIN5 (input pullup).
+ * PF6 - PIN6 (input pullup).
+ * PF7 - PIN7 (input pullup).
+ * PF8 - PIN8 (input pullup).
+ * PF9 - PIN9 (input pullup).
+ * PF10 - PIN10 (input pullup).
+ * PF11 - PIN11 (input pullup).
+ * PF12 - PIN12 (input pullup).
+ * PF13 - PIN13 (input pullup).
+ * PF14 - PIN14 (input pullup).
+ * PF15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_OSC_IN) | \
+ PIN_MODE_INPUT(GPIOF_OSC_OUT) | \
+ PIN_MODE_INPUT(GPIOF_PIN2) | \
+ PIN_MODE_INPUT(GPIOF_PIN3) | \
+ PIN_MODE_INPUT(GPIOF_PIN4) | \
+ PIN_MODE_INPUT(GPIOF_PIN5) | \
+ PIN_MODE_INPUT(GPIOF_PIN6) | \
+ PIN_MODE_INPUT(GPIOF_PIN7) | \
+ PIN_MODE_INPUT(GPIOF_PIN8) | \
+ PIN_MODE_INPUT(GPIOF_PIN9) | \
+ PIN_MODE_INPUT(GPIOF_PIN10) | \
+ PIN_MODE_INPUT(GPIOF_PIN11) | \
+ PIN_MODE_INPUT(GPIOF_PIN12) | \
+ PIN_MODE_INPUT(GPIOF_PIN13) | \
+ PIN_MODE_INPUT(GPIOF_PIN14) | \
+ PIN_MODE_INPUT(GPIOF_PIN15))
+#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_OSC_IN) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_OSC_OUT) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
+#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOF_OSC_IN) | \
+ PIN_OSPEED_VERYLOW(GPIOF_OSC_OUT) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN15))
+#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_OSC_IN) | \
+ PIN_PUPDR_FLOATING(GPIOF_OSC_OUT) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN15))
+#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_OSC_IN) | \
+ PIN_ODR_HIGH(GPIOF_OSC_OUT) | \
+ PIN_ODR_HIGH(GPIOF_PIN2) | \
+ PIN_ODR_HIGH(GPIOF_PIN3) | \
+ PIN_ODR_HIGH(GPIOF_PIN4) | \
+ PIN_ODR_HIGH(GPIOF_PIN5) | \
+ PIN_ODR_HIGH(GPIOF_PIN6) | \
+ PIN_ODR_HIGH(GPIOF_PIN7) | \
+ PIN_ODR_HIGH(GPIOF_PIN8) | \
+ PIN_ODR_HIGH(GPIOF_PIN9) | \
+ PIN_ODR_HIGH(GPIOF_PIN10) | \
+ PIN_ODR_HIGH(GPIOF_PIN11) | \
+ PIN_ODR_HIGH(GPIOF_PIN12) | \
+ PIN_ODR_HIGH(GPIOF_PIN13) | \
+ PIN_ODR_HIGH(GPIOF_PIN14) | \
+ PIN_ODR_HIGH(GPIOF_PIN15))
+#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_OSC_IN, 0U) | \
+ PIN_AFIO_AF(GPIOF_OSC_OUT, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN7, 0U))
+#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN15, 0U))
+
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* BOARD_H */
diff --git a/keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.mk b/keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.mk
new file mode 100644
index 000000000..b98dcdd26
--- /dev/null
+++ b/keyboards/chibios_test/boards/ST_STM32F072B_DISCOVERY/board.mk
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/ST_STM32F072B_DISCOVERY/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/ST_STM32F072B_DISCOVERY
diff --git a/keyboards/chimera_ergo/config.h b/keyboards/chimera_ergo/config.h
index 86ee23718..8ce195cc0 100644
--- a/keyboards/chimera_ergo/config.h
+++ b/keyboards/chimera_ergo/config.h
@@ -52,8 +52,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* These options are also useful to firmware size reduction.
*/
-#define PREVENT_STUCK_MODIFIERS
-
/* disable debug print */
//#define NO_DEBUG
diff --git a/keyboards/chimera_ls/chimera_ls.h b/keyboards/chimera_ls/chimera_ls.h
index b39bcf204..bb99684e5 100644
--- a/keyboards/chimera_ls/chimera_ls.h
+++ b/keyboards/chimera_ls/chimera_ls.h
@@ -50,32 +50,30 @@
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
-#define KC_KEYMAP( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, \
- k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, \
- k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, \
- k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 \
-) \
-{ \
- { KC_##k43, KC_##k45, KC_##k34, KC_##k11, KC_##k23, KC_##k40, KC_##k38, KC_##k25, KC_##k00, KC_##k12 }, \
- { KC_##k31, KC_##k44, KC_##k46, KC_##k35, KC_##k22, KC_##k28, KC_##k39, KC_##k37, KC_##k24, KC_##k13 }, \
- { KC_##k30, KC_##k32, KC_##k33, KC_##k47, KC_##k09, KC_##k29, KC_##k27, KC_##k26, KC_##k36, KC_##k02 }, \
- { KC_##k19, KC_##k20, KC_##k21, KC_##k42, KC_##k18, KC_##k16, KC_##k15, KC_##k14, KC_##k41, KC_##k17 }, \
- { KC_##k06, KC_##k07, KC_##k08, KC_##k10, KC_NO, KC_##k05, KC_##k04, KC_##k03, KC_##k01, KC_NO }, \
+#define LAYOUT_ortho_4x12( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, \
+ k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, \
+ k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, \
+ k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 \
+ ) { \
+ { k43, k45, k34, k11, k23, k40, k38, k25, k00, k12 }, \
+ { k31, k44, k46, k35, k22, k28, k39, k37, k24, k13 }, \
+ { k30, k32, k33, k47, k09, k29, k27, k26, k36, k02 }, \
+ { k19, k20, k21, k42, k18, k16, k15, k14, k41, k17 }, \
+ { k06, k07, k08, k10, KC_NO, k05, k04, k03, k01, KC_NO } \
}
-#define KEYMAP( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, \
- k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, \
- k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, \
- k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 \
-) \
-{ \
- { k43, k45, k34, k11, k23, k40, k38, k25, k00, k12 }, \
- { k31, k44, k46, k35, k22, k28, k39, k37, k24, k13 }, \
- { k30, k32, k33, k47, k09, k29, k27, k26, k36, k02 }, \
- { k19, k20, k21, k42, k18, k16, k15, k14, k41, k17 }, \
- { k06, k07, k08, k10, KC_NO, k05, k04, k03, k01, KC_NO }, \
+#define LAYOUT_kc_ortho_4x12( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, \
+ k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, \
+ k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, \
+ k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 \
+ ) { \
+ { KC_##k43, KC_##k45, KC_##k34, KC_##k11, KC_##k23, KC_##k40, KC_##k38, KC_##k25, KC_##k00, KC_##k12 }, \
+ { KC_##k31, KC_##k44, KC_##k46, KC_##k35, KC_##k22, KC_##k28, KC_##k39, KC_##k37, KC_##k24, KC_##k13 }, \
+ { KC_##k30, KC_##k32, KC_##k33, KC_##k47, KC_##k09, KC_##k29, KC_##k27, KC_##k26, KC_##k36, KC_##k02 }, \
+ { KC_##k19, KC_##k20, KC_##k21, KC_##k42, KC_##k18, KC_##k16, KC_##k15, KC_##k14, KC_##k41, KC_##k17 }, \
+ { KC_##k06, KC_##k07, KC_##k08, KC_##k10, KC_NO, KC_##k05, KC_##k04, KC_##k03, KC_##k01, KC_NO } \
}
diff --git a/keyboards/chimera_ls/config.h b/keyboards/chimera_ls/config.h
index d92878026..254dad306 100644
--- a/keyboards/chimera_ls/config.h
+++ b/keyboards/chimera_ls/config.h
@@ -52,8 +52,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* These options are also useful to firmware size reduction.
*/
-#define PREVENT_STUCK_MODIFIERS
-
/* disable debug print */
//#define NO_DEBUG
diff --git a/keyboards/chimera_ls/info.json b/keyboards/chimera_ls/info.json
new file mode 100644
index 000000000..077a76079
--- /dev/null
+++ b/keyboards/chimera_ls/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "Chimera LS",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 13,
+ "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":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/chimera_ls/keymaps/default/keymap.c b/keyboards/chimera_ls/keymaps/default/keymap.c
index 493b8eee1..0affeef38 100644
--- a/keyboards/chimera_ls/keymaps/default/keymap.c
+++ b/keyboards/chimera_ls/keymaps/default/keymap.c
@@ -1,7 +1,7 @@
// this is the style you want to emulate.
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
-#include "chimera_ls.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -24,168 +24,163 @@ enum chimera_lets_split_layers
#define KC_SCTR MT(MOD_LCTL, KC_RBRC)
#define KC_SPLT MT(MOD_LALT, KC_MINS)
#define KC_MESC LT(_MACROS, KC_ESC)
-#define KC_INCL M(0)
-#define KC_PULL M(1)
-#define KC_PUSH M(2)
-#define KC_SCAP M(3)
-#define KC_SCOF M(4)
#define KC_CAD LALT(LCTL(KC_DEL))
+enum custom_keycodes {
+ KC_INCL = SAFE_RANGE,
+ KC_PULL,
+ KC_PUSH,
+ KC_SCAP,
+ KC_SCOF
+};
+
#define LONGPRESS_DELAY 150
//#define LAYER_TOGGLE_DELAY 300
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-#define KC_ KC_TRNS
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = KC_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- MESC, Q , W , E , R , T , Y , U , I , O , P ,BSPC,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- TAB , A , S , D , F , G , H , J , K , L ,SCLN, ENT,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- LSPO, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,RSPC,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- SCTL,SPFN,SPLT,AMPR,NMPD,SPC , SPC ,SYMB,ASTR,EXLM,LBRC,SCTR
- //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ [_QWERTY] = LAYOUT_ortho_4x12(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ KC_MESC, 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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_SCTL, KC_SPFN, KC_SPLT, KC_AMPR, KC_NMPD, KC_SPC, KC_SPC, KC_SYMB, KC_ASTR, KC_EXLM, KC_LBRC, KC_SCTR
+ //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------'
),
- [_CAPS] = KC_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- , , , , , , , , , , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , , , , , , ,COLN, ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , , , , , , , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , ,UNDS, , , , , , , , ,
- //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ [_CAPS] = LAYOUT_ortho_4x12(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_COLN, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, KC_UNDS, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------'
),
- [_NUMPAD] = KC_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- , , , , , , , 7 , 8 , 9 ,MINS,QUOT,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , , , , 4 , 5 , 6 ,PLUS, ENT,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- LSFT, , , , , , , 1 , 2 , 3 ,ASTR, EQL,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , ,BSPC, SPC , 0 , 0 , DOT,SLSH,
- //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ [_NUMPAD] = LAYOUT_ortho_4x12(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_MINS, KC_QUOT,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, KC_PLUS, KC_ENT,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_LSFT, _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_ASTR, KC_EQL,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, KC_BSPC, KC_SPC, KC_0, KC_0, KC_DOT, KC_SLSH, _______
+ //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------'
),
- [_SYMBOLS] = KC_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,QUOT,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- F1 , F2 , F3 , F4 , F5 , F6 , TILD,EQL ,UNDS,LCBR,RCBR,PIPE,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- F7 , F8 , F9 , F10, F11, F12, GRV ,PLUS,MINS,LBRC,RBRC,BSLS,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , NO ,BSPC, SPC , , , , ,
- //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ [_SYMBOLS] = LAYOUT_ortho_4x12(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_QUOT,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TILD, KC_EQL, KC_UNDS, KC_LCBR, KC_RCBR, KC_PIPE,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_GRV, KC_PLUS, KC_MINS, KC_LBRC, KC_RBRC, KC_BSLS,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, XXXXXXX, KC_BSPC, KC_SPC, _______, _______, _______, _______, _______
+ //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------'
),
- [_NAV] = KC_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- , , , , DEL,BSPC, ,HOME, UP , END, INS,PSCR,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , ,LSFT,LCTL, ENT, ,LEFT,DOWN,RGHT, DEL, ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , , , ,PGUP,PGDN, , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , ,DEL , , , , , ,
- //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ [_NAV] = LAYOUT_ortho_4x12(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, _______, _______, _______, KC_DEL, KC_BSPC, _______, KC_HOME, KC_UP, KC_END, KC_INS, KC_PSCR,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, KC_LSFT, KC_LCTL, KC_ENT, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______, _______
+ //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------'
),
- [_MACROS] = KC_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- , , , , , , , ,INCL, , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , ,CAD , , , , , , , , ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- SCAP, , , , , , , ,PULL,PUSH, ,SCAP,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , , , , , , , , , , ,
- //`----+----+----+----+----+----' `----+----+----+----+----+----'
+ [_MACROS] = LAYOUT_ortho_4x12(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_INCL, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, KC_CAD, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ KC_SCAP, _______, _______, _______, _______, _______, _______, _______, KC_PULL, KC_PUSH, _______, KC_SCAP,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ //`--------+--------+--------+--------+--------+--------' `--------+--------+--------+--------+--------+--------'
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-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 KC_INCL:
if (record->event.pressed) {
- SEND_STRING("#include <>");
- return MACRO( T(LEFT), END);
+ SEND_STRING("#include <>" SS_TAP(X_LEFT) );
+ return false;
}
break;
- case 1:
+ case KC_PULL:
if (record->event.pressed) {
- SEND_STRING("git pull");
- return MACRO( T(ENT), END );
+ SEND_STRING("git pull" SS_TAP(X_ENTER) );
+ return false;
}
break;
- case 2:
+ case KC_PUSH:
if (record->event.pressed){
- SEND_STRING("git push");
- return MACRO( T(ENT), END );
+ SEND_STRING("git push" SS_TAP(X_ENTER) );
+ return false;
}
break;
- case 3:
+ case KC_SCAP:
if (record->event.pressed){
layer_on(_CAPS);
register_code(KC_CAPSLOCK);
unregister_code(KC_CAPSLOCK);
+ return false;
}
break;
- case 4:
+ case KC_SCOF:
if (record->event.pressed){
layer_off(_CAPS);
register_code(KC_CAPSLOCK);
unregister_code(KC_CAPSLOCK);
+ return false;
}
break;
}
- return MACRO_NONE;
+ return true;
};
-
+
void matrix_scan_user(void) {
- uint8_t layer = biton32(layer_state);
-
- switch (layer) {
- case _QWERTY:
- set_led_green;
- break;
- case _CAPS:
- set_led_white;
- break;
- case _NUMPAD:
- set_led_blue;
- break;
- case _SYMBOLS:
- set_led_red;
- break;
- case _NAV:
- set_led_magenta;
- break;
- case _MACROS:
- set_led_cyan;
- break;
- default:
- set_led_green;
- break;
- }
+ uint8_t layer = biton32(layer_state);
+
+ switch (layer) {
+ case _QWERTY:
+ set_led_green;
+ break;
+ case _CAPS:
+ set_led_white;
+ break;
+ case _NUMPAD:
+ set_led_blue;
+ break;
+ case _SYMBOLS:
+ set_led_red;
+ break;
+ case _NAV:
+ set_led_magenta;
+ break;
+ case _MACROS:
+ set_led_cyan;
+ break;
+ default:
+ set_led_green;
+ break;
+ }
};
diff --git a/keyboards/chimera_ls/readme.md b/keyboards/chimera_ls/readme.md
index 689d9ee61..0170dd8a8 100644
--- a/keyboards/chimera_ls/readme.md
+++ b/keyboards/chimera_ls/readme.md
@@ -2,18 +2,14 @@
![Chimera LS](https://imgur.com/FOGlO4M.jpg)
-A wireless version of the let's split: a split 40% ortholinear keyboard
+A wireless version of the Let's Split: a split 40% ortholinear keyboard.
Keyboard Maintainer: [William Wilson](https://github.com/GlenPickle)
-
-
-Hardware Supported: Chimera LS PCB, WaveShare core nRF51822
-
+Hardware Supported: Chimera LS PCB, WaveShare core nRF51822
Hardware Availability: [Gerbers](https://github.com/GlenPickle/Chimera/tree/master/ls/gerbers)
Make example for this keyboard (after setting up your build environment):
make chimera_ls:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/chimera_ls/rules.mk b/keyboards/chimera_ls/rules.mk
index af08f7a87..497e58677 100644
--- a/keyboards/chimera_ls/rules.mk
+++ b/keyboards/chimera_ls/rules.mk
@@ -46,7 +46,7 @@ F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
-# different sizes, comment this out, and the correct address will be loaded
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina
@@ -80,3 +80,5 @@ UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
USB = /dev/ttyACM0
+
+LAYOUTS = ortho_4x12
diff --git a/keyboards/chimera_ortho/chimera_ortho.h b/keyboards/chimera_ortho/chimera_ortho.h
index 3b7690d43..598125275 100644
--- a/keyboards/chimera_ortho/chimera_ortho.h
+++ b/keyboards/chimera_ortho/chimera_ortho.h
@@ -49,31 +49,32 @@
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
-#define KC_KEYMAP( \
+#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, \
k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, \
- k28, k29, k31, k32, k33, k34, k35, k36, k37, k38, k41, k42, k43, k44,\
- k45, k46, k47, k48 \
+ k28, k29, k31, k32, k33, k34, k35, k36, k37, k38, k41, k42, k43, k44, \
+ k45, k46, k47, k48 \
) \
{ \
- { KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_##k08, KC_##k09, KC_##k10, KC_##k11, KC_##k12 }, \
- { KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##k26 }, \
- { KC_##k29, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k37, KC_##k38, KC_##k41, KC_##k42, KC_##k43 }, \
- { KC_NO, KC_##k06, KC_##k20, KC_##k35, KC_##k46, KC_##k47, KC_##k36, KC_##k21, KC_##k07, KC_NO }, \
- { KC_NO, KC_##k28, KC_##k14, KC_##k00, KC_##k45, KC_##k48, KC_##k13, KC_##k27, KC_##k44, KC_NO }, \
+ { k01, k02, k03, k04, k05, k08, k09, k10, k11, k12 }, \
+ { k15, k16, k17, k18, k19, k22, k23, k24, k25, k26 }, \
+ { k29, k31, k32, k33, k34, k37, k38, k41, k42, k43 }, \
+ { KC_NO, k06, k20, k35, k46, k47, k36, k21, k07, KC_NO }, \
+ { KC_NO, k28, k14, k00, k45, k48, k13, k27, k44, KC_NO } \
}
-#define KEYMAP( \
+#define LAYOUT_kc( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, \
k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, \
- k28, k29, k31, k32, k33, k34, k35, k36, k37, k38, k41, k42, k43, k44,\
- k45, k46, k47, k48 \
+ k28, k29, k31, k32, k33, k34, k35, k36, k37, k38, k41, k42, k43, k44, \
+ k45, k46, k47, k48 \
) \
{ \
- { k01, k02, k03, k04, k05, k08, k09, k10, k11, k12 }, \
- { k15, k16, k17, k18, k19, k22, k23, k24, k25, k26 }, \
- { k29, k31, k32, k33, k34, k37, k38, k41, k42, k43 }, \
- { KC_NO, k06, k20, k35, k46, k47, k36, k21, k07, KC_NO }, \
- { KC_NO, k28, k14, k00, k45, k48, k13, k27, k44, KC_NO }, \
+ { KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_##k08, KC_##k09, KC_##k10, KC_##k11, KC_##k12 }, \
+ { KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##k26 }, \
+ { KC_##k29, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k37, KC_##k38, KC_##k41, KC_##k42, KC_##k43 }, \
+ { KC_NO, KC_##k06, KC_##k20, KC_##k35, KC_##k46, KC_##k47, KC_##k36, KC_##k21, KC_##k07, KC_NO }, \
+ { KC_NO, KC_##k28, KC_##k14, KC_##k00, KC_##k45, KC_##k48, KC_##k13, KC_##k27, KC_##k44, KC_NO } \
}
+
#endif
diff --git a/keyboards/chimera_ortho/config.h b/keyboards/chimera_ortho/config.h
index 44c6212b1..4bf85eb88 100644
--- a/keyboards/chimera_ortho/config.h
+++ b/keyboards/chimera_ortho/config.h
@@ -52,8 +52,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* These options are also useful to firmware size reduction.
*/
-#define PREVENT_STUCK_MODIFIERS
-
/* disable debug print */
//#define NO_DEBUG
diff --git a/keyboards/chimera_ortho/info.json b/keyboards/chimera_ortho/info.json
index b1384379c..3f8481be4 100644
--- a/keyboards/chimera_ortho/info.json
+++ b/keyboards/chimera_ortho/info.json
@@ -1,240 +1,58 @@
{
+ "keyboard_name": "Chimera Ortho",
+ "keyboard_folder": "chimera_ortho",
"maintainer": "qmk",
"width": 15.5,
"height": 4.25,
"layouts": {
- "KEYMAP": {
+ "LAYOUT": {
"layout": [
- {
- "label": "Esc",
- "x": 0,
- "y": 0
- },
- {
- "label": "Q",
- "x": 1,
- "y": 0
- },
- {
- "label": "W",
- "x": 2,
- "y": 0
- },
- {
- "label": "E",
- "x": 3,
- "y": 0
- },
- {
- "label": "R",
- "x": 4,
- "y": 0
- },
- {
- "label": "T",
- "x": 5,
- "y": 0
- },
- {
- "label": "{",
- "x": 6,
- "y": 0
- },
- {
- "label": "}",
- "x": 8.5,
- "y": 0
- },
- {
- "label": "Y",
- "x": 9.5,
- "y": 0
- },
- {
- "label": "U",
- "x": 10.5,
- "y": 0
- },
- {
- "label": "I",
- "x": 11.5,
- "y": 0
- },
- {
- "label": "O",
- "x": 12.5,
- "y": 0
- },
- {
- "label": "P",
- "x": 13.5,
- "y": 0
- },
- {
- "label": "\"",
- "x": 14.5,
- "y": 0
- },
- {
- "label": "Tab",
- "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": "-",
- "x": 6,
- "y": 1
- },
- {
- "label": "1",
- "x": 8.5,
- "y": 1
- },
- {
- "label": "H",
- "x": 9.5,
- "y": 1
- },
- {
- "label": "J",
- "x": 10.5,
- "y": 1
- },
- {
- "label": "K",
- "x": 11.5,
- "y": 1
- },
- {
- "label": "L",
- "x": 12.5,
- "y": 1
- },
- {
- "label": ";",
- "x": 13.5,
- "y": 1
- },
- {
- "label": "Enter",
- "x": 14.5,
- "y": 1
- },
- {
- "label": "(",
- "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": "=",
- "x": 6,
- "y": 2
- },
- {
- "label": "8",
- "x": 8.5,
- "y": 2
- },
- {
- "label": "N",
- "x": 9.5,
- "y": 2
- },
- {
- "label": "M",
- "x": 10.5,
- "y": 2
- },
- {
- "label": ",",
- "x": 11.5,
- "y": 2
- },
- {
- "label": ".",
- "x": 12.5,
- "y": 2
- },
- {
- "label": "/",
- "x": 13.5,
- "y": 2
- },
- {
- "label": ")",
- "x": 14.5,
- "y": 2
- },
- {
- "label": "Num Layer",
- "x": 4,
- "y": 3.25
- },
- {
- "label": "Back Space",
- "x": 5,
- "y": 3.25
- },
- {
- "label": "Space",
- "x": 9.5,
- "y": 3.25
- },
- {
- "label": "Symbol Layer",
- "x": 10.5,
- "y": 3.25
- }
+ {"label": "Esc", "x": 0, "y": 0},
+ {"label": "Q", "x": 1, "y": 0},
+ {"label": "W", "x": 2, "y": 0},
+ {"label": "E", "x": 3, "y": 0},
+ {"label": "R", "x": 4, "y": 0},
+ {"label": "T", "x": 5, "y": 0},
+ {"label": "{", "x": 6, "y": 0},
+ {"label": "}", "x": 8.5, "y": 0},
+ {"label": "Y", "x": 9.5, "y": 0},
+ {"label": "U", "x": 10.5, "y": 0},
+ {"label": "I", "x": 11.5, "y": 0},
+ {"label": "O", "x": 12.5, "y": 0},
+ {"label": "P", "x": 13.5, "y": 0},
+ {"label": "\"", "x": 14.5, "y": 0},
+ {"label": "Tab", "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": "-", "x": 6, "y": 1},
+ {"label": "1", "x": 8.5, "y": 1},
+ {"label": "H", "x": 9.5, "y": 1},
+ {"label": "J", "x": 10.5, "y": 1},
+ {"label": "K", "x": 11.5, "y": 1},
+ {"label": "L", "x": 12.5, "y": 1},
+ {"label": ";", "x": 13.5, "y": 1},
+ {"label": "Enter", "x": 14.5, "y": 1},
+ {"label": "(", "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": "=", "x": 6, "y": 2},
+ {"label": "8", "x": 8.5, "y": 2},
+ {"label": "N", "x": 9.5, "y": 2},
+ {"label": "M", "x": 10.5, "y": 2},
+ {"label": ", ", "x": 11.5, "y": 2},
+ {"label": ".", "x": 12.5, "y": 2},
+ {"label": "/", "x": 13.5, "y": 2},
+ {"label": ")", "x": 14.5, "y": 2},
+ {"label": "Num Layer", "x": 4, "y": 3.25},
+ {"label": "Back Space", "x": 5, "y": 3.25},
+ {"label": "Space", "x": 9.5, "y": 3.25},
+ {"label": "Symbol Layer", "x": 10.5, "y": 3.25}
]
}
}
diff --git a/keyboards/chimera_ortho/keymaps/dcompact/keymap.c b/keyboards/chimera_ortho/keymaps/dcompact/keymap.c
index 74c3a25cd..1c6ef7d6f 100644
--- a/keyboards/chimera_ortho/keymaps/dcompact/keymap.c
+++ b/keyboards/chimera_ortho/keymaps/dcompact/keymap.c
@@ -1,4 +1,4 @@
-#include "chimera_ortho.h"
+#include QMK_KEYBOARD_H
enum chimera_ortho_layers
{
@@ -34,7 +34,7 @@ enum chimera_ortho_layers
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BASE] = KC_KEYMAP(
+ [_BASE] = LAYOUT_kc(
//,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------.
LALT ,TAB ,QUOT ,COMM ,DOT ,P ,Y ,F ,G ,C ,R ,L ,SLSH ,FUNC
//|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
@@ -46,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//\-------------------------------+-------+-------+-------/ \-------+-------+---------------------------------------/
),
- [_NAV] = KC_KEYMAP(
+ [_NAV] = LAYOUT_kc(
//,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------.
, , , , , , , ,HOME ,PGDOWN ,PGUP ,END , ,
//|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
@@ -58,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//\-------------------------------+-------+-------+-------/ \-------+-------+---------------------------------------/
),
- [_SYM] = KC_KEYMAP(
+ [_SYM] = LAYOUT_kc(
//,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------.
,QUAKE ,GRAVE ,TILDE ,BSLASH ,PIPE ,LPRN ,RPRN ,7 ,8 ,9 ,SLSH ,EQUAL ,
//|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
@@ -70,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//\-------------------------------+-------+-------+-------/ \-------+-------+---------------------------------------/
),
- [_FUNC] = KC_KEYMAP(
+ [_FUNC] = LAYOUT_kc(
//,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------.
,RESET ,SLEP ,MRWD ,MPLY ,MFFD , , ,F9 ,F10 ,F11 ,F12 , ,
//|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
@@ -82,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//\-------------------------------+-------+-------+-------/ \-------+-------+---------------------------------------/
),
- [_MOUSE] = KC_KEYMAP(
+ [_MOUSE] = LAYOUT_kc(
//,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------.
, , , , , , , , , , , , ,
//|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
diff --git a/keyboards/chimera_ortho/keymaps/default/config.h b/keyboards/chimera_ortho/keymaps/default/config.h
new file mode 100644
index 000000000..bdfd4db80
--- /dev/null
+++ b/keyboards/chimera_ortho/keymaps/default/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+// place overrides here
+#define LONGPRESS_DELAY 150
+//#define LAYER_TOGGLE_DELAY 300
diff --git a/keyboards/chimera_ortho/keymaps/default/keymap.c b/keyboards/chimera_ortho/keymaps/default/keymap.c
index 6201eebac..6a676493d 100644
--- a/keyboards/chimera_ortho/keymaps/default/keymap.c
+++ b/keyboards/chimera_ortho/keymaps/default/keymap.c
@@ -1,20 +1,19 @@
// this is the style you want to emulate.
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
-#include "chimera_ortho.h"
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// 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 chimera_ortho_layers
-{
- _QWERTY,
- _CAPS,
- _NUMPAD,
- _SYMBOLS,
- _MACROS,
- _NAV
+enum chimera_ortho_layers {
+ _QWERTY,
+ _CAPS,
+ _NUMPAD,
+ _SYMBOLS,
+ _MACROS,
+ _NAV
};
#define KC_NMPD TG(_NUMPAD)
@@ -27,153 +26,140 @@ enum chimera_ortho_layers
#define KC_GBRC MT(MOD_RGUI, KC_8)
#define KC_GQOT MT(MOD_LGUI, KC_QUOT)
#define KC_MESC LT(_MACROS, KC_ESC)
-#define KC_INCL M(0)
-#define KC_PULL M(1)
-#define KC_PUSH M(2)
-#define KC_SCAP M(3)
-#define KC_SCOF M(4)
#define KC_CAD LALT(LCTL(KC_DEL))
-#define LONGPRESS_DELAY 150
-//#define LAYER_TOGGLE_DELAY 300
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-#define KC_ KC_TRNS
+enum custom_keycodes {
+ KC_INCL = SAFE_RANGE,
+ KC_PULL,
+ KC_PUSH,
+ KC_SCAP,
+ KC_SCOF
+};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = KC_KEYMAP(
- //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
- MESC, Q , W , E , R , T ,SCTL, SCTR, Y , U , I , O , P ,QUOT,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- TAB , A , S , D , F , G ,SPLT, SPRT, H , J , K , L ,SCLN,ENT ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- LSPO, Z , X , C , V , B ,SPFN, GBRC, N , M ,COMM,DOT ,SLSH,RSPC,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- NMPD,BSPC, SPC ,SYMB
- // \------------------+----+----+---/ \---+----+----+-------------------/
+ [_QWERTY] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------.
+ KC_MESC, KC_Q , KC_W , KC_E , KC_R , KC_T ,KC_SCTL, KC_SCTR, KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_QUOT,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G ,KC_SPLT, KC_SPRT, KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_ENT ,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ KC_LSPO, KC_Z , KC_X , KC_C , KC_V , KC_B ,KC_SPFN, KC_GBRC, KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_RSPC,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ KC_NMPD,KC_BSPC, KC_SPC ,KC_SYMB
+ // \------------------------------+-------+-------+------/ \------+-------+-------+------------------------------/
),
- [_CAPS] = KC_KEYMAP(
- //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
- , , , , , , , , , , , , , ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , , , ,UNDS, , , , , ,COLN, ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- SCOF, , , , , , , , , , , , ,SCOF,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , ,
- // \------------------+----+----+---/ \---+----+----+-------------------/
+ [_CAPS] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------.
+ _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,_______,_______,_______,KC_UNDS, _______,_______,_______,_______,_______,KC_COLN,_______,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ KC_SCOF,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,KC_SCOF,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______,_______, _______,_______
+ // \------------------------------+-------+-------+------/ \------+-------+-------+------------------------------/
),
- [_NUMPAD] = KC_KEYMAP(
- //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
- , ,COLN , , , , , , , 7 , 8 , 9 ,ASTR,MINS,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , ,DOT , , , , , , , 4 , 5 , 6 ,PLUS, ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , , , , , , , 1 , 2 , 3 ,SLSH, ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , 0
- // \------------------+----+----+---/ \---+----+----+-------------------/
+ [_NUMPAD] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------.
+ _______,_______,KC_COLN,_______,_______,_______,_______, _______,_______, KC_7 , KC_8 , KC_9 ,KC_ASTR,KC_MINS,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______,_______,KC_DOT ,_______,_______,_______,_______, _______,_______, KC_4 , KC_5 , KC_6 ,KC_PLUS,_______,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,_______,_______,_______,_______, _______,_______, KC_1 , KC_2 , KC_3 ,KC_SLSH,_______,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______,_______, _______, KC_0
+ // \------------------------------+-------+-------+------/ \------+-------+-------+------------------------------/
),
- [_SYMBOLS] = KC_KEYMAP(
- //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
- ,EXLM, AT ,HASH,DLR ,PERC, , ,CIRC,AMPR,ASTR,LPRN,RPRN,BSLS,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , F1 , F2 , F3 , F4 , F5 , , ,TILD,COLN,UNDS,LCBR,RCBR, ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , F6 , F7 , F8 , F9 ,F10 , , ,GRV ,SCLN,MINS,LBRC,RBRC, ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- PIPE, , ,
- // \------------------+----+----+---/ \---+----+----+-------------------/
+ [_SYMBOLS] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------.
+ _______,KC_EXLM, KC_AT ,KC_HASH,KC_DLR ,KC_PERC,_______, _______,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_BSLS,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 ,_______, _______,KC_TILD,KC_COLN,KC_UNDS,KC_LCBR,KC_RCBR,_______,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______, KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,_______, _______,KC_GRV ,KC_SCLN,KC_MINS,KC_LBRC,KC_RBRC,_______,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ KC_PIPE,_______, _______,_______
+ // \------------------------------+-------+-------+------/ \------+-------+-------+------------------------------/
),
- [_NAV] = KC_KEYMAP(
- //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
- , , , , , , , , , , UP , ,PSCR, ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , , , , , , ,LEFT,DOWN,RGHT, , ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , , , , , , ,PGUP,PGDN, , , ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- ,DEL , ,
- // \------------------+----+----+---/ \---+----+----+-------------------/
+ [_NAV] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------.
+ _______,_______,_______,_______,_______,_______,_______, _______,_______,_______, KC_UP ,_______,KC_PSCR,_______,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,_______,_______,_______,_______, _______,_______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,_______,_______,_______,_______, _______,_______,KC_PGUP,KC_PGDN,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______,KC_DEL , _______,_______
+ // \------------------------------+-------+-------+------/ \------+-------+-------+------------------------------/
),
- [_MACROS] = KC_KEYMAP(
- //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
- , , , , , , , , , ,INCL, , , ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , ,CAD , , , , , , , , , , ,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- SCAP, , , , , , , , , ,PULL,PUSH, ,SCAP,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , ,
- // \------------------+----+----+---/ \---+----+----+-------------------/
+ [_MACROS] = LAYOUT(
+ //,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------.
+ _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,KC_INCL,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______,_______,_______,KC_CAD ,_______,_______,_______, _______,_______,_______,_______,_______,_______,_______,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ KC_SCAP,_______,_______,_______,_______,_______,_______, _______,_______,_______,KC_PULL,KC_PUSH,_______,KC_SCAP,
+ //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------|
+ _______,_______, _______,_______
+ // \------------------------------+-------+-------+------/ \------+-------+-------+------------------------------/
)
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-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 KC_INCL:
if (record->event.pressed) {
- SEND_STRING("#include <>");
- return MACRO( T(LEFT), END);
+ SEND_STRING("#include <>" SS_TAP(X_LEFT));
}
- break;
- case 1:
+ return false;
+ case KC_PULL:
if (record->event.pressed) {
- SEND_STRING("git pull");
- return MACRO( T(ENT), END );
+ SEND_STRING("git pull" SS_TAP(X_ENTER));
}
- break;
- case 2:
+ return false;
+ case KC_PUSH:
if (record->event.pressed){
- SEND_STRING("git push");
- return MACRO( T(ENT), END );
+ SEND_STRING("git push" SS_TAP(X_ENTER));
}
- break;
- case 3:
+ return false;
+ case KC_SCAP:
if (record->event.pressed){
layer_on(_CAPS);
register_code(KC_CAPSLOCK);
unregister_code(KC_CAPSLOCK);
}
- break;
- case 4:
+ return false;
+ case KC_SCOF:
if (record->event.pressed){
layer_off(_CAPS);
register_code(KC_CAPSLOCK);
unregister_code(KC_CAPSLOCK);
}
- break;
+ return false;
}
- return MACRO_NONE;
+ return true;
};
-
+
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
-
+
switch (layer) {
- case _QWERTY:
- set_led_green;
- break;
+ case _QWERTY:
+ set_led_green;
+ break;
case _CAPS:
- set_led_white;
- break;
+ set_led_white;
+ break;
case _NUMPAD:
set_led_blue;
break;
@@ -181,11 +167,11 @@ void matrix_scan_user(void) {
set_led_red;
break;
case _NAV:
- set_led_magenta;
- break;
+ set_led_magenta;
+ break;
case _MACROS:
- set_led_cyan;
- break;
+ set_led_cyan;
+ break;
default:
set_led_green;
break;
diff --git a/keyboards/chimera_ortho/keymaps/gordon/keymap.c b/keyboards/chimera_ortho/keymaps/gordon/keymap.c
index c6d668f8f..c6766bed3 100644
--- a/keyboards/chimera_ortho/keymaps/gordon/keymap.c
+++ b/keyboards/chimera_ortho/keymaps/gordon/keymap.c
@@ -1,10 +1,8 @@
// this is the style you want to emulate.
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
-#include "chimera_ortho.h"
-#include "action_layer.h"
+#include QMK_KEYBOARD_H
#include "version.h"
-#include "process_keycode/process_tap_dance.h"
#include "gordon.h"
// Each layer gets a name for readability, which is then used in the keymap matrix below.
@@ -83,11 +81,9 @@
//#define LAYER_TOGGLE_DELAY 300
// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-#define KC_ KC_TRNS
+#define KC_ KC_TRNS
-/* TODO:
+/* TODO:
*
* DONE: RESET and CAD into macro layer.
* DONE: WINUP AND WINDOWN in NAV layer
@@ -113,7 +109,7 @@
* Russain layer
* Hebrew layer
* Get rid of stupid git pull and push macros.
- *
+ *
*/
//Tap dance enums
@@ -127,14 +123,14 @@ enum {
CALC_PRINTSCREEN
};
-static xtap ttt_state = {
+static xtap ttt_state = {
.is_press_action = true,
.state = 0
};
//Already exists in gordon.c, shouldn't need this anymore
-/*// To activate SINGLE_HOLD, you will need to hold for 200ms first.
+/*// To activate SINGLE_HOLD, you will need to hold for 200ms first.
// This tap dance favors keys that are used frequently in typing like 'f'
int cur_dance (qk_tap_dance_state_t *state) {
if (state->count == 1) {
@@ -151,8 +147,8 @@ int cur_dance (qk_tap_dance_state_t *state) {
else if (state->count == 2) {
if (state->interrupted) return DOUBLE_SINGLE_TAP;
else if (state->pressed) return DOUBLE_HOLD;
- else return DOUBLE_TAP;
- }
+ else return DOUBLE_TAP;
+ }
else if ((state->count == 3) && ((state->interrupted) || (!state->pressed))) return TRIPLE_TAP;
else if (state->count == 3) return TRIPLE_HOLD;
else return 8; //magic number. At some point this method will expand to work for more presses
@@ -194,7 +190,7 @@ void TTT_reset (qk_tap_dance_state_t *state, void *user_data) {
qk_tap_dance_action_t tap_dance_actions[] = {
// simple tap dance
- [F12ETAPS] = ACTION_TAP_DANCE_DOUBLE(KC_F12,LSFT(LCTL(KC_F10))),
+ [F12ETAPS] = ACTION_TAP_DANCE_DOUBLE(KC_F12,LSFT(LCTL(KC_F10))),
[CALCCOMP] = ACTION_TAP_DANCE_DOUBLE(KC_CALCULATOR, KC_MY_COMPUTER),
[CALC_PRINTSCREEN] = ACTION_TAP_DANCE_DOUBLE(KC_CALCULATOR, KC_PSCR),
[ALTF4] = ACTION_TAP_DANCE_DOUBLE(KC_F4,LALT(KC_F4)),
@@ -206,7 +202,7 @@ qk_tap_dance_action_t tap_dance_actions[] = {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = KC_KEYMAP(
+ [_QWERTY] = LAYOUT_kc(
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
MESC, Q ,CSHW,ENAV, R , T ,SPC , CLPS, Y , U ,INAV, O , P ,TTT,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
@@ -218,7 +214,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// \------------------+----+----+---/ \---+----+----+-------------------/
),
- [_NUMPAD] = KC_KEYMAP(
+ [_NUMPAD] = LAYOUT_kc(
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
, , , ,ASTR, , , , , 7 , 8 , 9 ,ASTR,/**/,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
@@ -226,11 +222,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , ,SLSH, , , , , 1 , 2 , 3 ,SLSH, ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , 0
+ , , , 0
// \------------------+----+----+---/ \---+----+----+-------------------/
),
- [_SYMBOLS] = KC_KEYMAP(
+ [_SYMBOLS] = LAYOUT_kc(
//,----+----+-----+----+----+----+----. ,----+----+----+----+----+----+----.
,EXLM, AT ,LCBR,RCBR,HASH, , ,CIRC,AMPR,ASTR,LPRN,RPRN,/**/,
//|----+----+-----+----+----+----+----| |----+----+----+----+----+----+----|
@@ -242,7 +238,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// \-------------------+----+----+---/ \---+----+----+-------------------/
),
- [_FUNCTION] = KC_KEYMAP(
+ [_FUNCTION] = LAYOUT_kc(
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
F6F7 ,F1 ,F2 ,F3 ,ALF4,F5 ,F6 , F7 ,F8 ,F9 ,F10 ,F11 ,F12 ,/**/,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
@@ -250,11 +246,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , , , , , , , , , , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , ,
+ , , ,
// \------------------+----+----+---/ \---+----+----+-------------------/
),
- [_NAV] = KC_KEYMAP(
+ [_NAV] = LAYOUT_kc(
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
, ,SNAPLEFT,/**/,SNAPRIGHT,, , , , , UP , , , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
@@ -262,11 +258,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, ,WORKLEFT, ,WORKRIGHT,, , , ,PGUP,PGDN, , , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- CDEL ,DEL, ,
+ CDEL ,DEL, ,
// \------------------+----+----+---/ \---+----+----+-------------------/
),
- [_TEXTNAV] = KC_KEYMAP(
+ [_TEXTNAV] = LAYOUT_kc(
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
, , , , , , , , , ,/**/, , , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
@@ -274,11 +270,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , , , , , , , , , , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , ,
+ , , ,
// \------------------+----+----+---/ \---+----+----+-------------------/
),
- [_MOUSE] = KC_KEYMAP(
+ [_MOUSE] = LAYOUT_kc(
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
, , ,MS_UP, , , , , , , UP , , , ,/**/
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
@@ -286,12 +282,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , , , , , , , , , , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- ,MS_BTN1 ,MS_BTN2 ,
+ ,MS_BTN1 ,MS_BTN2 ,
// \------------------+----+----+---/ \---+----+----+-------------------/
- ),
+ ),
- [_MACROS] = KC_KEYMAP(
+ [_MACROS] = LAYOUT_kc(
//,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
/**/,RESET,SECRET_2,SECRET_3, , , ,SYSTEM_SLEEP, , ,INCL, , , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
@@ -299,7 +295,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
SCAP, , , , , , , , , , , , ,SCAP,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , ,
+ , , ,
// \------------------+----+----+---/ \---+----+----+-------------------/
)
@@ -349,11 +345,11 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
}
return MACRO_NONE;
};
-
+
void matrix_scan_user(void) {
uint8_t layer = biton32(layer_state);
-
+
switch (layer) {
case _QWERTY:
set_led_green;
@@ -381,7 +377,7 @@ void matrix_scan_user(void) {
_delay_ms(45);
set_led_blue;
_delay_ms(45);
- break;
+ break;
default:
set_led_green;
break;
diff --git a/keyboards/chocopad/config.h b/keyboards/chocopad/config.h
index bf861ccda..d2a1a7b48 100644
--- a/keyboards/chocopad/config.h
+++ b/keyboards/chocopad/config.h
@@ -40,10 +40,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 8
@@ -51,9 +47,7 @@
#define RGBLIGHT_VAL_STEP 8
#endif
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 4
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/ckeys/nakey/info.json b/keyboards/ckeys/nakey/info.json
index b44d0daf7..093e61d0e 100644
--- a/keyboards/ckeys/nakey/info.json
+++ b/keyboards/ckeys/nakey/info.json
@@ -5,8 +5,8 @@
"width": 4,
"height": 5,
"layouts": {
- "LAYOUT": {
- "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, "h":2}, {"label":"4", "x":0, "y":2}, {"label":"5", "x":1, "y":2}, {"label":"6", "x":2, "y":2}, {"label":"1", "x":0, "y":3}, {"label":"2", "x":1, "y":3}, {"label":"3", "x":2, "y":3}, {"label":"Enter", "x":3, "y":3, "h":2}, {"label":"0", "x":0, "y":4, "w":2}, {"label":".", "x":2, "y":4}]
- }
+ "LAYOUT_numpad_5x4": {
+ "layout": [{"label":"Num Lock", "x":0, "y":0}, {"label":"/", "x":1, "y":0}, {"label":"*", "x":2, "y":0}, {"label":"-", "x":3, "y":0}, {"label":"7", "x":0, "y":1}, {"label":"8", "x":1, "y":1}, {"label":"9", "x":2, "y":1}, {"label":"4", "x":0, "y":2}, {"label":"5", "x":1, "y":2}, {"label":"6", "x":2, "y":2}, {"label":"+", "x":3, "y":1, "h":2}, {"label":"1", "x":0, "y":3}, {"label":"2", "x":1, "y":3}, {"label":"3", "x":2, "y":3}, {"label":"0", "x":0, "y":4, "w":2}, {"label":".", "x":2, "y":4}, {"label":"Enter", "x":3, "y":3, "h":2}]
+ }
}
}
diff --git a/keyboards/ckeys/nakey/keymaps/default/keymap.c b/keyboards/ckeys/nakey/keymaps/default/keymap.c
index ebbb128bd..9c3e45b94 100644
--- a/keyboards/ckeys/nakey/keymaps/default/keymap.c
+++ b/keyboards/ckeys/nakey/keymaps/default/keymap.c
@@ -16,32 +16,31 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = LAYOUT( /* Base */
- KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
- KC_P7, KC_P8, KC_P9, KC_PPLS, \
- KC_P4, KC_P5, KC_P6, \
- KC_P1, KC_P2, KC_P3, KC_PENT, \
- KC_P0, KC_PDOT \
-),
+ [0] = LAYOUT_numpad_5x4( /* Base */
+ 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 \
+ ),
};
const uint16_t PROGMEM fn_actions[] = {
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
+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;
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
}
- return MACRO_NONE;
+ break;
+ }
+ return MACRO_NONE;
};
diff --git a/keyboards/ckeys/nakey/nakey.h b/keyboards/ckeys/nakey/nakey.h
index 3cbfda844..bbf531fb6 100644
--- a/keyboards/ckeys/nakey/nakey.h
+++ b/keyboards/ckeys/nakey/nakey.h
@@ -22,14 +22,13 @@
// The following is an example using the Planck MIT layout
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
-#define LAYOUT( \
+#define LAYOUT_numpad_5x4( \
k00, k01, k02, k03, \
- k10, k11, k12, k13, \
- k20, k21, k22, \
- k30, k31, k32, k33, \
- k40, k41 \
-) \
-{ \
+ k10, k11, k12, \
+ k20, k21, k22, k13, \
+ k30, k31, k32, \
+ k40, k41, k33 \
+) { \
{ k00, k01, k02, k03 }, \
{ k10, k11, k12, k13 }, \
{ k20, k21, k22, KC_NO }, \
diff --git a/keyboards/ckeys/nakey/rules.mk b/keyboards/ckeys/nakey/rules.mk
index a3571e8de..36b2193aa 100644
--- a/keyboards/ckeys/nakey/rules.mk
+++ b/keyboards/ckeys/nakey/rules.mk
@@ -66,3 +66,5 @@ 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
+
+LAYOUTS = numpad_5x4
diff --git a/keyboards/ckeys/obelus/info.json b/keyboards/ckeys/obelus/info.json
new file mode 100644
index 000000000..70d2f7e7e
--- /dev/null
+++ b/keyboards/ckeys/obelus/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "Obelus",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x4": {
+ "key_count": 16,
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/ckeys/obelus/keymaps/default/keymap.c b/keyboards/ckeys/obelus/keymaps/default/keymap.c
index c2c8e4a05..bdad1caca 100644
--- a/keyboards/ckeys/obelus/keymaps/default/keymap.c
+++ b/keyboards/ckeys/obelus/keymaps/default/keymap.c
@@ -1,5 +1,4 @@
-#include "obelus.h"
-#include "action_layer.h"
+#include QMK_KEYBOARD_H
#ifdef AUDIO_ENABLE
#include "audio.h"
#endif
@@ -18,12 +17,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | |
* `---------------------- '
*/
-[0] = LAYOUT( /* LAYER SELECT */
- KC_TRNS, KC_TRNS, KC_TRNS, RESET, \
- TO(4), KC_TRNS, KC_TRNS, KC_TRNS, \
- TO(1), TO(2), TO(3), KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
-),
+ [0] = LAYOUT_ortho_4x4( /* LAYER SELECT */
+ _______, _______, _______, RESET, \
+ TO(4), _______, _______, _______, \
+ TO(1), TO(2), TO(3), _______, \
+ _______, _______, _______, _______ \
+ ),
/* NUMPAD
* ,-----------------------.
* | 7 | 8 | 9 | * |
@@ -35,12 +34,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | 0 | . | / | = |
* `---------------------- '
*/
-[1] = LAYOUT( /* NUMPAD */
- KC_P7, KC_P8, KC_P9, KC_PAST, \
- KC_P4, KC_P5, KC_P6, KC_PMNS, \
- KC_P1, KC_P2, KC_P3, KC_PPLS, \
- KC_P0, KC_PDOT, KC_PSLS, LT(5,KC_PENT) \
-),
+ [1] = LAYOUT_ortho_4x4( /* NUMPAD */
+ KC_P7, KC_P8, KC_P9, KC_PAST, \
+ KC_P4, KC_P5, KC_P6, KC_PMNS, \
+ KC_P1, KC_P2, KC_P3, KC_PPLS, \
+ KC_P0, KC_PDOT, KC_PSLS, LT(5, KC_PENT) \
+ ),
/* NUMPAD SUPPLEMENT
* ,-----------------------.
* |NUMLK| | | |
@@ -52,12 +51,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | |
* `---------------------- '
*/
-[5] = LAYOUT( /* NUMPAD SUPPLEMENT */
- KC_NLCK, KC_TRNS, KC_TRNS, TO(0), \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
-),
+ [5] = LAYOUT_ortho_4x4( /* NUMPAD SUPPLEMENT */
+ KC_NLCK, _______, _______, TO(0), \
+ _______, _______, _______, _______, \
+ _______, _______, _______, _______, \
+ _______, _______, _______, _______ \
+ ),
/* NAV
* ,-----------------------.
* | INS |PGUP | TAB |PRSCR|
@@ -69,12 +68,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |LEFT |DOWN |RIGHT|ENTER|
* `---------------------- '
*/
-[2] = LAYOUT( /* NAV CLUSTER */
- KC_INS, KC_PGUP, KC_TAB, KC_PSCR, \
- KC_DEL, KC_PGDN, KC_VOLD, KC_VOLU, \
- KC_HOME, KC_UP, KC_END, TO(0), \
- KC_LEFT, KC_DOWN, KC_RGHT, KC_ENT \
-),
+ [2] = LAYOUT_ortho_4x4( /* NAV CLUSTER */
+ KC_INS, KC_PGUP, KC_TAB, KC_PSCR, \
+ KC_DEL, KC_PGDN, KC_VOLD, KC_VOLU, \
+ KC_HOME, KC_UP, KC_END, TO(0), \
+ KC_LEFT, KC_DOWN, KC_RGHT, KC_ENT \
+ ),
/* GAMING
* ,-----------------------.
* | ESC | 1 | 2 | 3 |
@@ -86,12 +85,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |CTRL | C | R |SPACE|
* `---------------------- '
*/
-[3] = LAYOUT( /* GAMING */
- LT(4, KC_ESC), KC_1, KC_2, KC_3, \
- KC_TAB, KC_Q, KC_W, KC_E, \
- KC_LSFT, KC_A, KC_S, KC_D, \
- KC_LCTL, KC_C, KC_R, KC_SPC \
-),
+ [3] = LAYOUT_ortho_4x4( /* GAMING */
+ LT(4, KC_ESC), KC_1, KC_2, KC_3, \
+ KC_TAB, KC_Q, KC_W, KC_E, \
+ KC_LSFT, KC_A, KC_S, KC_D, \
+ KC_LCTL, KC_C, KC_R, KC_SPC \
+ ),
/* MUSIC
* ,-----------------------.
* | | | | |
@@ -103,12 +102,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |TOGGL|MODE | | |
* `---------------------- '
*/
-[4] = LAYOUT( /* NUMPAD SUPPLEMENT */
- KC_NO, KC_NO, KC_NO, KC_NO, \
- KC_NO, KC_NO, KC_NO, KC_NO, \
- KC_NO, KC_NO, KC_NO, KC_NO, \
- MU_TOG, MU_MOD, KC_NO, TO(0) \
-),
+ [4] = LAYOUT_ortho_4x4( /* NUMPAD SUPPLEMENT */
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ MU_TOG, MU_MOD, XXXXXXX, TO(0) \
+ ),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
diff --git a/keyboards/ckeys/obelus/obelus.h b/keyboards/ckeys/obelus/obelus.h
index 21bc4d723..371b79df2 100644
--- a/keyboards/ckeys/obelus/obelus.h
+++ b/keyboards/ckeys/obelus/obelus.h
@@ -7,7 +7,7 @@
// The following is an example using the Planck MIT layout
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
-#define LAYOUT( \
+#define LAYOUT_ortho_4x4( \
k00, k01, k02, k03, \
k10, k11, k12, k13, \
k20, k21, k22, k23, \
diff --git a/keyboards/ckeys/obelus/rules.mk b/keyboards/ckeys/obelus/rules.mk
index d999b118c..f40610ee9 100644
--- a/keyboards/ckeys/obelus/rules.mk
+++ b/keyboards/ckeys/obelus/rules.mk
@@ -66,3 +66,5 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = yes # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+LAYOUTS = ortho_4x4
diff --git a/keyboards/clueboard/60/config.h b/keyboards/clueboard/60/config.h
index 5c5a86296..a862d2cda 100644
--- a/keyboards/clueboard/60/config.h
+++ b/keyboards/clueboard/60/config.h
@@ -49,9 +49,6 @@
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 6
-/* Prevent modifiers from being stuck on after layer changes. */
-#define PREVENT_STUCK_MODIFIERS
-
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
//#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/clueboard/60/keymaps/default/keymap.c b/keyboards/clueboard/60/keymaps/default/keymap.c
index 8397c4bbf..3e906737b 100644
--- a/keyboards/clueboard/60/keymaps/default/keymap.c
+++ b/keyboards/clueboard/60/keymaps/default/keymap.c
@@ -1,4 +1,4 @@
-#include "60.h"
+#include QMK_KEYBOARD_H
#define _______ KC_TRNS
@@ -32,7 +32,7 @@ enum custom_keycodes {
float song_zelda_puzzle[][2] = SONG(ZELDA_PUZZLE);
#endif
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer
* ,-----------------------------------------------------------.
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
diff --git a/keyboards/clueboard/60/keymaps/default_aek/keymap.c b/keyboards/clueboard/60/keymaps/default_aek/keymap.c
index 63b1d8ba2..ea5333e3c 100644
--- a/keyboards/clueboard/60/keymaps/default_aek/keymap.c
+++ b/keyboards/clueboard/60/keymaps/default_aek/keymap.c
@@ -1,4 +1,4 @@
-#include "60.h"
+#include QMK_KEYBOARD_H
#define _______ KC_TRNS
@@ -8,7 +8,7 @@ enum keyboard_layers {
_CL
};
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer
* ,-----------------------------------------------------------.
* |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BkSp|
diff --git a/keyboards/clueboard/60/keymaps/yanfali/keymap.c b/keyboards/clueboard/60/keymaps/yanfali/keymap.c
index eec17720a..b810bdcf8 100644
--- a/keyboards/clueboard/60/keymaps/yanfali/keymap.c
+++ b/keyboards/clueboard/60/keymaps/yanfali/keymap.c
@@ -1,4 +1,4 @@
-#include "60.h"
+#include QMK_KEYBOARD_H
#define _______ KC_TRNS
@@ -33,7 +33,7 @@ enum custom_keycodes {
float song_zelda_puzzle[][2] = SONG(ZELDA_PUZZLE);
#endif
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer
* ,-----------------------------------------------------------------.
* |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
diff --git a/keyboards/clueboard/66/info.json b/keyboards/clueboard/66/info.json
index 7faeae29c..1675ae761 100644
--- a/keyboards/clueboard/66/info.json
+++ b/keyboards/clueboard/66/info.json
@@ -5,6 +5,10 @@
"layouts": {
"KEYMAP": {
"layout": [{"x": 0, "y": 0, "w": 1, "label": "GRAVE"}, {"x": 1, "y": 0, "w": 1, "label": "1"}, {"x": 2, "y": 0, "w": 1, "label": "2"}, {"x": 3, "y": 0, "w": 1, "label": "3"}, {"x": 4, "y": 0, "w": 1, "label": "4"}, {"x": 5, "y": 0, "w": 1, "label": "5"}, {"x": 6, "y": 0, "w": 1, "label": "6"}, {"x": 7, "y": 0, "w": 1, "label": "7"}, {"x": 8, "y": 0, "w": 1, "label": "8"}, {"x": 9, "y": 0, "w": 1, "label": "9"}, {"x": 10, "y": 0, "w": 1, "label": "0"}, {"x": 11, "y": 0, "w": 1, "label": "DASH"}, {"x": 12, "y": 0, "w": 1, "label": "EQUALSIGN"}, {"x": 13, "y": 0, "w": 1, "label": "YEN"}, {"x": 14, "y": 0, "w": 1, "label": "BACKSPACE"}, {"x": 15.5, "y": 0, "w": 1, "label": "PAGEUP"}, {"x": 0, "y": 1, "w": 1.5, "label": "TAB"}, {"x": 1.5, "y": 1, "w": 1, "label": "Q"}, {"x": 2.5, "y": 1, "w": 1, "label": "W"}, {"x": 3.5, "y": 1, "w": 1, "label": "E"}, {"x": 4.5, "y": 1, "w": 1, "label": "R"}, {"x": 5.5, "y": 1, "w": 1, "label": "T"}, {"x": 6.5, "y": 1, "w": 1, "label": "Y"}, {"x": 7.5, "y": 1, "w": 1, "label": "U"}, {"x": 8.5, "y": 1, "w": 1, "label": "I"}, {"x": 9.5, "y": 1, "w": 1, "label": "O"}, {"x": 10.5, "y": 1, "w": 1, "label": "P"}, {"x": 11.5, "y": 1, "w": 1, "label": "LBRACKET"}, {"x": 12.5, "y": 1, "w": 1, "label": "RBRACKET"}, {"x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH"}, {"x": 15.5, "y": 1, "w": 1, "label": "PAGEDOWN"}, {"x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK"}, {"x": 1.75, "y": 2, "w": 1, "label": "A"}, {"x": 2.75, "y": 2, "w": 1, "label": "S"}, {"x": 3.75, "y": 2, "w": 1, "label": "D"}, {"x": 4.75, "y": 2, "w": 1, "label": "F"}, {"x": 5.75, "y": 2, "w": 1, "label": "G"}, {"x": 6.75, "y": 2, "w": 1, "label": "H"}, {"x": 7.75, "y": 2, "w": 1, "label": "J"}, {"x": 8.75, "y": 2, "w": 1, "label": "K"}, {"x": 9.75, "y": 2, "w": 1, "label": "L"}, {"x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON"}, {"x": 11.75, "y": 2, "w": 1, "label": "QUOTE"}, {"x": 12.75, "y": 2, "w": 1, "label": "ISOHASH"}, {"x": 13.75, "y": 2, "w": 1.25, "label": "ENTER"}, {"x": 0, "y": 3, "w": 1.25, "label": "LSHIFT"}, {"x": 1.25, "y": 3, "w": 1, "label": "ISOBACKSLASH"}, {"x": 2.25, "y": 3, "w": 1, "label": "Z"}, {"x": 3.25, "y": 3, "w": 1, "label": "X"}, {"x": 4.25, "y": 3, "w": 1, "label": "C"}, {"x": 5.25, "y": 3, "w": 1, "label": "V"}, {"x": 6.25, "y": 3, "w": 1, "label": "B"}, {"x": 7.25, "y": 3, "w": 1, "label": "N"}, {"x": 8.25, "y": 3, "w": 1, "label": "M"}, {"x": 9.25, "y": 3, "w": 1, "label": "COMMA"}, {"x": 10.25, "y": 3, "w": 1, "label": "PERIOD"}, {"x": 11.25, "y": 3, "w": 1, "label": "SLASH"}, {"x": 12.25, "y": 3, "w": 1, "label": "JPBACKSLASH"}, {"x": 13.25, "y": 3, "w": 1.25, "label": "RSHIFT"}, {"x": 14.5, "y": 3, "w": 1, "label": "UP"}, {"x": 0, "y": 4, "w": 1.25, "label": "LCTRL"}, {"x": 1.25, "y": 4, "w": 1, "label": "LALT"}, {"x": 2.25, "y": 4, "w": 1.25, "label": "LCMD"}, {"x": 3.5, "y": 4, "w": 1.25, "label": "MUHENKAN"}, {"x": 4.75, "y": 4, "w": 2, "label": "SPACE1"}, {"x": 6.75, "y": 4, "w": 2, "label": "SPACE2"}, {"x": 8.75, "y": 4, "w": 1.25, "label": "HENKAN"}, {"x": 10, "y": 4, "w": 1.25, "label": "RCMD"}, {"x": 11.25, "y": 4, "w": 1, "label": "RCTRL"}, {"x": 12.25, "y": 4, "w": 1.25, "label": "FN"}, {"x": 13.5, "y": 4, "w": 1, "label": "LEFT"}, {"x": 14.5, "y": 4, "w": 1, "label": "DOWN"}, {"x": 15.5, "y": 4, "w": 1, "label": "RIGHT"}]
+ },
+
+ "LAYOUT_66_ansi": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.25}, {"x":14.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}]
}
}
}
diff --git a/keyboards/clueboard/66/keymaps/bloodlvst/config.h b/keyboards/clueboard/66/keymaps/bloodlvst/config.h
index 320401dbd..456936cf9 100644
--- a/keyboards/clueboard/66/keymaps/bloodlvst/config.h
+++ b/keyboards/clueboard/66/keymaps/bloodlvst/config.h
@@ -3,6 +3,5 @@
#include "../../config.h"
-#define PREVENT_STUCK_MODIFIERS
#define DISABLE_SPACE_CADET_ROLLOVER
#endif
diff --git a/keyboards/clueboard/66/keymaps/skully/keymap.c b/keyboards/clueboard/66/keymaps/skully/keymap.c
deleted file mode 100644
index 7f34a8cba..000000000
--- a/keyboards/clueboard/66/keymaps/skully/keymap.c
+++ /dev/null
@@ -1,53 +0,0 @@
-#include "66.h"
-
-enum custom_keycodes {
- M_SHRUG = SAFE_RANGE
-};
-
-// 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 _BL 0
-#define _FL 1
-#define _CL 2
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Keymap _BL: Base Layer (Default Layer)
- */
-[_BL] = LAYOUT(
- KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
- MO(_FL), KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP,
- KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-
- /* Keymap _FL: Function Layer
- */
-[_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, S(KC_GRV), KC_DEL, BL_STEP,
- S(KC_TAB), S(KC_Q), S(KC_W),S(KC_E),S(KC_R),S(KC_T), S(KC_Y), S(KC_U),S(KC_I),S(KC_O), S(KC_P), S(KC_LBRC),S(KC_RBRC),S(KC_BSLS), S(KC_PGDN),
- S(KC_LCTL),S(KC_A), MO(_CL),S(KC_D),S(KC_F),S(KC_G), S(KC_H), S(KC_J),S(KC_K),S(KC_L), S(KC_SCLN),S(KC_QUOT),S(KC_NUHS),S(KC_ENT),
- MO(_FL), S(KC_NUBS),S(KC_Z),S(KC_X),S(KC_C),S(KC_V), S(KC_B), S(KC_N),S(KC_M),S(KC_COMM),S(KC_DOT), S(KC_SLSH),S(KC_RO), KC_RSFT, KC_PGUP,
- KC_LCTL, KC_LALT, KC_LGUI,KC_MHEN, S(KC_SPC),S(KC_SPC), KC_HENK, KC_RGUI, KC_RALT, KC_RCTL, KC_HOME, KC_PGDN, KC_END),
-
- /* Keymap _CL: Control layer
- */
-[_CL] = LAYOUT(
- M_SHRUG, _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_TOG, RGB_VAI,
- _______, _______, _______,_______,RESET, _______,_______,_______,_______,_______, _______, _______, _______, _______, RGB_VAD,
- _______, _______, MO(_CL),_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, _______,
- MO(_FL), _______, _______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______, MO(_FL), RGB_SAI,
- _______, _______, _______,_______, RGB_MOD,RGB_MOD, _______, _______, _______, _______, RGB_HUD,RGB_SAD,RGB_HUI),
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch(keycode) {
- case M_SHRUG:
- SEND_STRING("/shrug"SS_TAP(X_ENTER));
- return false; break;
- }
- }
- return true;
-};
diff --git a/keyboards/clueboard/66/keymaps/skully/readme.md b/keyboards/clueboard/66/keymaps/skully/readme.md
deleted file mode 100644
index b9ad1b09a..000000000
--- a/keyboards/clueboard/66/keymaps/skully/readme.md
+++ /dev/null
@@ -1,11 +0,0 @@
-![Clueboard Layout Image](http://i.imgur.com/VaoGn3M.png)
-
-# skullY's Clueboard Layout
-
-This layout is what I (@skullydazed) use on my personal Clueboards. I mostly use it for programming, CAD, and general typing.
-
-I've made the following changes from the default layout:
-
-* shift_fn on left shift
-* Change capslock to control
-* Swap Alt and Cmd
diff --git a/keyboards/clueboard/66/keymaps/skully/rules.mk b/keyboards/clueboard/66/keymaps/skully/rules.mk
deleted file mode 100644
index ef4a726fe..000000000
--- a/keyboards/clueboard/66/keymaps/skully/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-RGBLIGHT_ENABLE = no
-MOUSEKEY_ENABLE = yes
diff --git a/keyboards/clueboard/66/keymaps/xyverz/rules.mk b/keyboards/clueboard/66/keymaps/xyverz/rules.mk
index 950dadf84..fc02ecb7e 100644
--- a/keyboards/clueboard/66/keymaps/xyverz/rules.mk
+++ b/keyboards/clueboard/66/keymaps/xyverz/rules.mk
@@ -42,7 +42,7 @@
# change to "no" to disable the options, or define them in the makefile.mk in
# the appropriate keymap folder that will get included automatically
#
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
ifndef QUANTUM_DIR
include ../../../../Makefile
diff --git a/keyboards/clueboard/66/rev2/rev2.h b/keyboards/clueboard/66/rev2/rev2.h
index 5eedcd237..bac608df9 100644
--- a/keyboards/clueboard/66/rev2/rev2.h
+++ b/keyboards/clueboard/66/rev2/rev2.h
@@ -64,14 +64,14 @@
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
- { k50, k51, k52, k53, k54, KC_NO, KC_NO, k57 }, \
+ { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
-/* LAYOUT_66_iso, standard 67 key ISO layout
+/* LAYOUT_66_iso, standard 67 key ISO layout
*/
#define LAYOUT_66_iso( \
k00, k01, k02, k03, k04, k05, k06, k07, k50, k51, k52, k53, k54, k56, k57, \
diff --git a/keyboards/clueboard/66/rev3/rev3.h b/keyboards/clueboard/66/rev3/rev3.h
index c146d7bb3..0f322a5c0 100644
--- a/keyboards/clueboard/66/rev3/rev3.h
+++ b/keyboards/clueboard/66/rev3/rev3.h
@@ -64,7 +64,7 @@
{ k20, k21, k22, k23, k24, k25, k26, k27 }, \
{ k30, KC_NO, k32, k33, k34, k35, k36, k37 }, \
{ k40, k41, k42, KC_NO, KC_NO, KC_NO, k46, KC_NO }, \
- { k50, k51, k52, k53, k54, KC_NO, KC_NO, k57 }, \
+ { k50, k51, k52, k53, k54, KC_NO, k56, k57 }, \
{ k60, k61, k62, k63, k64, k65, KC_NO, k67 }, \
{ k70, k71, k72, k73, KC_NO, k75, KC_NO, KC_NO }, \
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
diff --git a/keyboards/clueboard/66/rules.mk b/keyboards/clueboard/66/rules.mk
index 11f391c3f..c5f8b5c11 100644
--- a/keyboards/clueboard/66/rules.mk
+++ b/keyboards/clueboard/66/rules.mk
@@ -21,3 +21,5 @@ RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
MIDI_ENABLE = no # MIDI controls
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+
+LAYOUTS = 66_ansi
diff --git a/keyboards/clueboard/66_hotswap/66_hotswap.h b/keyboards/clueboard/66_hotswap/66_hotswap.h
index 61c6fe359..9367c2633 100644
--- a/keyboards/clueboard/66_hotswap/66_hotswap.h
+++ b/keyboards/clueboard/66_hotswap/66_hotswap.h
@@ -1,10 +1,5 @@
-#ifndef CLUEBOARD_H
-#define CLUEBOARD_H
-
-#include "quantum.h"
+#pragma once
#ifdef KEYBOARD_clueboard_66_hotswap_gen1
#include "gen1.h"
#endif
-
-#endif
diff --git a/keyboards/clueboard/66_hotswap/config.h b/keyboards/clueboard/66_hotswap/config.h
index 59a0abc7f..97da92cfd 100644
--- a/keyboards/clueboard/66_hotswap/config.h
+++ b/keyboards/clueboard/66_hotswap/config.h
@@ -15,9 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CLUEBOARD_66_CONFIG_H
-#define CLUEBOARD_66_CONFIG_H
-
+#pragma once
#include "config_common.h"
/* USB Device descriptor parameter */
@@ -47,17 +45,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* 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_ONESHOT
+#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/clueboard/66_hotswap/gen1/config.h b/keyboards/clueboard/66_hotswap/gen1/config.h
index d8163f538..14188634b 100644
--- a/keyboards/clueboard/66_hotswap/gen1/config.h
+++ b/keyboards/clueboard/66_hotswap/gen1/config.h
@@ -1,6 +1,4 @@
-#ifndef CLUEBOARD_66_REV3_CONFIG_H
-#define CLUEBOARD_66_REV3_CONFIG_H
-
+#pragma once
#include "config_common.h"
#define PRODUCT_ID 0x2390
@@ -26,7 +24,9 @@
/* Speaker configuration
*/
-//#define SPEAKER_PIN B7 // FIXME: find the correct name for this define
+#define B7_AUDIO
+#define NO_MUSIC_MODE
+#define AUDIO_CLICKY
/* Backlight configuration
*/
@@ -49,5 +49,3 @@
#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 16 // The led to start at
#define RGBLIGHT_EFFECT_KNIGHT_LED_NUM 8 // How many LEDs to travel
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 4 // How many LEDs wide to light up
-
-#endif
diff --git a/keyboards/clueboard/66_hotswap/gen1/gen1.h b/keyboards/clueboard/66_hotswap/gen1/gen1.h
index 293620ac0..2d0a9d397 100644
--- a/keyboards/clueboard/66_hotswap/gen1/gen1.h
+++ b/keyboards/clueboard/66_hotswap/gen1/gen1.h
@@ -1,7 +1,5 @@
-#ifndef gen1_H
-#define gen1_H
-
-#include "66_hotswap.h"
+#pragma once
+#include "quantum.h"
/* Clueboard matrix layout
* ,-----------------------------------------------------------. ,---.
@@ -67,5 +65,3 @@
{ k80, k81, k82, k83, KC_NO, k85, k86, KC_NO }, \
{ KC_NO, KC_NO, k92, k93, k94, k95, k96, k97 } \
}
-
-#endif
diff --git a/keyboards/clueboard/66_hotswap/gen1/rules.mk b/keyboards/clueboard/66_hotswap/gen1/rules.mk
index 54a2685bf..887592b37 100644
--- a/keyboards/clueboard/66_hotswap/gen1/rules.mk
+++ b/keyboards/clueboard/66_hotswap/gen1/rules.mk
@@ -1 +1,24 @@
-BACKLIGHT_ENABLE = yes \ No newline at end of file
+EXTRAFLAGS += -flto
+LAYOUTS = 66_ansi
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# comment out to disable the options.
+#
+BACKLIGHT_ENABLE = yes
+BOOTMAGIC_ENABLE = no
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = yes
+COMMAND_ENABLE = no
+NKRO_ENABLE = yes
+AUDIO_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+MIDI_ENABLE = no
+UNICODE_ENABLE = no
+BLUETOOTH_ENABLE = no
diff --git a/keyboards/clueboard/66_hotswap/info.json b/keyboards/clueboard/66_hotswap/info.json
index 66705b7a7..42fbecedd 100644
--- a/keyboards/clueboard/66_hotswap/info.json
+++ b/keyboards/clueboard/66_hotswap/info.json
@@ -3,8 +3,12 @@
"width": 16.5,
"height": 5,
"layouts": {
- "KEYMAP": {
+ "LAYOUT": {
"layout": [{"x": 0, "y": 0, "w": 1, "label": "GRAVE"}, {"x": 1, "y": 0, "w": 1, "label": "1"}, {"x": 2, "y": 0, "w": 1, "label": "2"}, {"x": 3, "y": 0, "w": 1, "label": "3"}, {"x": 4, "y": 0, "w": 1, "label": "4"}, {"x": 5, "y": 0, "w": 1, "label": "5"}, {"x": 6, "y": 0, "w": 1, "label": "6"}, {"x": 7, "y": 0, "w": 1, "label": "7"}, {"x": 8, "y": 0, "w": 1, "label": "8"}, {"x": 9, "y": 0, "w": 1, "label": "9"}, {"x": 10, "y": 0, "w": 1, "label": "0"}, {"x": 11, "y": 0, "w": 1, "label": "DASH"}, {"x": 12, "y": 0, "w": 1, "label": "EQUALSIGN"}, {"x": 13, "y": 0, "w": 1, "label": "YEN"}, {"x": 14, "y": 0, "w": 1, "label": "BACKSPACE"}, {"x": 15.5, "y": 0, "w": 1, "label": "PAGEUP"}, {"x": 0, "y": 1, "w": 1.5, "label": "TAB"}, {"x": 1.5, "y": 1, "w": 1, "label": "Q"}, {"x": 2.5, "y": 1, "w": 1, "label": "W"}, {"x": 3.5, "y": 1, "w": 1, "label": "E"}, {"x": 4.5, "y": 1, "w": 1, "label": "R"}, {"x": 5.5, "y": 1, "w": 1, "label": "T"}, {"x": 6.5, "y": 1, "w": 1, "label": "Y"}, {"x": 7.5, "y": 1, "w": 1, "label": "U"}, {"x": 8.5, "y": 1, "w": 1, "label": "I"}, {"x": 9.5, "y": 1, "w": 1, "label": "O"}, {"x": 10.5, "y": 1, "w": 1, "label": "P"}, {"x": 11.5, "y": 1, "w": 1, "label": "LBRACKET"}, {"x": 12.5, "y": 1, "w": 1, "label": "RBRACKET"}, {"x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH"}, {"x": 15.5, "y": 1, "w": 1, "label": "PAGEDOWN"}, {"x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK"}, {"x": 1.75, "y": 2, "w": 1, "label": "A"}, {"x": 2.75, "y": 2, "w": 1, "label": "S"}, {"x": 3.75, "y": 2, "w": 1, "label": "D"}, {"x": 4.75, "y": 2, "w": 1, "label": "F"}, {"x": 5.75, "y": 2, "w": 1, "label": "G"}, {"x": 6.75, "y": 2, "w": 1, "label": "H"}, {"x": 7.75, "y": 2, "w": 1, "label": "J"}, {"x": 8.75, "y": 2, "w": 1, "label": "K"}, {"x": 9.75, "y": 2, "w": 1, "label": "L"}, {"x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON"}, {"x": 11.75, "y": 2, "w": 1, "label": "QUOTE"}, {"x": 12.75, "y": 2, "w": 1, "label": "ISOHASH"}, {"x": 13.75, "y": 2, "w": 1.25, "label": "ENTER"}, {"x": 0, "y": 3, "w": 1.25, "label": "LSHIFT"}, {"x": 1.25, "y": 3, "w": 1, "label": "ISOBACKSLASH"}, {"x": 2.25, "y": 3, "w": 1, "label": "Z"}, {"x": 3.25, "y": 3, "w": 1, "label": "X"}, {"x": 4.25, "y": 3, "w": 1, "label": "C"}, {"x": 5.25, "y": 3, "w": 1, "label": "V"}, {"x": 6.25, "y": 3, "w": 1, "label": "B"}, {"x": 7.25, "y": 3, "w": 1, "label": "N"}, {"x": 8.25, "y": 3, "w": 1, "label": "M"}, {"x": 9.25, "y": 3, "w": 1, "label": "COMMA"}, {"x": 10.25, "y": 3, "w": 1, "label": "PERIOD"}, {"x": 11.25, "y": 3, "w": 1, "label": "SLASH"}, {"x": 12.25, "y": 3, "w": 1, "label": "JPBACKSLASH"}, {"x": 13.25, "y": 3, "w": 1.25, "label": "RSHIFT"}, {"x": 14.5, "y": 3, "w": 1, "label": "UP"}, {"x": 0, "y": 4, "w": 1.25, "label": "LCTRL"}, {"x": 1.25, "y": 4, "w": 1, "label": "LALT"}, {"x": 2.25, "y": 4, "w": 1.25, "label": "LCMD"}, {"x": 3.5, "y": 4, "w": 1.25, "label": "MUHENKAN"}, {"x": 4.75, "y": 4, "w": 2, "label": "SPACE1"}, {"x": 6.75, "y": 4, "w": 2, "label": "SPACE2"}, {"x": 8.75, "y": 4, "w": 1.25, "label": "HENKAN"}, {"x": 10, "y": 4, "w": 1.25, "label": "RCMD"}, {"x": 11.25, "y": 4, "w": 1, "label": "RCTRL"}, {"x": 12.25, "y": 4, "w": 1.25, "label": "FN"}, {"x": 13.5, "y": 4, "w": 1, "label": "LEFT"}, {"x": 14.5, "y": 4, "w": 1, "label": "DOWN"}, {"x": 15.5, "y": 4, "w": 1, "label": "RIGHT"}]
+ },
+
+ "LAYOUT_66_ansi": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.25}, {"x":14.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4}, {"label":"Menu", "x":12.25, "y":4, "w":1.25}, {"x":13.5, "y":4}, {"x":14.5, "y":4}, {"x":15.5, "y":4}]
}
}
}
diff --git a/keyboards/clueboard/66_hotswap/rules.mk b/keyboards/clueboard/66_hotswap/rules.mk
deleted file mode 100644
index 1a22696e4..000000000
--- a/keyboards/clueboard/66_hotswap/rules.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-DEFAULT_FOLDER = clueboard/66_hotswap/gen1
-LAYOUTS = 66_ansi
-MCU = atmega32u4
-F_CPU = 16000000
-ARCH = AVR8
-F_USB = $(F_CPU)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
-MIDI_ENABLE = no # MIDI controls
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
diff --git a/keyboards/comet46/comet46.c b/keyboards/comet46/comet46.c
index 20dcfab83..0710b8e33 100644
--- a/keyboards/comet46/comet46.c
+++ b/keyboards/comet46/comet46.c
@@ -4,19 +4,11 @@ void uart_init(void) {
SERIAL_UART_INIT();
}
-void led_init(void) {
- DDRD |= (1<<1);
- PORTD |= (1<<1);
- DDRF |= (1<<4) | (1<<5);
- PORTF |= (1<<4) | (1<<5);
-}
-
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
matrix_init_user();
uart_init();
- led_init();
}
void matrix_scan_kb(void) {
diff --git a/keyboards/comet46/comet46.h b/keyboards/comet46/comet46.h
index 7d6d6d513..07dad0a00 100644
--- a/keyboards/comet46/comet46.h
+++ b/keyboards/comet46/comet46.h
@@ -6,46 +6,6 @@
#include "backlight.h"
#include <stddef.h>
-#define red_led_off PORTF |= (1<<5)
-#define red_led_on PORTF &= ~(1<<5)
-#define blu_led_off PORTF |= (1<<4)
-#define blu_led_on PORTF &= ~(1<<4)
-#define grn_led_off PORTD |= (1<<1)
-#define grn_led_on PORTD &= ~(1<<1)
-
-#define set_led_off red_led_off; grn_led_off; blu_led_off
-#define set_led_red red_led_on; grn_led_off; blu_led_off
-#define set_led_blue red_led_off; grn_led_off; blu_led_on
-#define set_led_green red_led_off; grn_led_on; blu_led_off
-#define set_led_yellow red_led_on; grn_led_on; blu_led_off
-#define set_led_magenta red_led_on; grn_led_off; blu_led_on
-#define set_led_cyan red_led_off; grn_led_on; blu_led_on
-#define set_led_white red_led_on; grn_led_on; blu_led_on
-
-/*
-#define LED_B 5
-#define LED_R 6
-#define LED_G 7
-
-#define all_leds_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
-
-#define red_led_on PORTF |= (1<<LED_R)
-#define red_led_off PORTF &= ~(1<<LED_R)
-#define grn_led_on PORTF |= (1<<LED_G)
-#define grn_led_off PORTF &= ~(1<<LED_G)
-#define blu_led_on PORTF |= (1<<LED_B)
-#define blu_led_off PORTF &= ~(1<<LED_B)
-
-#define set_led_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
-#define set_led_red PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_G) | (1<<LED_R)
-#define set_led_blue PORTF = PORTF & ~(1<<LED_G) & ~(1<<LED_R) | (1<<LED_B)
-#define set_led_green PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_R) | (1<<LED_G)
-#define set_led_yellow PORTF = PORTF & ~(1<<LED_B) | (1<<LED_R) | (1<<LED_G)
-#define set_led_magenta PORTF = PORTF & ~(1<<LED_G) | (1<<LED_R) | (1<<LED_B)
-#define set_led_cyan PORTF = PORTF & ~(1<<LED_R) | (1<<LED_B) | (1<<LED_G)
-#define set_led_white PORTF |= (1<<LED_B) | (1<<LED_R) | (1<<LED_G)
-*/
-
// This a shortcut to help you visually see your layout.
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
diff --git a/keyboards/comet46/config.h b/keyboards/comet46/config.h
index 90d923f90..c43f13a50 100644
--- a/keyboards/comet46/config.h
+++ b/keyboards/comet46/config.h
@@ -41,19 +41,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ONESHOT_TIMEOUT 500
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
/*
* Feature disable options
* These options are also useful to firmware size reduction.
*/
-#define PREVENT_STUCK_MODIFIERS
-
/* disable debug print */
//#define NO_DEBUG
@@ -67,6 +59,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
+// Define masks for modifiers
+#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
+#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
+
//UART settings for communication with the RF microcontroller
#define SERIAL_UART_BAUD 1000000
#define SERIAL_UART_DATA UDR1
diff --git a/keyboards/comet46/i2c.c b/keyboards/comet46/i2c.c
new file mode 100644
index 000000000..4bee5c639
--- /dev/null
+++ b/keyboards/comet46/i2c.c
@@ -0,0 +1,162 @@
+#include <util/twi.h>
+#include <avr/io.h>
+#include <stdlib.h>
+#include <avr/interrupt.h>
+#include <util/twi.h>
+#include <stdbool.h>
+#include "i2c.h"
+
+#ifdef USE_I2C
+
+// Limits the amount of we wait for any one i2c transaction.
+// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
+// 9 bits, a single transaction will take around 90μs to complete.
+//
+// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
+// poll loop takes at least 8 clock cycles to execute
+#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
+
+#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
+
+volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
+
+static volatile uint8_t slave_buffer_pos;
+static volatile bool slave_has_register_set = false;
+
+// Wait for an i2c operation to finish
+inline static
+void i2c_delay(void) {
+ uint16_t lim = 0;
+ while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
+ lim++;
+
+ // easier way, but will wait slightly longer
+ // _delay_us(100);
+}
+
+// Setup twi to run at 100kHz or 400kHz (see ./i2c.h SCL_CLOCK)
+void i2c_master_init(void) {
+ // no prescaler
+ TWSR = 0;
+ // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
+ // Check datasheets for more info.
+ TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
+}
+
+// Start a transaction with the given i2c slave address. The direction of the
+// transfer is set with I2C_READ and I2C_WRITE.
+// returns: 0 => success
+// 1 => error
+uint8_t i2c_master_start(uint8_t address) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
+
+ i2c_delay();
+
+ // check that we started successfully
+ if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
+ return 1;
+
+ TWDR = address;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+
+ i2c_delay();
+
+ if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
+ return 1; // slave did not acknowledge
+ else
+ return 0; // success
+}
+
+
+// Finish the i2c transaction.
+void i2c_master_stop(void) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+
+ uint16_t lim = 0;
+ while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
+ lim++;
+}
+
+// Write one byte to the i2c slave.
+// returns 0 => slave ACK
+// 1 => slave NACK
+uint8_t i2c_master_write(uint8_t data) {
+ TWDR = data;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+
+ i2c_delay();
+
+ // check if the slave acknowledged us
+ return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
+}
+
+// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
+// if ack=0 the acknowledge bit is not set.
+// returns: byte read from i2c device
+uint8_t i2c_master_read(int ack) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
+
+ i2c_delay();
+ return TWDR;
+}
+
+void i2c_reset_state(void) {
+ TWCR = 0;
+}
+
+void i2c_slave_init(uint8_t address) {
+ TWAR = address << 0; // slave i2c address
+ // TWEN - twi enable
+ // TWEA - enable address acknowledgement
+ // TWINT - twi interrupt flag
+ // TWIE - enable the twi interrupt
+ TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
+}
+
+ISR(TWI_vect);
+
+ISR(TWI_vect) {
+ uint8_t ack = 1;
+ switch(TW_STATUS) {
+ case TW_SR_SLA_ACK:
+ // this device has been addressed as a slave receiver
+ slave_has_register_set = false;
+ break;
+
+ case TW_SR_DATA_ACK:
+ // this device has received data as a slave receiver
+ // The first byte that we receive in this transaction sets the location
+ // of the read/write location of the slaves memory that it exposes over
+ // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
+ // slave_buffer_pos after each write.
+ if(!slave_has_register_set) {
+ slave_buffer_pos = TWDR;
+ // don't acknowledge the master if this memory loctaion is out of bounds
+ if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
+ ack = 0;
+ slave_buffer_pos = 0;
+ }
+ slave_has_register_set = true;
+ } else {
+ i2c_slave_buffer[slave_buffer_pos] = TWDR;
+ BUFFER_POS_INC();
+ }
+ break;
+
+ case TW_ST_SLA_ACK:
+ case TW_ST_DATA_ACK:
+ // master has addressed this device as a slave transmitter and is
+ // requesting data.
+ TWDR = i2c_slave_buffer[slave_buffer_pos];
+ BUFFER_POS_INC();
+ break;
+
+ case TW_BUS_ERROR: // something went wrong, reset twi state
+ TWCR = 0;
+ default:
+ break;
+ }
+ // Reset everything, so we are ready for the next TWI interrupt
+ TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
+}
+#endif
diff --git a/keyboards/comet46/i2c.h b/keyboards/comet46/i2c.h
new file mode 100644
index 000000000..47cf6bd1b
--- /dev/null
+++ b/keyboards/comet46/i2c.h
@@ -0,0 +1,49 @@
+#ifndef I2C_H
+#define I2C_H
+
+#include <stdint.h>
+
+#ifndef F_CPU
+#define F_CPU 16000000UL
+#endif
+
+#define I2C_READ 1
+#define I2C_WRITE 0
+
+#define I2C_ACK 1
+#define I2C_NACK 0
+
+#define SLAVE_BUFFER_SIZE 0x10
+
+// i2c SCL clock frequency 400kHz
+#define SCL_CLOCK 400000L
+
+extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
+
+void i2c_master_init(void);
+uint8_t i2c_master_start(uint8_t address);
+void i2c_master_stop(void);
+uint8_t i2c_master_write(uint8_t data);
+uint8_t i2c_master_read(int);
+void i2c_reset_state(void);
+void i2c_slave_init(uint8_t address);
+
+
+static inline unsigned char i2c_start_read(unsigned char addr) {
+ return i2c_master_start((addr << 1) | I2C_READ);
+}
+
+static inline unsigned char i2c_start_write(unsigned char addr) {
+ return i2c_master_start((addr << 1) | I2C_WRITE);
+}
+
+// from SSD1306 scrips
+extern unsigned char i2c_rep_start(unsigned char addr);
+extern void i2c_start_wait(unsigned char addr);
+extern unsigned char i2c_readAck(void);
+extern unsigned char i2c_readNak(void);
+extern unsigned char i2c_read(unsigned char ack);
+
+#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
+
+#endif
diff --git a/keyboards/comet46/info.json b/keyboards/comet46/info.json
new file mode 100644
index 000000000..9881397b4
--- /dev/null
+++ b/keyboards/comet46/info.json
@@ -0,0 +1,62 @@
+{
+ "keyboard_name": "Comet46",
+ "url": "",
+ "maintainer": "SatT",
+ "width": 15,
+ "height": 4.9,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"TAB", "x":0, "y":0.45},
+ {"label":"Q", "x":1, "y":0.45},
+ {"label":"W", "x":2, "y":0.15},
+ {"label":"E", "x":3, "y":0},
+ {"label":"R", "x":4, "y":0.30},
+ {"label":"T", "x":5, "y":0.45},
+ {"label":"Y", "x":9, "y":0.45},
+ {"label":"U", "x":10, "y":0.30},
+ {"label":"I", "x":11, "y":0},
+ {"label":"O", "x":12, "y":0.15},
+ {"label":"P", "x":13, "y":0.45},
+ {"label":"BSPC", "x":14, "y":0.45},
+
+ {"label":"LCTL", "x":0, "y":1.45},
+ {"label":"A", "x":1, "y":1.45},
+ {"label":"S", "x":2, "y":1.15},
+ {"label":"D", "x":3, "y":1},
+ {"label":"F", "x":4, "y":1.30},
+ {"label":"G", "x":5, "y":1.45},
+ {"label":"ESC", "x":6, "y":1},
+ {"label":"DEL", "x":8, "y":1},
+ {"label":"H", "x":9, "y":1.45},
+ {"label":"J", "x":10, "y":1.30},
+ {"label":"K", "x":11, "y":1},
+ {"label":"L", "x":12, "y":1.15},
+ {"label":"SCLN", "x":13, "y":1.45},
+ {"label":"QUOT", "x":14, "y":1.45},
+
+ {"label":"LSFT", "x":0, "y":2.45},
+ {"label":"Z", "x":1, "y":2.45},
+ {"label":"X", "x":2, "y":2.15},
+ {"label":"C", "x":3, "y":2},
+ {"label":"V", "x":4, "y":2.30},
+ {"label":"B", "x":5, "y":2.45},
+ {"label":"LCBR", "x":6, "y":2},
+ {"label":"RCBR", "x":8, "y":2},
+ {"label":"N", "x":9, "y":2.45},
+ {"label":"M", "x":10, "y":2.30},
+ {"label":"COMM", "x":11, "y":2},
+ {"label":"DOT", "x":12, "y":2.15},
+ {"label":"SLSH", "x":13, "y":2.45},
+ {"label":"RSFT", "x":14, "y":2.45},
+
+ {"label":"LGUI", "x":4, "y":3.9},
+ {"label":"LOWER", "x":5, "y":3.9},
+ {"label":"SPACE", "x":6, "y":3.4, "h":1.5},
+ {"label":"ENTER", "x":8, "y":3.4, "h":1.5},
+ {"label":"RAISE", "x":9, "y":3.9},
+ {"label":"LALT", "x":10, "y":3.9}
+ ]
+ }
+ }
+}
diff --git a/keyboards/comet46/keymaps/default-rgbled/keymap.c b/keyboards/comet46/keymaps/default-rgbled/keymap.c
new file mode 100644
index 000000000..d446d50d0
--- /dev/null
+++ b/keyboards/comet46/keymaps/default-rgbled/keymap.c
@@ -0,0 +1,226 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum comet46_layers
+{
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#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 |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | Ctl | A | S | D | F | G | Esc | | Del | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | { | | } | N | M | , | . | / | Shift|
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
+ * | GUI | Lower| Space| | Enter| Raise| Alt |
+ * +--------------------/ \--------------------+
+ */
+ [_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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_ESC, KC_DEL, 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_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
+ ),
+
+ /* Colemak
+ * ,-----------------------------------------+ +-----------------------------------------.
+ * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | Ctl | A | R | S | T | D | Esc | | Del | H | N | E | I | O | " |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | { | | } | K | M | , | . | / | Shift|
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
+ * | GUI | Lower| Space| | Enter| Raise| Alt |
+ * +--------------------/ \--------------------+
+ */
+ [_COLEMAK] = LAYOUT(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_ESC, KC_DEL, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
+ ),
+
+ /* Dvorak
+ * ,-----------------------------------------+ +-----------------------------------------.
+ * | Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | Ctl | A | O | E | U | I | Esc | | Del | D | H | T | N | S | / |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | { | | } | B | M | W | V | Z | Shift|
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
+ * | GUI | Lower| Space| | Enter| Raise| Alt |
+ * +--------------------/ \--------------------+
+ */
+ [_DVORAK] = LAYOUT(
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_ESC, KC_DEL, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LCBR, KC_RCBR, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
+ KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
+ ),
+
+ /* Lower
+ * ,-----------------------------------------+ +-----------------------------------------.
+ * | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | | | | | | | | | ` | \ | - | = | [ | ] | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | | | | | | | | | ~ | | | _ | + | { | } | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
+ * | | | | | | | |
+ * +--------------------/ \--------------------+
+ */
+ [_LOWER] = LAYOUT(
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_BSLS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Raise
+ * ,-----------------------------------------+ +-----------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | | | | | | | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | | | Left | Down | Up |Right | End | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Home | | PgDn | PgUp | | | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
+ * | | | | | | | |
+ * +--------------------/ \--------------------+
+ */
+ [_RAISE] = LAYOUT(
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, _______,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Adjust
+ * ,-----------------------------------------+ +-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | | | | | | |Qwerty| |Colemk| | | | | | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | | | | | | |Reset | |Dvorak| | | | | | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
+ * | | | | | | | |
+ * +--------------------/ \--------------------+
+ */
+ [_ADJUST] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, RESET, DVORAK, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______
+ )
+};
+
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
+}
+
+// settings for LED on receiver
+void led_init(void) {
+ DDRD |= (1<<1);
+ PORTD |= (1<<1);
+ DDRF |= (1<<4) | (1<<5);
+ PORTF |= (1<<4) | (1<<5);
+}
+
+#define red_led_off PORTF |= (1<<5)
+#define red_led_on PORTF &= ~(1<<5)
+#define blu_led_off PORTF |= (1<<4)
+#define blu_led_on PORTF &= ~(1<<4)
+#define grn_led_off PORTD |= (1<<1)
+#define grn_led_on PORTD &= ~(1<<1)
+
+#define set_led_off red_led_off; grn_led_off; blu_led_off
+#define set_led_red red_led_on; grn_led_off; blu_led_off
+#define set_led_blue red_led_off; grn_led_off; blu_led_on
+#define set_led_green red_led_off; grn_led_on; blu_led_off
+#define set_led_yellow red_led_on; grn_led_on; blu_led_off
+#define set_led_magenta red_led_on; grn_led_off; blu_led_on
+#define set_led_cyan red_led_off; grn_led_on; blu_led_on
+#define set_led_white red_led_on; grn_led_on; blu_led_on
+
+void matrix_init_user(void) {
+ led_init();
+}
+
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+ uint8_t default_layer = biton32(eeconfig_read_default_layer());
+ switch (layer) {
+ case _LOWER:
+ set_led_red;
+ break;
+ case _RAISE:
+ set_led_blue;
+ break;
+ case _ADJUST:
+ set_led_magenta;
+ break;
+ default:
+ switch (default_layer) {
+ case _COLEMAK:
+ set_led_white;
+ break;
+ case _DVORAK:
+ set_led_yellow;
+ break;
+ default:
+ set_led_green;
+ break;
+ }
+ break;
+ }
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/comet46/keymaps/default-rgbled/readme.md b/keyboards/comet46/keymaps/default-rgbled/readme.md
new file mode 100644
index 000000000..40cc74433
--- /dev/null
+++ b/keyboards/comet46/keymaps/default-rgbled/readme.md
@@ -0,0 +1,3 @@
+## default-led
+
+A keymap that is compatible with mitosis-type receivers, which use RGB LED for layer indication.
diff --git a/keyboards/comet46/keymaps/default/config.h b/keyboards/comet46/keymaps/default/config.h
new file mode 100644
index 000000000..7873cf5a7
--- /dev/null
+++ b/keyboards/comet46/keymaps/default/config.h
@@ -0,0 +1,31 @@
+/*
+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/>.
+*/
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+// #include "../../config.h"
+
+/* Use I2C or Serial */
+
+#define USE_I2C
+#define SSD1306OLED
+
+#endif
diff --git a/keyboards/comet46/keymaps/default/keymap.c b/keyboards/comet46/keymaps/default/keymap.c
index b03ece4e9..c87492e4b 100644
--- a/keyboards/comet46/keymaps/default/keymap.c
+++ b/keyboards/comet46/keymaps/default/keymap.c
@@ -2,6 +2,10 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
#include QMK_KEYBOARD_H
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -9,13 +13,18 @@
// entirely and just use numbers.
enum comet46_layers
{
- _QWERTY,
- _LOWER,
- _RAISE,
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
};
enum custom_keycodes {
QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
LOWER,
RAISE,
};
@@ -46,6 +55,42 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
),
+ /* Colemak
+ * ,-----------------------------------------+ +-----------------------------------------.
+ * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | Ctl | A | R | S | T | D | Esc | | Del | H | N | E | I | O | " |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | { | | } | K | M | , | . | / | Shift|
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
+ * | GUI | Lower| Space| | Enter| Raise| Alt |
+ * +--------------------/ \--------------------+
+ */
+ [_COLEMAK] = LAYOUT(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_ESC, KC_DEL, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCBR, KC_RCBR, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
+ ),
+
+ /* Dvorak
+ * ,-----------------------------------------+ +-----------------------------------------.
+ * | Tab | " | , | . | P | Y | | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | Ctl | A | O | E | U | I | Esc | | Del | D | H | T | N | S | / |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | { | | } | B | M | W | V | Z | Shift|
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
+ * | GUI | Lower| Space| | Enter| Raise| Alt |
+ * +--------------------/ \--------------------+
+ */
+ [_DVORAK] = LAYOUT(
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_ESC, KC_DEL, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LCBR, KC_RCBR, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
+ KC_LGUI, LOWER, KC_SPC, KC_ENT, RAISE, KC_LALT
+ ),
+
/* Lower
* ,-----------------------------------------+ +-----------------------------------------.
* | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
@@ -70,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
* | | F1 | F2 | F3 | F4 | F5 | F6 | | | Left | Down | Up |Right | End | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | | Home | | | | | | |
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Home | | PgDn | PgUp | | | |
* |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
* | | | | | | | |
* +--------------------/ \--------------------+
@@ -78,26 +123,134 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_RAISE] = LAYOUT(
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, _______,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, XXXXXXX, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Adjust
+ * ,-----------------------------------------+ +-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | | | | | | |Qwerty| |Colemk| | | | | | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+------+------|
+ * | | | | | | |Reset | |Dvorak| | | | | | |
+ * |------+------+------+------+------+------+------+ +------+------+------+------+------+-------------|
+ * | | | | | | | |
+ * +--------------------/ \--------------------+
+ */
+ [_ADJUST] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, RESET, DVORAK, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______
)
};
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
+}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// You need to add source files to SRC in rules.mk when using OLED display functions
+void set_keylog(uint16_t keycode);
+const char *read_keylog(void);
+const char *read_modifier_state(void);
+const char *read_host_led_state(void);
+
+void matrix_init_user(void) {
+ iota_gfx_init(false); // turns on the display
+}
+
void matrix_scan_user(void) {
- uint8_t layer = biton32(layer_state);
- switch (layer) {
- case _QWERTY:
- set_led_green;
- break;
- case _RAISE:
- set_led_blue;
- break;
- case _LOWER:
- set_led_red;
- break;
+ iota_gfx_task(); // this is what updates the display continuously
+}
+
+void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+void render_status(struct CharacterMatrix *matrix) {
+ // Layer state
+ char layer_str[22];
+ matrix_write(matrix, "Layer: ");
+ uint8_t layer = biton32(layer_state);
+ uint8_t default_layer = biton32(eeconfig_read_default_layer());
+ switch (layer) {
+ case _QWERTY:
+ switch (default_layer) {
+ case _QWERTY:
+ snprintf(layer_str, sizeof(layer_str), "Qwerty");
+ break;
+ case _COLEMAK:
+ snprintf(layer_str, sizeof(layer_str), "Colemak");
+ break;
+ case _DVORAK:
+ snprintf(layer_str, sizeof(layer_str), "Dvorak");
+ break;
default:
- set_led_green;
- break;
+ snprintf(layer_str, sizeof(layer_str), "Undef-%d", default_layer);
+ break;
+ }
+ break;
+ case _RAISE:
+ snprintf(layer_str, sizeof(layer_str), "Raise");
+ break;
+ case _LOWER:
+ snprintf(layer_str, sizeof(layer_str), "Lower");
+ break;
+ case _ADJUST:
+ snprintf(layer_str, sizeof(layer_str), "Adjust");
+ break;
+ default:
+ snprintf(layer_str, sizeof(layer_str), "Undef-%d", layer);
+ }
+ matrix_write_ln(matrix, layer_str);
+ // Last entered keycode
+ matrix_write_ln(matrix, read_keylog());
+ // Modifier state
+ matrix_write_ln(matrix, read_modifier_state());
+ // Host Keyboard LED Status
+ matrix_write(matrix, read_host_led_state());
+}
+
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+ matrix_clear(&matrix);
+ render_status(&matrix);
+ matrix_update(&display, &matrix);
+}
+
+#endif//SSD1306OLED
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ #ifdef SSD1306OLED
+ if (record->event.pressed) {
+ set_keylog(keycode);
}
+ #endif
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ break;
+ }
+ return true;
}
diff --git a/keyboards/comet46/keymaps/default/readme.md b/keyboards/comet46/keymaps/default/readme.md
new file mode 100644
index 000000000..b0085d2a6
--- /dev/null
+++ b/keyboards/comet46/keymaps/default/readme.md
@@ -0,0 +1,3 @@
+## default-oled-display
+
+A keymap that is compatible with receivers with an OLED display.
diff --git a/keyboards/comet46/keymaps/default/rules.mk b/keyboards/comet46/keymaps/default/rules.mk
new file mode 100644
index 000000000..3fa01f96a
--- /dev/null
+++ b/keyboards/comet46/keymaps/default/rules.mk
@@ -0,0 +1,5 @@
+# If you want to change display settings of the OLED, you need to change the following lines
+SRC += ./lib/glcdfont.c \
+ ./lib/keylogger.c \
+ ./lib/modifier_state_reader.c \
+ ./lib/host_led_state_reader.c
diff --git a/keyboards/comet46/keymaps/satt/action_pseudo_lut.c b/keyboards/comet46/keymaps/satt/action_pseudo_lut.c
index 5664d4d2a..0ac713359 100644
--- a/keyboards/comet46/keymaps/satt/action_pseudo_lut.c
+++ b/keyboards/comet46/keymaps/satt/action_pseudo_lut.c
@@ -10,133 +10,133 @@ static uint8_t send_key_shift_bit[SHIFT_BIT_SIZE];
* Memo: Using other layer keymap to get keycode
*/
void action_pseudo_lut(keyrecord_t *record, uint8_t base_keymap_id, const uint16_t (*keymap)[2]) {
- uint8_t prev_shift;
- uint16_t keycode;
- uint16_t pseudo_keycode;
+ uint8_t prev_shift;
+ uint16_t keycode;
+ uint16_t pseudo_keycode;
- /* get keycode from keymap you specified */
- keycode = keymap_key_to_keycode(base_keymap_id, record->event.key);
+ /* get keycode from keymap you specified */
+ keycode = keymap_key_to_keycode(base_keymap_id, record->event.key);
- prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
+ prev_shift = keyboard_report->mods & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT));
- if (record->event.pressed) {
- /* when magic commands entered, keycode does not converted */
- if (IS_COMMAND()) {
- if (prev_shift) {
- add_shift_bit(keycode);
- }
- register_code(keycode);
- return;
- }
+ if (record->event.pressed) {
+ /* when magic commands entered, keycode does not converted */
+ if (IS_COMMAND()) {
+ if (prev_shift) {
+ add_shift_bit(keycode);
+ }
+ register_code(keycode);
+ return;
+ }
- if (prev_shift) {
- pseudo_keycode = convert_keycode(keymap, keycode, true);
- dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
- add_shift_bit(keycode);
+ if (prev_shift) {
+ pseudo_keycode = convert_keycode(keymap, keycode, true);
+ dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
+ add_shift_bit(keycode);
- if (IS_LSFT(pseudo_keycode)) {
- register_code(QK_LSFT ^ pseudo_keycode);
- } else {
- /* delete shift mod temporarily */
- del_mods(prev_shift);
- send_keyboard_report();
- register_code(pseudo_keycode);
- add_mods(prev_shift);
- send_keyboard_report();
- }
- } else {
- pseudo_keycode = convert_keycode(keymap, keycode, false);
- dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
+ if (IS_LSFT(pseudo_keycode)) {
+ register_code(QK_LSFT ^ pseudo_keycode);
+ } else {
+ /* delete shift mod temporarily */
+ del_mods(prev_shift);
+ send_keyboard_report();
+ register_code(pseudo_keycode);
+ add_mods(prev_shift);
+ send_keyboard_report();
+ }
+ } else {
+ pseudo_keycode = convert_keycode(keymap, keycode, false);
+ dprintf("pressed: %02X, converted: %04X\n", keycode, pseudo_keycode);
- if (IS_LSFT(pseudo_keycode)) {
- add_weak_mods(MOD_BIT(KC_LSFT));
- send_keyboard_report();
- register_code(QK_LSFT ^ pseudo_keycode);
- /* on Windows, prevent key repeat to avoid unintended output */
- unregister_code(QK_LSFT ^ pseudo_keycode);
- del_weak_mods(MOD_BIT(KC_LSFT));
- send_keyboard_report();
- } else {
- register_code(pseudo_keycode);
- }
- }
+ if (IS_LSFT(pseudo_keycode)) {
+ add_weak_mods(MOD_BIT(KC_LSFT));
+ send_keyboard_report();
+ register_code(QK_LSFT ^ pseudo_keycode);
+ /* on Windows, prevent key repeat to avoid unintended output */
+ unregister_code(QK_LSFT ^ pseudo_keycode);
+ del_weak_mods(MOD_BIT(KC_LSFT));
+ send_keyboard_report();
+ } else {
+ register_code(pseudo_keycode);
+ }
+ }
+ } else {
+ if (get_shift_bit(keycode)) {
+ del_shift_bit(keycode);
+ pseudo_keycode = convert_keycode(keymap, keycode, true);
} else {
- if (get_shift_bit(keycode)) {
- del_shift_bit(keycode);
- pseudo_keycode = convert_keycode(keymap, keycode, true);
- } else {
- pseudo_keycode = convert_keycode(keymap, keycode, false);
- }
- dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode);
+ pseudo_keycode = convert_keycode(keymap, keycode, false);
+ }
+ dprintf("released: %02X, converted: %04X\n", keycode, pseudo_keycode);
- if (IS_LSFT(pseudo_keycode)) {
- unregister_code(QK_LSFT ^ pseudo_keycode);
- } else {
- unregister_code(pseudo_keycode);
- }
+ if (IS_LSFT(pseudo_keycode)) {
+ unregister_code(QK_LSFT ^ pseudo_keycode);
+ } else {
+ unregister_code(pseudo_keycode);
}
+ }
}
uint16_t convert_keycode(const uint16_t (*keymap)[2], uint16_t keycode, bool shift_modded)
{
- uint16_t pseudo_keycode;
+ uint16_t pseudo_keycode;
- switch (keycode) {
- case KC_A ... KC_CAPSLOCK:
-#if defined(__AVR__)
- if (shift_modded) {
- pseudo_keycode = pgm_read_word(&keymap[keycode][1]);
- } else {
- pseudo_keycode = pgm_read_word(&keymap[keycode][0]);
- }
-#else
- if (shift_modded) {
- pseudo_keycode = keymap[keycode][1];
- } else {
- pseudo_keycode = keymap[keycode][0];
- }
-#endif
- /* if undefined, use got keycode as it is */
- if (pseudo_keycode == 0x00) {
- if (shift_modded) {
- pseudo_keycode = S(keycode);
- } else {
- pseudo_keycode = keycode;
- }
- }
- break;
- default:
- if (shift_modded) {
- pseudo_keycode = S(keycode);
- } else {
- pseudo_keycode = keycode;
- }
- break;
- }
- return pseudo_keycode;
+ switch (keycode) {
+ case KC_A ... KC_CAPSLOCK:
+ #if defined(__AVR__)
+ if (shift_modded) {
+ pseudo_keycode = pgm_read_word(&keymap[keycode][1]);
+ } else {
+ pseudo_keycode = pgm_read_word(&keymap[keycode][0]);
+ }
+ #else
+ if (shift_modded) {
+ pseudo_keycode = keymap[keycode][1];
+ } else {
+ pseudo_keycode = keymap[keycode][0];
+ }
+ #endif
+ /* if undefined, use got keycode as it is */
+ if (pseudo_keycode == 0x00) {
+ if (shift_modded) {
+ pseudo_keycode = S(keycode);
+ } else {
+ pseudo_keycode = keycode;
+ }
+ }
+ break;
+ default:
+ if (shift_modded) {
+ pseudo_keycode = S(keycode);
+ } else {
+ pseudo_keycode = keycode;
+ }
+ break;
+ }
+ return pseudo_keycode;
}
uint8_t get_shift_bit(uint16_t keycode) {
- if ((keycode >> 3) < SHIFT_BIT_SIZE) {
- return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7));
- } else {
- dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode);
- return 0;
- }
+ if ((keycode >> 3) < SHIFT_BIT_SIZE) {
+ return send_key_shift_bit[keycode >> 3] & (1 << (keycode & 7));
+ } else {
+ dprintf("get_shift_bit: Can't get shift bit. keycode: %02X\n", keycode);
+ return 0;
+ }
}
void add_shift_bit(uint16_t keycode) {
- if ((keycode >> 3) < SHIFT_BIT_SIZE) {
- send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7));
- } else {
- dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode);
- }
+ if ((keycode >> 3) < SHIFT_BIT_SIZE) {
+ send_key_shift_bit[keycode >> 3] |= (1 << (keycode & 7));
+ } else {
+ dprintf("add_shift_bit: Can't add shift bit. keycode: %02X\n", keycode);
+ }
}
void del_shift_bit(uint16_t keycode) {
- if ((keycode >> 3) < SHIFT_BIT_SIZE) {
- send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7));
- } else {
- dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode);
- }
+ if ((keycode >> 3) < SHIFT_BIT_SIZE) {
+ send_key_shift_bit[keycode >> 3] &= ~(1 << (keycode & 7));
+ } else {
+ dprintf("del_shift_bit: Can't delete shift bit. keycode: %02X\n", keycode);
+ }
}
diff --git a/keyboards/comet46/keymaps/satt/config.h b/keyboards/comet46/keymaps/satt/config.h
new file mode 100644
index 000000000..c99de2cf8
--- /dev/null
+++ b/keyboards/comet46/keymaps/satt/config.h
@@ -0,0 +1,34 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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_USER_H
+#define CONFIG_USER_H
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT)) \
+)
+
+/* Use I2C or Serial */
+
+#define USE_I2C
+#define SSD1306OLED
+
+#endif
diff --git a/keyboards/comet46/keymaps/satt/keymap.c b/keyboards/comet46/keymaps/satt/keymap.c
index 7e728e5d0..eec40eff4 100644
--- a/keyboards/comet46/keymaps/satt/keymap.c
+++ b/keyboards/comet46/keymaps/satt/keymap.c
@@ -4,64 +4,96 @@
#include QMK_KEYBOARD_H
#include "keymap_jis2us.h"
#include "action_pseudo_lut.h"
+#include "keymap_jp.h"
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum comet46_layers {
- _QWERTY,
- _LOWER,
- _RAISE,
- _PSEUDO_US,
- _PSEUDO_US_LOWER,
- _PSEUDO_US_RAISE,
- _ADJUST
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _PSEUDO_US,
+ _PSEUDO_US_LOWER,
+ _PSEUDO_US_RAISE,
+ _ADJUST
};
enum custom_keycodes {
QWERTY = SAFE_RANGE,
PSEUDO_US,
+ JIS2US,
};
-#define KC_LWR MO(_LOWER)
-#define KC_RSE MO(_RAISE)
+// JIS keycodes
+#define KC_JZHT JP_ZHTG // hankaku/zenkaku|kanzi
+#define KC_JCIR JP_CIRC // ^, ~
+#define KC_JAT JP_AT // @, `
+#define KC_JLBR JP_LBRC // [, {
+#define KC_JCOL JP_COLN // :, *
+#define KC_JRBR JP_RBRC // ], }
+#define KC_JBSL JP_BSLS // \, _
+#define KC_JMHE JP_MHEN // muhenkan
+#define KC_JHEN JP_HENK // henkan
+#define KC_JKAN JP_KANA // katakana/hiragana|ro-mazi
+#define KC_JMKA JP_MKANA //kana on MacOSX
+#define KC_JMEI JP_MEISU //eisu on MacOSX
+#define KC_JAMP JP_AMPR // &
+#define KC_JQUO JP_QUOT // '
+#define KC_JLPR JP_LPRN // (
+#define KC_JRPR JP_RPRN // )
+#define KC_JEQL JP_EQL // =
+#define KC_JTIL JP_TILD // ~
+#define KC_JPIP JP_PIPE // |
+#define KC_JGRV JP_GRV // `
+#define KC_JLCB JP_LCBR // {
+#define KC_JPLU JP_PLUS // +
+#define KC_JAST JP_ASTR // *
+#define KC_JRCB JP_RCBR // }
+#define KC_JUND JP_UNDS // _
+
+// Layer related keycodes
+#define KC_LWR MO(_LOWER)
+#define KC_RSE MO(_RAISE)
#define KC_P_LW MO(_PSEUDO_US_LOWER)
#define KC_P_RS MO(_PSEUDO_US_RAISE)
#define KC_QWRT QWERTY
#define KC_P_US PSEUDO_US
+#define KC_J2US JIS2US
+
+// Special keycodes
#define KC_SPCT CTL_T(KC_SPC)
#define KC_ENSF SFT_T(KC_ENT)
-#define KC_SFTA SFT_T(KC_A)
-#define KC_CTSF S(KC_LCTL)
+#define KC_CAEC MT(MOD_LCTL | MOD_LALT, KC_ESC)
+#define KC_CSTB C_S_T(KC_TAB)
#define KC_IMON ALT_T(KC_F13)
#define KC_IMOF GUI_T(KC_F14)
-#define KC_SRO S(KC_RO)
-#define KC_SYEN S(KC_JYEN)
#define KC_CAD LCA(KC_DEL)
#define KC_RST RESET
-#define LONGPRESS_DELAY 150
-
// Fillers to make layering more clear
-#define KC_ KC_TRNS
+#define KC_ KC_TRNS
#define KC_XXXX KC_NO
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_kc(
+ [_QWERTY] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
- ESC , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
+ CAEC, Q , W , E , R , T , Y , U , I , O , P ,DEL ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
- TAB ,SFTA, S , D , F , G ,LPRN, RPRN, H , J , K , L ,SCLN,BSPC,
+ CSTB, A , S , D , F , G ,LPRN, RPRN, H , J , K , L ,SCLN,BSPC,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- CTSF, Z , X , C , V , B ,LBRC, RBRC, N , M ,COMM,DOT ,SLSH,QUOT,
+ LSFT, Z , X , C , V , B ,LBRC, RBRC, N , M ,COMM,DOT ,SLSH,QUOT,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
IMOF,LWR ,SPCT, ENSF,RSE ,IMON
// +----+----+---/ \---+----+----+
),
- [_LOWER] = LAYOUT_kc(
+ [_LOWER] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
@@ -69,60 +101,60 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, F7 , F8 , F9 , F10, F11, F12, TILD,PIPE,UNDS,PLUS,LCBR,RCBR, ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , , ,
+ , , , , ,
// +----+----+---/ \---+----+----+
),
- [_RAISE] = LAYOUT_kc(
+ [_RAISE] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
, , , , , , , XXXX,LEFT,DOWN, UP ,RGHT,END , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , , , , , HOME,XXXX,XXXX,XXXX,XXXX,XXXX, ,
+ , , , , , , , HOME,XXXX,PGDN,PGUP,XXXX,XXXX, ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , , ,
+ , , , , ,
// +----+----+---/ \---+----+----+
),
- [_PSEUDO_US] = LAYOUT_kc(
+ [_PSEUDO_US] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
- ESC , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
+ CAEC, Q , W , E , R , T , Y , U , I , O , P ,DEL ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
- TAB ,SFTA, S , D , F , G ,ASTR, LPRN, H , J , K , L ,FN0 ,BSPC,
+ CSTB, A , S , D , F , G ,JLPR, JRPR, H , J , K , L ,J2US,BSPC,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- CTSF, Z , X , C , V , B ,FN0 , FN0 , N , M ,COMM,DOT ,SLSH,FN0 ,
+ LSFT, Z , X , C , V , B ,J2US, J2US, N , M ,COMM,DOT ,SLSH,J2US,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
IMOF,P_LW,SPCT, ENSF,P_RS,IMON
// +----+----+---/ \---+----+----+
),
- [_PSEUDO_US_LOWER] = LAYOUT_kc(
+ [_PSEUDO_US_LOWER] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
- ,EXLM,LBRC,HASH,DLR ,PERC, EQL ,CIRC, DQT,ASTR,LPRN, ,
+ ,EXLM,JAT ,HASH,DLR ,PERC, JCIR,JAMP,JAST,JLPR,JRPR, ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
- , F1 , F2 , F3 , F4 , F5 , F6 , LCBR,JYEN,MINS,UNDS,RBRC,BSLS, ,
+ , F1 , F2 , F3 , F4 , F5 , F6 , JGRV,JBSL,MINS,JEQL,JLBR,JRBR, ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , F7 , F8 , F9 , F10, F11, F12, PLUS,SYEN,SRO ,COLN,RCBR,PIPE, ,
+ , F7 , F8 , F9 , F10, F11, F12, JTIL,JPIP,JUND,JPLU,JLCB,JRCB, ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , , ,
+ , , , , ,
// +----+----+---/ \---+----+----+
),
- [_PSEUDO_US_RAISE] = LAYOUT_kc(
+ [_PSEUDO_US_RAISE] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
- , , , , , , GRV, XXXX,LEFT,DOWN, UP ,RGHT,END , ,
+ , , , , , ,JZHT, XXXX,LEFT,DOWN, UP ,RGHT,END , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , , , , , HOME,XXXX,XXXX,XXXX,XXXX,XXXX, ,
+ , , , , , , , HOME,XXXX,PGDN,PGUP,XXXX,XXXX, ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , , ,
+ , , , , ,
// +----+----+---/ \---+----+----+
),
- [_ADJUST] = LAYOUT_kc(
+ [_ADJUST] = LAYOUT_kc(
//,----+----+----+----+----+----+ +----+----+----+----+----+----.
, , , , , , , , , , , ,
//|----+----+----+----+----+----+----+ +----+----+----+----+----+----+----|
@@ -130,90 +162,130 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , , ,RST , P_US, , , , , , ,
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- , , , , ,
+ , , , , ,
// +----+----+---/ \---+----+----+
)
};
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case _PSEUDO_US_LOWER:
+ case _PSEUDO_US_RAISE:
+ return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
+ break;
+ default:
+ return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
+ break;
+ }
+}
-/*
- * user defined action function
- */
-enum function_id {
- PSEUDO_US_FUNCTION,
-};
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch (id)
- {
- case PSEUDO_US_FUNCTION:
- action_pseudo_lut(record, _QWERTY, keymap_jis2us);
- break;
- }
-}
+// You need to add source files to SRC in rules.mk when using OLED display functions
+void set_keylog(uint16_t keycode);
+const char *read_keylog(void);
+const char *read_modifier_state(void);
+const char *read_host_led_state(void);
-/*
- * Fn action definition
- */
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(PSEUDO_US_FUNCTION),
-};
+void matrix_init_user(void) {
+ iota_gfx_init(false); // turns on the display
+}
void matrix_scan_user(void) {
- uint8_t layer = biton32(layer_state);
+ iota_gfx_task(); // this is what updates the display continuously
+}
+
+void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+void render_status(struct CharacterMatrix *matrix) {
+ // Layer state
+ char layer_str[22];
+ matrix_write(matrix, "Layer: ");
+ uint8_t layer = biton32(layer_state);
+ uint8_t default_layer = biton32(eeconfig_read_default_layer());
switch (layer) {
- case _LOWER:
- set_led_red;
- break;
+ case _QWERTY:
+ switch (default_layer) {
+ case _QWERTY:
+ snprintf(layer_str, sizeof(layer_str), "Qwerty");
+ break;
+ case _PSEUDO_US:
+ snprintf(layer_str, sizeof(layer_str), "Psuedo_US");
+ break;
+ default:
+ snprintf(layer_str, sizeof(layer_str), "Undef-%d", default_layer);
+ break;
+ }
+ break;
case _RAISE:
- set_led_blue;
- break;
- case _PSEUDO_US_LOWER:
- set_led_yellow;
- break;
+ snprintf(layer_str, sizeof(layer_str), "Raise");
+ break;
+ case _LOWER:
+ snprintf(layer_str, sizeof(layer_str), "Lower");
+ break;
case _PSEUDO_US_RAISE:
- set_led_cyan;
- break;
+ snprintf(layer_str, sizeof(layer_str), "P_US_Raise");
+ break;
+ case _PSEUDO_US_LOWER:
+ snprintf(layer_str, sizeof(layer_str), "P_US_Lower");
+ break;
case _ADJUST:
- set_led_magenta;
- break;
+ snprintf(layer_str, sizeof(layer_str), "Adjust");
+ break;
default:
- set_led_green;
- break;
+ snprintf(layer_str, sizeof(layer_str), "Undef-%d", layer);
}
-};
+ matrix_write_ln(matrix, layer_str);
+ // Last entered keycode
+ matrix_write_ln(matrix, read_keylog());
+ // Modifier state
+ matrix_write_ln(matrix, read_modifier_state());
+ // Host Keyboard LED Status
+ matrix_write(matrix, read_host_led_state());
+}
-uint32_t layer_state_set_user(uint32_t state) {
- switch (biton32(state)) {
- case _PSEUDO_US:
- return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
- break;
- case _PSEUDO_US_LOWER:
- return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
- break;
- case _PSEUDO_US_RAISE:
- return update_tri_layer_state(state, _PSEUDO_US_RAISE, _PSEUDO_US_LOWER, _ADJUST);
- break;
- default:
- return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
- break;
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+
+#if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
}
+#endif
+
+ matrix_clear(&matrix);
+ render_status(&matrix);
+ matrix_update(&display, &matrix);
}
+#endif//SSD1306OLED
+
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ #ifdef SSD1306OLED
+ if (record->event.pressed) {
+ set_keylog(keycode);
+ }
+ #endif
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
- return false;
break;
case PSEUDO_US:
if (record->event.pressed) {
set_single_persistent_default_layer(_PSEUDO_US);
}
- return false;
+ break;
+ case JIS2US:
+ action_pseudo_lut(record, _QWERTY, keymap_jis2us);
break;
}
return true;
diff --git a/keyboards/comet46/keymaps/satt/keymap_jis2us.h b/keyboards/comet46/keymaps/satt/keymap_jis2us.h
index cf2bd4f0e..e32a0579a 100644
--- a/keyboards/comet46/keymaps/satt/keymap_jis2us.h
+++ b/keyboards/comet46/keymaps/satt/keymap_jis2us.h
@@ -3,30 +3,30 @@
/* keymap for convert from JIS to US */
const uint16_t PROGMEM keymap_jis2us[][2] = {
- [KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */
+ [KC_A ... KC_CAPS] = { 0x00, 0x00 }, /* default value */
- [KC_1] = { KC_1, KC_EXLM }, /* 1 and ! -> 1 and ! */
- [KC_2] = { KC_2, KC_LBRC }, /* 2 and " -> 2 and @ */
- [KC_3] = { KC_3, KC_HASH }, /* 3 and # -> 3 and # */
- [KC_4] = { KC_4, KC_DLR }, /* 4 and $ -> 4 and $ */
- [KC_5] = { KC_5, KC_PERC }, /* 5 and % -> 5 and % */
- [KC_6] = { KC_6, KC_EQL }, /* 6 and & -> 6 and ^ */
- [KC_7] = { KC_7, KC_CIRC }, /* 7 and ' -> 7 and & */
- [KC_8] = { KC_8, KC_DQT }, /* 8 and ( -> 8 and * */
- [KC_9] = { KC_9, KC_ASTR }, /* 9 and ) -> 9 and ( */
- [KC_0] = { KC_0, KC_LPRN }, /* 0 and (no assign) -> 0 and ) */
- [KC_MINS] = { KC_MINS, S(KC_RO) }, /* - and = -> - and _ */
- [KC_EQL] = { KC_UNDS, KC_COLN }, /* ^ and ~ -> = and + */
- [KC_LBRC] = { KC_RBRC, KC_RCBR }, /* @ and ` -> [ and { */
- [KC_RBRC] = { KC_BSLS, KC_PIPE }, /* [ and { -> ] and } */
- [KC_BSLS] = { KC_JYEN, S(KC_JYEN) }, /* ] and } -> / and | */
- [KC_NUHS] = { KC_NUHS, S(KC_NUHS) }, /* (no assign) */
- [KC_SCLN] = { KC_SCLN, KC_QUOT }, /* ; and + -> ; and : */
- [KC_QUOT] = { KC_AMPR, KC_AT }, /* : and * -> ' and " */
- [KC_GRV] = { KC_LCBR, KC_PLUS }, /* (no assign) -> ` and ~ */
- [KC_COMM] = { KC_COMM, KC_LT }, /* , and < -> , and < */
- [KC_DOT] = { KC_DOT, KC_GT }, /* . and > -> . and > */
- [KC_SLSH] = { KC_SLSH, KC_QUES }, /* / and ? -> / and ? */
+ [KC_1] = { KC_1, KC_EXLM }, /* 1 and ! -> 1 and ! */
+ [KC_2] = { KC_2, KC_LBRC }, /* 2 and " -> 2 and @ */
+ [KC_3] = { KC_3, KC_HASH }, /* 3 and # -> 3 and # */
+ [KC_4] = { KC_4, KC_DLR }, /* 4 and $ -> 4 and $ */
+ [KC_5] = { KC_5, KC_PERC }, /* 5 and % -> 5 and % */
+ [KC_6] = { KC_6, KC_EQL }, /* 6 and & -> 6 and ^ */
+ [KC_7] = { KC_7, KC_CIRC }, /* 7 and ' -> 7 and & */
+ [KC_8] = { KC_8, KC_DQT }, /* 8 and ( -> 8 and * */
+ [KC_9] = { KC_9, KC_ASTR }, /* 9 and ) -> 9 and ( */
+ [KC_0] = { KC_0, KC_LPRN }, /* 0 and (no assign) -> 0 and ) */
+ [KC_MINS] = { KC_MINS, S(KC_RO) }, /* - and = -> - and _ */
+ [KC_EQL] = { KC_UNDS, KC_COLN }, /* ^ and ~ -> = and + */
+ [KC_LBRC] = { KC_RBRC, KC_RCBR }, /* @ and ` -> [ and { */
+ [KC_RBRC] = { KC_BSLS, KC_PIPE }, /* [ and { -> ] and } */
+ [KC_BSLS] = { KC_JYEN, S(KC_JYEN) }, /* ] and } -> / and | */
+ [KC_NUHS] = { KC_NUHS, S(KC_NUHS) }, /* (no assign) */
+ [KC_SCLN] = { KC_SCLN, KC_QUOT }, /* ; and + -> ; and : */
+ [KC_QUOT] = { KC_AMPR, KC_AT }, /* : and * -> ' and " */
+ [KC_GRV] = { KC_LCBR, KC_PLUS }, /* (no assign) -> ` and ~ */
+ [KC_COMM] = { KC_COMM, KC_LT }, /* , and < -> , and < */
+ [KC_DOT] = { KC_DOT, KC_GT }, /* . and > -> . and > */
+ [KC_SLSH] = { KC_SLSH, KC_QUES }, /* / and ? -> / and ? */
};
#endif
diff --git a/keyboards/comet46/keymaps/satt/rules.mk b/keyboards/comet46/keymaps/satt/rules.mk
index 08af2e70a..5839b778b 100644
--- a/keyboards/comet46/keymaps/satt/rules.mk
+++ b/keyboards/comet46/keymaps/satt/rules.mk
@@ -1,26 +1,7 @@
SRC += action_pseudo_lut.c
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = no # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-ONEHAND_ENABLE = no # Enable one-hand typing
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
+# If you want to change display settings of the OLED, you need to change the following lines
+SRC += ./lib/glcdfont.c \
+ ./lib/keylogger.c \
+ ./lib/modifier_state_reader.c \
+ ./lib/host_led_state_reader.c
diff --git a/keyboards/comet46/lib/glcdfont.c b/keyboards/comet46/lib/glcdfont.c
new file mode 100644
index 000000000..e912d2233
--- /dev/null
+++ b/keyboards/comet46/lib/glcdfont.c
@@ -0,0 +1,148 @@
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+
+#ifndef FONT5X7_H
+#define FONT5X7_H
+
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/pgmspace.h>
+#elif defined(ESP8266)
+ #include <pgmspace.h>
+#else
+ #define PROGMEM
+#endif
+
+// Standard ASCII 5x7 font
+
+const unsigned char font[] PROGMEM = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
+ 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
+ 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
+ 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
+ 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
+ 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
+ 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
+ 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
+ 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
+ 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
+ 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
+ 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
+ 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
+ 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
+ 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
+ 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
+ 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
+ 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
+ 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
+ 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
+ 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
+ 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
+ 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
+ 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
+ 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
+ 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
+ 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
+ 0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
+ 0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
+ 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
+ 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
+ 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
+ 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
+ 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
+ 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
+ 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
+ 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
+ 0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
+ 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
+ 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
+ 0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
+ 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
+ 0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
+ 0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
+ 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
+ 0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
+ 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
+ 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
+ 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
+ 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
+ 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
+ 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
+ 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
+ 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
+ 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
+ 0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
+ 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
+ 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
+ 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
+ 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
+ 0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
+ 0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
+ 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
+ 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
+ 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
+ 0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
+ 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
+ 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
+ 0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
+ 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
+ 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
+ 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
+ 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
+ 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
+ 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
+ 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
+ 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
+ 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
+ 0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
+ 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
+ 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
+ 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
+ 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
+ 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
+ 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
+ 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
+ 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
+ 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
+ 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00
+};
+#endif // FONT5X7_H
diff --git a/keyboards/comet46/lib/host_led_state_reader.c b/keyboards/comet46/lib/host_led_state_reader.c
new file mode 100644
index 000000000..864b1e244
--- /dev/null
+++ b/keyboards/comet46/lib/host_led_state_reader.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include "comet46.h"
+
+char host_led_state_str[22];
+
+const char *read_host_led_state(void) {
+ uint8_t leds = host_keyboard_leds();
+
+ snprintf(host_led_state_str, sizeof(host_led_state_str), "Lock: %s%s%s",
+ (leds & (1 << USB_LED_CAPS_LOCK)) ? "CAPL " : "",
+ (leds & (1 << USB_LED_SCROLL_LOCK)) ? "SCRL " : "",
+ (leds & (1 << USB_LED_NUM_LOCK)) ? "NUML" : "");
+
+ return host_led_state_str;
+}
diff --git a/keyboards/comet46/lib/keylogger.c b/keyboards/comet46/lib/keylogger.c
new file mode 100644
index 000000000..184f60109
--- /dev/null
+++ b/keyboards/comet46/lib/keylogger.c
@@ -0,0 +1,294 @@
+#include <stdio.h>
+
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/pgmspace.h>
+#else
+ #define PROGMEM
+#endif
+
+#define NUM_USB_HID_KEYCODES 255
+#define LEN_KEYCODE_STR 4
+
+char keylog[22] = {"KC: ID: "};
+
+// Quick and dirty way to display USB HID keycodes used in QMK
+// USB HID keycodes from 0x0000 to 0x00FF are stored in a 4x256+1 length char
+const char code_to_name[] PROGMEM = {
+ "NO " //0x00
+ "TRNS"
+ "? "
+ "? "
+ "A "
+ "B "
+ "C "
+ "D "
+ "E "
+ "F "
+ "G "
+ "H "
+ "I "
+ "J "
+ "K "
+ "L "
+ "M " //0x10
+ "N "
+ "O "
+ "P "
+ "Q "
+ "R "
+ "S "
+ "T "
+ "U "
+ "V "
+ "W "
+ "X "
+ "Y "
+ "Z "
+ "1 "
+ "2 "
+ "3 " //0x20
+ "4 "
+ "5 "
+ "6 "
+ "7 "
+ "8 "
+ "9 "
+ "0 "
+ "ENT "
+ "ESC "
+ "BSPC"
+ "TAB "
+ "SPC "
+ "MINS"
+ "EQL "
+ "LBRC"
+ "RBRC" //0x30
+ "BSLS"
+ "NUHS"
+ "SCLN"
+ "QUOT"
+ "GRV "
+ "COMM"
+ "DOT "
+ "SLSH"
+ "CAPS"
+ "F1 "
+ "F2 "
+ "F3 "
+ "F4 "
+ "F5 "
+ "F6 "
+ "F7 " //0x40
+ "F8 "
+ "F9 "
+ "F10 "
+ "F11 "
+ "F12 "
+ "PSCR"
+ "SLCK"
+ "PAUS"
+ "INS "
+ "HOME"
+ "PGUP"
+ "DEL "
+ "END "
+ "PGDN"
+ "RGHT"
+ "LEFT" //0x50
+ "DOWN"
+ "UP "
+ "NLCK"
+ "PSLS"
+ "PAST"
+ "PMNS"
+ "PPLS"
+ "PENT"
+ "P1 "
+ "P2 "
+ "P3 "
+ "P4 "
+ "P5 "
+ "P6 "
+ "P7 "
+ "P8 " //0x60
+ "P9 "
+ "P0 "
+ "PDOT"
+ "NUBS"
+ "APP "
+ "POW "
+ "PEQL"
+ "F13 "
+ "F14 "
+ "F15 "
+ "F16 "
+ "F17 "
+ "F18 "
+ "F19 "
+ "F20 "
+ "F21 " //0x70
+ "F22 "
+ "F23 "
+ "F24 "
+ "EXEC"
+ "HELP"
+ "MENU"
+ "SLCT"
+ "STOP"
+ "AGIN"
+ "UNDO"
+ "CUT "
+ "COPY"
+ "PSTE"
+ "FIND"
+ "_MUT"
+ "_VUP" //0x80
+ "_VDN"
+ "LCAP"
+ "LNUM"
+ "LSCR"
+ "PCMM"
+ "PEQA"
+ "INT1"
+ "INT2"
+ "INT3"
+ "INT4"
+ "INT5"
+ "INT6"
+ "INT7"
+ "INT8"
+ "INT9"
+ "LAN1" //0x90
+ "LAN2"
+ "LAN3"
+ "LAN4"
+ "LAN5"
+ "LAN6"
+ "LAN7"
+ "LAN8"
+ "LAN9"
+ "ERAS"
+ "SYSR"
+ "CNCL"
+ "CLR "
+ "PRIR"
+ "RTRN"
+ "SEP "
+ "OUT " //0xA0
+ "OPER"
+ "CLRA"
+ "CSEL"
+ "ESEL"
+ "PWR " //0xA5
+ "SLEP"
+ "WAKE"
+ "MUTE"
+ "VOLU"
+ "VOLD"
+ "MNXT"
+ "MPRV"
+ "MSTP"
+ "MPLY"
+ "MSEL"
+ "EJCT" //0xB0
+ "MAIL"
+ "CALC"
+ "MYCM"
+ "WSCH"
+ "WHOM"
+ "WBAK"
+ "WFWD"
+ "WSTP"
+ "WREF"
+ "WFAV"
+ "MFFD"
+ "MRWD"
+ "BRIU"
+ "BRID"
+ "? "
+ "FN0 " //0xC0
+ "FN1 "
+ "FN2 "
+ "FN3 "
+ "FN4 "
+ "FN5 "
+ "FN6 "
+ "FN7 "
+ "FN8 "
+ "FN9 "
+ "FN10"
+ "FN11"
+ "FN12"
+ "FN13"
+ "FN14"
+ "FN15"
+ "FN16" //0xD0
+ "FN17"
+ "FN18"
+ "FN19"
+ "FN20"
+ "FN21"
+ "FN22"
+ "FN23"
+ "FN24"
+ "FN25"
+ "FN26"
+ "FN27"
+ "FN28"
+ "FN29"
+ "FN30"
+ "FN31"
+ "LCTL" //0xE0
+ "LSFT"
+ "LALT"
+ "LGUI"
+ "RCTL"
+ "RSFT"
+ "RALT"
+ "RGUI"
+ "? "
+ "? "
+ "? "
+ "? "
+ "? "
+ "? "
+ "? "
+ "? "
+ "MS_U" //0xF0
+ "MS_D"
+ "MS_L"
+ "MS_R"
+ "BTN1"
+ "BTN2"
+ "BTN3"
+ "BTN4"
+ "BTN5"
+ "WH_U"
+ "WH_D"
+ "WH_L"
+ "WH_R"
+ "ACL0"
+ "ACL1"
+ "ACL2"
+};
+
+void set_keylog(uint16_t keycode)
+{
+ char name[LEN_KEYCODE_STR+1] = "? ";
+
+ if (keycode <= NUM_USB_HID_KEYCODES) {
+ for (uint8_t k = 0; k < LEN_KEYCODE_STR; k++) {
+ name[k] = pgm_read_byte_near(code_to_name + keycode * LEN_KEYCODE_STR + k);
+ }
+ } else if (keycode > NUM_USB_HID_KEYCODES) {
+ snprintf(name, sizeof(name), "QMK ");
+ }
+
+ // update keylog
+ snprintf(keylog, sizeof(keylog), "KC: %s ID: %d", name, keycode);
+}
+
+const char *read_keylog(void) {
+ return keylog;
+}
diff --git a/keyboards/comet46/lib/modifier_state_reader.c b/keyboards/comet46/lib/modifier_state_reader.c
new file mode 100644
index 000000000..518eef92a
--- /dev/null
+++ b/keyboards/comet46/lib/modifier_state_reader.c
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include "comet46.h"
+
+char modifier_state_str[22];
+
+const char *read_modifier_state(void) {
+ uint8_t modifiers = get_mods();
+ uint8_t one_shot = get_oneshot_mods();
+
+ snprintf(modifier_state_str, sizeof(modifier_state_str), "Mod: %s%s%s%s",
+ (modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) ? "CTL " : "",
+ (modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK) ? "GUI " : "",
+ (modifiers & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) ? "ALT " : "",
+ (modifiers & MODS_SHIFT_MASK || one_shot & MODS_SHIFT_MASK) ? "SFT" : ""
+ );
+
+ return modifier_state_str;
+}
diff --git a/keyboards/comet46/readme.md b/keyboards/comet46/readme.md
index 8df27183d..3db64d291 100644
--- a/keyboards/comet46/readme.md
+++ b/keyboards/comet46/readme.md
@@ -1,6 +1,6 @@
# Comet46
-![Comet46](https://user-images.githubusercontent.com/39004890/42418180-d5bb188c-82d5-11e8-99fa-65020ce5ac5d.jpg)
+![Comet46](https://user-images.githubusercontent.com/39004890/50396817-a1660600-07af-11e9-8611-3156c635db43.jpg)
A split wireless 40% column-staggered keyboard
@@ -13,4 +13,5 @@ Make example for this keyboard (after setting up your build environment):
make comet46:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
diff --git a/keyboards/comet46/rules.mk b/keyboards/comet46/rules.mk
index 648b8b200..897cc9b8c 100644
--- a/keyboards/comet46/rules.mk
+++ b/keyboards/comet46/rules.mk
@@ -1,12 +1,8 @@
-
-OPT_DEFS += -DCOMET46_ORTHO_===PROMICRO
-COMET46_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
- avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
-
# # project specific files
-SRC = matrix.c
-
-
+SRC += matrix.c \
+ i2c.c \
+ ssd1306.c
+
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
@@ -24,8 +20,6 @@ MCU = atmega32u4
# software delays.
F_CPU = 16000000
-
-#
# LUFA specific
#
# Target architecture (see library "Board Types" documentation).
@@ -48,7 +42,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.
-BOOTLOADER = caterina
+# BOOTLOADER = caterina
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
diff --git a/keyboards/comet46/ssd1306.c b/keyboards/comet46/ssd1306.c
new file mode 100644
index 000000000..4330c8497
--- /dev/null
+++ b/keyboards/comet46/ssd1306.c
@@ -0,0 +1,344 @@
+#ifdef SSD1306OLED
+
+#include "ssd1306.h"
+#include "i2c.h"
+#include <string.h>
+#include "print.h"
+#ifdef ADAFRUIT_BLE_ENABLE
+#include "adafruit_ble.h"
+#endif
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#endif
+#include "sendchar.h"
+#include "timer.h"
+
+static const unsigned char font[] PROGMEM;
+
+// Set this to 1 to help diagnose early startup problems
+// when testing power-on with ble. Turn it off otherwise,
+// as the latency of printing most of the debug info messes
+// with the matrix scan, causing keys to drop.
+#define DEBUG_TO_SCREEN 0
+
+//static uint16_t last_battery_update;
+//static uint32_t vbat;
+//#define BatteryUpdateInterval 10000 /* milliseconds */
+
+// 'last_flush' is declared as uint16_t,
+// so this must be less than 65535
+#define ScreenOffInterval 60000 /* milliseconds */
+#if DEBUG_TO_SCREEN
+static uint8_t displaying;
+#endif
+static uint16_t last_flush;
+
+static bool force_dirty = true;
+
+// Write command sequence.
+// Returns true on success.
+static inline bool _send_cmd1(uint8_t cmd) {
+ bool res = false;
+
+ if (i2c_start_write(SSD1306_ADDRESS)) {
+ xprintf("failed to start write to %d\n", SSD1306_ADDRESS);
+ goto done;
+ }
+
+ if (i2c_master_write(0x0 /* command byte follows */)) {
+ print("failed to write control byte\n");
+
+ goto done;
+ }
+
+ if (i2c_master_write(cmd)) {
+ xprintf("failed to write command %d\n", cmd);
+ goto done;
+ }
+ res = true;
+done:
+ i2c_master_stop();
+ return res;
+}
+
+// Write 2-byte command sequence.
+// Returns true on success
+static inline bool _send_cmd2(uint8_t cmd, uint8_t opr) {
+ if (!_send_cmd1(cmd)) {
+ return false;
+ }
+ return _send_cmd1(opr);
+}
+
+// Write 3-byte command sequence.
+// Returns true on success
+static inline bool _send_cmd3(uint8_t cmd, uint8_t opr1, uint8_t opr2) {
+ if (!_send_cmd1(cmd)) {
+ return false;
+ }
+ if (!_send_cmd1(opr1)) {
+ return false;
+ }
+ return _send_cmd1(opr2);
+}
+
+#define send_cmd1(c) if (!_send_cmd1(c)) {goto done;}
+#define send_cmd2(c,o) if (!_send_cmd2(c,o)) {goto done;}
+#define send_cmd3(c,o1,o2) if (!_send_cmd3(c,o1,o2)) {goto done;}
+
+static void clear_display(void) {
+ matrix_clear(&display);
+
+ // Clear all of the display bits (there can be random noise
+ // in the RAM on startup)
+ send_cmd3(PageAddr, 0, (DisplayHeight / 8) - 1);
+ send_cmd3(ColumnAddr, 0, DisplayWidth - 1);
+
+ if (i2c_start_write(SSD1306_ADDRESS)) {
+ goto done;
+ }
+ if (i2c_master_write(0x40)) {
+ // Data mode
+ goto done;
+ }
+ for (uint8_t row = 0; row < MatrixRows; ++row) {
+ for (uint8_t col = 0; col < DisplayWidth; ++col) {
+ i2c_master_write(0);
+ }
+ }
+
+ display.dirty = false;
+
+done:
+ i2c_master_stop();
+}
+
+#if DEBUG_TO_SCREEN
+#undef sendchar
+static int8_t capture_sendchar(uint8_t c) {
+ sendchar(c);
+ iota_gfx_write_char(c);
+
+ if (!displaying) {
+ iota_gfx_flush();
+ }
+ return 0;
+}
+#endif
+
+bool iota_gfx_init(bool rotate) {
+ bool success = false;
+
+ i2c_master_init();
+ send_cmd1(DisplayOff);
+ send_cmd2(SetDisplayClockDiv, 0x80);
+ send_cmd2(SetMultiPlex, DisplayHeight - 1);
+
+ send_cmd2(SetDisplayOffset, 0);
+
+
+ send_cmd1(SetStartLine | 0x0);
+ send_cmd2(SetChargePump, 0x14 /* Enable */);
+ send_cmd2(SetMemoryMode, 0 /* horizontal addressing */);
+
+ if(rotate){
+ // the following Flip the display orientation 180 degrees
+ send_cmd1(SegRemap);
+ send_cmd1(ComScanInc);
+ }else{
+ // Flips the display orientation 0 degrees
+ send_cmd1(SegRemap | 0x1);
+ send_cmd1(ComScanDec);
+ }
+
+ send_cmd2(SetComPins, 0x2);
+ send_cmd2(SetContrast, 0x8f);
+ send_cmd2(SetPreCharge, 0xf1);
+ send_cmd2(SetVComDetect, 0x40);
+ send_cmd1(DisplayAllOnResume);
+ send_cmd1(NormalDisplay);
+ send_cmd1(DeActivateScroll);
+ send_cmd1(DisplayOn);
+
+ send_cmd2(SetContrast, 0); // Dim
+
+ clear_display();
+
+ success = true;
+
+ iota_gfx_flush();
+
+#if DEBUG_TO_SCREEN
+ print_set_sendchar(capture_sendchar);
+#endif
+
+done:
+ return success;
+}
+
+bool iota_gfx_off(void) {
+ bool success = false;
+
+ send_cmd1(DisplayOff);
+ success = true;
+
+done:
+ return success;
+}
+
+bool iota_gfx_on(void) {
+ bool success = false;
+
+ send_cmd1(DisplayOn);
+ success = true;
+
+done:
+ return success;
+}
+
+void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
+ *matrix->cursor = c;
+ ++matrix->cursor;
+
+ if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) {
+ // We went off the end; scroll the display upwards by one line
+ memmove(&matrix->display[0], &matrix->display[1],
+ MatrixCols * (MatrixRows - 1));
+ matrix->cursor = &matrix->display[MatrixRows - 1][0];
+ memset(matrix->cursor, ' ', MatrixCols);
+ }
+}
+
+void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
+ matrix->dirty = true;
+
+ if (c == '\n') {
+ // Clear to end of line from the cursor and then move to the
+ // start of the next line
+ uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols;
+
+ while (cursor_col++ < MatrixCols) {
+ matrix_write_char_inner(matrix, ' ');
+ }
+ return;
+ }
+
+ matrix_write_char_inner(matrix, c);
+}
+
+void iota_gfx_write_char(uint8_t c) {
+ matrix_write_char(&display, c);
+}
+
+void matrix_write(struct CharacterMatrix *matrix, const char *data) {
+ const char *end = data + strlen(data);
+ while (data < end) {
+ matrix_write_char(matrix, *data);
+ ++data;
+ }
+}
+
+void matrix_write_ln(struct CharacterMatrix *matrix, const char *data) {
+ char data_ln[strlen(data)+2];
+ snprintf(data_ln, sizeof(data_ln), "%s\n", data);
+ matrix_write(matrix, data_ln);
+}
+
+void iota_gfx_write(const char *data) {
+ matrix_write(&display, data);
+}
+
+void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
+ while (true) {
+ uint8_t c = pgm_read_byte(data);
+ if (c == 0) {
+ return;
+ }
+ matrix_write_char(matrix, c);
+ ++data;
+ }
+}
+
+void iota_gfx_write_P(const char *data) {
+ matrix_write_P(&display, data);
+}
+
+void matrix_clear(struct CharacterMatrix *matrix) {
+ memset(matrix->display, ' ', sizeof(matrix->display));
+ matrix->cursor = &matrix->display[0][0];
+ matrix->dirty = true;
+}
+
+void iota_gfx_clear_screen(void) {
+ matrix_clear(&display);
+}
+
+void matrix_render(struct CharacterMatrix *matrix) {
+ last_flush = timer_read();
+ iota_gfx_on();
+#if DEBUG_TO_SCREEN
+ ++displaying;
+#endif
+
+ // Move to the home position
+ send_cmd3(PageAddr, 0, MatrixRows - 1);
+ send_cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1);
+
+ if (i2c_start_write(SSD1306_ADDRESS)) {
+ goto done;
+ }
+ if (i2c_master_write(0x40)) {
+ // Data mode
+ goto done;
+ }
+
+ for (uint8_t row = 0; row < MatrixRows; ++row) {
+ for (uint8_t col = 0; col < MatrixCols; ++col) {
+ const uint8_t *glyph = font + (matrix->display[row][col] * FontWidth);
+
+ for (uint8_t glyphCol = 0; glyphCol < FontWidth; ++glyphCol) {
+ uint8_t colBits = pgm_read_byte(glyph + glyphCol);
+ i2c_master_write(colBits);
+ }
+
+ // 1 column of space between chars (it's not included in the glyph)
+ //i2c_master_write(0);
+ }
+ }
+
+ matrix->dirty = false;
+
+done:
+ i2c_master_stop();
+#if DEBUG_TO_SCREEN
+ --displaying;
+#endif
+}
+
+void iota_gfx_flush(void) {
+ matrix_render(&display);
+}
+
+__attribute__ ((weak))
+void iota_gfx_task_user(void) {
+}
+
+void iota_gfx_task(void) {
+ iota_gfx_task_user();
+
+ if (display.dirty|| force_dirty) {
+ iota_gfx_flush();
+ force_dirty = false;
+ }
+
+ if (timer_elapsed(last_flush) > ScreenOffInterval) {
+ iota_gfx_off();
+ }
+}
+
+bool process_record_gfx(uint16_t keycode, keyrecord_t *record) {
+ force_dirty = true;
+ return true;
+}
+
+#endif
diff --git a/keyboards/comet46/ssd1306.h b/keyboards/comet46/ssd1306.h
new file mode 100644
index 000000000..ea8c92328
--- /dev/null
+++ b/keyboards/comet46/ssd1306.h
@@ -0,0 +1,91 @@
+#pragma once
+
+#include <stdbool.h>
+#include <stdio.h>
+#include "pincontrol.h"
+#include "action.h"
+
+enum ssd1306_cmds {
+ DisplayOff = 0xAE,
+ DisplayOn = 0xAF,
+
+ SetContrast = 0x81,
+ DisplayAllOnResume = 0xA4,
+
+ DisplayAllOn = 0xA5,
+ NormalDisplay = 0xA6,
+ InvertDisplay = 0xA7,
+ SetDisplayOffset = 0xD3,
+ SetComPins = 0xda,
+ SetVComDetect = 0xdb,
+ SetDisplayClockDiv = 0xD5,
+ SetPreCharge = 0xd9,
+ SetMultiPlex = 0xa8,
+ SetLowColumn = 0x00,
+ SetHighColumn = 0x10,
+ SetStartLine = 0x40,
+
+ SetMemoryMode = 0x20,
+ ColumnAddr = 0x21,
+ PageAddr = 0x22,
+
+ ComScanInc = 0xc0,
+ ComScanDec = 0xc8,
+ SegRemap = 0xa0,
+ SetChargePump = 0x8d,
+ ExternalVcc = 0x01,
+ SwitchCapVcc = 0x02,
+
+ ActivateScroll = 0x2f,
+ DeActivateScroll = 0x2e,
+ SetVerticalScrollArea = 0xa3,
+ RightHorizontalScroll = 0x26,
+ LeftHorizontalScroll = 0x27,
+ VerticalAndRightHorizontalScroll = 0x29,
+ VerticalAndLeftHorizontalScroll = 0x2a,
+};
+
+// Controls the SSD1306 128x32 OLED display via i2c
+
+#ifndef SSD1306_ADDRESS
+#define SSD1306_ADDRESS 0x3C
+#endif
+
+#define DisplayHeight 32
+#define DisplayWidth 128
+
+#define FontHeight 8
+#define FontWidth 6
+
+#define MatrixRows (DisplayHeight / FontHeight)
+#define MatrixCols (DisplayWidth / FontWidth)
+
+struct CharacterMatrix {
+ uint8_t display[MatrixRows][MatrixCols];
+ uint8_t *cursor;
+ bool dirty;
+};
+
+struct CharacterMatrix display;
+
+bool iota_gfx_init(bool rotate);
+void iota_gfx_task(void);
+bool iota_gfx_off(void);
+bool iota_gfx_on(void);
+void iota_gfx_flush(void);
+void iota_gfx_write_char(uint8_t c);
+void iota_gfx_write(const char *data);
+void iota_gfx_write_P(const char *data);
+void iota_gfx_clear_screen(void);
+
+void iota_gfx_task_user(void);
+
+void matrix_clear(struct CharacterMatrix *matrix);
+void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c);
+void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c);
+void matrix_write(struct CharacterMatrix *matrix, const char *data);
+void matrix_write_ln(struct CharacterMatrix *matrix, const char *data);
+void matrix_write_P(struct CharacterMatrix *matrix, const char *data);
+void matrix_render(struct CharacterMatrix *matrix);
+
+bool process_record_gfx(uint16_t keycode, keyrecord_t *record); \ No newline at end of file
diff --git a/keyboards/contra/config.h b/keyboards/contra/config.h
index 85077ed46..c6bb374da 100755
--- a/keyboards/contra/config.h
+++ b/keyboards/contra/config.h
@@ -43,10 +43,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 0
diff --git a/keyboards/contra/keymaps/bramver/README.md b/keyboards/contra/keymaps/bramver/README.md
new file mode 100644
index 000000000..5327beba7
--- /dev/null
+++ b/keyboards/contra/keymaps/bramver/README.md
@@ -0,0 +1,35 @@
+# Contra layout
+
+My current setup consists of a very simple base layer, numbers layer, mouse layer and emoji layer.
+Still many options, but time will tell if changes are needed.
+
+## Keymap
+
+```
+#define SP_MSE LT(_MOUSE, KC_SPC)
+
+
+BASE layer
+ { KC_GESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC },
+ { KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_ENT },
+ { KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_QUOT },
+ { KC_LCTL , KC_GRV , KC_LALT , KC_LGUI , MO(1) , SP_MSE , SP_MSE , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , MO(2) },
+
+LOWER layer
+ { _______ , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_DEL },
+ { _______ , KC_F1 , KC_F2 , KC_F3 , KC_LBRC , KC_MINS , KC_EQL , KC_RBRC , KC_F7 , KC_F8 , KC_F9 , _______ },
+ { _______ , KC_F4 , KC_F5 , KC_F6 , KC_HOME , KC_BSLS , KC_MPLY , KC_END , KC_F10 , KC_F11 , KC_F12 , _______ },
+ { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ },
+
+EMOJI layer
+ { _______ , X(CLAP) , X(CUM) , X(BNIS) , X(BUTT) , X(CAR) , X(FIRE) , X(REDB) , X(MONY) , X(HNDR) , X(SOS) , _______ },
+ { _______ , X(CELE) , X(PRAY) , X(NAIL) , X(OK) , X(THNK) , X(UNAM) , X(HEYE) , X(COOL) , X(EYES) , X(SMIR) , _______ },
+ { _______ , X(TRIU) , X(SCRM) , X(VOMI) , X(DTIV) , X(EXPL) , X(HAIR) , X(DANC) , X(STRN) , X(LEFT) , X(RGHT) , _______ },
+ { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ },
+
+MOUSE layer
+ { _______ , KC_WH_L , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_U , KC_WH_U , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_L , _______ },
+ { _______ , KC_WH_R , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_D , KC_WH_D , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_R , _______ },
+ { _______ , KC_VOLD , KC_VOLU , KC_MPRV , KC_MNXT , KC_MPLY , KC_MPLY , KC_MPRV , KC_MNXT , KC_VOLD , KC_VOLU , _______ },
+ { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ },
+``` \ No newline at end of file
diff --git a/keyboards/contra/keymaps/bramver/config.h b/keyboards/contra/keymaps/bramver/config.h
new file mode 100755
index 000000000..de2a9b0ee
--- /dev/null
+++ b/keyboards/contra/keymaps/bramver/config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_INTERVAL 16
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_WHEEL_MAX_SPEED 8
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
+#define MOUSEKEY_WHEEL_DELAY 0
diff --git a/keyboards/contra/keymaps/bramver/keymap.c b/keyboards/contra/keymaps/bramver/keymap.c
new file mode 100644
index 000000000..8ccaf686b
--- /dev/null
+++ b/keyboards/contra/keymaps/bramver/keymap.c
@@ -0,0 +1,126 @@
+/* Copyright 2018 darm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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 emoji_map {
+ UNAM, // unamused 😒
+ HEYE, // smiling face with heart shaped eyes 😍
+ OK, // ok hand sign 👌
+ SMIR, // smirk 😏
+ PRAY, // pray 🙏
+ CELE, // celebration 🙌
+ COOL, // smile with sunglasses 😎
+ EYES, // eyes
+ THNK, // BIG THONK
+ NAIL, // Nailcare
+ SOS, // Vuile sos
+ REDB, // Red B
+ HNDR, // 100
+ MONY,
+ FIRE,
+ CAR,
+ BUTT,
+ BNIS,
+ CUM,
+ CLAP,
+ TRIU, // Fart from nose
+ SCRM,
+ VOMI,
+ DTIV, // Detective
+ EXPL, // Brainsplosion
+ HAIR, // Haircut
+ DANC, // Salsa dancer
+ STRN, // Stronk
+ LEFT, // Point Left
+ RGHT, // Point Right
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+ [UNAM] = 0x1F612,
+ [HEYE] = 0x1f60d,
+ [OK] = 0x1F44C,
+ [SMIR] = 0x1F60F,
+ [PRAY] = 0x1F64F,
+ [CELE] = 0x1F64C,
+ [COOL] = 0x1F60E,
+ [EYES] = 0x1F440,
+ [THNK] = 0x1F914,
+ [NAIL] = 0x1F485,
+ [SOS] = 0x1F198,
+ [REDB] = 0x1F171,
+ [HNDR] = 0x1F4AF,
+ [MONY] = 0x1F480,
+ [FIRE] = 0x1F525,
+ [CAR] = 0x1F697,
+ [BUTT] = 0x1F351,
+ [BNIS] = 0x1F346,
+ [CUM] = 0x1F4A6,
+ [CLAP] = 0x1F44F,
+ [TRIU] = 0x1F624,
+ [SCRM] = 0x1F631,
+ [VOMI] = 0x1F92E,
+ [DTIV] = 0x1F575,
+ [EXPL] = 0x1F92F,
+ [HAIR] = 0x2640,
+ [DANC] = 0x1F483,
+ [STRN] = 0x1F4AA,
+ [LEFT] = 0x1F448,
+ [RGHT] = 0x1F449,
+};
+
+// Layer shorthand
+#define _BASE 0
+#define _LOWER 1
+#define _EMOJI 2
+#define _MOUSE 3
+
+#define SP_MSE LT(_MOUSE, KC_SPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BASE] = LAYOUT_ortho_4x12(
+ KC_GESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC ,
+ KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_ENT ,
+ KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_QUOT ,
+ KC_LCTL , KC_GRV , KC_LALT , KC_LGUI , MO(1) , SP_MSE , SP_MSE , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , MO(2)
+ ),
+
+ [_LOWER] = LAYOUT_ortho_4x12(
+ _______ , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_DEL ,
+ _______ , KC_F1 , KC_F2 , KC_F3 , KC_LBRC , KC_MINS , KC_EQL , KC_RBRC , KC_F7 , KC_F8 , KC_F9 , _______ ,
+ _______ , KC_F4 , KC_F5 , KC_F6 , KC_HOME , KC_BSLS , KC_MPLY , KC_END , KC_F10 , KC_F11 , KC_F12 , _______ ,
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______
+ ),
+
+ [_EMOJI] = LAYOUT_ortho_4x12(
+ _______ , X(CLAP) , X(CUM) , X(BNIS) , X(BUTT) , X(CAR) , X(FIRE) , X(REDB) , X(MONY) , X(HNDR) , X(SOS) , _______ ,
+ _______ , X(CELE) , X(PRAY) , X(NAIL) , X(OK) , X(THNK) , X(UNAM) , X(HEYE) , X(COOL) , X(EYES) , X(SMIR) , _______ ,
+ _______ , X(TRIU) , X(SCRM) , X(VOMI) , X(DTIV) , X(EXPL) , X(HAIR) , X(DANC) , X(STRN) , X(LEFT) , X(RGHT) , _______ ,
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______
+ ),
+
+ [_MOUSE] = LAYOUT_ortho_4x12(
+ _______ , KC_WH_L , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_U , KC_WH_U , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_L , _______ ,
+ _______ , KC_WH_R , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_D , KC_WH_D , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_R , _______ ,
+ _______ , KC_VOLD , KC_VOLU , KC_MPRV , KC_MNXT , KC_MPLY , KC_MPLY , KC_MPRV , KC_MNXT , KC_VOLD , KC_VOLU , _______ ,
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______
+ )
+
+};
+
+void matrix_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+}
diff --git a/keyboards/contra/keymaps/bramver/rules.mk b/keyboards/contra/keymaps/bramver/rules.mk
new file mode 100755
index 000000000..925b1c2b2
--- /dev/null
+++ b/keyboards/contra/keymaps/bramver/rules.mk
@@ -0,0 +1,6 @@
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+NKRO_ENABLE = yes # USB Nkey Rollover
+UNICODEMAP_ENABLE = yes # Unicode
+BOOTLOADER = atmel-dfu
+
diff --git a/keyboards/contra/keymaps/deastiny/config.h b/keyboards/contra/keymaps/deastiny/config.h
new file mode 100644
index 000000000..8757eb70d
--- /dev/null
+++ b/keyboards/contra/keymaps/deastiny/config.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
diff --git a/keyboards/contra/keymaps/deastiny/keymap.c b/keyboards/contra/keymaps/deastiny/keymap.c
new file mode 100644
index 000000000..846cbe9c7
--- /dev/null
+++ b/keyboards/contra/keymaps/deastiny/keymap.c
@@ -0,0 +1,142 @@
+/* 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 "keymap_extras/keymap_german.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ DVORAK = SAFE_RANGE,
+ LOWER,
+ RAISE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/**
+,-----------------------------------------------------------------------------------.
+ | ESC | Ü | , | . | P | Y | F | G | C | T | Z | Bksp |
+ |------+------+------+------+------+-------------+------+------+------+------+------|
+ | TAB | A | O | E | I | U | H | D | R | N | S | L |
+ |------+------+------+------+------+------|------+------+------+------+------+------|
+ | Shift| Ä | Ö | Q | J | K | X | B | M | W | V |Enter |
+ |------+------+------+------+------+------+------+------+------+------+------+------|
+ | CTRL | GUI | Alt | MOD |Lower | Space |Raise | Left |Right | Up |Down |
+ `-----------------------------------------------------------------------------------'
+**/
+ [_DVORAK] = LAYOUT_planck_mit(
+ KC_ESC, DE_UE, DE_COMM, DE_DOT, DE_P, DE_Y, DE_F, DE_G, DE_C, DE_T, DE_Z, KC_BSPC,
+ KC_TAB, DE_A, DE_O, DE_E, DE_I, DE_U, DE_H, DE_D, DE_R, DE_N, DE_S, DE_L,
+ KC_LSFT, DE_AE, DE_OE, DE_Q, DE_J, DE_K, DE_X, DE_B, DE_M, DE_W, DE_V, KC_ENT ,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(3), LOWER, KC_SPC, RAISE, KC_LEFT, KC_RIGHT, KC_UP, KC_DOWN
+ ),
+
+ /* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT_planck_mit(
+ DE_TILD, DE_EXLM, DE_AT, DE_HASH, DE_DLR, DE_PERC, DE_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, DE_QST,
+ _______, _______, _______, _______, _______, _______, _______, 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 / |Pg Up |Pg Dn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT_planck_mit(
+ DE_GRV, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, DE_EQL, DE_LBRC, DE_RBRC, DE_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, DE_SLSH,
+ _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+ /* Adjust (MO(3))
+ * ,-----------------------------------------------------------------------------------.
+ * | | HOME | UP | END | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | LEFT | DOWN | RIGHT| | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_planck_mit(
+ _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case DVORAK:
+ if (record->event.pressed) {
+ print("mode just switched to dvorak and this is a huge string\n");
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/contra/keymaps/deastiny/readme.md b/keyboards/contra/keymaps/deastiny/readme.md
new file mode 100644
index 000000000..61d722847
--- /dev/null
+++ b/keyboards/contra/keymaps/deastiny/readme.md
@@ -0,0 +1,56 @@
+# A Dvorak Type II based board
+
+As I switched from a Poker II some keys are based on my experience there.
+
+
+## DVORAK (Normal) Layer
+```
+,-----------------------------------------------------------------------------------.
+ | ESC | Ü | , | . | P | Y | F | G | C | T | Z | Bksp |
+ |------+------+------+------+------+-------------+------+------+------+------+------|
+ | TAB | A | O | E | I | U | H | D | R | N | S | L |
+ |------+------+------+------+------+------|------+------+------+------+------+------|
+ | Shift| Ä | Ö | Q | J | K | X | B | M | W | V |Enter |
+ |------+------+------+------+------+------+------+------+------+------+------+------|
+ | CTRL | OS | Alt | MO(3)|Lower | Space |Raise | Left |Right | Up |Down |
+ `-----------------------------------------------------------------------------------'
+```
+
+## Lower
+```
+,-----------------------------------------------------------------------------------.
+ | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ |------+------+------+------+------+-------------+------+------+------+------+------|
+ | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ |------+------+------+------+------+------|------+------+------+------+------+------|
+ | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | ? |
+ |------+------+------+------+------+------+------+------+------+------+------+------|
+ | | | | | | | | Next | Vol- | Vol+ | Play |
+ `-----------------------------------------------------------------------------------'
+```
+
+## 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 |
+ `-----------------------------------------------------------------------------------'
+```
+
+## Adjust (MO(3))
+```
+ ,-----------------------------------------------------------------------------------.
+ | | HOME | UP | END | | | | | | | | Del |
+ |------+------+------+------+------+-------------+------+------+------+------+------|
+ | | LEFT | DOWN | RIGHT| | | | | | | | |
+ |------+------+------+------+------+------|------+------+------+------+------+------|
+ | | | | | | | | | | | | |
+ |------+------+------+------+------+------+------+------+------+------+------+------|
+ | | | | | | | | | | | |
+ `-----------------------------------------------------------------------------------'
+``` \ No newline at end of file
diff --git a/keyboards/contra/keymaps/erovia/config.h b/keyboards/contra/keymaps/erovia/config.h
new file mode 100644
index 000000000..11d6a2c1a
--- /dev/null
+++ b/keyboards/contra/keymaps/erovia/config.h
@@ -0,0 +1,7 @@
+#pragma once
+
+#define AUTO_SHIFT_TIMEOUT 150
+#define NO_AUTO_SHIFT_SPECIAL
+#define NO_AUTO_SHIFT_NUMERIC
+
+#define TAPPING_TERM 200
diff --git a/keyboards/contra/keymaps/erovia/keymap.c b/keyboards/contra/keymaps/erovia/keymap.c
new file mode 100644
index 000000000..9b72e5733
--- /dev/null
+++ b/keyboards/contra/keymaps/erovia/keymap.c
@@ -0,0 +1,163 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _QWERTY,
+ _COLEMAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ LOWER,
+ RAISE
+};
+
+enum {
+ TD_SPACE_CADET_SHIFT = 0,
+ TD_SPACE_CADET_ENTER = 1
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_SPACE_CADET_SHIFT] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_LPRN),
+ [TD_SPACE_CADET_ENTER] = ACTION_TAP_DANCE_DOUBLE(KC_ENT, KC_RPRN)
+};
+
+#define TD_SHFT TD(TD_SPACE_CADET_SHIFT)
+#define TD_ENTR TD(TD_SPACE_CADET_ENTER)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | GUI |Lower | Tab |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_ortho_4x12(
+ KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ TD_SHFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, TD_ENTR,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LGUI, LOWER, KC_TAB, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | Q | W | F | P | B | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Ctrl | A | R | S | T | G | M | N | E | I | O | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | D | V | K | H | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | GUI |Lower | Tab |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_4x12(
+ KC_GRV, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ TD(TD_SPACE_CADET_SHIFT), KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, TD(TD_SPACE_CADET_ENTER),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LGUI, LOWER, KC_TAB, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* 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 | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Prev | Vol- | Mute | Stop |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MUTE, KC_MSTP
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | |Qwerty|Colemk| | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | AuSh |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ASTG
+)
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/contra/keymaps/erovia/readme.md b/keyboards/contra/keymaps/erovia/readme.md
new file mode 100644
index 000000000..34cbdf0a1
--- /dev/null
+++ b/keyboards/contra/keymaps/erovia/readme.md
@@ -0,0 +1,76 @@
+# Erovia's Contra Keymap
+
+My personal Contra keymap based on the *basic* keymap.
+
+**Features**
+
+* Qwerty and Colemak Mod-DH support
+* autoshifting
+* double tap LSHIFT and ENTER for quick access to ( and )
+
+## QWERTY (Normal) Layer
+```
+,-----------------------------------------------------------------------------------.
+| ` | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Esc | A | S | D | F | G | H | J | K | L | ; | ' |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Ctrl | GUI | Alt | GUI |Lower | Tab |Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+```
+
+## Colemak Layer
+Switch from `Adjust` layer.
+```
+,-----------------------------------------------------------------------------------.
+| ` | Q | W | F | P | B | J | L | U | Y | ; | Bksp |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Ctrl | A | R | S | T | G | M | N | E | I | O | ' |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| Shift| Z | X | C | D | V | K | H | , | . | / |Enter |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| Ctrl | GUI | Alt | GUI |Lower | Tab |Space |Raise | Left | Down | Up |Right |
+`-----------------------------------------------------------------------------------'
+```
+
+## Lower
+```
+,-----------------------------------------------------------------------------------.
+| ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | Next | Vol- | Vol+ | Play |
+`-----------------------------------------------------------------------------------'
+```
+
+## 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 | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | Prev | Vol- | Mute | Stop |
+`-----------------------------------------------------------------------------------'
+```
+
+## Adjust
+`AuSh` toggles autoshifting.
+```
+,-----------------------------------------------------------------------------------.
+| | | | | | | | | | | | |
+|------+------+------+------+------+-------------+------+------+------+------+------|
+| | | | | | | |Qwerty|Colemk| | | |
+|------+------+------+------+------+------|------+------+------+------+------+------|
+| | | | | | | | | | | | |
+|------+------+------+------+------+------+------+------+------+------+------+------|
+| | | | | | | | | | | AuSh |
+`-----------------------------------------------------------------------------------'
+```
diff --git a/keyboards/contra/keymaps/erovia/rules.mk b/keyboards/contra/keymaps/erovia/rules.mk
new file mode 100755
index 000000000..97999d9cb
--- /dev/null
+++ b/keyboards/contra/keymaps/erovia/rules.mk
@@ -0,0 +1,2 @@
+AUTO_SHIFT_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/contra/keymaps/losinggeneration/rules.mk b/keyboards/contra/keymaps/losinggeneration/rules.mk
index 1728afd85..ea2b7165d 100644
--- a/keyboards/contra/keymaps/losinggeneration/rules.mk
+++ b/keyboards/contra/keymaps/losinggeneration/rules.mk
@@ -10,7 +10,7 @@ COMMAND_ENABLE = no # Commands for debug and configuration
CONSOLE_ENABLE = no # Console for debug(+400)
MIDI_ENABLE = no # MIDI controls
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
ifndef QUANTUM_DIR
include ../../../../Makefile
diff --git a/keyboards/contra/keymaps/maxr1998/keymap.c b/keyboards/contra/keymaps/maxr1998/keymap.c
index afdd3d94a..4d731c08b 100644
--- a/keyboards/contra/keymaps/maxr1998/keymap.c
+++ b/keyboards/contra/keymaps/maxr1998/keymap.c
@@ -20,13 +20,17 @@
enum contra_layers {
_QWERTZ,
_FUNC,
- _NUMROW
+ _NUMROW,
+ _NUMROW_L3,
+ _GAMING
};
#define KC_I3 LM(_NUMROW, MOD_LALT)
#define KC_NR MO(_NUMROW)
#define NR_L3 SAFE_RANGE
#define FUN MO(_FUNC)
+#define G_1 TO(_GAMING)
+#define G_0 TG(_GAMING)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -52,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------------------------------------------------.
* | | | | | | | | Ü | | Ö | | Del |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Lock | Ä | ß | | | | | RGBS | RGBB | RGBS | | |
+ * | Lock | Ä | ß | | | GAME | | RGBS | RGBB | RGBS | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | | | | | | | RGBH-| RGBT | RGBH+| PgUp | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -61,14 +65,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_FUNC] = {
{_______, _______, _______, _______, _______, _______, _______, DE_UE, _______, DE_OE, _______, KC_DEL },
- {KC_LOCK, DE_AE, DE_SS, _______, _______, _______, _______, RGB_M_P, RGB_M_B, RGB_M_SW,_______, _______},
+ {KC_LOCK, DE_AE, DE_SS, _______, _______, G_1, _______, RGB_M_P, RGB_M_B, RGB_M_SW,_______, _______},
{_______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_TOG, RGB_HUI, KC_PGUP, _______},
{_______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_END }
},
/* Numrow layer (special characters with Shift and ISO_L3_Shift)
* ,-----------------------------------------------------------------------------------.
- * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ß |
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | | | | | | | | | | | #' | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
@@ -78,25 +82,61 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_NUMROW] = {
- {_______, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, DE_SS },
+ {_______, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, _______},
{_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DE_HASH, _______},
{_______, DE_LESS, _______, _______, _______, _______, _______, _______, _______, _______, DE_MINS, _______},
{_______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______}
+},
+[_NUMROW_L3] = {
+ {_______, DE_1, DE_2, DE_3, DE_4, DE_5, DE_6, DE_7, DE_8, DE_9, DE_0, _______},
+ {_______, DE_Q, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, DE_LESS, _______, _______, _______, _______, _______, _______, _______, _______, DE_MINS, _______},
+ {_______, _______, _______, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, _______, _______}
+},
+
+/* Gaming
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Space| | | | | | | | Reset| | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GAMING] = {
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {KC_SPC, _______, _______, _______, _______, _______, _______, _______, G_0, _______, _______, _______}
}
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (keycode == NR_L3) {
- if (record->event.pressed) {
- register_code(DE_ALGR);
- layer_on(_NUMROW);
- } else {
- layer_off(_NUMROW);
- unregister_code(DE_ALGR);
- }
- return false;
+ switch(keycode) {
+ case KC_BSPC:
+ if (record->event.pressed) {
+ if (get_mods() & (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RSFT))) {
+ register_code(DE_SS);
+ return false;
+ }
+ } else {
+ unregister_code(DE_SS);
+ }
+ return true;
+ case NR_L3:
+ if (record->event.pressed) {
+ register_code(KC_ALGR);
+ layer_on(_NUMROW_L3);
+ } else {
+ layer_off(_NUMROW_L3);
+ unregister_code(KC_ALGR);
+ }
+ return false;
+ default:
+ return true;
}
- return true;
}
void led_set_user(uint8_t usb_led) {
diff --git a/keyboards/contra/keymaps/ryanm101/config.h b/keyboards/contra/keymaps/ryanm101/config.h
index 9a458b892..224a4a37d 100644
--- a/keyboards/contra/keymaps/ryanm101/config.h
+++ b/keyboards/contra/keymaps/ryanm101/config.h
@@ -3,7 +3,6 @@
#include "config_common.h"
-#define PREVENT_STUCK_MODIFIERS
#define TAPPING_TERM 200
#ifdef AUDIO_ENABLE
@@ -28,7 +27,7 @@
/* enable basic MIDI features:
- MIDI notes can be sent when in Music mode is on
*/
-
+
#define MIDI_BASIC
/* enable advanced MIDI features:
@@ -42,4 +41,4 @@
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 2
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/converter/adb_usb/README.md b/keyboards/converter/adb_usb/README.md
new file mode 100644
index 000000000..ed7175008
--- /dev/null
+++ b/keyboards/converter/adb_usb/README.md
@@ -0,0 +1,83 @@
+ADB-to USB Keyboard Converter
+=============================
+This firmware converts Apple Desktop Bus (ADB) keyboard protocol to USB so that you can use an ADB keyboard on a modern computer. It works on the PJRC Teensy 2.0 and other USB AVR MCUs (ATMega32U4, AT90USB64/128, etc) and needs at least 10KB of flash memory.
+
+
+This is a port of the TMK ADB-to-USB converter to QMK. For information on QMK, please consult the following:
+https://github.com/qmk/qmk_firmware
+https://docs.qmk.fm
+
+
+Wiring
+------
+Connect the VCC, GND, and DATA lines of the ADB keyboard to the controller (Teensy 2.0 or similar). By default the DATA line uses port PD0. The Power SW line is unused by the converter.
+
+ADB female socket from the front:
+
+ ,--_--.
+ / o4 3o \ 1: DATA
+ | o2 1o | 2: Power SW
+ - === - 3: VCC
+ `-___-' 4: GND
+
+This converter uses AVR's internal pull-up, but it seems to be too weak, in particular when you want to use a long or coiled cable. Using an external pull-up resistor (1K-10K Ohm) between the DATA and VCC lines is strongly recommended.
+
+Pull-up resistor:
+
+ Keyboard Converter
+ ,------.
+ 5V------+------|VCC |
+ | | |
+ [R] | |
+ | | |
+ Signal--+------|PD0 |
+ | |
+ GND------------|GND |
+ `------'
+ R: 1K Ohm resistor
+
+
+Define following macros for ADB connection in config.h if you use other than port PD0.
+
+ ADB_PORT, ADB_PIN, ADB_DDR, ADB_DATA_BIT
+
+
+Building the Firmware
+------------------------------------------
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+
+Keymap
+------
+To build the default keymap run this command:
+
+ $ make converter/adb_usb:default
+
+You may add your own keymap to the converter/adb_usb/keymaps directory, as you would with any other QMK-powered keyboard.
+
+To build your custom keymap, change the build command to:
+
+ $ make converter/adb_usb:my_keymap
+
+Where 'my_keymap' is the name of your custom keymap directory.
+
+
+Locking Caps Lock
+----------------
+Many old ADB keyboards use a locking switch for the caps lock key. This converter supports the locking caps lock key by default.
+
+
+Notes
+-----
+Non-extended ADB keyboards make no distinction between the left and right modifiers,
+i.e. the keycode for the left modifier will be sent even if the right modifier
+
+The Apple Extended Keyboard and Apple Extended Keyboard II can differentiate between the left and right modifiers except for the GUI key (Windows/Command).
+
+Most ADB keyboards have no diodes in its matrix so they are not NKRO,
+though the ADB protocol itself supports it. See protocol/adb.c for more info.
+
+
+QMK Port Changelog
+---------
+- 2018/09/16 - Initial release.
diff --git a/keyboards/converter/adb_usb/adb_usb.c b/keyboards/converter/adb_usb/adb_usb.c
new file mode 100644
index 000000000..7026d6275
--- /dev/null
+++ b/keyboards/converter/adb_usb/adb_usb.c
@@ -0,0 +1,3 @@
+#include "adb_usb.h"
+#include <avr/io.h>
+#include "quantum.h"
diff --git a/keyboards/converter/adb_usb/adb_usb.h b/keyboards/converter/adb_usb/adb_usb.h
new file mode 100644
index 000000000..8691adcc6
--- /dev/null
+++ b/keyboards/converter/adb_usb/adb_usb.h
@@ -0,0 +1,109 @@
+/*
+Copyright 2011,2012,2013 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Ported to QMK by Peter Roe <pete@13bit.me>
+*/
+
+#ifndef ADB_USB_H
+#define ADB_USB_H
+
+#include "quantum.h"
+
+/* M0115/M3501 Apple Extended Keyboard ANSI
+ * ,---. ,---------------. ,---------------. ,---------------. ,-----------. ,---.
+ * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |Pwr|
+ * `---' `---------------' `---------------' `---------------' `-----------' `---'
+ * ,-----------------------------------------------------------. ,-----------. ,---------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa| |Ins|Hom|PgU| |NmL| =| /| *|
+ * |-----------------------------------------------------------| |-----------| |---------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD| | 7| 8| 9| -|
+ * |-----------------------------------------------------------| `-----------' |---------------|
+ * |CapsLo| A| S| D| F| G| H| J| K| L| ;| '|Return | | 4| 5| 6| +|
+ * |-----------------------------------------------------------| ,---. |---------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
+ * |-----------------------------------------------------------| ,-----------. |-----------|Ent|
+ * |Ctrl |Opt |Cmd | Space | |Opt |Ctrl | |Lef|Dow|Rig| | 0| .| |
+ * `-----------------------------------------------------------' `-----------' `---------------'
+ */
+#define LAYOUT_ext_ansi( \
+ K35, K7A,K78,K63,K76,K60,K61,K62,K64,K65,K6D,K67,K6F, K69,K6B,K71, K7F, \
+ K32,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K72,K73,K74, K47,K51,K4B,K43, \
+ K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E,K2A, K75,K77,K79, K59,K5B,K5C,K4E, \
+ K39,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K45, \
+ K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K3E, K53,K54,K55, \
+ K36,K3A,K37, K31, K7C,K7D, K3B,K3D,K3C, K52, K41,K4C \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K08, K09, KC_NO, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, KC_NO, K35, K36, K37 }, \
+ { K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO, }, \
+ { KC_NO, K41, KC_NO, K43, KC_NO, K45, KC_NO, K47 }, \
+ { KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, K4E, KC_NO, }, \
+ { KC_NO, KC_NO, K52, K53, K54, K55, K56, K57 }, \
+ { K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO, }, \
+ { K60, K61, K62, K63, K64, K65, KC_NO, K67 }, \
+ { KC_NO, K69, KC_NO, K6B, KC_NO, K6D, KC_NO, K6F }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77 }, \
+ { K78, K79, K7A, K7B, K7C, K7D, KC_NO, K7F } \
+}
+
+/* M0116 Apple Standard Keyboard ANSI
+ * +-------+
+ * | power |
+ * +-------+
+ * +---+---+---+---+---+---+---+---+---+---+---+---+---+-----+ +---+---+---+---+
+ * |esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | bks | |clr| = | / | * |
+ * +---------------------------------------------------------+ +---+---+---+---+
+ * | tab | q | w | e | r | t | y | u | i | o | p | [ | ] | | | 7 | 8 | 9 | + |
+ * +-----------------------------------------------------+ | +---+---+---+---+
+ * | ctrl | a | s | d | f | g | h | j | k | l | ; | ' |return| | 4 | 5 | 6 | - |
+ * +---------------------------------------------------------+ +---+---+---+---+
+ * | shift | z | x | c | v | b | n | m | , | . | / | shift | | 1 | 2 | 3 | |
+ * +---------------------------------------------------------+ +-------+---|ent|
+ * |cap|opt|comnd| ` | | \ |lef|rig|dwn|up | | 0 | . | |
+ * +---------------------------------------------------------+ +-------+---+---+
+ */
+#define LAYOUT_m0116_ansi( \
+ K7F, \
+ K35,K12,K13,K14,K15,K17,K16,K1A,K1C,K19,K1D,K1B,K18,K33, K47,K51,K4B,K43, \
+ K30,K0C,K0D,K0E,K0F,K11,K10,K20,K22,K1F,K23,K21,K1E, K59,K5B,K5C,K45, \
+ K36,K00,K01,K02,K03,K05,K04,K26,K28,K25,K29,K27, K24, K56,K57,K58,K4E, \
+ K38,K06,K07,K08,K09,K0B,K2D,K2E,K2B,K2F,K2C, K7B, K53,K54,K55, \
+ K39,K3A,K37,K32, K31, K2A,K3B,K3C,K3D,K3E, K52, K41,K4C \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K08, K09, KC_NO, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, KC_NO, K35, K36, K37 }, \
+ { K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO }, \
+ { KC_NO, K41, KC_NO, K43, KC_NO, K45, KC_NO, K47 }, \
+ { KC_NO, KC_NO, KC_NO, K4B, K4C, KC_NO, K4E, KC_NO }, \
+ { KC_NO, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K58, K59, KC_NO, K5B, K5C, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, K7B, KC_NO, KC_NO, KC_NO, K7F } \
+}
+
+#endif
diff --git a/keyboards/converter/adb_usb/config.h b/keyboards/converter/adb_usb/config.h
new file mode 100644
index 000000000..a5845a029
--- /dev/null
+++ b/keyboards/converter/adb_usb/config.h
@@ -0,0 +1,43 @@
+/*
+Copyright 2011 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/>.
+
+Ported to QMK by Peter Roe <pete@13bit.me>
+*/
+
+#pragma once
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0ADB
+#define DEVICE_VER 0x0101
+#define MANUFACTURER QMK
+#define PRODUCT ADB keyboard converter
+#define DESCRIPTION Convert ADB keyboard to USB
+
+/* matrix size */
+#define MATRIX_ROWS 16 // keycode bit: 3-0
+#define MATRIX_COLS 8 // keycode bit: 6-4
+
+/* 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
+
+/* ADB port setting */
+#define ADB_PORT PORTD
+#define ADB_PIN PIND
+#define ADB_DDR DDRD
+#define ADB_DATA_BIT 0
+//#define ADB_PSW_BIT 1 // optional
diff --git a/keyboards/converter/adb_usb/info.json b/keyboards/converter/adb_usb/info.json
new file mode 100644
index 000000000..e06f9c1ad
--- /dev/null
+++ b/keyboards/converter/adb_usb/info.json
@@ -0,0 +1,204 @@
+{
+ "keyboard_name": "ADB to USB Keyboard Converter",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 22.5,
+ "height": 7,
+ "layouts": {
+ "LAYOUT_ext_ansi": {
+ "layout": [
+ {"label":"Escape", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"Eject", "x":21.5, "y":0},
+ {"label":"`", "x":0, "y":2},
+ {"label":"1", "x":1, "y":2},
+ {"label":"2", "x":2, "y":2},
+ {"label":"3", "x":3, "y":2},
+ {"label":"4", "x":4, "y":2},
+ {"label":"5", "x":5, "y":2},
+ {"label":"6", "x":6, "y":2},
+ {"label":"7", "x":7, "y":2},
+ {"label":"8", "x":8, "y":2},
+ {"label":"9", "x":9, "y":2},
+ {"label":"0", "x":10, "y":2},
+ {"label":"-", "x":11, "y":2},
+ {"label":"=", "x":12, "y":2},
+ {"label":"Backspace", "x":13, "y":2, "w":2},
+ {"label":"Insert", "x":15.25, "y":2},
+ {"label":"Home", "x":16.25, "y":2},
+ {"label":"Page Up", "x":17.25, "y":2},
+ {"label":"Num Lock", "x":18.5, "y":2},
+ {"label":"Num =", "x":19.5, "y":2},
+ {"label":"Num /", "x":20.5, "y":2},
+ {"label":"Num *", "x":21.5, "y":2},
+ {"label":"Tab", "x":0, "y":3, "w":1.5},
+ {"label":"Q", "x":1.5, "y":3},
+ {"label":"W", "x":2.5, "y":3},
+ {"label":"E", "x":3.5, "y":3},
+ {"label":"R", "x":4.5, "y":3},
+ {"label":"T", "x":5.5, "y":3},
+ {"label":"Y", "x":6.5, "y":3},
+ {"label":"U", "x":7.5, "y":3},
+ {"label":"I", "x":8.5, "y":3},
+ {"label":"O", "x":9.5, "y":3},
+ {"label":"P", "x":10.5, "y":3},
+ {"label":"[", "x":11.5, "y":3},
+ {"label":"]", "x":12.5, "y":3},
+ {"label":"\\", "x":13.5, "y":3, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":3},
+ {"label":"End", "x":16.25, "y":3},
+ {"label":"Page Down", "x":17.25, "y":3},
+ {"label":"Num 7", "x":18.5, "y":3},
+ {"label":"Num 8", "x":19.5, "y":3},
+ {"label":"Num 9", "x":20.5, "y":3},
+ {"label":"Num -", "x":21.5, "y":3},
+ {"label":"Lcap", "x":0, "y":4, "w":1.75},
+ {"label":"A", "x":1.75, "y":4},
+ {"label":"S", "x":2.75, "y":4},
+ {"label":"D", "x":3.75, "y":4},
+ {"label":"F", "x":4.75, "y":4},
+ {"label":"G", "x":5.75, "y":4},
+ {"label":"H", "x":6.75, "y":4},
+ {"label":"J", "x":7.75, "y":4},
+ {"label":"K", "x":8.75, "y":4},
+ {"label":"L", "x":9.75, "y":4},
+ {"label":";", "x":10.75, "y":4},
+ {"label":"\"", "x":11.75, "y":4},
+ {"label":"Enter", "x":12.75, "y":4, "w":2.25},
+ {"label":"Num 4", "x":18.5, "y":4},
+ {"label":"Num 5", "x":19.5, "y":4},
+ {"label":"Num 6", "x":20.5, "y":4},
+ {"label":"Num +", "x":21.5, "y":4},
+ {"label":"Shift", "x":0, "y":5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":5},
+ {"label":"X", "x":3.25, "y":5},
+ {"label":"C", "x":4.25, "y":5},
+ {"label":"V", "x":5.25, "y":5},
+ {"label":"B", "x":6.25, "y":5},
+ {"label":"N", "x":7.25, "y":5},
+ {"label":"M", "x":8.25, "y":5},
+ {"label":",", "x":9.25, "y":5},
+ {"label":".", "x":10.25, "y":5},
+ {"label":"/", "x":11.25, "y":5},
+ {"label":"Shift", "x":12.25, "y":5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":5},
+ {"label":"Num 1", "x":18.5, "y":5},
+ {"label":"Num 2", "x":19.5, "y":5},
+ {"label":"Num 3", "x":20.5, "y":5},
+ {"label":"Ctrl", "x":0, "y":6, "w":1.5},
+ {"label":"Alt", "x":1.5, "y":6, "w":1.25},
+ {"label":"Command", "x":2.75, "y":6, "w":1.5},
+ {"label":"Space", "x":4.25, "y":6, "w":6.5},
+ {"label":"Alt", "x":12.25, "y":6, "w":1.25},
+ {"label":"Ctrl", "x":13.5, "y":6, "w":1.5},
+ {"label":"Left", "x":15.25, "y":6},
+ {"label":"Down", "x":16.25, "y":6},
+ {"label":"Right", "x":17.25, "y":6},
+ {"label":"Num 0", "x":18.5, "y":6, "w":2},
+ {"label":"Num .", "x":20.5, "y":6},
+ {"label":"Num Enter", "x":21.5, "y":5, "h":2}
+ ]
+ },
+ "LAYOUT_m0116_ansi": {
+ "width": 19.5,
+ "height": 6.25,
+ "layout": [
+ {"label":"Power", "x":5, "y":0, "w":2},
+ {"label":"Esc", "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":7, "y":1.25},
+ {"label":"8", "x":8, "y":1.25},
+ {"label":"9", "x":9, "y":1.25},
+ {"label":"0", "x":10, "y":1.25},
+ {"label":"-", "x":11, "y":1.25},
+ {"label":"=", "x":12, "y":1.25},
+ {"label":"Delete", "x":13, "y":1.25, "w":1.5},
+ {"label":"Clear", "x":15.5, "y":1.25},
+ {"label":"Num =", "x":16.5, "y":1.25},
+ {"label":"Num /", "x":17.5, "y":1.25},
+ {"label":"Num *", "x":18.5, "y":1.25},
+ {"label":"Tab", "x":0, "y":2.25, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.25},
+ {"label":"W", "x":2.5, "y":2.25},
+ {"label":"E", "x":3.5, "y":2.25},
+ {"label":"R", "x":4.5, "y":2.25},
+ {"label":"T", "x":5.5, "y":2.25},
+ {"label":"Y", "x":6.5, "y":2.25},
+ {"label":"U", "x":7.5, "y":2.25},
+ {"label":"I", "x":8.5, "y":2.25},
+ {"label":"O", "x":9.5, "y":2.25},
+ {"label":"P", "x":10.5, "y":2.25},
+ {"label":"[", "x":11.5, "y":2.25},
+ {"label":"]", "x":12.5, "y":2.25},
+ {"label":"Num 7", "x":15.5, "y":2.25},
+ {"label":"Num 8", "x":16.5, "y":2.25},
+ {"label":"Num 9", "x":17.5, "y":2.25},
+ {"label":"Num +", "x":18.5, "y":2.25},
+ {"label":"Ctrl", "x":0, "y":3.25, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.25},
+ {"label":"S", "x":2.75, "y":3.25},
+ {"label":"D", "x":3.75, "y":3.25},
+ {"label":"F", "x":4.75, "y":3.25},
+ {"label":"G", "x":5.75, "y":3.25},
+ {"label":"H", "x":6.75, "y":3.25},
+ {"label":"J", "x":7.75, "y":3.25},
+ {"label":"K", "x":8.75, "y":3.25},
+ {"label":"L", "x":9.75, "y":3.25},
+ {"label":";", "x":10.75, "y":3.25},
+ {"label":"'", "x":11.75, "y":3.25},
+ {"label":"Return", "x":12.75, "y":3.25, "w":1.75},
+ {"label":"Num 4", "x":15.5, "y":3.25},
+ {"label":"Num 5", "x":16.5, "y":3.25},
+ {"label":"Num 6", "x":17.5, "y":3.25},
+ {"label":"Num -", "x":18.5, "y":3.25},
+ {"label":"Shift", "x":0, "y":4.25, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.25},
+ {"label":"X", "x":3.25, "y":4.25},
+ {"label":"C", "x":4.25, "y":4.25},
+ {"label":"V", "x":5.25, "y":4.25},
+ {"label":"B", "x":6.25, "y":4.25},
+ {"label":"N", "x":7.25, "y":4.25},
+ {"label":"M", "x":8.25, "y":4.25},
+ {"label":",", "x":9.25, "y":4.25},
+ {"label":".", "x":10.25, "y":4.25},
+ {"label":"/", "x":11.25, "y":4.25},
+ {"label":"Shift", "x":12.25, "y":4.25, "w":2.25},
+ {"label":"Num 1", "x":15.5, "y":4.25},
+ {"label":"Num 2", "x":16.5, "y":4.25},
+ {"label":"Num 3", "x":17.5, "y":4.25},
+ {"label":"Caps Lock", "x":0, "y":5.25},
+ {"label":"Option", "x":1, "y":5.25},
+ {"label":"Command", "x":2, "y":5.25, "w":1.75},
+ {"label":"`", "x":3.75, "y":5.25},
+ {"label":"Space", "x":4.75, "y":5.25, "w":4.75},
+ {"label":"\\", "x":9.5, "y":5.25},
+ {"label":"Left", "x":10.5, "y":5.25},
+ {"label":"Right", "x":11.5, "y":5.25},
+ {"label":"Down", "x":12.5, "y":5.25},
+ {"label":"Up", "x":13.5, "y":5.25},
+ {"label":"Num 0", "x":15.5, "y":5.25, "w":2},
+ {"label":"Num .", "x":17.5, "y":5.25},
+ {"label":"Num Enter", "x":18.5, "y":4.25, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/adb_usb/keymaps/13bit/keymap.c b/keyboards/converter/adb_usb/keymaps/13bit/keymap.c
new file mode 100644
index 000000000..3b36a20c2
--- /dev/null
+++ b/keyboards/converter/adb_usb/keymaps/13bit/keymap.c
@@ -0,0 +1,26 @@
+#include QMK_KEYBOARD_H
+
+#define MCTL LCTL(KC_UP)
+#define SCST LSFT(LGUI(KC_4))
+#define SLP LALT(LGUI(KC_EJCT))
+
+#define APP1 LSFT(LALT(LCTL(LGUI(KC_1))))
+#define APP2 LSFT(LALT(LCTL(LGUI(KC_2))))
+#define APP3 LSFT(LALT(LCTL(LGUI(KC_3))))
+#define APP4 LSFT(LALT(LCTL(LGUI(KC_4))))
+#define APP5 LSFT(LALT(LCTL(LGUI(KC_5))))
+#define APP6 LSFT(LALT(LCTL(LGUI(KC_6))))
+#define APP7 LSFT(LALT(LCTL(LGUI(KC_7))))
+#define APP8 LSFT(LALT(LCTL(LGUI(KC_8))))
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT_ext_ansi(
+ KC_ESC, APP1, APP2, APP3, APP4, APP5, APP6, APP7, APP8, MCTL, KC_MUTE, KC_VOLD, KC_VOLU, SCST, KC_SLCK, KC_PAUS, SLP,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_EQL, KC_PSLS, KC_PAST,
+ KC_TAB, KC_Q, KC_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_PMNS,
+ KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ ),
+};
diff --git a/keyboards/converter/adb_usb/keymaps/default/keymap.c b/keyboards/converter/adb_usb/keymaps/default/keymap.c
new file mode 100644
index 000000000..6b63c1a3c
--- /dev/null
+++ b/keyboards/converter/adb_usb/keymaps/default/keymap.c
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT_ext_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, KC_EJCT,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_EQL, KC_PSLS, KC_PAST,
+ KC_TAB, KC_Q, KC_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_PMNS,
+ KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT
+ ),
+};
diff --git a/keyboards/converter/adb_usb/led.c b/keyboards/converter/adb_usb/led.c
new file mode 100644
index 000000000..ea9bf77b5
--- /dev/null
+++ b/keyboards/converter/adb_usb/led.c
@@ -0,0 +1,27 @@
+/*
+Copyright 2011 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <stdint.h>
+#include <util/delay.h>
+#include "adb.h"
+#include "led.h"
+
+
+void led_set(uint8_t usb_led)
+{
+ adb_host_kbd_led(ADB_ADDR_KEYBOARD, ~usb_led);
+}
diff --git a/keyboards/converter/adb_usb/led.h b/keyboards/converter/adb_usb/led.h
new file mode 100644
index 000000000..19952fae2
--- /dev/null
+++ b/keyboards/converter/adb_usb/led.h
@@ -0,0 +1,43 @@
+/*
+Copyright 2011 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/>.
+
+Ported to QMK by Peter Roe <pete@13bit.me>
+*/
+
+#ifndef LED_H
+#define LED_H
+#include "stdint.h"
+
+
+/* keyboard LEDs */
+#define USB_LED_NUM_LOCK 0
+#define USB_LED_CAPS_LOCK 1
+#define USB_LED_SCROLL_LOCK 2
+#define USB_LED_COMPOSE 3
+#define USB_LED_KANA 4
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void led_set(uint8_t usb_led);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/keyboards/converter/adb_usb/matrix.c b/keyboards/converter/adb_usb/matrix.c
new file mode 100644
index 000000000..8ee48bf23
--- /dev/null
+++ b/keyboards/converter/adb_usb/matrix.c
@@ -0,0 +1,267 @@
+/*
+Copyright 2011 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/>.
+
+Ported to QMK by Peter Roe <pete@13bit.me>
+*/
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "print.h"
+#include "util.h"
+#include "debug.h"
+#include "adb.h"
+#include "matrix.h"
+#include "report.h"
+#include "host.h"
+#include "led.h"
+#include "timer.h"
+
+static bool is_iso_layout = false;
+
+// matrix state buffer(1:on, 0:off)
+static matrix_row_t matrix[MATRIX_ROWS];
+
+static void register_key(uint8_t key);
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void matrix_init(void)
+{
+ // LED on
+ DDRD |= (1<<6); PORTD |= (1<<6);
+
+ adb_host_init();
+ // wait for keyboard to boot up and receive command
+ _delay_ms(2000);
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+
+ led_set(host_keyboard_leds());
+
+ // debug_enable = false;
+ // debug_matrix = true;
+ // debug_keyboard = true;
+ // debug_mouse = true;
+ // print("debug enabled.\n");
+
+ // LED off
+ DDRD |= (1<<6); PORTD &= ~(1<<6);
+ matrix_init_quantum();
+}
+
+#ifdef ADB_MOUSE_ENABLE
+
+#ifdef MAX
+#undef MAX
+#endif
+#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
+
+static report_mouse_t mouse_report = {};
+
+void adb_mouse_task(void)
+{
+ uint16_t codes;
+ int16_t x, y;
+ static int8_t mouseacc;
+
+ /* tick of last polling */
+ static uint16_t tick_ms;
+
+ // polling with 12ms interval
+ if (timer_elapsed(tick_ms) < 12) return;
+ tick_ms = timer_read();
+
+ codes = adb_host_mouse_recv();
+ // If nothing received reset mouse acceleration, and quit.
+ if (!codes) {
+ mouseacc = 1;
+ return;
+ };
+ // Bit sixteen is button.
+ if (~codes & (1 << 15))
+ mouse_report.buttons |= MOUSE_BTN1;
+ if (codes & (1 << 15))
+ mouse_report.buttons &= ~MOUSE_BTN1;
+ // lower seven bits are movement, as signed int_7.
+ // low byte is X-axis, high byte is Y.
+ y = (codes>>8 & 0x3F);
+ x = (codes>>0 & 0x3F);
+ // bit seven and fifteen is negative
+ // usb does not use int_8, but int_7 (measuring distance) with sign-bit.
+ if (codes & (1 << 6))
+ x = (x-0x40);
+ if (codes & (1 << 14))
+ y = (y-0x40);
+ // Accelerate mouse. (They weren't meant to be used on screens larger than 320x200).
+ x *= mouseacc;
+ y *= mouseacc;
+ // Cap our two bytes per axis to one byte.
+ // Easier with a MIN-function, but since -MAX(-a,-b) = MIN(a,b)...
+ // I.E. MIN(MAX(x,-127),127) = -MAX(-MAX(x, -127), -127) = MIN(-MIN(-x,127),127)
+ mouse_report.x = -MAX(-MAX(x, -127), -127);
+ mouse_report.y = -MAX(-MAX(y, -127), -127);
+ if (debug_mouse) {
+ print("adb_host_mouse_recv: "); print_bin16(codes); print("\n");
+ print("adb_mouse raw: [");
+ phex(mouseacc); print(" ");
+ phex(mouse_report.buttons); print("|");
+ print_decs(mouse_report.x); print(" ");
+ print_decs(mouse_report.y); print("]\n");
+ }
+ // Send result by usb.
+ host_mouse_send(&mouse_report);
+ // increase acceleration of mouse
+ mouseacc += ( mouseacc < ADB_MOUSE_MAXACC ? 1 : 0 );
+ return;
+}
+#endif
+
+uint8_t matrix_scan(void)
+{
+ /* extra_key is volatile and more convoluted than necessary because gcc refused
+ to generate valid code otherwise. Making extra_key uint8_t and constructing codes
+ here via codes = extra_key<<8 | 0xFF; would consistently fail to even LOAD
+ extra_key from memory, and leave garbage in the high byte of codes. I tried
+ dozens of code variations and it kept generating broken assembly output. So
+ beware if attempting to make extra_key code more logical and efficient. */
+ static volatile uint16_t extra_key = 0xFFFF;
+ uint16_t codes;
+ uint8_t key0, key1;
+
+ /* tick of last polling */
+ static uint16_t tick_ms;
+
+ codes = extra_key;
+ extra_key = 0xFFFF;
+
+ if ( codes == 0xFFFF )
+ {
+ // polling with 12ms interval
+ if (timer_elapsed(tick_ms) < 12) return 0;
+ tick_ms = timer_read();
+
+ codes = adb_host_kbd_recv();
+ }
+
+ key0 = codes>>8;
+ key1 = codes&0xFF;
+
+ if (debug_matrix && codes) {
+ print("adb_host_kbd_recv: "); phex16(codes); print("\n");
+ }
+
+ if (codes == 0) { // no keys
+ return 0;
+ } else if (codes == 0x7F7F) { // power key press
+ register_key(0x7F);
+ } else if (codes == 0xFFFF) { // power key release
+ register_key(0xFF);
+ } else if (key0 == 0xFF) { // error
+ xprintf("adb_host_kbd_recv: ERROR(%d)\n", codes);
+ // something wrong or plug-in
+ matrix_init();
+ return key1;
+ } else {
+ /* Swap codes for ISO keyboard
+ * https://github.com/tmk/tmk_keyboard/issues/35
+ *
+ * ANSI
+ * ,----------- ----------.
+ * | *a| 1| 2 =|Backspa|
+ * |----------- ----------|
+ * |Tab | Q| | ]| *c|
+ * |----------- ----------|
+ * |CapsLo| A| '|Return |
+ * |----------- ----------|
+ * |Shift | Shift |
+ * `----------- ----------'
+ *
+ * ISO
+ * ,----------- ----------.
+ * | *a| 1| 2 =|Backspa|
+ * |----------- ----------|
+ * |Tab | Q| | ]|Retur|
+ * |----------- -----` |
+ * |CapsLo| A| '| *c| |
+ * |----------- ----------|
+ * |Shif| *b| Shift |
+ * `----------- ----------'
+ *
+ * ADB scan code USB usage
+ * ------------- ---------
+ * Key ANSI ISO ANSI ISO
+ * ---------------------------------------------
+ * *a 0x32 0x0A 0x35 0x35
+ * *b ---- 0x32 ---- 0x64
+ * *c 0x2A 0x2A 0x31 0x31(or 0x32)
+ */
+ if (is_iso_layout) {
+ if ((key0 & 0x7F) == 0x32) {
+ key0 = (key0 & 0x80) | 0x0A;
+ } else if ((key0 & 0x7F) == 0x0A) {
+ key0 = (key0 & 0x80) | 0x32;
+ }
+ }
+ register_key(key0);
+ if (key1 != 0xFF) // key1 is 0xFF when no second key.
+ extra_key = key1<<8 | 0xFF; // process in a separate call
+ }
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+void matrix_print(void){
+
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+inline
+static void register_key(uint8_t key)
+{
+ uint8_t col, row;
+ col = key&0x07;
+ row = (key>>3)&0x0F;
+ if (key&0x80) {
+ matrix[row] &= ~(1<<col);
+ } else {
+ matrix[row] |= (1<<col);
+ }
+}
diff --git a/keyboards/converter/adb_usb/rules.mk b/keyboards/converter/adb_usb/rules.mk
new file mode 100644
index 000000000..3a9b6dedc
--- /dev/null
+++ b/keyboards/converter/adb_usb/rules.mk
@@ -0,0 +1,73 @@
+# MCU name
+# atmega32u4 Teensy2.0
+# atemga32u4 TMK Converter rev.1
+# atemga32u2 TMK Converter rev.2
+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
+# F_CPU = 8000000
+
+#
+# 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
+# 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
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096 for TMK Converter rev.1/rev.2
+# LUFA bootloader 4096
+# USBaspLoader 2048
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+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 = no # USB Nkey Rollover - not yet supported in LUFA
+EXTRAKEY_ENABLE = yes
+USB_HID_ENABLE = yes
+BACKLIGHT_ENABLE = no
+#BLUETOOTH = AdafruitBLE # For Adafruit Feather 32U4 BLE support, uncomment this line
+
+CUSTOM_MATRIX = yes
+SRC = matrix.c \
+ adb.c
diff --git a/keyboards/converter/hp_46010a/config.h b/keyboards/converter/hp_46010a/config.h
new file mode 100644
index 000000000..f77ed4115
--- /dev/null
+++ b/keyboards/converter/hp_46010a/config.h
@@ -0,0 +1,35 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 1
+#define MANUFACTURER QMK
+#define PRODUCT 46010A keyboard converter
+#define DESCRIPTION 46010A keyboard converter
+
+#define MATRIX_ROWS 14
+#define MATRIX_COLS 8
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+
diff --git a/keyboards/converter/hp_46010a/hp_46010a.c b/keyboards/converter/hp_46010a/hp_46010a.c
new file mode 100644
index 000000000..915a220f9
--- /dev/null
+++ b/keyboards/converter/hp_46010a/hp_46010a.c
@@ -0,0 +1,3 @@
+#include "hp_46010a.h"
+#include <avr/io.h>
+#include "quantum.h" \ No newline at end of file
diff --git a/keyboards/converter/hp_46010a/hp_46010a.h b/keyboards/converter/hp_46010a/hp_46010a.h
new file mode 100644
index 000000000..fd5adfc63
--- /dev/null
+++ b/keyboards/converter/hp_46010a/hp_46010a.h
@@ -0,0 +1,60 @@
+/*
+Copyright 2018 listofoptions <listofoptions@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+/* ,---------. ,---------------------------------------------------------. ,---------. ,-------------------.
+ * | res|stop| | f1| f2| f3| f4|menu|user| f5| f6| f7| f8| |clrl|clrd| | | | | |
+ * `---------' `---------------------------------------------------------' `---------' `-------------------'
+ * ,------------------------------------------------------------------------..---------. ,-------------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| +| back||insl|dell| | *| /| +| -|
+ * |------------------------------------------------------------------------||---------| |-------------------|
+ * | tab| q| w| e| r| t| y| u| i| o| p| [| ]| \||insc|delc| | 7| 8| 9|pade|
+ * |------------------------------------------------------------------------||---------| |-------------------|
+ * |caps|ctrl| a| s| d| f| g| h| j| k| l| ;| '| retr|| cur|prev| | 4| 5| 6| ,|
+ * |------------------------------------------------------------------------------------ |-------------------|
+ * |dele|lshf | z| x| c| v| b| n| m| ,| .| /|rshf |sel | up|next| | 1| 2| 3| tab|
+ * |-------------------------------------------------------------------------|---------| |--------------- |
+ * |prnt| |lalt| space |ralt| |left|down|rght| | 0| .| |
+ * `-----------------------------------------------------------------------------------' `-------------------'
+ */
+
+#define LAYOUT( \
+ KEY_RES, KEY_STOP, KEY_F1, KEY_F2, KEY_F3, KEY_F4,KEY_MENU,KEY_USER, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_CLRL, KEY_CLRD, KEY_B1, KEY_B2, KEY_B3, KEY_B4, \
+ KEY_GRAV, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, KEY_MINU, KEY_PLUS, KEY_BACK, KEY_INSL, KEY_DELL, KEY_MULT, KEY_DIV, KEY_ADD, KEY_SUBT, \
+ KEY_TAB, KEY_Q,KEY_W, KEY_E, KEY_R, KEY_T, KEY_Y, KEY_U, KEY_I, KEY_O, KEY_P, KEY_LBRA, KEY_RBRA, KEY_PIPE, KEY_INSC, KEY_DELC, KEY_P7, KEY_P8, KEY_P9, KEY_PADE, \
+ KEY_CAPS, KEY_CTRL, KEY_A, KEY_S, KEY_D, KEY_F, KEY_G, KEY_H, KEY_J, KEY_K, KEY_L, KEY_SEMI, KEY_QUOT, KEY_RETR, KEY_CUR, KEY_PREV, KEY_P4, KEY_P5, KEY_P6, KEY_PCOM, \
+ KEY_DELE, KEY_LSHF, KEY_Z, KEY_X, KEY_C, KEY_V, KEY_B, KEY_N, KEY_M, KEY_COMA, KEY_DOT, KEY_SLAS,KEY_RSHF, KEY_SEL, KEY_UP, KEY_NEXT, KEY_P1, KEY_P2, KEY_P3, KEY_PTAB, \
+ KEY_PRNT, KEY_LALT, KEY_SPACE , KEY_RALT, KEY_LEFT, KEY_DOWN, KEY_RGHT, KEY_P0, KEY_PDOT \
+) { \
+ {KEY_USER, KEY_F5, KEY_F6, KEY_F7, KEY_F8, KEY_CLRL, KEY_CLRD, KEY_MENU }, \
+ {KEY_9, KEY_0, KEY_MINU, KEY_PLUS, KEY_BACK, KEY_INSL, KEY_DELL, KEY_8 }, \
+ {KEY_O, KEY_P, KEY_LBRA, KEY_RBRA, KEY_PIPE, KEY_INSC, KEY_DELC, KEY_I }, \
+ {KEY_K, KEY_L, KEY_SEMI, KEY_QUOT, KEY_RETR, KEY_CUR, KEY_PREV, KEY_J }, \
+ {KEY_COMA, KEY_DOT, KEY_SLAS, KEY_1, KEY_SEL, KEY_UP, KEY_NEXT, KEY_M }, \
+ {KEY_SPACE, KEY_LALT, KEY_RALT, KC_NO, KEY_LEFT, KEY_DOWN, KEY_RGHT, KC_NO }, \
+ {KEY_F3, KEY_F2, KEY_F1, KEY_GRAV, KEY_CTRL, KEY_STOP, KEY_G, KEY_F4 }, \
+ {KEY_6, KEY_5, KEY_4, KEY_3, KEY_CAPS, KEY_RSHF, KEY_LSHF, KEY_7 }, \
+ {KEY_Y, KEY_T, KEY_R, KEY_E, KEY_W, KEY_Q, KEY_TAB, KEY_U }, \
+ {KEY_RES, KEY_F, KEY_D, KEY_S, KEY_A, KC_NO, KEY_2, KEY_H }, \
+ {KEY_P7, KEY_P4, KEY_P8, KEY_P5, KEY_P9, KEY_P6, KEY_PADE, KEY_PCOM }, \
+ {KEY_MULT, KEY_P1, KEY_DIV, KEY_P2, KEY_PLUS, KEY_P3, KEY_MINU, KEY_PTAB }, \
+ {KEY_B1, KEY_P0, KEY_B2, KC_NO, KEY_B3, KEY_PDOT, KEY_B4, KC_NO }, \
+ {KEY_B, KEY_V, KEY_C, KEY_X, KEY_Z, KEY_PRNT, KEY_DELE, KEY_N }, \
+}
diff --git a/keyboards/converter/hp_46010a/info.json b/keyboards/converter/hp_46010a/info.json
new file mode 100644
index 000000000..91dcf97ec
--- /dev/null
+++ b/keyboards/converter/hp_46010a/info.json
@@ -0,0 +1,121 @@
+{
+ "keyboard_name": "HP_46010A",
+ "keyboard_folder": "converter/HP_46010A",
+ "url": "https://deskthority.net/wiki/HP_46010A",
+ "maintainer": "listofoptions",
+ "width": 22,
+ "height": 7,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Reset", "x":0, "y":0},
+ {"label":"Stop", "x":1, "y":0},
+ {"label":"F1", "x":2.5, "y":0, "w":1.25},
+ {"label":"F2", "x":3.75, "y":0, "w":1.25},
+ {"label":"F3", "x":5, "y":0, "w":1.25},
+ {"label":"F4", "x":6.25, "y":0, "w":1.25},
+ {"label":"Menu", "x":7.5, "y":0},
+ {"label":"User", "x":8.5, "y":0},
+ {"label":"F5", "x":9.5, "y":0, "w":1.25},
+ {"label":"F6", "x":10.75, "y":0, "w":1.25},
+ {"label":"F7", "x":12, "y":0, "w":1.25},
+ {"label":"F8", "x":13.25, "y":0, "w":1.25},
+ {"label":"Clear line", "x":15, "y":0},
+ {"label":"Clear display", "x":16, "y":0},
+ {"x":18, "y":0},
+ {"x":19, "y":0},
+ {"x":20, "y":0},
+ {"x":21, "y":0},
+ {"label":"`", "x":0, "y":2, "w":1.25},
+ {"label":"1", "x":1.25, "y":2},
+ {"label":"2", "x":2.25, "y":2},
+ {"label":"3", "x":3.25, "y":2},
+ {"label":"4", "x":4.25, "y":2},
+ {"label":"5", "x":5.25, "y":2},
+ {"label":"6", "x":6.25, "y":2},
+ {"label":"7", "x":7.25, "y":2},
+ {"label":"8", "x":8.25, "y":2},
+ {"label":"9", "x":9.25, "y":2},
+ {"label":"0", "x":10.25, "y":2},
+ {"label":"-", "x":11.25, "y":2},
+ {"label":"=", "x":12.25, "y":2},
+ {"label":"Backspace", "x":13.25, "y":2, "w":1.5},
+ {"label":"Insert line", "x":15, "y":2},
+ {"label":"Delete line", "x":16, "y":2},
+ {"label":"*", "x":18, "y":2},
+ {"label":"/", "x":19, "y":2},
+ {"label":"+", "x":20, "y":2},
+ {"label":"-", "x":21, "y":2},
+ {"label":"Tab", "x":0, "y":3, "w":1.75},
+ {"label":"Q", "x":1.75, "y":3},
+ {"label":"W", "x":2.75, "y":3},
+ {"label":"E", "x":3.75, "y":3},
+ {"label":"R", "x":4.75, "y":3},
+ {"label":"T", "x":5.75, "y":3},
+ {"label":"Y", "x":6.75, "y":3},
+ {"label":"U", "x":7.75, "y":3},
+ {"label":"I", "x":8.75, "y":3},
+ {"label":"O", "x":9.75, "y":3},
+ {"label":"P", "x":10.75, "y":3},
+ {"label":"[", "x":11.75, "y":3},
+ {"label":"]", "x":12.75, "y":3},
+ {"label":"\\", "x":13.75, "y":3},
+ {"label":"Insert char", "x":15, "y":3},
+ {"label":"Delete char", "x":16, "y":3},
+ {"label":"7", "x":18, "y":3},
+ {"label":"8", "x":19, "y":3},
+ {"label":"9", "x":20, "y":3},
+ {"label":"Enter", "x":21, "y":3},
+ {"label":"Caps Lock", "x":0, "y":4},
+ {"label":"Ctrl", "x":1, "y":4},
+ {"label":"A", "x":2, "y":4},
+ {"label":"S", "x":3, "y":4},
+ {"label":"D", "x":4, "y":4},
+ {"label":"F", "x":5, "y":4},
+ {"label":"G", "x":6, "y":4},
+ {"label":"H", "x":7, "y":4},
+ {"label":"J", "x":8, "y":4},
+ {"label":"K", "x":9, "y":4},
+ {"label":"L", "x":10, "y":4},
+ {"label":";", "x":11, "y":4},
+ {"label":"'", "x":12, "y":4},
+ {"label":"Return", "x":13, "y":4, "w":1.75},
+ {"label":"Cursor", "x":15, "y":4},
+ {"label":"Prev", "x":16, "y":4},
+ {"label":"4", "x":18, "y":4},
+ {"label":"5", "x":19, "y":4},
+ {"label":"6", "x":20, "y":4},
+ {"label":",", "x":21, "y":4},
+ {"label":"Del", "x":0, "y":5},
+ {"label":"Shift", "x":1.25, "y":5, "w":1.25},
+ {"label":"Z", "x":2.5, "y":5},
+ {"label":"X", "x":3.5, "y":5},
+ {"label":"C", "x":4.5, "y":5},
+ {"label":"V", "x":5.5, "y":5},
+ {"label":"B", "x":6.5, "y":5},
+ {"label":"N", "x":7.5, "y":5},
+ {"label":"M", "x":8.5, "y":5},
+ {"label":",", "x":9.5, "y":5},
+ {"label":".", "x":10.5, "y":5},
+ {"label":"/", "x":11.5, "y":5},
+ {"label":"Shift", "x":12.5, "y":5, "w":1.25},
+ {"label":"Select", "x":14, "y":5},
+ {"label":"Up", "x":15, "y":5},
+ {"label":"Next", "x":16, "y":5},
+ {"label":"1", "x":18, "y":5},
+ {"label":"2", "x":19, "y":5},
+ {"label":"3", "x":20, "y":5},
+ {"label":"Tab", "x":21, "y":5, "h":2},
+ {"label":"Win", "x":0, "y":6},
+ {"label":"Extend Char", "x":2.5, "y":6},
+ {"x":3.5, "y":6, "w":8},
+ {"label":"Extend Char", "x":11.5, "y":6},
+ {"label":"Left", "x":14, "y":6},
+ {"label":"Down", "x":15, "y":6},
+ {"label":"Right", "x":16, "y":6},
+ {"label":"0", "x":18, "y":6, "w":2},
+ {"label":".", "x":20, "y":6}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/hp_46010a/keymaps/default/keymap.c b/keyboards/converter/hp_46010a/keymaps/default/keymap.c
new file mode 100644
index 000000000..cb65bd422
--- /dev/null
+++ b/keyboards/converter/hp_46010a/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2018 listofoptions <listofoptions@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* ,---------. ,---------------------------------------------------------. ,---------. ,-------------------.
+ * | esc|xxxx| | f1| f2| f3| f4|xxxx|xxxx| f5| f6| f7| f8| |xxxx|xxxx| | f9| f10| f11| f12|
+ * `---------' `---------------------------------------------------------' `---------' `-------------------'
+ * ,------------------------------------------------------------------------..---------. ,-------------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| back||ins |home| | *| /| +| -|
+ * |------------------------------------------------------------------------||---------| |-------------------|
+ * | tab| q| w| e| r| t| y| u| i| o| p| [| ]| \||del | end| | 7| 8| 9|pade|
+ * |------------------------------------------------------------------------||---------| |-------------------|
+ * |caps|ctrl| a| s| d| f| g| h| j| k| l| ;| '| retr||xxxx|pgup| | 4| 5| 6| ,|
+ * |------------------------------------------------------------------------------------ |-------------------|
+ * |del |lsft | z| x| c| v| b| n| m| ,| .| /|rsft | app| up|pgdn| | 1| 2| 3| tab|
+ * |-------------------------------------------------------------------------|---------| |--------------- |
+ * | gui| |lalt| space |ralt| |left|down|rght| | 0| .| |
+ * `-----------------------------------------------------------------------------------' `-------------------'
+ */
+
+ [0] = LAYOUT(
+ KC_ESC, KC_NO, KC_F1, KC_F2, KC_F3, KC_F4,KC_NO, KC_NO, KC_F5, KC_F6, KC_F7, KC_F8, KC_NO, KC_NO, KC_F9, KC_F10, KC_F11, KC_F12, \
+ 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_EQUAL, KC_BSPC, KC_INS, KC_HOME, KC_PAST, KC_PSLS, KC_PPLS, 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_P7, KC_P8, KC_P9, KC_PENT, \
+ KC_CAPS, 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_NO, KC_PGUP, KC_P4, KC_P5, KC_P6, KC_PCMM, \
+ KC_DEL, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,KC_RSFT, KC_APP, KC_UP, KC_PGDN, KC_P1, KC_P2, KC_P3, KC_TAB, \
+ KC_LGUI, KC_LALT, KC_SPACE , KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
+ )
+} ; \ No newline at end of file
diff --git a/keyboards/converter/hp_46010a/matrix.c b/keyboards/converter/hp_46010a/matrix.c
new file mode 100644
index 000000000..2ca7d0357
--- /dev/null
+++ b/keyboards/converter/hp_46010a/matrix.c
@@ -0,0 +1,244 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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 <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#if defined(__AVR__)
+#include <avr/io.h>
+#endif
+#include <util/delay.h>
+
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.h"
+#include "LUFA/Drivers/Peripheral/SPI.h"
+
+#include "config.h"
+
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+
+#if ( DEBOUNCING_DELAY > 0 )
+static uint16_t debouncing_time ;
+static bool debouncing = false ;
+#endif
+
+static uint8_t matrix [MATRIX_ROWS] = {0};
+
+#if ( DEBOUNCING_DELAY > 0 )
+static uint8_t matrix_debounce_old [MATRIX_ROWS] = {0};
+static uint8_t matrix_debounce_new [MATRIX_ROWS] = {0};
+#endif
+
+__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) {
+}
+
+// the keyboard's internal wiring is such that the inputs to the logic are
+// a clock signal, and a reset line.
+// the output is a single output pin. im bitbanging here, but the SPI controller
+// would work normally
+//
+// the device functions, by using the clock signal to count 128 bits, the lower
+// 3 bits of this 7 bit counter are tied to a 1-of-8 multiplexer, this forms
+// the columns.
+// the upper 4 bits form the rows, and are decoded using bcd to decimal
+// decoders, so that 14 out of 16 of the outputs are wired to the rows of the
+// matrix. each switch has a diode, such that the row signal feeds into the
+// switch, and then into the diode, then into one of the columns into the
+// matrix. the reset pin can be used to reset the entire counter.
+
+#define RESET _BV(PB0)
+#define SCLK _BV(PB1)
+#define SDATA _BV(PB3)
+#define LED _BV(PD6)
+
+inline
+static
+void SCLK_increment(void) {
+ PORTB &= ~SCLK ;
+ _delay_us( 4 ) ; // make sure the line is stable
+ PORTB |= SCLK ;
+ _delay_us( 4 ) ;
+
+ return ;
+}
+
+inline
+static
+void Matrix_Reset(void) {
+ PORTB |= RESET ;
+ _delay_us( 4 ) ; // make sure the line is stable
+ PORTB &= ~RESET ;
+
+ return ;
+}
+
+inline
+static
+uint8_t Matrix_ReceiveByte (void) {
+ uint8_t received = 0 ;
+ uint8_t temp = 0 ;
+ for ( uint8_t bit = 0; bit < MATRIX_COLS; ++bit ) {
+ // toggle the clock
+ SCLK_increment();
+ temp = (PINB & SDATA) << 4 ;
+ received |= temp >> bit ;
+ }
+
+ return received ;
+}
+
+inline
+static
+void Matrix_ThrowByte(void) {
+ // we use MATRIX_COLS - 1 here because that would put us at 7 clocks
+ for ( uint8_t bit = 0; bit < MATRIX_COLS - 1; ++bit ) {
+ // toggle the clock
+ SCLK_increment();
+ }
+
+ return ;
+}
+
+void matrix_init () {
+ // debug_matrix = 1;
+ // PB0 (SS) and PB1 (SCLK) set to outputs
+ DDRB |= RESET | SCLK ;
+ // PB2, is unused, and PB3 is our serial input
+ DDRB &= ~SDATA ;
+
+ // SS is reset for this board, and is active High
+ // SCLK is the serial clock and is active High
+ PORTB &= ~RESET ;
+ PORTB |= SCLK ;
+
+ // led pin
+ DDRD |= LED ;
+ PORTD &= ~LED ;
+
+ matrix_init_quantum();
+
+ //toggle reset, to put the keyboard logic into a known state
+ Matrix_Reset() ;
+}
+
+uint8_t matrix_scan(void) {
+
+ // the first byte of the keyboard's output data can be ignored
+ Matrix_ThrowByte();
+
+#if ( DEBOUNCING_DELAY > 0 )
+
+ for ( uint8_t row = 0 ; row < MATRIX_ROWS ; ++row ) {
+ //transfer old debouncing values
+ matrix_debounce_old[row] = matrix_debounce_new[row] ;
+ // read new key-states in
+ matrix_debounce_new[row] = Matrix_ReceiveByte() ;
+
+ if ( matrix_debounce_new[row] != matrix_debounce_old[row] ) {
+ debouncing = true ;
+ debouncing_time = timer_read() ;
+ }
+ }
+
+#else
+ // without debouncing we simply just read in the raw matrix
+ for ( uint8_t row = 0 ; row < MATRIX_ROWS ; ++row ) {
+ matrix[row] = Matrix_ReceiveByte ;
+ }
+#endif
+
+
+#if ( DEBOUNCING_DELAY > 0 )
+ if ( debouncing && ( timer_elapsed( debouncing_time ) > DEBOUNCING_DELAY ) ) {
+
+ for ( uint8_t row = 0 ; row < MATRIX_ROWS ; ++row ) {
+ matrix[row] = matrix_debounce_new[row] ;
+ }
+
+ debouncing = false ;
+ }
+#endif
+ Matrix_Reset() ;
+
+ matrix_scan_quantum() ;
+ return 1;
+}
+
+inline
+uint8_t matrix_get_row( uint8_t row ) {
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 01234567\n");
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ print_bin_reverse8(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+// as an aside, I used the M0110 converter:
+// tmk_core/common/keyboard.c, quantum/matrix.c, and the project layout of the planck
+// the online ducmentation starting from :
+// https://docs.qmk.fm/#/config_options
+// https://docs.qmk.fm/#/understanding_qmk
+// and probably a few i forgot.... \ No newline at end of file
diff --git a/keyboards/converter/hp_46010a/readme.md b/keyboards/converter/hp_46010a/readme.md
new file mode 100644
index 000000000..2321faa6e
--- /dev/null
+++ b/keyboards/converter/hp_46010a/readme.md
@@ -0,0 +1,52 @@
+# HP 46010A
+
+![46010A](https://deskthority.net/w/images/a/a5/HP_46010A_--_top.jpg)
+
+A converter for the eponymous keyboard.
+
+Keyboard Maintainer: [Listofoptions](https://github.com/listofoptions)
+Hardware Supported: HP 46010A, Teensy 2.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make converter/HP_46010A: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).
+
+to get a matrix created if your board uses a different one (i used the US layout) please see the following gists:
+for the matrix itself: https://gist.github.com/listofoptions/cdf70d94767e9c6c027741850a24c568
+for the program to generate the matrix: https://gist.github.com/listofoptions/d245e370678024edbe5bed8c8ab17999
+
+to build the actual converter, you are going to need to either splice into the a connector or, use a multi-meter to buzz/ohm out which wires go where.
+from the bottom of the pcb the pins are arraged as follows:
+
+
+ 4 5 6
+ 3 2 1
+
+
+connect a six pin modular connector of the 6p6c variaty.
+then lop off the other end of the cable, striping the wires inside.
+use the ohm-meter to find the corresponding wire for each pin on the bottom of the pcb
+
+the pin meanings are as follows:
+1 reset
+2 no connection
+3 vcc
+4 data out
+5 clock
+6 ground
+
+wire the ground and power pins to ground and 5v power on the teensy (or other avr device of your choice)
+connect
+on the teensy the connection is as follows
+
+
+teensy | HP 46010A
+----|-----
+gnd | gnd (6)
+vcc | vcc (3)
+PB0 | reset (1)
+PB1 | clock (5)
+PB3 | data out (4)
+gnd | no connection (2) -- optional
diff --git a/keyboards/converter/hp_46010a/rules.mk b/keyboards/converter/hp_46010a/rules.mk
new file mode 100644
index 000000000..ddd2d593b
--- /dev/null
+++ b/keyboards/converter/hp_46010a/rules.mk
@@ -0,0 +1,72 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# 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 = halfkay
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+API_SYSEX_ENABLE = no
+SPLIT_KEYBOARD = no
+WAIT_FOR_USB = 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
+
+CUSTOM_MATRIX = yes
+SRC = matrix.c \ No newline at end of file
diff --git a/keyboards/converter/ibm_5291/config.h b/keyboards/converter/ibm_5291/config.h
new file mode 100644
index 000000000..5c9ca1e4a
--- /dev/null
+++ b/keyboards/converter/ibm_5291/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 1
+#define MANUFACTURER QMK
+#define PRODUCT 5291 keyboard converter
+#define DESCRIPTION 5291 keyboard converter
+
+#define MATRIX_ROWS 24
+#define MATRIX_COLS 4
+
+#define MATRIX_ROW_PINS {B2, B3, B4, B5, B6}
+#define MATRIX_COL_PINS {B0, B1}
+#define MATRIX_DATA_PIN D0
+#define MATRIX_STROBE_PIN D1
+#define LED_PIN D6
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 0
+
+
diff --git a/keyboards/converter/ibm_5291/ibm_5291.c b/keyboards/converter/ibm_5291/ibm_5291.c
new file mode 100644
index 000000000..9b937a545
--- /dev/null
+++ b/keyboards/converter/ibm_5291/ibm_5291.c
@@ -0,0 +1,3 @@
+#include "ibm_5291.h"
+#include <avr/io.h>
+#include "quantum.h" \ No newline at end of file
diff --git a/keyboards/converter/ibm_5291/ibm_5291.h b/keyboards/converter/ibm_5291/ibm_5291.h
new file mode 100644
index 000000000..aa1b40324
--- /dev/null
+++ b/keyboards/converter/ibm_5291/ibm_5291.h
@@ -0,0 +1,69 @@
+/*
+Copyright 2018 listofoptions <listofoptions@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+/*
+ * ,-------. ,--------------------------------------------------------------------------.
+ * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck |
+ * |-------| |--------------------------------------------------------------------------|
+ * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -|
+ * |-------| |------------------------------------------------------|Ent|---------------|
+ * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| |
+ * |-------| |----------------------------------------------------------------------| |
+ * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +|
+ * |-------| |----------------------------------------------------------------------| |
+ * | F9|F10| | Alt | Space |CapsLck| 0 | . | |
+ * `-------' `--------------------------------------------------------------------------'
+*/
+
+#define LAYOUT_5291( \
+ KEY_F1,KEY_F2, KEY_ESC, KEY_1, KEY_2,KEY_3,KEY_4,KEY_5,KEY_6,KEY_7,KEY_8,KEY_9, KEY_0, KEY_MIN, KEY_EQU, KEY_BACK, KEY_NLOCK, KEY_SLOCK, \
+ KEY_F3,KEY_F4, KEY_TAB, KEY_Q, KEY_W,KEY_E,KEY_R,KEY_T,KEY_Y,KEY_U,KEY_I,KEY_O, KEY_P, KEY_LBRC,KEY_RBRC, KEY_PAD7,KEY_PAD8, KEY_PAD9,KEY_PMIN, \
+ KEY_F5,KEY_F6, KEY_LCTR,KEY_A, KEY_S,KEY_D,KEY_F,KEY_G,KEY_H,KEY_J,KEY_K,KEY_L, KEY_SEMI,KEY_QUOT,KEY_TICK, KEY_ENTR,KEY_PAD4,KEY_PAD5, KEY_PAD6, \
+ KEY_F7,KEY_F8, KEY_LSFS,KEY_BSLS,KEY_Z,KEY_X,KEY_C,KEY_V,KEY_B,KEY_N,KEY_M,KEY_COMM,KEY_DOT, KEY_SLS,KEY_RSFS, KEY_PAST,KEY_PAD1,KEY_PAD2, KEY_PAD3,KEY_PPLS, \
+ KEY_F9,KEY_F10, KEY_LALT, KEY_SPACE, KEY_CLOCK, KEY_PAD0, KEY_PDOT \
+) \
+{ {KEY_Z, KEY_S, KEY_W, KEY_3 }\
+, {KEY_X, KEY_D, KEY_E, KEY_4 }\
+, {KEY_C, KEY_F, KEY_R, KEY_5 }\
+, {KEY_V, KEY_G, KEY_T, KEY_6 }\
+, {KEY_B, KEY_H, KEY_Y, KEY_7 }\
+, {KEY_N, KEY_J, KEY_U, KEY_8 }\
+, {KEY_PAD2, KEY_PAD5,KEY_PAD8,KEY_NLOCK }\
+, {KEY_M, KEY_K, KEY_I, KEY_9 }\
+, {KEY_COMM, KEY_L, KEY_O, KEY_0 }\
+, {KEY_DOT, KEY_SEMI,KEY_P, KEY_MIN }\
+, {KEY_SLS, KEY_QUOT,KEY_LBRC,KEY_EQU }\
+, {KEY_SPACE, KEY_RSFS,KEY_TICK,KEY_RBRC }\
+, {KEY_CLOCK, KEY_PAST,KEY_ENTR,KEY_BACK }\
+, {KEY_PAD0, KEY_PAD1,KEY_PAD4,KEY_PAD7 }\
+, {KEY_PPLS, KC_NO, KEY_PMIN,KEY_SLOCK }\
+, {KEY_PDOT, KEY_PAD3,KEY_PAD6,KEY_PAD9 }\
+, {KEY_BSLS, KEY_A, KEY_Q, KEY_2 }\
+, {KEY_LALT, KC_NO, KC_NO, KEY_1 }\
+, {KEY_F7, KEY_F5, KEY_F3, KEY_F1 }\
+, {KEY_F8, KEY_F6, KEY_F4, KEY_F2 }\
+, {KC_F10, KC_NO, KC_NO, KC_NO }\
+, {KC_F9, KC_NO, KC_NO, KC_NO }\
+, {KEY_LSFS, KEY_LCTR,KEY_TAB, KEY_ESC }\
+, {KC_NO, KC_NO, KC_NO, KC_NO }\
+}
+
+#define LAYOUT LAYOUT_5291 \ No newline at end of file
diff --git a/keyboards/converter/ibm_5291/info.json b/keyboards/converter/ibm_5291/info.json
new file mode 100644
index 000000000..2cb3b76c2
--- /dev/null
+++ b/keyboards/converter/ibm_5291/info.json
@@ -0,0 +1,97 @@
+{
+ "keyboard_name": "IBM 5291",
+ "keyboard_folder": "converter/ibm_5291",
+ "url": "https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard",
+ "maintainer": "listofoptions",
+ "width": 21,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Sys Req", "x":0, "y":0},
+ {"label":"Cmd", "x":1, "y":0},
+ {"label":"`", "x":2.25, "y":0},
+ {"label":"1", "x":3.25, "y":0},
+ {"label":"2", "x":4.25, "y":0},
+ {"label":"3", "x":5.25, "y":0},
+ {"label":"4", "x":6.25, "y":0},
+ {"label":"5", "x":7.25, "y":0},
+ {"label":"6", "x":8.25, "y":0},
+ {"label":"7", "x":9.25, "y":0},
+ {"label":"8", "x":10.25, "y":0},
+ {"label":"9", "x":11.25, "y":0},
+ {"label":"0", "x":12.25, "y":0},
+ {"label":"-", "x":13.25, "y":0},
+ {"label":"=", "x":14.25, "y":0},
+ {"label":"Backspace", "x":15.25, "y":0, "w":1.75},
+ {"label":"Reverse Tab", "x":17, "y":0, "w":2},
+ {"label":"Dup", "x":19, "y":0, "w":2},
+ {"label":"Del", "x":0, "y":1},
+ {"label":"Erase Input", "x":1, "y":1},
+ {"label":"Tab", "x":2.25, "y":1, "w":1.5},
+ {"label":"Q", "x":3.75, "y":1},
+ {"label":"W", "x":4.75, "y":1},
+ {"label":"E", "x":5.75, "y":1},
+ {"label":"R", "x":6.75, "y":1},
+ {"label":"T", "x":7.75, "y":1},
+ {"label":"Y", "x":8.75, "y":1},
+ {"label":"U", "x":9.75, "y":1},
+ {"label":"I", "x":10.75, "y":1},
+ {"label":"O", "x":11.75, "y":1},
+ {"label":"P", "x":12.75, "y":1},
+ {"label":"&cent;", "x":13.75, "y":1},
+ {"label":"\\", "x":14.75, "y":1, "w":1.25},
+ {"label":"7", "x":17, "y":1},
+ {"label":"8", "x":18, "y":1},
+ {"label":"9", "x":19, "y":1},
+ {"label":"Field -", "x":20, "y":1},
+ {"label":"Print", "x":0, "y":2},
+ {"label":"Help", "x":1, "y":2},
+ {"label":"Caps Lock", "x":2.25, "y":2, "w":1.75},
+ {"label":"A", "x":4, "y":2},
+ {"label":"S", "x":5, "y":2},
+ {"label":"D", "x":6, "y":2},
+ {"label":"F", "x":7, "y":2},
+ {"label":"G", "x":8, "y":2},
+ {"label":"H", "x":9, "y":2},
+ {"label":"J", "x":10, "y":2},
+ {"label":"K", "x":11, "y":2},
+ {"label":"L", "x":12, "y":2},
+ {"label":";", "x":13, "y":2},
+ {"label":"'", "x":14, "y":2},
+ {"label":"{", "x":15, "y":2},
+ {"label":"Field Exit", "x":16, "y":1, "h":2},
+ {"label":"4", "x":17, "y":2},
+ {"label":"5", "x":18, "y":2},
+ {"label":"6", "x":19, "y":2},
+ {"label":"Roll Up", "x":0, "y":3},
+ {"label":"Roll Down", "x":1, "y":3},
+ {"label":"Shift", "x":2.25, "y":3, "w":1.25},
+ {"label":"<", "x":3.5, "y":3},
+ {"label":"Z", "x":4.5, "y":3},
+ {"label":"X", "x":5.5, "y":3},
+ {"label":"C", "x":6.5, "y":3},
+ {"label":"V", "x":7.5, "y":3},
+ {"label":"B", "x":8.5, "y":3},
+ {"label":"N", "x":9.5, "y":3},
+ {"label":"M", "x":10.5, "y":3},
+ {"label":",", "x":11.5, "y":3},
+ {"label":".", "x":12.5, "y":3},
+ {"label":"/", "x":13.5, "y":3},
+ {"label":"Shift", "x":14.5, "y":3, "w":1.5},
+ {"label":"Return", "x":16, "y":3},
+ {"label":"1", "x":17, "y":3},
+ {"label":"2", "x":18, "y":3},
+ {"label":"3", "x":19, "y":3},
+ {"label":"Field +", "x":20, "y":2, "h":3},
+ {"label":"Left", "x":0, "y":4},
+ {"label":"Right", "x":1, "y":4},
+ {"label":"Error Reset", "x":2.25, "y":4, "w":2},
+ {"label":"Space", "x":4.25, "y":4, "w":9.75},
+ {"label":"Enter Rec Adv", "x":14, "y":4, "w":2},
+ {"label":"0", "x":16, "y":4, "w":2},
+ {"label":".", "x":18, "y":4, "w":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/ibm_5291/keymaps/default/keymap.c b/keyboards/converter/ibm_5291/keymaps/default/keymap.c
new file mode 100644
index 000000000..9b286c887
--- /dev/null
+++ b/keyboards/converter/ibm_5291/keymaps/default/keymap.c
@@ -0,0 +1,233 @@
+/*
+Copyright 2018 listofoptions <listofoptions@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+/*
+enum xt_keycodes
+ { XT_PAST = SAFE_RANGE // XT pad asterisk / print screen
+ , XT_SLCK // XT scroll lock / break
+ , XT_F6 // F6 / app key
+ , XT_F5 // F5 / gui
+ , XT_F9 // F9 / F11
+ , XT_F10 // F10 / F12
+ } ;
+
+static bool shift_pressed = false ,
+ alt_pressed = false ,
+ ctrl_pressed = false ,
+ xt_pscr_pressed = false ,
+ xt_brk_pressed = false ,
+ xt_app_pressed = false ,
+ xt_gui_pressed = false ,
+ xt_lout_pressed = false ,
+ xt_f11_pressed = false ,
+ xt_f12_pressed = false ;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_LSFT:
+ case KC_RSFT:
+ if (record->event.pressed) {
+ shift_pressed = true ;
+ } else {
+ shift_pressed = false ;
+ }
+ return true;
+ break;
+
+ case KC_LALT:
+ if (record->event.pressed) {
+ alt_pressed = true ;
+ } else {
+ alt_pressed = false ;
+ }
+ return true;
+ break;
+
+ case KC_LCTL:
+ if (record->event.pressed) {
+ ctrl_pressed = true ;
+ } else {
+ ctrl_pressed = false ;
+ }
+ return true;
+ break;
+
+ case XT_PAST:
+ if (record->event.pressed) {
+ if (shift_pressed) {
+ xt_pscr_pressed = true ;
+ register_code(KC_PSCR);
+ } else {
+ register_code(KC_PAST);
+ }
+ } else {
+ if (xt_pscr_pressed) {
+ xt_pscr_pressed = false ;
+ unregister_code(KC_PSCR);
+ } else {
+ unregister_code(KC_PAST);
+ }
+ }
+ return false;
+ break;
+
+ case XT_SLCK:
+ if (record->event.pressed) {
+ if (ctrl_pressed) {
+ xt_brk_pressed = true ;
+ register_code(KC_BRK);
+ } else {
+ register_code(KC_SLCK);
+ }
+ } else {
+ if (xt_brk_pressed) {
+ xt_brk_pressed = false ;
+ unregister_code(KC_BRK);
+ } else {
+ unregister_code(KC_SLCK);
+ }
+ }
+ return false;
+ break;
+
+ case XT_F6:
+ if (record->event.pressed) {
+ if (shift_pressed) {
+ xt_app_pressed = true ;
+ register_code(KC_APP);
+ } else {
+ register_code(KC_F6);
+ }
+ } else {
+ if (xt_app_pressed) {
+ xt_app_pressed = false ;
+ unregister_code(KC_APP);
+ } else {
+ unregister_code(KC_F6);
+ }
+ }
+ return false;
+ break;
+
+ case XT_F5:
+ if (record->event.pressed) {
+ if (shift_pressed) {
+ xt_gui_pressed = true ;
+ register_code(KC_LGUI);
+ } else if (ctrl_pressed) {
+ xt_lout_pressed = true ;
+ register_code (KC_LGUI) ;
+ register_code (KC_L) ;
+ } else {
+ register_code(KC_F5);
+ }
+ } else {
+ if (xt_gui_pressed) {
+ xt_gui_pressed = false ;
+ unregister_code(KC_LGUI);
+ } else if (xt_lout_pressed) {
+ xt_lout_pressed = false ;
+ unregister_code (KC_LGUI) ;
+ unregister_code (KC_L) ;
+ } else {
+ unregister_code(KC_F5);
+ }
+ }
+ return false;
+ break;
+
+ case XT_F9:
+ if (record->event.pressed) {
+ if (shift_pressed) {
+ xt_f11_pressed = true ;
+ register_code(KC_F11);
+ } else {
+ register_code(KC_F9);
+ }
+ } else {
+ if (xt_f11_pressed) {
+ xt_f11_pressed = false ;
+ unregister_code(KC_F11);
+ } else {
+ unregister_code(KC_F9);
+ }
+ }
+ return false;
+ break;
+
+ case XT_F10:
+ if (record->event.pressed) {
+ if (shift_pressed) {
+ xt_f12_pressed = true ;
+ register_code(KC_F12);
+ } else {
+ register_code(KC_F10);
+ }
+ } else {
+ if (xt_f12_pressed) {
+ xt_f12_pressed = false ;
+ unregister_code(KC_F12);
+ } else {
+ unregister_code(KC_F10);
+ }
+ }
+ return false;
+ break;
+
+ default:
+ return true;
+ break;
+ }
+
+ return true;
+}
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// default layout is the standard XT layout
+/*
+ * ,-------. ,--------------------------------------------------------------------------.
+ * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck |
+ * |-------| |--------------------------------------------------------------------------|
+ * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -|
+ * |-------| |------------------------------------------------------|Ent|---------------|
+ * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| |
+ * |-------| |----------------------------------------------------------------------| |
+ * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift| *| 1| 2| 3| +|
+ * |-------| |----------------------------------------------------------------------| |
+ * | F9|F10| | Alt | Space |CapsLck| 0 | . | |
+ * `-------' `--------------------------------------------------------------------------'
+*/
+/*
+ [0] = LAYOUT (
+ KC_F1,KC_F2, KC_ESC, KC_1, KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_NLCK, XT_SLCK,
+ KC_F3,KC_F4, KC_TAB, KC_Q, KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O, KC_P, KC_LBRC,KC_RBRC, KC_P7,KC_P8, KC_P9, KC_PMNS,
+ XT_F5,XT_F6, 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_GRV, KC_ENT, KC_P4,KC_P5, KC_P6,
+ KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,XT_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS,
+ XT_F9,XT_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT
+ )
+*/
+ [0] = LAYOUT (
+ KC_F1,KC_F2, KC_ESC, KC_1, KC_2,KC_3,KC_4,KC_5,KC_6,KC_7,KC_8,KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_NLCK, KC_SLCK,
+ KC_F3,KC_F4, KC_TAB, KC_Q, KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O, KC_P, KC_LBRC,KC_RBRC, KC_P7,KC_P8, KC_P9, KC_PMNS,
+ KC_F5,KC_F6, 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_GRV, KC_ENT, KC_P4,KC_P5, KC_P6,
+ KC_F7,KC_F8, KC_LSFT,KC_BSLS,KC_Z,KC_X,KC_C,KC_V,KC_B,KC_N,KC_M,KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_PAST,KC_P1,KC_P2, KC_P3, KC_PPLS,
+ KC_F9,KC_F10,KC_LALT, KC_SPACE, KC_CAPS, KC_P0, KC_PDOT
+ )
+} ;
+
diff --git a/keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf b/keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf
new file mode 100644
index 000000000..3560598f0
--- /dev/null
+++ b/keyboards/converter/ibm_5291/keymaps/kbdbabel_doc_ibm5291_kbd.pdf
Binary files differ
diff --git a/keyboards/converter/ibm_5291/matrix.c b/keyboards/converter/ibm_5291/matrix.c
new file mode 100644
index 000000000..58f6e37b6
--- /dev/null
+++ b/keyboards/converter/ibm_5291/matrix.c
@@ -0,0 +1,284 @@
+/*
+Copyright 2018 listofoptions <listofoptions@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 <stdint.h>
+#include <stdbool.h>
+#include <string.h>
+#if defined(__AVR__)
+#include <avr/io.h>
+#endif
+#include <util/delay.h>
+
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.h"
+
+#include "config.h"
+
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+
+#define print_matrix_header() print("\nr/c 01234567\n")
+#define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+#define matrix_bitpop(i) bitpop(matrix[i])
+#define ROW_SHIFTER ((uint8_t)1)
+#define check_bit(var,pos) ((var) & (1<<(pos)))
+
+#define NUM_ROW_PINS 5
+#define NUM_COL_PINS 2
+
+static const uint8_t row_pins [NUM_ROW_PINS] = MATRIX_ROW_PINS ;
+static const uint8_t col_pins [NUM_ROW_PINS] = MATRIX_COL_PINS ;
+
+#if ( DEBOUNCING_DELAY > 0 )
+static uint16_t debouncing_time ;
+static bool debouncing = false ;
+#endif
+
+static uint8_t matrix [MATRIX_ROWS] = {0};
+
+#if ( DEBOUNCING_DELAY > 0 )
+static uint8_t matrix_debounce [MATRIX_ROWS] = {0};
+#endif
+
+static
+inline
+void toggle_led(void) {
+ uint8_t pin = LED_PIN ;
+ _SFR_IO8((pin >> 4) + 2) ^= _BV(pin & 0xF);
+}
+
+static
+inline
+void init_led(void) {
+ uint8_t pin = LED_PIN ;
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+}
+
+static
+inline
+void init_data(void) {
+ uint8_t pin = MATRIX_DATA_PIN ;
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // LO
+}
+
+static
+inline
+void init_strobe(void) {
+ uint8_t pin = MATRIX_STROBE_PIN ;
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+}
+
+static
+inline
+void init_rows(void) {
+ for ( uint8_t i = 0 ; i < NUM_ROW_PINS; ++i ) {
+ uint8_t pin = row_pins[i];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+ }
+}
+
+static
+inline
+void init_cols(void) {
+ for ( uint8_t i = 0 ; i < NUM_COL_PINS; ++i ) {
+ uint8_t pin = col_pins[i];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+ }
+}
+
+static
+inline
+void select_row(uint8_t current_row) {
+ for ( uint8_t i = 0 ; i < NUM_ROW_PINS; ++i ) {
+ uint8_t pin = row_pins[i] ;
+ if ( check_bit( current_row, i ) ) {
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ } else {
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+ }
+ }
+ wait_us(30) ;
+}
+
+static
+inline
+void select_col(uint8_t current_col) {
+ for ( uint8_t i = 0 ; i < NUM_COL_PINS; ++i ) {
+ uint8_t pin = col_pins[i] ;
+ if ( check_bit( current_col, i ) ) {
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ } else {
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+ }
+ }
+ wait_us(30) ;
+}
+
+static
+inline
+uint8_t matrix_strobe(uint8_t col_index) {
+ uint8_t strobe_pin = MATRIX_STROBE_PIN ;
+ uint8_t data_pin = MATRIX_DATA_PIN ;
+
+ // set strobe pin low
+ _SFR_IO8((strobe_pin >> 4) + 2) &= ~_BV(strobe_pin & 0xF);
+
+ wait_us(30) ;
+
+ // read data
+ uint8_t data = (_SFR_IO8(data_pin >> 4) & _BV(data_pin & 0xF)) ;
+
+ // set strobe pin hi
+ _SFR_IO8((strobe_pin >> 4) + 2) |= _BV(strobe_pin & 0xF);
+
+ uint8_t out = data ? (1 << col_index) : 0 ;
+ return out ;
+}
+
+static
+bool matrix_read(uint8_t current_matrix[], uint8_t current_row) {
+ // Store last value of row prior to reading
+ uint8_t last_row_value = current_matrix[current_row];
+
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ select_row(current_row);
+
+ // For each col...
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; ++col_index) {
+
+ select_col(col_index) ;
+
+ // strobe the matrix
+ // Populate the matrix row with the state of the data pin
+ current_matrix[current_row] |= matrix_strobe(col_index) ;
+ }
+
+ bool test = last_row_value != current_matrix[current_row] ;
+ return test ;
+}
+
+__attribute__ ((weak))
+void matrix_init_quantum(void) {
+ matrix_init_kb();
+}
+
+__attribute__ ((weak))
+void matrix_scan_quantum(void) {
+ matrix_scan_kb();
+}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+inline
+uint8_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_init(void) {
+ init_led() ;
+ init_rows() ;
+ init_cols() ;
+ init_data() ;
+ init_strobe() ;
+
+ // initialize matrix state: all keys off
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+# if (DEBOUNCING_DELAY > 0)
+ matrix_debounce [i] = 0;
+# endif
+ }
+
+ matrix_init_quantum() ;
+}
+
+uint8_t matrix_scan(void) {
+ for ( uint8_t current_row = 0; current_row < MATRIX_ROWS; ++current_row ) {
+# if (DEBOUNCING_DELAY > 0)
+ bool matrix_changed = matrix_read(matrix_debounce, current_row);
+
+ if (matrix_changed) {
+ debouncing = true ;
+ debouncing_time = timer_read();
+ }
+
+# else
+ matrix_read(matrix, current_row);
+# endif
+ }
+
+# if (DEBOUNCING_DELAY > 0)
+ if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debounce[i];
+ }
+ debouncing = false;
+ }
+# endif
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+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");
+ }
+}
diff --git a/keyboards/converter/ibm_5291/matrix.csv b/keyboards/converter/ibm_5291/matrix.csv
new file mode 100644
index 000000000..40462c214
--- /dev/null
+++ b/keyboards/converter/ibm_5291/matrix.csv
@@ -0,0 +1,96 @@
+0,Z
+1,S
+2,W
+3,3
+4,X
+5,D
+6,E
+7,4
+8,C
+9,F
+10,R
+11,5
+12,V
+13,G
+14,T
+15,6
+16,B
+17,H
+18,Y
+19,7
+20,N
+21,J
+22,U
+23,8
+24,PAD_2
+25,PAD_5
+26,PAD_8
+27,NUM_LOCK
+28,M
+29,K
+30,I
+31,9
+32,COMMA
+33,L
+34,O
+35,0
+36,PERIOD
+37,SEMICOLON
+38,P
+39,MINUS
+40,SLASH
+41,QUOTE
+42,LEFT_BRACE
+43,EQUAL
+44,SPACE
+45,RSHIFT
+46,BACK_QUOTE
+47,RIGHT_BRACE
+48,CAPS_LOCK
+49,PAD_ASTERIX
+50,ENTER
+51,BACKSPACE
+52,PAD_0
+53,PAD_1
+54,PAD_4
+55,PAD_7
+56,PAD_PLUS
+57,UNASSIGNED
+58,PAD_MINUS
+59,SCROLL_LOCK
+60,PAD_PERIOD
+61,PAD_3
+62,PAD_6
+63,PAD_9
+64,BACKSLASH
+65,A
+66,Q
+67,2
+68,LALT
+69,UNASSIGNED
+70,UNASSIGNED
+71,1
+72,F7
+73,F5
+74,F3
+75,F1
+76,F8
+77,F6
+78,F4
+79,F2
+80,F10
+81,UNASSIGNED
+82,UNASSIGNED
+83,UNASSIGNED
+84,F9
+85,UNASSIGNED
+86,UNASSIGNED
+87,UNASSIGNED
+88,LSHIFT
+89,LCTRL
+90,TAB
+91,ESC
+92,UNASSIGNED
+93,UNASSIGNED
+94,UNASSIGNED
+95,UNASSIGNED
diff --git a/keyboards/converter/ibm_5291/readme.md b/keyboards/converter/ibm_5291/readme.md
new file mode 100644
index 000000000..03406d3f9
--- /dev/null
+++ b/keyboards/converter/ibm_5291/readme.md
@@ -0,0 +1,72 @@
+# IBM 5291 keyboard converter
+
+[IBM 5291](https://deskthority.net/wiki/IBM_Model_F#IBM_5291_Keyboard)
+
+A converter for the eponymous keyboard.
+
+Keyboard Maintainer: [Listofoptions](https://github.com/listofoptions)
+Hardware Supported: IBM 5291, Teensy 2.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make converter/ibm_5291: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).
+
+
+The pinout is as follows:
+
+IBM−5291−Cable to Pinhead−14
+
+| pin | description
+----|------------------------
+1 | GND
+2 | NC
+3 | GND
+4 | GN)
+5 | +5V
+6 | D0
+7 | D1
+8 | D2
+9 | D3
+10| D4
+11| D5
+12| D6
+13| Strobe
+14| Out
+
+The pins on this connector are organized
+![here](https://geekhack.org/index.php?action=dlattach;topic=48950.0;attach=36759;image)
+
+IBM−5291−2 Cable with DB15M connector
+
+| pin | description
+----|-------------
+|1,2,3 | GND
+|4 | +5V
+|5 | D0
+|6 | D1
+|7 | D2
+|8 | D3
+|9 | D4
+|10 | D5
+|11 | D6
+|12 | Strobe
+|13 | Out
+|14 | PE
+|15 | NC
+
+The above connector is actually numbered so it should be easier to determine
+where the needed connections are.
+
+To connect to the teensy, the following are pins are needed (if you should choose not set your own):
+
+* PB0 -> PB6 are connected to D0 -> D6
+* +5V is connected to the corresponding teensy pin
+* gnd is as well, only one of the gnd pins needs to be connected though.
+* strobe is connected to pin PD1
+* data is connected to PD0
+* PE does not need to be connected to anything, but it could also be connected to gnd
+
+sources:
+ http://www.retrocomputing.eu/documents/5291_MaintenanceLibrary.pdf
diff --git a/keyboards/converter/ibm_5291/rules.mk b/keyboards/converter/ibm_5291/rules.mk
new file mode 100644
index 000000000..ca0c850c0
--- /dev/null
+++ b/keyboards/converter/ibm_5291/rules.mk
@@ -0,0 +1,72 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# 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 = halfkay
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+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 = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+API_SYSEX_ENABLE = no
+SPLIT_KEYBOARD = no
+WAIT_FOR_USB = 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
+
+CUSTOM_MATRIX = yes
+SRC = matrix.c \ No newline at end of file
diff --git a/keyboards/converter/ibm_terminal/README.md b/keyboards/converter/ibm_terminal/README.md
deleted file mode 100644
index dff26e059..000000000
--- a/keyboards/converter/ibm_terminal/README.md
+++ /dev/null
@@ -1,40 +0,0 @@
-Keyboard converter for IBM terminal keyboard
-============================================
-
-This is a port of TMK's converter/terminal_usb to QMK.
-
-It supports PS/2 Scan Code Set 3 and runs on USB AVR chips such like PJRC Teensy.
-I tested the converter on ATMega32U4 with 1392595(102keys) and 6110345(122keys).
-
-Source code: https://github.com/qmk/qmk_firmware.git
-Article: http://geekhack.org/index.php?topic=27272.0
-
-
-CONNECTION
-----------
-Keyboard ATMega32U4
-----------------------
-Data: PD2
-Clock: PD5
-
-And VCC and GND, of course. See RESOURCE for keyboard connector pin assign.
-
-
-BUILD
------
-$ git clone https://github.com/qmk/qmk_firmware.git
-$ cd qmk_firmware
-$ make converter/ibm_terminal:default
-
-
-RESOURCE
---------
-Soarer's Converter: http://geekhack.org/index.php?topic=17458.0
-102keys(1392595): http://geekhack.org/index.php?topic=10737.0
-122keys(1390876): http://www.seasip.info/VintagePC/ibm_1390876.html
-KbdBabel: http://www.kbdbabel.org/
-RJ45 Connector: http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png
-DIN Connector: http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png
-WinAVR: http://winavr.sourceforge.net/
-
-EOF
diff --git a/keyboards/converter/ibm_terminal/ibm_terminal.h b/keyboards/converter/ibm_terminal/ibm_terminal.h
index c6468349c..adf048206 100644
--- a/keyboards/converter/ibm_terminal/ibm_terminal.h
+++ b/keyboards/converter/ibm_terminal/ibm_terminal.h
@@ -19,7 +19,7 @@ void matrix_init_user(void);
* 17| |
* +---------+
*/
-#define KEYMAP( \
+#define LAYOUT( \
K08,K10,K18,K20,K28,K30,K38,K40,K48,K50,K57,K5F, \
K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E, \
\
@@ -45,13 +45,13 @@ void matrix_init_user(void);
{ K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
{ K70, K71, K72, K73, K74, K75, K76, K77 }, \
{ K78, K79, K7A, K7B, K7C, K7D, K7E, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, K83, K84, KC_NO, KC_NO, KC_NO,}, \
+ { KC_NO, KC_NO, KC_NO, K83, K84, KC_NO, KC_NO, KC_NO } \
}
/*
* IBM Terminal keyboard 1399625, 101-key
*/
-#define KEYMAP_101( \
+#define LAYOUT_101( \
K08, K07,K0F,K17,K1F,K27,K2F,K37,K3F,K47,K4F,K56,K5E, K57,K5F,K62, \
\
K0E,K16,K1E,K26,K25,K2E,K36,K3D,K3E,K46,K45,K4E,K55,K66, K67,K6E,K6F, K76,K77,K7E,K84, \
@@ -76,7 +76,7 @@ void matrix_init_user(void);
{ KC_NO, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
{ K70, K71, K72, K73, K74, K75, K76, K77 }, \
{ KC_NO, K79, K7A, KC_NO, K7C, K7D, K7E, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, K84, KC_NO, KC_NO, KC_NO,}, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, K84, KC_NO, KC_NO, KC_NO } \
}
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/converter/ibm_terminal/info.json b/keyboards/converter/ibm_terminal/info.json
new file mode 100644
index 000000000..f064f3c5b
--- /dev/null
+++ b/keyboards/converter/ibm_terminal/info.json
@@ -0,0 +1,245 @@
+{
+ "keyboard_name": "Keyboard converter for IBM terminal keyboard",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 24.75,
+ "height": 8,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"F13", "x":3.25, "y":0},
+ {"label":"F14", "x":4.25, "y":0},
+ {"label":"F15", "x":5.25, "y":0},
+ {"label":"F16", "x":6.25, "y":0},
+ {"label":"F17", "x":7.25, "y":0},
+ {"label":"F18", "x":8.25, "y":0},
+ {"label":"F19", "x":9.25, "y":0},
+ {"label":"F20", "x":10.25, "y":0},
+ {"label":"F21", "x":11.25, "y":0},
+ {"label":"F22", "x":12.25, "y":0},
+ {"label":"F23", "x":13.25, "y":0},
+ {"label":"F24", "x":14.25, "y":0},
+ {"label":"F1", "x":3.25, "y":1},
+ {"label":"F2", "x":4.25, "y":1},
+ {"label":"F3", "x":5.25, "y":1},
+ {"label":"F4", "x":6.25, "y":1},
+ {"label":"F5", "x":7.25, "y":1},
+ {"label":"F6", "x":8.25, "y":1},
+ {"label":"F7", "x":9.25, "y":1},
+ {"label":"F8", "x":10.25, "y":1},
+ {"label":"F9", "x":11.25, "y":1},
+ {"label":"F10", "x":12.25, "y":1},
+ {"label":"F11", "x":13.25, "y":1},
+ {"label":"F12", "x":14.25, "y":1},
+ {"label":"Print Screen", "x":0, "y":3},
+ {"label":"Esc", "x":1, "y":3},
+ {"label":"Esc", "x":2.25, "y":3},
+ {"label":"1", "x":3.25, "y":3},
+ {"label":"2", "x":4.25, "y":3},
+ {"label":"3", "x":5.25, "y":3},
+ {"label":"4", "x":6.25, "y":3},
+ {"label":"5", "x":7.25, "y":3},
+ {"label":"6", "x":8.25, "y":3},
+ {"label":"7", "x":9.25, "y":3},
+ {"label":"8", "x":10.25, "y":3},
+ {"label":"9", "x":11.25, "y":3},
+ {"label":"0", "x":12.25, "y":3},
+ {"label":"-", "x":13.25, "y":3},
+ {"label":"=", "x":14.25, "y":3},
+ {"label":"No", "x":15.25, "y":3},
+ {"label":"Back Space", "x":16.25, "y":3},
+ {"label":"Insert", "x":17.5, "y":3},
+ {"label":"Home", "x":18.5, "y":3},
+ {"label":"Page Up", "x":19.5, "y":3},
+ {"label":"Num Lock", "x":20.75, "y":3},
+ {"label":"/", "x":21.75, "y":3},
+ {"label":"*", "x":22.75, "y":3},
+ {"label":"-", "x":23.75, "y":3},
+ {"label":"Scroll Lock", "x":0, "y":4},
+ {"label":"Int4", "x":1, "y":4},
+ {"label":"Tab", "x":2.25, "y":4, "w":1.5},
+ {"label":"Q", "x":3.75, "y":4},
+ {"label":"W", "x":4.75, "y":4},
+ {"label":"E", "x":5.75, "y":4},
+ {"label":"R", "x":6.75, "y":4},
+ {"label":"T", "x":7.75, "y":4},
+ {"label":"Y", "x":8.75, "y":4},
+ {"label":"U", "x":9.75, "y":4},
+ {"label":"I", "x":10.75, "y":4},
+ {"label":"O", "x":11.75, "y":4},
+ {"label":"P", "x":12.75, "y":4},
+ {"label":"[", "x":13.75, "y":4},
+ {"label":"]", "x":14.75, "y":4},
+ {"label":"No", "x":15.75, "y":4, "w":1.5},
+ {"label":"Delete", "x":17.5, "y":4},
+ {"label":"End", "x":18.5, "y":4},
+ {"label":"Page Down", "x":19.5, "y":4},
+ {"label":"7", "x":20.75, "y":4},
+ {"label":"8", "x":21.75, "y":4},
+ {"label":"9", "x":22.75, "y":4},
+ {"label":"+", "x":23.75, "y":4},
+ {"label":"Pause", "x":0, "y":5},
+ {"label":"Int5", "x":1, "y":5},
+ {"label":"Caps Lock", "x":2.25, "y":5, "w":1.75},
+ {"label":"A", "x":4, "y":5},
+ {"label":"S", "x":5, "y":5},
+ {"label":"D", "x":6, "y":5},
+ {"label":"F", "x":7, "y":5},
+ {"label":"G", "x":8, "y":5},
+ {"label":"H", "x":9, "y":5},
+ {"label":"J", "x":10, "y":5},
+ {"label":"K", "x":11, "y":5},
+ {"label":"L", "x":12, "y":5},
+ {"label":";", "x":13, "y":5},
+ {"label":"'", "x":14, "y":5},
+ {"label":"\\", "x":15, "y":5},
+ {"label":"Enter", "x":16, "y":5, "w":1.25},
+ {"label":"Up", "x":18.5, "y":5},
+ {"label":"4", "x":20.75, "y":5},
+ {"label":"5", "x":21.75, "y":5},
+ {"label":"6", "x":22.75, "y":5},
+ {"label":",", "x":23.75, "y":5},
+ {"label":"App", "x":0, "y":6},
+ {"label":"Int6", "x":1, "y":6},
+ {"label":"Shift", "x":2.25, "y":6, "w":1.25},
+ {"label":"ISO \\", "x":3.5, "y":6},
+ {"label":"Z", "x":4.5, "y":6},
+ {"label":"X", "x":5.5, "y":6},
+ {"label":"C", "x":6.5, "y":6},
+ {"label":"V", "x":7.5, "y":6},
+ {"label":"B", "x":8.5, "y":6},
+ {"label":"N", "x":9.5, "y":6},
+ {"label":"M", "x":10.5, "y":6},
+ {"label":",", "x":11.5, "y":6},
+ {"label":".", "x":12.5, "y":6},
+ {"label":"/", "x":13.5, "y":6},
+ {"label":"No", "x":14.5, "y":6},
+ {"label":"Shift", "x":15.5, "y":6, "w":1.75},
+ {"label":"Left", "x":17.5, "y":6},
+ {"label":"Int2", "x":18.5, "y":6},
+ {"label":"Right", "x":19.5, "y":6},
+ {"label":"1", "x":20.75, "y":6},
+ {"label":"2", "x":21.75, "y":6},
+ {"label":"3", "x":22.75, "y":6},
+ {"label":"Enter", "x":23.75, "y":6},
+ {"label":"RGUI", "x":0, "y":7},
+ {"label":"lgui", "x":1, "y":7},
+ {"label":"Ctrl", "x":2.25, "y":7, "w":1.5},
+ {"label":"Alt", "x":4.75, "y":7, "w":1.5},
+ {"label":"Space", "x":6.25, "y":7, "w":7},
+ {"label":"Alt", "x":13.25, "y":7, "w":1.5},
+ {"label":"Ctrl", "x":15.75, "y":7, "w":1.5},
+ {"label":"Down", "x":18.5, "y":7},
+ {"label":"No", "x":20.75, "y":7},
+ {"label":"0", "x":21.75, "y":7},
+ {"label":".", "x":22.75, "y":7},
+ {"label":"No", "x":23.75, "y":7}
+ ]
+ },
+ "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":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"`", "x":0, "y":2},
+ {"label":"1", "x":1, "y":2},
+ {"label":"2", "x":2, "y":2},
+ {"label":"3", "x":3, "y":2},
+ {"label":"4", "x":4, "y":2},
+ {"label":"5", "x":5, "y":2},
+ {"label":"6", "x":6, "y":2},
+ {"label":"7", "x":7, "y":2},
+ {"label":"8", "x":8, "y":2},
+ {"label":"9", "x":9, "y":2},
+ {"label":"0", "x":10, "y":2},
+ {"label":"-", "x":11, "y":2},
+ {"label":"=", "x":12, "y":2},
+ {"label":"Back Space", "x":13, "y":2, "w":2},
+ {"label":"Insert", "x":15.25, "y":2},
+ {"label":"Home", "x":16.25, "y":2},
+ {"label":"Page Up", "x":17.25, "y":2},
+ {"label":"Num Lock", "x":18.5, "y":2},
+ {"label":"/", "x":19.5, "y":2},
+ {"label":"*", "x":20.5, "y":2},
+ {"label":"-", "x":21.5, "y":2},
+ {"label":"Tab", "x":0, "y":3, "w":1.5},
+ {"label":"Q", "x":1.5, "y":3},
+ {"label":"W", "x":2.5, "y":3},
+ {"label":"E", "x":3.5, "y":3},
+ {"label":"R", "x":4.5, "y":3},
+ {"label":"T", "x":5.5, "y":3},
+ {"label":"Y", "x":6.5, "y":3},
+ {"label":"U", "x":7.5, "y":3},
+ {"label":"I", "x":8.5, "y":3},
+ {"label":"O", "x":9.5, "y":3},
+ {"label":"P", "x":10.5, "y":3},
+ {"label":"[", "x":11.5, "y":3},
+ {"label":"]", "x":12.5, "y":3},
+ {"label":"\\", "x":13.5, "y":3, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":3},
+ {"label":"End", "x":16.25, "y":3},
+ {"label":"Page Down", "x":17.25, "y":3},
+ {"label":"7", "x":18.5, "y":3},
+ {"label":"8", "x":19.5, "y":3},
+ {"label":"9", "x":20.5, "y":3},
+ {"label":"Caps Lock", "x":0, "y":4, "w":1.75},
+ {"label":"A", "x":1.75, "y":4},
+ {"label":"S", "x":2.75, "y":4},
+ {"label":"D", "x":3.75, "y":4},
+ {"label":"F", "x":4.75, "y":4},
+ {"label":"G", "x":5.75, "y":4},
+ {"label":"H", "x":6.75, "y":4},
+ {"label":"J", "x":7.75, "y":4},
+ {"label":"K", "x":8.75, "y":4},
+ {"label":"L", "x":9.75, "y":4},
+ {"label":";", "x":10.75, "y":4},
+ {"label":"'", "x":11.75, "y":4},
+ {"label":"Enter", "x":12.75, "y":4, "w":2.25},
+ {"label":"4", "x":18.5, "y":4},
+ {"label":"5", "x":19.5, "y":4},
+ {"label":"6", "x":20.5, "y":4},
+ {"label":"+", "x":21.5, "y":3, "h":2},
+ {"label":"Shift", "x":0, "y":5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":5},
+ {"label":"X", "x":3.25, "y":5},
+ {"label":"C", "x":4.25, "y":5},
+ {"label":"V", "x":5.25, "y":5},
+ {"label":"B", "x":6.25, "y":5},
+ {"label":"N", "x":7.25, "y":5},
+ {"label":"M", "x":8.25, "y":5},
+ {"label":",", "x":9.25, "y":5},
+ {"label":".", "x":10.25, "y":5},
+ {"label":"/", "x":11.25, "y":5},
+ {"label":"Shift", "x":12.25, "y":5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":5},
+ {"label":"1", "x":18.5, "y":5},
+ {"label":"2", "x":19.5, "y":5},
+ {"label":"3", "x":20.5, "y":5},
+ {"label":"Ctrl", "x":0, "y":6, "w":1.5},
+ {"label":"Alt", "x":2.5, "y":6, "w":1.5},
+ {"label":"Space", "x":4, "y":6, "w":7},
+ {"label":"Alt", "x":11, "y":6, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":6, "w":1.5},
+ {"label":"Left", "x":15.25, "y":6},
+ {"label":"Down", "x":16.25, "y":6},
+ {"label":"Right", "x":17.25, "y":6},
+ {"label":"0", "x":18.5, "y":6, "w":2},
+ {"label":".", "x":20.5, "y":6},
+ {"label":"Enter", "x":21.5, "y":5, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/ibm_terminal/keymaps/default/config.h b/keyboards/converter/ibm_terminal/keymaps/default/config.h
index 7fa3bf328..271f48d00 100644
--- a/keyboards/converter/ibm_terminal/keymaps/default/config.h
+++ b/keyboards/converter/ibm_terminal/keymaps/default/config.h
@@ -1,6 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
-#include "../../config.h"
-
-#endif
+// place overrides here
diff --git a/keyboards/converter/ibm_terminal/keymaps/default/keymap.c b/keyboards/converter/ibm_terminal/keymaps/default/keymap.c
index 2beb51106..59187ef33 100644
--- a/keyboards/converter/ibm_terminal/keymaps/default/keymap.c
+++ b/keyboards/converter/ibm_terminal/keymaps/default/keymap.c
@@ -15,18 +15,12 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include <stdint.h>
-#include <stdbool.h>
-#include "keycode.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "ibm_terminal.h"
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Layer 0
- KEYMAP(
+ LAYOUT(
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
@@ -56,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `----' `---------------------------------------' `----' `-----------' `---------------'
*/
/*
- KEYMAP_101(
+ 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_BRK,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,
diff --git a/keyboards/converter/ibm_terminal/keymaps/default/rules.mk b/keyboards/converter/ibm_terminal/keymaps/default/rules.mk
index 19eb5972e..76d349920 100644
--- a/keyboards/converter/ibm_terminal/keymaps/default/rules.mk
+++ b/keyboards/converter/ibm_terminal/keymaps/default/rules.mk
@@ -14,7 +14,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_USE_USART = yes
API_SYSEX_ENABLE = no
diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h b/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h
index 7fa3bf328..271f48d00 100644
--- a/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h
+++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/config.h
@@ -1,6 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
-#include "../../config.h"
-
-#endif
+// place overrides here
diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c b/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c
index 47a5181dd..3d6da6eab 100644
--- a/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c
+++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/keymap.c
@@ -15,17 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "keycode.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "ibm_terminal.h"
-#include "action_layer.h"
-
-// Fillers to make layering clearer
-
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
+#include QMK_KEYBOARD_H
enum layers {
QWE, // qwerty
@@ -159,7 +149,7 @@ const uint32_t PROGMEM unicode_map[] = {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* qwerty */
- [QWE] = KEYMAP(
+ [QWE] = LAYOUT(
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_PSCR, KC_SLCK, KC_PAUS,
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
@@ -171,7 +161,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* colemak */
- [COL] = KEYMAP(
+ [COL] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -183,7 +173,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* workman */
- [WOR] = KEYMAP(
+ [WOR] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -195,7 +185,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* dvorak */
- [DVO] = KEYMAP(
+ [DVO] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -207,7 +197,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* system */
- [SYS] = KEYMAP(
+ [SYS] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -219,7 +209,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* mouse keys */
- [MOU] = KEYMAP(
+ [MOU] = LAYOUT(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
@@ -231,7 +221,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* emoji */
- [EMO] = KEYMAP(
+ [EMO] = LAYOUT(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
@@ -243,7 +233,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/*
- [XXX] = KEYMAP(
+ [XXX] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk b/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk
index 19eb5972e..76d349920 100644
--- a/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk
+++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk
@@ -14,7 +14,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_USE_USART = yes
API_SYSEX_ENABLE = no
diff --git a/keyboards/converter/ibm_terminal/readme.md b/keyboards/converter/ibm_terminal/readme.md
new file mode 100644
index 000000000..b781b0468
--- /dev/null
+++ b/keyboards/converter/ibm_terminal/readme.md
@@ -0,0 +1,39 @@
+# Keyboard converter for IBM terminal keyboard
+
+This is a port of TMK's converter/terminal_usb to QMK.
+
+It supports PS/2 Scan Code Set 3 and runs on USB AVR chips such like PJRC Teensy.
+I tested the converter on ATMega32U4 with 1392595(102keys) and 6110345(122keys).
+
+Source code: https://github.com/qmk/qmk_firmware.git
+Article: http://geekhack.org/index.php?topic=27272.0
+
+
+## Connection
+
+Keyboard | ATMega32U4
+:------- | :---------
+Data | PD2
+Clock | PD5
+
+And VCC and GND, of course. See Resource section for keyboard connector pin assign.
+
+
+## Build
+
+```
+git clone https://github.com/qmk/qmk_firmware.git
+cd qmk_firmware
+make converter/ibm_terminal:default
+```
+
+## Resource
+
+- Soarer's Converter: http://geekhack.org/index.php?topic=17458.0
+- 102keys(1392595): http://geekhack.org/index.php?topic=10737.0
+- 122keys(1390876): http://www.seasip.info/VintagePC/ibm_1390876.html
+- KbdBabel: http://www.kbdbabel.org/
+- RJ45 Connector: http://www.kbdbabel.org/conn/kbd_connector_ibmterm.png
+- DIN Connector: http://www.kbdbabel.org/conn/kbd_connector_ibm3179_318x_319x.png
+- WinAVR: http://winavr.sourceforge.net/
+
diff --git a/keyboards/converter/ibm_terminal/rules.mk b/keyboards/converter/ibm_terminal/rules.mk
index 9401cf199..77b3a6f3f 100644
--- a/keyboards/converter/ibm_terminal/rules.mk
+++ b/keyboards/converter/ibm_terminal/rules.mk
@@ -61,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_USE_USART = yes
API_SYSEX_ENABLE = n
CUSTOM_MATRIX = yes
diff --git a/keyboards/converter/m0110_usb/README.md b/keyboards/converter/m0110_usb/README.md
index 3041eb0b4..2e8a2eaef 100644
--- a/keyboards/converter/m0110_usb/README.md
+++ b/keyboards/converter/m0110_usb/README.md
@@ -1,19 +1,19 @@
-M0110(A) keyboard converter
-======================================
+# M0110(A) keyboard converter
+
This is a port of the original M0110 converter from TMK to QMK. The original converter was designed to work with **ATmega32U2** and **ATmega32U4** based microcontrollers to convert Apple M0110/M0110A keyboards and M0120 numpads to USB. This port has been tested to be compatible with the [**Adafruit Feather 32U4 BLE**](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le).
-### Enabling Bluetooth for the Adafruit Feather 32U4 BLE
-----------------------------------------------------
+## Enabling Bluetooth for the Adafruit Feather 32U4 BLE
+
Simply add `BLUETOOTH = AdafruitBLE` to your `rules.mk` file. This enables code specifically for the Adafruit Feather 32U4 BLE. If enabled, the device will use the `PRODUCT` and `DESCRIPTION` values from `config.h` for the device name displayed by the Feather on host devices. You can simply change these values to change the device name.
-### Pins
-----
+## Pins
+
This port utilizes the same pins that the TMK converter used. `PD1` is used for `CLOCK` and `PD0` is used for the `DATA` from the keyboard. These pins can be changed in `config.h`.
-### Other important hardware notes from the original TMK converter Readme:
+## Other important hardware notes from the original TMK converter Readme:
>### Hardware
>--------
>You can buy preassembled [TMK converter] or make yourown with AVR dev board like PJRC [Teensy].
@@ -45,7 +45,7 @@ This port utilizes the same pins that the TMK converter used. `PD1` is used for
[**View the original TMK converter Repository**](https://github.com/tmk/tmk_keyboard/tree/master/converter/m0110_usb)
-### QMK Port Changelog
----------
+## QMK Port Changelog
+
- 2018/08/01 - Original Release
diff --git a/keyboards/converter/m0110_usb/info.json b/keyboards/converter/m0110_usb/info.json
new file mode 100644
index 000000000..6ef610334
--- /dev/null
+++ b/keyboards/converter/m0110_usb/info.json
@@ -0,0 +1,172 @@
+{
+ "keyboard_name": "M0110(A) keyboard converter",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 19.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ansi": {
+ "key_count": 78,
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":1.5},
+ {"label":"Num Lock", "x":15.25, "y":0},
+ {"label":"=", "x":16.25, "y":0},
+ {"label":"/", "x":17.25, "y":0},
+ {"label":"*", "x":18.25, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"7", "x":15.25, "y":1},
+ {"label":"8", "x":16.25, "y":1},
+ {"label":"9", "x":17.25, "y":1},
+ {"label":"-", "x":18.25, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":1.75},
+ {"label":"4", "x":15.25, "y":2},
+ {"label":"5", "x":16.25, "y":2},
+ {"label":"6", "x":17.25, "y":2},
+ {"label":"+", "x":18.25, "y":2},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Up", "x":13.5, "y":3},
+ {"label":"1", "x":15.25, "y":3},
+ {"label":"2", "x":16.25, "y":3},
+ {"label":"3", "x":17.25, "y":3},
+ {"label":"Enter", "x":18.25, "y":3, "h":2},
+ {"label":"Alt", "x":0, "y":4, "w":1.5},
+ {"label":"GUI", "x":1.5, "y":4, "w":2},
+ {"label":"Space", "x":3.5, "y":4, "w":6},
+ {"label":"MO(1)", "x":9.5, "y":4},
+ {"label":"\\", "x":10.5, "y":4},
+ {"label":"Left", "x":11.5, "y":4},
+ {"label":"Right", "x":12.5, "y":4},
+ {"label":"Down", "x":13.5, "y":4},
+ {"label":"0", "x":15.25, "y":4, "w":2},
+ {"label":".", "x":17.25, "y":4}
+ ]
+ },
+ "LAYOUT_iso": {
+ "key_count": 75,
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":1.5},
+ {"label":"Num Lock", "x":15.25, "y":0},
+ {"label":"=", "x":16.25, "y":0},
+ {"label":"/", "x":17.25, "y":0},
+ {"label":"*", "x":18.25, "y":0},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"Return", "x":13.75, "y":1, "w":0.75, "h":2},
+ {"label":"7", "x":15.25, "y":1},
+ {"label":"8", "x":16.25, "y":1},
+ {"label":"9", "x":17.25, "y":1},
+ {"label":"-", "x":18.25, "y":1},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"#", "x":12.75, "y":2},
+ {"label":"4", "x":15.25, "y":2},
+ {"label":"5", "x":16.25, "y":2},
+ {"label":"6", "x":17.25, "y":2},
+ {"label":"+", "x":18.25, "y":2},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"label":"\\", "x":1.25, "y":3},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"1", "x":15.25, "y":3},
+ {"label":"2", "x":16.25, "y":3},
+ {"label":"3", "x":17.25, "y":3},
+ {"label":"Enter", "x":18.25, "y":3, "h":2},
+ {"label":"Option", "x":1, "y":4},
+ {"label":"GUI", "x":2, "y":4, "w":1.5},
+ {"label":"Space", "x":3.5, "y":4, "w":7.5},
+ {"label":"Enter", "x":11, "y":4, "w":1.5},
+ {"label":"0", "x":15.25, "y":4, "w":2},
+ {"label":".", "x":17.25, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/palm_usb/config.h b/keyboards/converter/palm_usb/config.h
new file mode 100644
index 000000000..4520725a1
--- /dev/null
+++ b/keyboards/converter/palm_usb/config.h
@@ -0,0 +1,120 @@
+/*
+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/>.
+*/
+
+/* This code makes use of cy384's Arduino USB HID adapter for the Palm Portable
+ Keyboard, released under the BSD licence */
+
+
+
+
+#pragma once
+
+#define CUSTOM_MATRIX 2
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0001
+#define DEVICE_VER 0x0100
+#define MANUFACTURER QMK
+#define PRODUCT Stowaway converter
+#define DESCRIPTION USB converter for Stowaway keyboard
+
+// IO pins to serial
+// https://deskthority.net/wiki/Arduino_Pro_Micro for pin lookup
+#define VCC_PIN D1 // pro micro 2
+#define RX_PIN D0 //pro micro 3 , was 8 on cy384
+#define RTS_PIN C6 // 5 //[ was D4 // 4 on the cy384
+#define DCD_PIN E6 //7
+
+// if using the particular arduino pinout of CY384
+#ifdef CY384
+ #define GND_PIN D7 //6
+ #define PULLDOWN_PIN B1 // 15
+#endif
+
+#ifndef HANDSPRING
+// Set to 1 for Handspring or to disable RTS/DCD based handshake.
+ #define HANDSPRING 0
+#endif
+
+#define MAXDROP 10 // check if keyboard is connected every X polling cycles
+#define SLEEP_TIMEOUT 500000 // check keyboard/reset this many millis
+
+
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 8
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
+/* Serial(USART) configuration
+ * asynchronous, negative logic, 9600baud, no flow control
+ * 1-start bit, 8-data bit, non parity, 1-stop bit
+ */
+#define SERIAL_SOFT_BAUD 9600
+#define SERIAL_SOFT_PARITY_NONE
+#define SERIAL_SOFT_BIT_ORDER_LSB
+#if (HANDSPRING == 0)
+ #define SERIAL_SOFT_LOGIC_NEGATIVE //RS232 logic
+#endif
+/* RXD Port */
+#define SERIAL_SOFT_RXD_ENABLE
+
+// we are using Pro micro pin 3 / D0 as serial
+#define SERIAL_SOFT_RXD_DDR DDRD
+#define SERIAL_SOFT_RXD_PORT PORTD
+#define SERIAL_SOFT_RXD_PIN PIND
+#define SERIAL_SOFT_RXD_BIT 0
+#define SERIAL_SOFT_RXD_VECT INT0_vect
+
+/* RXD Interupt */
+#define SERIAL_SOFT_RXD_INIT() do { \
+ /* pin configuration: input with pull-up */ \
+ SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
+ SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
+ /* enable interrupt: INT0(rising edge) */ \
+ EICRA |= ((1<<ISC01)|(1<<ISC00)); \
+ EIMSK |= (1<<INT0); \
+ sei(); \
+} while (0)
+#define SERIAL_SOFT_RXD_INT_ENTER()
+#define SERIAL_SOFT_RXD_INT_EXIT() do { \
+ /* clear interrupt flag */ \
+ EIFR = (1<<INTF0); \
+} while (0)
+#define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
+
+/* TXD Port */
+#define SERIAL_SOFT_TXD_ENABLE
+#define SERIAL_SOFT_TXD_DDR DDRD
+#define SERIAL_SOFT_TXD_PORT PORTD
+#define SERIAL_SOFT_TXD_PIN PIND
+#define SERIAL_SOFT_TXD_BIT 3
+#define SERIAL_SOFT_TXD_HI() do { SERIAL_SOFT_TXD_PORT |= (1<<SERIAL_SOFT_TXD_BIT); } while (0)
+#define SERIAL_SOFT_TXD_LO() do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0)
+#define SERIAL_SOFT_TXD_INIT() do { \
+ /* pin configuration: output */ \
+ SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \
+ /* idle */ \
+ SERIAL_SOFT_TXD_ON(); \
+} while (0)
+
+
diff --git a/keyboards/converter/palm_usb/matrix.c b/keyboards/converter/palm_usb/matrix.c
new file mode 100644
index 000000000..49212f2ef
--- /dev/null
+++ b/keyboards/converter/palm_usb/matrix.c
@@ -0,0 +1,398 @@
+/*
+Copyright 2018 milestogo
+with elements Copyright 2014 cy384 under a modified BSD license
+building on qmk structure Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+#include "protocol/serial.h"
+#include "timer.h"
+#include "pincontrol.h"
+
+
+/*
+ * Matrix Array usage:
+ *
+ * ROW: 12(4bits)
+ * COL: 8(3bits)
+ *
+ * +---------+
+ * 0|00 ... 07|
+ * 1|00 ... 07|
+ * :| ... |
+ * :| ... |
+ * A| |
+ * B| |
+ * +---------+
+ */
+static uint8_t matrix[MATRIX_ROWS];
+
+
+// we're going to need a sleep timer
+static uint16_t last_activity ;
+// and a byte to track duplicate up events signalling all keys up.
+static uint16_t last_upKey ;
+// serial device can disconnect. Check every MAXDROP characters.
+static uint16_t disconnect_counter = 0;
+
+
+// bitmath masks.
+#define KEY_MASK 0b10000000
+#define COL_MASK 0b00000111
+#define ROW_MASK 0b01111000
+
+
+#define ROW(code) (( code & ROW_MASK ) >>3)
+#define COL(code) ((code & COL_MASK) )
+#define KEYUP(code) ((code & KEY_MASK) >>7 )
+
+static bool is_modified = false;
+
+__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 pins_init(void) {
+ // set pins for pullups, Rts , power &etc.
+
+ //print ("pins setup\n");
+ pinMode(VCC_PIN, PinDirectionOutput);
+ digitalWrite(VCC_PIN, PinLevelLow);
+
+#if ( HANDSPRING == 0)
+
+#ifdef CY835
+ pinMode(GND_PIN, PinDirectionOutput);
+ digitalWrite(GND_PIN, PinLevelLow);
+
+ pinMode(PULLDOWN_PIN, PinDirectionOutput);
+ digitalWrite(PULLDOWN_PIN, PinLevelLow);
+#endif
+
+ pinMode(DCD_PIN, PinDirectionInput);
+ pinMode(RTS_PIN, PinDirectionInput);
+#endif
+
+/* check that the other side isn't powered up.
+ test=digitalRead(DCD_PIN);
+ xprintf("b%02X:", test);
+ test=digitalRead(RTS_PIN);
+ xprintf("%02X\n", test);
+*/
+
+}
+
+uint8_t rts_reset(void) {
+ static uint8_t firstread ;
+/* bounce RTS so device knows it is rebooted */
+
+// On boot, we keep rts as input, then switch roles here
+// on leaving sleep, we toggle the same way
+
+ firstread=digitalRead(RTS_PIN);
+ // printf("r%02X:", firstread);
+
+ pinMode(RTS_PIN, PinDirectionOutput);
+
+ if (firstread == PinLevelHigh) {
+ digitalWrite(RTS_PIN, PinLevelLow);
+ }
+ _delay_ms(10);
+ digitalWrite(RTS_PIN, PinLevelHigh);
+
+
+/* the future is Arm
+ if (palReadPad(RTS_PIN_IOPRT) == PinLevelLow)
+ {
+ _delay_ms(10);
+ palSetPadMode(RTS_PINn_IOPORT, PinDirectionOutput_PUSHPULL);
+ palSetPad(RTS_PORT, RTS_PIN);
+ }
+ else
+ {
+ palSetPadMode(RTS_PIN_RTS_PORT, PinDirectionOutput_PUSHPULL);
+ palSetPad(RTS_PORT, RTS_PIN);
+ palClearPad(RTS_PORT, RTS_PIN);
+ _delay_ms(10);
+ palSetPad(RTS_PORT, RTS_PIN);
+ }
+*/
+
+
+ _delay_ms(5);
+ //print("rts\n");
+ return 1;
+}
+
+uint8_t get_serial_byte(void) {
+ static uint8_t code;
+ while(1) {
+ code = serial_recv();
+ if (code) {
+ debug_hex(code); debug(" ");
+ return code;
+ }
+ }
+}
+
+uint8_t palm_handshake(void) {
+ // assumes something has seen DCD go high, we've toggled RTS
+ // and we now need to verify handshake.
+ // listen for up to 4 packets before giving up.
+ // usually I get the sequence FF FA FD
+ static uint8_t codeA=0;
+
+ for (uint8_t i=0; i < 5; i++) {
+ codeA=get_serial_byte();
+ if ( 0xFA == codeA) {
+ if( 0xFD == get_serial_byte()) {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+uint8_t palm_reset(void) {
+ print("@");
+ rts_reset(); // shouldn't need to power cycle.
+
+ if ( palm_handshake() ) {
+ last_activity = timer_read();
+ return 1;
+ } else {
+ print("failed reset");
+ return 0;
+ }
+
+}
+
+uint8_t handspring_handshake(void) {
+ // should be sent 15 ms after power up.
+ // listen for up to 4 packets before giving up.
+ static uint8_t codeA=0;
+
+ for (uint8_t i=0; i < 5; i++) {
+ codeA=get_serial_byte();
+ if ( 0xF9 == codeA) {
+ if( 0xFB == get_serial_byte()) {
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+uint8_t handspring_reset(void) {
+ digitalWrite(VCC_PIN, PinLevelLow);
+ _delay_ms(5);
+ digitalWrite(VCC_PIN, PinLevelHigh);
+
+ if ( handspring_handshake() ) {
+ last_activity = timer_read();
+ disconnect_counter=0;
+ return 1;
+ } else {
+ print("-HSreset");
+ return 0;
+ }
+}
+
+void matrix_init(void)
+{
+ debug_enable = true;
+ //debug_matrix =true;
+
+ serial_init(); // arguments all #defined
+
+#if (HANDSPRING == 0)
+ pins_init(); // set all inputs and outputs.
+#endif
+
+ print("power up\n");
+ digitalWrite(VCC_PIN, PinLevelHigh);
+
+ // wait for DCD strobe from keyboard - it will do this
+ // up to 3 times, then the board needs the RTS toggled to try again
+
+#if ( HANDSPRING == 1)
+ if ( handspring_handshake() ) {
+ last_activity = timer_read();
+ } else {
+ print("failed handshake");
+ _delay_ms(1000);
+ //BUG /should/ power cycle or toggle RTS & reset, but this usually works.
+ }
+
+#else /// Palm / HP device with DCD
+ while( digitalRead(DCD_PIN) != PinLevelHigh ) {;}
+ print("dcd\n");
+
+ rts_reset(); // at this point the keyboard should think all is well.
+
+ if ( palm_handshake() ) {
+ last_activity = timer_read();
+ } else {
+ print("failed handshake");
+ _delay_ms(1000);
+ //BUG /should/ power cycle or toggle RTS & reset, but this usually works.
+ }
+
+#endif
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+
+ matrix_init_quantum();
+ return;
+
+
+}
+
+
+uint8_t matrix_scan(void)
+{
+ uint8_t code;
+ code = serial_recv();
+ if (!code) {
+/*
+ disconnect_counter ++;
+ if (disconnect_counter > MAXDROP) {
+ // set all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+ }
+*/
+ // check if the keyboard is asleep.
+ if (timer_elapsed(last_activity) > SLEEP_TIMEOUT) {
+#if(HANDSPRING ==0 )
+ palm_reset();
+#else
+ handspring_reset();
+#endif
+ return 0;
+ }
+
+ }
+
+ last_activity = timer_read();
+ disconnect_counter=0; // if we are getting serial data, we're connected.
+
+ debug_hex(code); debug(" ");
+
+
+ switch (code) {
+ case 0xFD: // unexpected reset byte 2
+ print("rstD ");
+ return 0;
+ case 0xFA: // unexpected reset
+ print("rstA ");
+ return 0;
+ }
+
+ if (KEYUP(code)) {
+ if (code == last_upKey) {
+ // all keys are not pressed.
+ // Manual says to disable all modifiers left open now.
+ // but that could defeat sticky keys.
+ // BUG? dropping this byte.
+ last_upKey=0;
+ return 0;
+ }
+ // release
+ if (matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] &= ~(1<<COL(code));
+ last_upKey=code;
+ }
+ } else {
+ // press
+ if (!matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] |= (1<<COL(code));
+
+ }
+ }
+
+ matrix_scan_quantum();
+ return code;
+}
+
+bool matrix_is_modified(void)
+{
+ return is_modified;
+}
+
+inline
+bool matrix_has_ghost(void)
+{
+ return false;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & (1<<col));
+}
+
+inline
+uint8_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 01234567\n");
+ for (uint8_t row = 0; row < matrix_rows(); row++) {
+ phex(row); print(": ");
+ pbin_reverse(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 += bitpop(matrix[i]);
+ }
+ return count;
+}
diff --git a/keyboards/converter/palm_usb/readme.md b/keyboards/converter/palm_usb/readme.md
new file mode 100644
index 000000000..17ba329da
--- /dev/null
+++ b/keyboards/converter/palm_usb/readme.md
@@ -0,0 +1,96 @@
+# Stowaway Serial keyboard to USB protocol converter
+
+A converter for Palm Pilot era Stowaway serial keyboards.
+
+Makes extensive use of the code from [cy384](https://github.com/cy384/ppk_usb). Ported to QMK by [milestogo](https://github.com/milestogo).
+
+Hardware Supported: See hardware section below
+Hardware Availability: self-built
+
+Make example for this keyboard (after setting up your build environment):
+
+ make converter/palm_usb/stowaway: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).
+
+
+## Hardware
+
+Target MCU is ATMega32u4 but other USB capable AVRs should also work.
+
+cy843 has a very specific way of wiring in order to fit all pins in sequence. It breaks
+qmk because the Arduino softserial library uses different pins from QMK.
+
+I've wired the pro micro hardware as follows.
+
+Label| TX0,RX1,GND,GND,2 ,3 ,4 ,5 ,6 ,7
+Palm | , , * ,GND,VCC,RX ,NC ,RTS,nc ,DCD
+MCU | ,D1 ,D0 , ,C6 , ,E6
+
+\* The RX line from the keyboard should be conected to a ~10K ohm pull down resistor to ground.
+RX --|--3
+ 10K
+ |
+ GND
+
+
+Power management is not implemented yet, this just reboots the keyboard frequently.
+
+### Keyboards:
+
+Think Outside Stowaway Keyboards
+There are at least 5 different versions of these keyboards out there.
+
+Group 1: Palm 3, Palm 5 & HP Journada 540, and Compaq iPaq keyboards. These share
+the same RTS protocol, but with different pinouts for each device.
+
+Group 2: Handspring keyboards. These don't do handshaking protocol, and use TTL signal.
+Set HANDSPRING to 1 in config.h
+
+Group 3: IRDA models. Untested but theoretically serial.
+
+### Connectors
+
+See https://github.com/cy384/ppk_usb for wiring & sample 3d printable sockets.
+
+Only Palm3 wiring has been tested.
+RXD pin is output from keyboard to MCU's RX.
+
+Viewed from left to right with the keyboard in typing position.
+
+Palm3: [NC, VCC, RXD, RTS, NC, NC, DCD, NC, NC, GND]
+Palm5: [NC, VCC, RXD, RTS, NC, NC, DCD, NC, NC, GND] (same order, different connector)
+Handspring: [VCC/TXD, NC, NC, NC, GND, NC, NC, RXD]
+Journada: [NC, NC, NC, GND, NC, RTS, NC, DTR/VCC, RXD, DCD, NC] [GND-IN, VCC-IN]
+Ipaq: [NC, NC, DTR/VCC, NC, NC, RTS, NC, RXD, DCD, GND, NC, NC]
+
+### Protocol
+
+ Signal: Asynchronous, Negative logic, 9600baud, No Flow control
+ Frame format: 1-Start bit, 8-Data bits, No-Parity, 1-Stop bit
+
+ AVR USART engine expects positive logic while stowaway keyboard signal is negative.
+ To use AVR UART engine you need external inverter in front of RX and TX pin.
+ Otherwise you can software serial routine to communicate the keyboard.
+
+This converter uses software method, you doesn't need any inverter part.
+
+
+Commands From System To Keyboard
+ none
+
+Commands From Keyboard To System
+
+ 0xFA Reset/Ready Response(followed by 0xFD)
+
+References
+
+* http://www.splorp.com/pdf/stowawayhwref.pdf
+
+### Todo
+- Test on anything but a palm 3 model keyboard.
+- Change all of the soft serial to match the new Helix based code so that it is easier
+to switch pins.
+- The driver should check for a keyboard that pressed the delete key then disconnected.
+Check every MAXDROP scans that the keyboard is there, and if not, clear the matrix.
+Not implemented yet, since matrix scan is so much faster than serial.
diff --git a/keyboards/converter/palm_usb/rules.mk b/keyboards/converter/palm_usb/rules.mk
new file mode 100644
index 000000000..35ea3995e
--- /dev/null
+++ b/keyboards/converter/palm_usb/rules.mk
@@ -0,0 +1,46 @@
+MCU = atmega32u4 # Teensy 2.0
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = caterina
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+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
+UNICODEMAP_ENABLE = no
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+CUSTOM_MATRIX = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+#HARDWARE_SERIAL = yes
+
+SRC += matrix.c
+
+ifdef HARDWARE_SERIAL
+ # untested with palm_usb
+ SRC += protocol/serial_uart.c
+ OPT_DEFS += -DHARDWARE_SERIAL
+else
+ SRC += protocol/serial_soft.c
+endif
+
+DEFAULT_FOLDER = converter/palm_usb/stowaway
+
diff --git a/keyboards/converter/palm_usb/stowaway/info.json b/keyboards/converter/palm_usb/stowaway/info.json
new file mode 100644
index 000000000..8188d14bd
--- /dev/null
+++ b/keyboards/converter/palm_usb/stowaway/info.json
@@ -0,0 +1,83 @@
+{
+ "keyboard_name": "Palm Stowaway Serial",
+ "keyboard_folder": "converter/palm_usb/stowaway",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"1", "x":0.5, "y":0},
+ {"label":"2", "x":1.5, "y":0},
+ {"label":"3", "x":2.5, "y":0},
+ {"label":"4", "x":3.5, "y":0},
+ {"label":"5", "x":4.5, "y":0},
+ {"label":"6", "x":5.5, "y":0},
+ {"label":"7", "x":6.5, "y":0},
+ {"label":"8", "x":7.5, "y":0},
+ {"label":"9", "x":8.5, "y":0},
+ {"label":"0", "x":9.5, "y":0},
+ {"label":"MINS", "x":10.5, "y":0},
+ {"label":"EQL", "x":11.5, "y":0},
+ {"label":"BACK", "x":12.5, "y":0, "w":1.5},
+ {"label":"APP0", "x":14.25, "y":1, "h":0.6875},
+ {"label":"TAB", "x":0, "y":1},
+ {"label":"Q", "x":1, "y":1},
+ {"label":"W", "x":2, "y":1},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1},
+ {"label":"T", "x":5, "y":1},
+ {"label":"Y", "x":6, "y":1},
+ {"label":"U", "x":7, "y":1},
+ {"label":"I", "x":8, "y":1},
+ {"label":"O", "x":9, "y":1},
+ {"label":"P", "x":10, "y":1},
+ {"label":"LBRC", "x":11, "y":1},
+ {"label":"RBRC", "x":12, "y":1},
+ {"label":"BSLS", "x":13, "y":1},
+ {"label":"APP1", "x":14.25, "y":1.6875, "h":0.6875},
+ {"label":"CAPS", "x":0, "y":2, "w":1.25},
+ {"label":"A", "x":1.25, "y":2},
+ {"label":"S", "x":2.25, "y":2},
+ {"label":"D", "x":3.25, "y":2},
+ {"label":"F", "x":4.25, "y":2},
+ {"label":"G", "x":5.25, "y":2},
+ {"label":"H", "x":6.25, "y":2},
+ {"label":"J", "x":7.25, "y":2},
+ {"label":"K", "x":8.25, "y":2},
+ {"label":"L", "x":9.25, "y":2},
+ {"label":"SCLN", "x":10.25, "y":2},
+ {"label":"QUOT", "x":11.25, "y":2},
+ {"label":"ENT", "x":12.25, "y":2, "w":1.75},
+ {"label":"APP2", "x":14.25, "y":2.375, "h":0.6875},
+ {"label":"LSFT", "x":0, "y":3, "w":1.75},
+ {"label":"Z", "x":1.75, "y":3},
+ {"label":"X", "x":2.75, "y":3},
+ {"label":"C", "x":3.75, "y":3},
+ {"label":"V", "x":4.75, "y":3},
+ {"label":"B", "x":5.75, "y":3},
+ {"label":"N", "x":6.75, "y":3},
+ {"label":"M", "x":7.75, "y":3},
+ {"label":"COMM", "x":8.75, "y":3},
+ {"label":"DOT", "x":9.75, "y":3},
+ {"label":"SLSH", "x":10.75, "y":3},
+ {"label":"RSFT", "x":11.75, "y":3, "w":1.25},
+ {"label":"UP", "x":13, "y":3},
+ {"label":"APP3", "x":14.25, "y":3.0625, "h":0.6875},
+ {"label":"LCTL", "x":0, "y":4, "w":1.25},
+ {"label":"FN", "x":1.25, "y":4},
+ {"label":"LALT", "x":2.25, "y":4},
+ {"label":"CMD", "x":3.25, "y":4},
+ {"label":"SPACE", "x":4.25, "y":4, "w":3.5},
+ {"label":"SPACE/New", "x":7.75, "y":4},
+ {"label":"GRAVE", "x":8.75, "y":4},
+ {"label":"DONE", "x":9.75, "y":4},
+ {"label":"DEL", "x":10.75, "y":4, "w":1.25},
+ {"label":"LEFT", "x":12, "y":4},
+ {"label":"DOWN", "x":13, "y":4},
+ {"label":"RIGHT", "x":14, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/palm_usb/stowaway/keymaps/default/keymap.c b/keyboards/converter/palm_usb/stowaway/keymaps/default/keymap.c
new file mode 100644
index 000000000..09b41f95c
--- /dev/null
+++ b/keyboards/converter/palm_usb/stowaway/keymaps/default/keymap.c
@@ -0,0 +1,59 @@
+/*
+ Copyright 2018 milestogo
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+_QWERTY=0,
+_CDH,
+_FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BACK, APP0,
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, APP1,
+ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, APP2,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, APP3,
+ LCTL, FN, LALT, CMD, SPACE,SPACE,GRAVE,DONE, DEL, LEFT, DOWN, RIGHT
+
+*/
+ [_QWERTY] = LAYOUT( /* Base */
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_ESC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, TG(_CDH),
+ KC_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, MO(_FN), KC_LALT, KC_LGUI, KC_SPACE,KC_SPACE,KC_GRAVE,KC_RGUI, KC_DEL, KC_LEFT,KC_DOWN, KC_RIGHT
+ ),
+
+ [_CDH] = LAYOUT( /* Base */
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_ESC,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, _______,
+ KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, MO(_FN), KC_LALT, KC_LGUI, KC_SPACE,KC_SPACE,KC_GRAVE,KC_RGUI, KC_DEL, KC_LEFT,KC_DOWN, KC_RIGHT
+ ),
+
+ [_FN] = LAYOUT( // FN Key
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/converter/palm_usb/stowaway/rules.mk b/keyboards/converter/palm_usb/stowaway/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/converter/palm_usb/stowaway/rules.mk
diff --git a/keyboards/converter/palm_usb/stowaway/stowaway.h b/keyboards/converter/palm_usb/stowaway/stowaway.h
new file mode 100644
index 000000000..71af9bf4a
--- /dev/null
+++ b/keyboards/converter/palm_usb/stowaway/stowaway.h
@@ -0,0 +1,53 @@
+/*
+Copyright 2018 milestogo
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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"
+
+
+/* Stowaway Keyboard
+ based on matrix from http://www.splorp.com/pdf/stowawayhwref.pdf
+
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS, EQL, BACK APP0,
+ TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC, RBRC, BSLS, APP1,
+ CAPS, A, S, D, F, G, H, J, K, L, SCLN, QUOT, ENT, APP2,
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, UP, APP3,
+ LCTL, FN, LALT, CMD, SPACE,SPACE,GRAVE,DONE, DEL, LEFT, DOWN, RIGHT
+
+*/
+#define LAYOUT( \
+ K000, K001, K002, K004, K005, K006, K007, K064, K065, K066, K060, K061, K062, K063,\
+ K031, K011, K012, K013, K014, K015, K016, K074, K075, K076, K077, K070, K071, K072, K073,\
+ K030, K021, K022, K023, K024, K025, K026, K084, K085, K086, K087, K080, K081, K082,\
+ K110, K003, K020, K054, K055, K056, K057, K094, K095, K096, K090, K111, K091, K092,\
+ K032, K042, K043, K010, K027, K067, K017, K097, K100, K101, K102, K103 \
+) { \
+ { K000, K001, K002 , K003, K004, K005, K006, K007 }, \
+ { K010, K011, K012 , K013, K014, K015, K016, K017 }, \
+ { K020, K021, K022 , K023, K024, K025, K026, K027 }, \
+ { K030, K031, K032 , KC_NO,KC_NO, KC_NO,KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, K042 , K043, KC_NO, KC_NO,KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO,K054, K055, K056, K057 }, \
+ { K060, K061, K062 , K063, K064, K065, K066, K067 }, \
+ { K070, K071, K072 , K073, K074, K075, K076, K077 }, \
+ { K080, K081, K082 , KC_NO,K084, K085, K086, K087 }, \
+ { K090, K091, K092 , KC_NO,K094, K095, K096, K097 }, \
+ { K100, K101, K102 , K103, KC_NO, KC_NO,KC_NO, KC_NO }, \
+ { K110, K111, KC_NO, KC_NO,KC_NO, KC_NO,KC_NO, KC_NO } \
+}
+
diff --git a/keyboards/converter/sun_usb/command_extra.c b/keyboards/converter/sun_usb/command_extra.c
new file mode 100644
index 000000000..756a9160b
--- /dev/null
+++ b/keyboards/converter/sun_usb/command_extra.c
@@ -0,0 +1,64 @@
+#include QMK_KEYBOARD_H
+#include "protocol/serial.h"
+
+bool sun_bell = false;
+bool sun_click = false;
+
+
+bool command_extra(uint8_t code)
+{
+ switch (code) {
+ case KC_H:
+ case KC_SLASH: /* ? */
+ print("\n\n----- Sun converter Help -----\n");
+ print("Home: Toggle Bell\n");
+ print("End: Toggle Click\n");
+ print("PgUp: LED all On\n");
+ print("PgDown: LED all Off\n");
+ print("Insert: Layout\n");
+ print("Delete: Reset\n");
+ return false;
+ case KC_DEL:
+ print("Reset\n");
+ serial_send(0x01);
+ break;
+ case KC_HOME:
+ sun_bell = !sun_bell;
+ if (sun_bell) {
+ print("Bell On\n");
+ serial_send(0x02);
+ } else {
+ print("Bell Off\n");
+ serial_send(0x03);
+ }
+ break;
+ case KC_END:
+ sun_click = !sun_click;
+ if (sun_click) {
+ print("Click On\n");
+ serial_send(0x0A);
+ } else {
+ print("Click Off\n");
+ serial_send(0x0B);
+ }
+ break;
+ case KC_PGUP:
+ print("LED all on\n");
+ serial_send(0x0E);
+ serial_send(0xFF);
+ break;
+ case KC_PGDOWN:
+ print("LED all off\n");
+ serial_send(0x0E);
+ serial_send(0x00);
+ break;
+ case KC_INSERT:
+ print("layout\n");
+ serial_send(0x0F);
+ break;
+ default:
+ xprintf("Unknown extra command: %02X\n", code);
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/converter/sun_usb/config.h b/keyboards/converter/sun_usb/config.h
new file mode 100644
index 000000000..f7ad41639
--- /dev/null
+++ b/keyboards/converter/sun_usb/config.h
@@ -0,0 +1,88 @@
+/*
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#define CUSTOM_MATRIX 2
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3333
+#define DEVICE_VER 0x0100
+#define MANUFACTURER QMK
+#define PRODUCT Sun keyboard converter
+#define DESCRIPTION USB converter for Sun type 5 keyboard
+
+/* matrix size */
+#define MATRIX_ROWS 16
+#define MATRIX_COLS 8
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LALT) | MOD_BIT(KC_RALT)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LGUI) | MOD_BIT(KC_RGUI)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
+/* Serial(USART) configuration
+ * asynchronous, negative logic, 1200baud, no flow control
+ * 1-start bit, 8-data bit, non parity, 1-stop bit
+ */
+#define SERIAL_SOFT_BAUD 1200
+#define SERIAL_SOFT_PARITY_NONE
+#define SERIAL_SOFT_BIT_ORDER_LSB
+#define SERIAL_SOFT_LOGIC_NEGATIVE
+/* RXD Port */
+#define SERIAL_SOFT_RXD_ENABLE
+#define SERIAL_SOFT_RXD_DDR DDRD
+#define SERIAL_SOFT_RXD_PORT PORTD
+#define SERIAL_SOFT_RXD_PIN PIND
+#define SERIAL_SOFT_RXD_BIT 2
+#define SERIAL_SOFT_RXD_VECT INT2_vect
+/* RXD Interupt */
+#define SERIAL_SOFT_RXD_INIT() do { \
+ /* pin configuration: input with pull-up */ \
+ SERIAL_SOFT_RXD_DDR &= ~(1<<SERIAL_SOFT_RXD_BIT); \
+ SERIAL_SOFT_RXD_PORT |= (1<<SERIAL_SOFT_RXD_BIT); \
+ /* enable interrupt: INT2(rising edge) */ \
+ EICRA |= ((1<<ISC21)|(1<<ISC20)); \
+ EIMSK |= (1<<INT2); \
+ sei(); \
+} while (0)
+#define SERIAL_SOFT_RXD_INT_ENTER()
+#define SERIAL_SOFT_RXD_INT_EXIT() do { \
+ /* clear interrupt flag */ \
+ EIFR = (1<<INTF2); \
+} while (0)
+#define SERIAL_SOFT_RXD_READ() (SERIAL_SOFT_RXD_PIN&(1<<SERIAL_SOFT_RXD_BIT))
+/* TXD Port */
+#define SERIAL_SOFT_TXD_ENABLE
+#define SERIAL_SOFT_TXD_DDR DDRD
+#define SERIAL_SOFT_TXD_PORT PORTD
+#define SERIAL_SOFT_TXD_PIN PIND
+#define SERIAL_SOFT_TXD_BIT 3
+#define SERIAL_SOFT_TXD_HI() do { SERIAL_SOFT_TXD_PORT |= (1<<SERIAL_SOFT_TXD_BIT); } while (0)
+#define SERIAL_SOFT_TXD_LO() do { SERIAL_SOFT_TXD_PORT &= ~(1<<SERIAL_SOFT_TXD_BIT); } while (0)
+#define SERIAL_SOFT_TXD_INIT() do { \
+ /* pin configuration: output */ \
+ SERIAL_SOFT_TXD_DDR |= (1<<SERIAL_SOFT_TXD_BIT); \
+ /* idle */ \
+ SERIAL_SOFT_TXD_ON(); \
+} while (0)
+
+#endif
diff --git a/keyboards/converter/sun_usb/led.c b/keyboards/converter/sun_usb/led.c
new file mode 100644
index 000000000..a409699e9
--- /dev/null
+++ b/keyboards/converter/sun_usb/led.c
@@ -0,0 +1,32 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+#include "protocol/serial.h"
+
+void led_set(uint8_t usb_led)
+{
+ uint8_t sun_led = 0;
+ if (usb_led & (1<<USB_LED_NUM_LOCK)) sun_led |= (1<<0);
+ if (usb_led & (1<<USB_LED_COMPOSE)) sun_led |= (1<<1);
+ if (usb_led & (1<<USB_LED_SCROLL_LOCK)) sun_led |= (1<<2);
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) sun_led |= (1<<3);
+ xprintf("LED: %02X\n", usb_led);
+
+ serial_send(0x0E);
+ serial_send(sun_led);
+}
diff --git a/keyboards/converter/sun_usb/matrix.c b/keyboards/converter/sun_usb/matrix.c
new file mode 100644
index 000000000..c379e8237
--- /dev/null
+++ b/keyboards/converter/sun_usb/matrix.c
@@ -0,0 +1,197 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+#include "protocol/serial.h"
+
+/*
+ * Matrix Array usage:
+ *
+ * ROW: 16(4bits)
+ * COL: 8(3bits)
+ *
+ * 8bit wide
+ * +---------+
+ * 0|00 ... 07|
+ * 1|08 ... 0F|
+ * :| ... |
+ * :| ... |
+ * E|70 ... 77|
+ * F|78 ... 7F|
+ * +---------+
+ */
+static uint8_t matrix[MATRIX_ROWS];
+#define ROW(code) ((code>>3)&0xF)
+#define COL(code) (code&0x07)
+
+static bool is_modified = false;
+
+__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)
+{
+ /* DDRD |= (1<<6); */
+ /* PORTD |= (1<<6); */
+ debug_enable = true;
+
+ serial_init();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+
+ /* // wait for keyboard coming up */
+ /* // otherwise LED status update fails */
+ /* print("Reseting "); */
+ /* while (1) { */
+ /* print("."); */
+ /* while (serial_recv()); */
+ /* serial_send(0x01); */
+ /* _delay_ms(500); */
+ /* if (serial_recv() == 0xFF) { */
+ /* _delay_ms(500); */
+ /* if (serial_recv() == 0x04) */
+ /* break; */
+ /* } */
+ /* } */
+ /* print(" Done\n"); */
+
+ /* PORTD &= ~(1<<6); */
+
+ matrix_init_quantum();
+ return;
+}
+
+uint8_t matrix_scan(void)
+{
+ uint8_t code;
+ code = serial_recv();
+ if (!code) return 0;
+
+ debug_hex(code); debug(" ");
+
+ switch (code) {
+ case 0xFF: // reset success: FF 04
+ print("reset: ");
+ _delay_ms(500);
+ code = serial_recv();
+ xprintf("%02X\n", code);
+ if (code == 0x04) {
+ // LED status
+ led_set(host_keyboard_leds());
+ }
+ return 0;
+ case 0xFE: // layout: FE <layout>
+ print("layout: ");
+ _delay_ms(500);
+ xprintf("%02X\n", serial_recv());
+ return 0;
+ case 0x7E: // reset fail: 7E 01
+ print("reset fail: ");
+ _delay_ms(500);
+ xprintf("%02X\n", serial_recv());
+ return 0;
+ case 0x7F:
+ // all keys up
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+ return 0;
+ }
+
+ if (code&0x80) {
+ // break code
+ if (matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] &= ~(1<<COL(code));
+ }
+ } else {
+ // make code
+ if (!matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] |= (1<<COL(code));
+ }
+ }
+
+ matrix_scan_quantum();
+ return code;
+}
+
+bool matrix_is_modified(void)
+{
+ return is_modified;
+}
+
+inline
+bool matrix_has_ghost(void)
+{
+ return false;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & (1<<col));
+}
+
+inline
+uint8_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 01234567\n");
+ for (uint8_t row = 0; row < matrix_rows(); row++) {
+ phex(row); print(": ");
+ pbin_reverse(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 += bitpop(matrix[i]);
+ }
+ return count;
+}
diff --git a/keyboards/converter/sun_usb/readme.md b/keyboards/converter/sun_usb/readme.md
new file mode 100644
index 000000000..3470e6091
--- /dev/null
+++ b/keyboards/converter/sun_usb/readme.md
@@ -0,0 +1,89 @@
+# Sun to USB keyboard protocol converter
+
+A converter for using non-USB Sun keyboards.
+
+Original code from the [TMK firmware](https://github.com/tmk/tmk_keyboard/tree/master/converter/sun_usb). Ported to QMK by [Yann Hodique](https://github.com/sigma).
+
+Keyboard Maintainer: [Yann Hodique](https://github.com/sigma)
+Hardware Supported: See hardware section below
+Hardware Availability: self-built
+
+Make example for this keyboard (after setting up your build environment):
+
+ make converter/sun_usb/type5:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+
+## Hardware
+
+Target MCU is ATMega32u4 but other USB capable AVR will also work. The maintainer mostly uses Teensy 2.0 boards.
+Supported keyboards: Sun Type 3 and 5 Keyboards,
+
+### Connector
+
+8Pin mini DIN
+
+ ___ ___
+ / |_| \
+ / 8 7 6 \
+ | 5 4 3 |
+ \_ 2 1 _/
+ \_____/
+ (receptacle)
+
+
+Wiring:
+
+ Pin mini DIN MCU
+ ----------------------------------
+ 1 GND GND
+ 2 GND GND
+ 3 5V
+ 4 RX/TX(Mouse)
+ 5 RX PD3
+ 6 TX PD2
+ 7 GND GND
+ 8 5V VCC
+
+
+### Protocol
+
+ Signal: Asynchronous, Negative logic, 1200baud, No Flow control
+ Frame format: 1-Start bit, 8-Data bits, No-Parity, 1-Stop bit
+
+ AVR USART engine expects positive logic while Sun keyboard signal is negative.
+ To use AVR UART engine you need external inverter in front of RX and TX pin.
+ Otherwise you can software serial routine to communicate the keyboard.
+
+This converter uses software method, you doesn't need any inverter part.
+
+
+Commands From System To Keyboard
+
+ 0x01 Reset
+ Keyboard responds with following byte sequence:
+ Success: 0xFF 0x04 0x7F
+ Fail: 0x7E 0x01 0x7F
+ 0x02 Bell On
+ 0x03 Bell Off
+ 0x0A Click On
+ 0x0B Click Off
+ 0x0E LED
+ followed by LED status byte:
+ bit: 3 2 1 0
+ LED: CapsLk ScrLk Compose NumLk
+ 0x0F Layout
+ Keyboard responds with 'Layout Response' 0xFE 0xXX
+
+Commands From Keyboard To System
+
+ 0x7F Idle
+ means no keys pressed.
+ 0xFE Layout Response
+ 0xFF Reset Response(followed by 0x04)
+
+References
+
+* http://kentie.net/article/sunkbd/page2.htm
+* http://kentie.net/article/sunkbd/KBD.pdf
diff --git a/keyboards/converter/sun_usb/rules.mk b/keyboards/converter/sun_usb/rules.mk
new file mode 100644
index 000000000..3cf503b1d
--- /dev/null
+++ b/keyboards/converter/sun_usb/rules.mk
@@ -0,0 +1,44 @@
+MCU = atmega32u4 # Teensy 2.0
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = lufa-dfu
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # 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
+UNICODEMAP_ENABLE = yes
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+CUSTOM_MATRIX = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+#HARDWARE_SERIAL = yes
+
+SRC += matrix.c led.c
+
+ifdef HARDWARE_SERIAL
+ SRC += protocol/serial_uart.c
+ OPT_DEFS += -DHARDWARE_SERIAL
+else
+ SRC += protocol/serial_soft.c
+endif
+
+DEFAULT_FOLDER = converter/sun_usb/type5
diff --git a/keyboards/converter/sun_usb/type3/info.json b/keyboards/converter/sun_usb/type3/info.json
new file mode 100644
index 000000000..f8525b15c
--- /dev/null
+++ b/keyboards/converter/sun_usb/type3/info.json
@@ -0,0 +1,109 @@
+{
+ "keyboard_name": "Sun Type 3",
+ "keyboard_folder": "converter/sun_usb/type3",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 21,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"STOP", "x":0, "y":0},
+ {"label":"AGAIN", "x":1, "y":0},
+ {"label":"CAPS LOCK", "x":2.5, "y":0},
+ {"label":"F2", "x":3.5, "y":0},
+ {"label":"F3", "x":4.5, "y":0, "w":2},
+ {"label":"F4", "x":6.5, "y":0, "w":2},
+ {"label":"F5", "x":8.5, "y":0, "w":2},
+ {"label":"F6", "x":10.5, "y":0, "w":2},
+ {"label":"F7", "x":12.5, "y":0, "w":2},
+ {"label":"F8", "x":14.5, "y":0},
+ {"label":"F9", "x":15.5, "y":0},
+ {"label":"BACKSPACE", "x":16.5, "y":0},
+ {"label":"R1", "x":18, "y":0},
+ {"label":"R2", "x":19, "y":0},
+ {"label":"R3", "x":20, "y":0},
+ {"label":"PROPS", "x":0, "y":1},
+ {"label":"UNDO", "x":1, "y":1},
+ {"label":"ESC", "x":2.5, "y":1},
+ {"label":"1", "x":3.5, "y":1},
+ {"label":"2", "x":4.5, "y":1},
+ {"label":"3", "x":5.5, "y":1},
+ {"label":"4", "x":6.5, "y":1},
+ {"label":"5", "x":7.5, "y":1},
+ {"label":"6", "x":8.5, "y":1},
+ {"label":"7", "x":9.5, "y":1},
+ {"label":"8", "x":10.5, "y":1},
+ {"label":"9", "x":11.5, "y":1},
+ {"label":"0", "x":12.5, "y":1},
+ {"label":"MINUS", "x":13.5, "y":1},
+ {"label":"EQUAL", "x":14.5, "y":1},
+ {"label":"BACKSLASH", "x":15.5, "y":1},
+ {"label":"GRAVE", "x":16.5, "y":1},
+ {"label":"R4", "x":18, "y":1},
+ {"label":"R5", "x":19, "y":1},
+ {"label":"R6", "x":20, "y":1},
+ {"label":"FRONT", "x":0, "y":2},
+ {"label":"COPY", "x":1, "y":2},
+ {"label":"TAB", "x":2.5, "y":2, "w":1.5},
+ {"label":"Q", "x":4, "y":2},
+ {"label":"W", "x":5, "y":2},
+ {"label":"E", "x":6, "y":2},
+ {"label":"R", "x":7, "y":2},
+ {"label":"T", "x":8, "y":2},
+ {"label":"Y", "x":9, "y":2},
+ {"label":"U", "x":10, "y":2},
+ {"label":"I", "x":11, "y":2},
+ {"label":"O", "x":12, "y":2},
+ {"label":"P", "x":13, "y":2},
+ {"label":"LBRACKET", "x":14, "y":2},
+ {"label":"RBRACKET", "x":15, "y":2},
+ {"label":"DELETE", "x":16, "y":2, "w":1.5},
+ {"label":"R7", "x":18, "y":2},
+ {"label":"R8", "x":19, "y":2},
+ {"label":"R9", "x":20, "y":2},
+ {"label":"OPEN", "x":0, "y":3},
+ {"label":"PASTE", "x":1, "y":3},
+ {"label":"CONTROL", "x":2.5, "y":3, "w":1.75},
+ {"label":"A", "x":4.25, "y":3},
+ {"label":"S", "x":5.25, "y":3},
+ {"label":"D", "x":6.25, "y":3},
+ {"label":"F", "x":7.25, "y":3},
+ {"label":"G", "x":8.25, "y":3},
+ {"label":"H", "x":9.25, "y":3},
+ {"label":"J", "x":10.25, "y":3},
+ {"label":"K", "x":11.25, "y":3},
+ {"label":"L", "x":12.25, "y":3},
+ {"label":"SEMICOLON", "x":13.25, "y":3},
+ {"label":"QUOTE", "x":14.25, "y":3},
+ {"label":"RETURN", "x":15.25, "y":3, "w":2.25},
+ {"label":"R10", "x":18, "y":3},
+ {"label":"R11", "x":19, "y":3},
+ {"label":"R12", "x":20, "y":3},
+ {"label":"FIND", "x":0, "y":4},
+ {"label":"CUT", "x":1, "y":4},
+ {"label":"LSHIFT", "x":2.5, "y":4, "w":2.25},
+ {"label":"Z", "x":4.75, "y":4},
+ {"label":"X", "x":5.75, "y":4},
+ {"label":"C", "x":6.75, "y":4},
+ {"label":"V", "x":7.75, "y":4},
+ {"label":"B", "x":8.75, "y":4},
+ {"label":"N", "x":9.75, "y":4},
+ {"label":"M", "x":10.75, "y":4},
+ {"label":"COMMA", "x":11.75, "y":4},
+ {"label":"PERIOD", "x":12.75, "y":4},
+ {"label":"SLASH", "x":13.75, "y":4},
+ {"label":"RSHIFT", "x":14.75, "y":4, "w":1.75},
+ {"label":"LINE FEED", "x":16.5, "y":4},
+ {"label":"R13", "x":18, "y":4},
+ {"label":"R14", "x":19, "y":4},
+ {"label":"R15", "x":20, "y":4},
+ {"label":"CAPS", "x":2.5, "y":5, "w":1.25},
+ {"label":"LEFT", "x":3.75, "y":5, "w":1.5},
+ {"label":"SPACE", "x":5.25, "y":5, "w":9},
+ {"label":"RIGHT", "x":14.25, "y":5, "w":1.5},
+ {"label":"ALTERNATE", "x":15.75, "y":5, "w":1.75}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/sun_usb/type3/keymaps/default/keymap.c b/keyboards/converter/sun_usb/type3/keymaps/default/keymap.c
new file mode 100644
index 000000000..e8b4799b9
--- /dev/null
+++ b/keyboards/converter/sun_usb/type3/keymaps/default/keymap.c
@@ -0,0 +1,29 @@
+/*
+ Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ LAYOUT(
+ KC_F10,KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_BSPC, KC_VOLD, KC_MUTE, KC_VOLU,
+ KC_F12,KC_F13, 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_MPRV, KC_MPLY, KC_MNXT,
+ KC_F14,KC_F15, KC_TAB, KC_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_HOME, KC_UP, KC_PGUP,
+ KC_F16,KC_F17, 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_LEFT,KC_INSERT,KC_RIGHT,
+ KC_F18,KC_F19, 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_RCTL, KC_END, KC_DOWN,KC_PGDOWN,
+ KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI
+ ),
+};
diff --git a/keyboards/converter/sun_usb/type3/rules.mk b/keyboards/converter/sun_usb/type3/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/converter/sun_usb/type3/rules.mk
diff --git a/keyboards/converter/sun_usb/type3/type3.h b/keyboards/converter/sun_usb/type3/type3.h
new file mode 100644
index 000000000..f6f14f4ef
--- /dev/null
+++ b/keyboards/converter/sun_usb/type3/type3.h
@@ -0,0 +1,66 @@
+/*
+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/>.
+*/
+
+#ifndef TYPE3_H
+#define TYPE3_H
+
+#include "quantum.h"
+
+/* Sun type 3 keyboard
+,-------. ,-----------------------------------------------------------. ,-----------.
+| 01| 03| | 05| 06| 08| 0A| 0C| 0E| 10| 11| 12| 2B| | 15| 16| 17|
+|-------| |-----------------------------------------------------------| |-----------|
+| 19| 1A| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2D| 2E| 2F|
+|-------| |-----------------------------------------------------------| |-----------|
+| 31| 33| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 42 | | 44| 45| 46|
+|-------| |-----------------------------------------------------------| |-----------|
+| 48| 49| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D|
+|-------| |-----------------------------------------------------------| |-----------|
+| 5F| 61| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E| 6F| | 70| 71| 72|
+`-------' |-----------------------------------------------------------| `-----------'
+ | 77 | 78 | 79 | 7A | 13 |
+ `-----------------------------------------------------------'
+*/
+
+
+#define LAYOUT( \
+ K01,K03, K05,K06, K08, K0A, K0C, K0E, K10,K11,K12,K2B, K15,K16,K17, \
+ K19,K1A, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2D,K2E,K2F, \
+ K31,K33, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K42, K44,K45,K46, \
+ K48,K49, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \
+ K5F,K61, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E,K6F, K70,K71,K72, \
+ K77,K78, K79, K7A,K13 \
+) { \
+ { KC_NO, K01 , KC_NO, K03 , KC_NO, K05 , K06 , KC_NO }, \
+ { K08 , KC_NO, K0A , KC_NO, K0C , KC_NO, K0E , KC_NO }, \
+ { K10 , K11 , K12 , K13 , KC_NO, K15 , K16 , K17 }, \
+ { KC_NO, K19 , K1A , KC_NO, KC_NO, K1D , K1E , K1F }, \
+ { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \
+ { K28 , K29 , K2A , K2B , KC_NO, K2D , K2E , K2F }, \
+ { KC_NO, K31 , KC_NO, K33 , KC_NO, K35 , K36 , K37 }, \
+ { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \
+ { K40 , K41 , K42 , KC_NO, K44 , K45 , K46 , KC_NO }, \
+ { K48 , K49 , KC_NO, KC_NO, K4C , K4D , K4E , K4F }, \
+ { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \
+ { K58 , K59 , KC_NO, K5B , K5C , K5D , KC_NO, K5F }, \
+ { KC_NO, K61 , KC_NO, K63 , K64 , K65 , K66 , K67 }, \
+ { K68 , K69 , K6A , K6B , K6C , K6D , K6E , K6F }, \
+ { K70 , K71 , K72 , KC_NO, KC_NO, KC_NO, KC_NO, K77 }, \
+ { K78 , K79 , K7A , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
+}
+
+#endif
diff --git a/keyboards/converter/sun_usb/type5/info.json b/keyboards/converter/sun_usb/type5/info.json
new file mode 100644
index 000000000..6785bbc07
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/info.json
@@ -0,0 +1,381 @@
+{
+ "keyboard_name": "Sun Type 5",
+ "keyboard_folder": "converter/sun_usb/type5",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 24.75,
+ "height": 7,
+ "layouts": {
+ "LAYOUT_jp_unix": {
+ "layout": [
+ {"label":"HELP", "x":0, "y":0, "w":2},
+ {"label":"NO", "x":2.25, "y":0},
+ {"label":"F1", "x":4.25, "y":0},
+ {"label":"F2", "x":5.25, "y":0},
+ {"label":"F3", "x":6.25, "y":0},
+ {"label":"F4", "x":7.25, "y":0},
+ {"label":"F5", "x":8.75, "y":0},
+ {"label":"F6", "x":9.75, "y":0},
+ {"label":"F7", "x":10.75, "y":0},
+ {"label":"F8", "x":11.75, "y":0},
+ {"label":"F9", "x":13.25, "y":0},
+ {"label":"F10", "x":14.25, "y":0},
+ {"label":"F11", "x":15.25, "y":0},
+ {"label":"F12", "x":16.25, "y":0},
+ {"label":"PRINT SCREEN", "x":17.5, "y":0},
+ {"label":"SCROLL LOCK", "x":18.5, "y":0},
+ {"label":"PAUSE", "x":19.5, "y":0},
+ {"label":"MUTE", "x":20.75, "y":0},
+ {"label":"VOLD", "x":21.75, "y":0},
+ {"label":"VOLU", "x":22.75, "y":0},
+ {"label":"PWR", "x":23.75, "y":0},
+ {"label":"STOP", "x":0, "y":2},
+ {"label":"AGAIN", "x":1, "y":2},
+ {"label":"ESC", "x":2.25, "y":2},
+ {"label":"1", "x":3.25, "y":2},
+ {"label":"2", "x":4.25, "y":2},
+ {"label":"3", "x":5.25, "y":2},
+ {"label":"4", "x":6.25, "y":2},
+ {"label":"5", "x":7.25, "y":2},
+ {"label":"6", "x":8.25, "y":2},
+ {"label":"7", "x":9.25, "y":2},
+ {"label":"8", "x":10.25, "y":2},
+ {"label":"9", "x":11.25, "y":2},
+ {"label":"0", "x":12.25, "y":2},
+ {"label":"MINUS", "x":13.25, "y":2},
+ {"label":"EQUAL", "x":14.25, "y":2},
+ {"label":"BACKSLASH", "x":15.25, "y":2},
+ {"label":"GRAVE", "x":16.25, "y":2},
+ {"label":"INSERT", "x":17.5, "y":2},
+ {"label":"HOME", "x":18.5, "y":2},
+ {"label":"PAGE UP", "x":19.5, "y":2},
+ {"label":"NUM LOCK", "x":20.75, "y":2},
+ {"label":"PSLASH", "x":21.75, "y":2},
+ {"label":"PASTERISK", "x":22.75, "y":2},
+ {"label":"PMINUS", "x":23.75, "y":2},
+ {"label":"MENU", "x":0, "y":3},
+ {"label":"UNDO", "x":1, "y":3},
+ {"label":"TAB", "x":2.25, "y":3, "w":1.5},
+ {"label":"Q", "x":3.75, "y":3},
+ {"label":"W", "x":4.75, "y":3},
+ {"label":"E", "x":5.75, "y":3},
+ {"label":"R", "x":6.75, "y":3},
+ {"label":"T", "x":7.75, "y":3},
+ {"label":"Y", "x":8.75, "y":3},
+ {"label":"U", "x":9.75, "y":3},
+ {"label":"I", "x":10.75, "y":3},
+ {"label":"O", "x":11.75, "y":3},
+ {"label":"P", "x":12.75, "y":3},
+ {"label":"LBRACKET", "x":13.75, "y":3},
+ {"label":"RBRACKET", "x":14.75, "y":3},
+ {"label":"BACKSPACE", "x":15.75, "y":3, "w":1.5},
+ {"label":"DELETE", "x":17.5, "y":3},
+ {"label":"END", "x":18.5, "y":3},
+ {"label":"PAGE DOWN", "x":19.5, "y":3},
+ {"label":"P7", "x":20.75, "y":3},
+ {"label":"P8", "x":21.75, "y":3},
+ {"label":"P9", "x":22.75, "y":3},
+ {"label":"PPLUS", "x":23.75, "y":3, "h":2},
+ {"label":"SELECT", "x":0, "y":4},
+ {"label":"COPY", "x":1, "y":4},
+ {"label":"LCTRL", "x":2.25, "y":4, "w":1.75},
+ {"label":"A", "x":4, "y":4},
+ {"label":"S", "x":5, "y":4},
+ {"label":"D", "x":6, "y":4},
+ {"label":"F", "x":7, "y":4},
+ {"label":"G", "x":8, "y":4},
+ {"label":"H", "x":9, "y":4},
+ {"label":"J", "x":10, "y":4},
+ {"label":"K", "x":11, "y":4},
+ {"label":"L", "x":12, "y":4},
+ {"label":"SEMICOLON", "x":13, "y":4},
+ {"label":"QUOTE", "x":14, "y":4},
+ {"label":"ENTER", "x":15, "y":4, "w":2.25},
+ {"label":"P4", "x":20.75, "y":4},
+ {"label":"P5", "x":21.75, "y":4},
+ {"label":"P6", "x":22.75, "y":4},
+ {"label":"EXECUTE", "x":0, "y":5},
+ {"label":"PASTE", "x":1, "y":5},
+ {"label":"LSHIFT", "x":2.25, "y":5, "w":2.25},
+ {"label":"Z", "x":4.5, "y":5},
+ {"label":"X", "x":5.5, "y":5},
+ {"label":"C", "x":6.5, "y":5},
+ {"label":"V", "x":7.5, "y":5},
+ {"label":"B", "x":8.5, "y":5},
+ {"label":"N", "x":9.5, "y":5},
+ {"label":"M", "x":10.5, "y":5},
+ {"label":"COMMA", "x":11.5, "y":5},
+ {"label":"PERIOD", "x":12.5, "y":5},
+ {"label":"SLASH", "x":13.5, "y":5},
+ {"label":"RSHIFT", "x":14.5, "y":5, "w":2.75},
+ {"label":"UP", "x":18.5, "y":5},
+ {"label":"P1", "x":20.75, "y":5},
+ {"label":"P2", "x":21.75, "y":5},
+ {"label":"P3", "x":22.75, "y":5},
+ {"label":"PENTER", "x":23.75, "y":5, "h":2},
+ {"label":"FIND", "x":0, "y":6},
+ {"label":"CUT", "x":1, "y":6},
+ {"label":"CAPS LOCK", "x":2.25, "y":6},
+ {"label":"LALT", "x":3.25, "y":6},
+ {"label":"LGUI", "x":4.25, "y":6},
+ {"label":"HENKAN", "x":5.25, "y":6, "w":1.5},
+ {"label":"SPACE", "x":6.75, "y":6, "w":5},
+ {"label":"MUHENKAN", "x":11.75, "y":6, "w":1.5},
+ {"label":"KANA", "x":13.25, "y":6},
+ {"label":"RGUI", "x":14.25, "y":6},
+ {"label":"APP", "x":15.25, "y":6},
+ {"label":"RALT", "x":16.25, "y":6},
+ {"label":"LEFT", "x":17.5, "y":6},
+ {"label":"DOWN", "x":18.5, "y":6},
+ {"label":"RIGHT", "x":19.5, "y":6},
+ {"label":"P0", "x":20.75, "y":6, "w":2},
+ {"label":"PDOT", "x":22.75, "y":6}
+ ]
+ },
+ "LAYOUT_us_unix": {
+ "layout": [
+ {"label":"HELP", "x":0, "y":0, "w":2},
+ {"label":"NO", "x":2.25, "y":0},
+ {"label":"F1", "x":4.25, "y":0},
+ {"label":"F2", "x":5.25, "y":0},
+ {"label":"F3", "x":6.25, "y":0},
+ {"label":"F4", "x":7.25, "y":0},
+ {"label":"F5", "x":8.75, "y":0},
+ {"label":"F6", "x":9.75, "y":0},
+ {"label":"F7", "x":10.75, "y":0},
+ {"label":"F8", "x":11.75, "y":0},
+ {"label":"F9", "x":13.25, "y":0},
+ {"label":"F10", "x":14.25, "y":0},
+ {"label":"F11", "x":15.25, "y":0},
+ {"label":"F12", "x":16.25, "y":0},
+ {"label":"PRINT SCREEN", "x":17.5, "y":0},
+ {"label":"SCROLL LOCK", "x":18.5, "y":0},
+ {"label":"PAUSE", "x":19.5, "y":0},
+ {"label":"MUTE", "x":20.75, "y":0},
+ {"label":"VOLD", "x":21.75, "y":0},
+ {"label":"VOLU", "x":22.75, "y":0},
+ {"label":"PWR", "x":23.75, "y":0},
+ {"label":"STOP", "x":0, "y":2},
+ {"label":"AGAIN", "x":1, "y":2},
+ {"label":"ESC", "x":2.25, "y":2},
+ {"label":"1", "x":3.25, "y":2},
+ {"label":"2", "x":4.25, "y":2},
+ {"label":"3", "x":5.25, "y":2},
+ {"label":"4", "x":6.25, "y":2},
+ {"label":"5", "x":7.25, "y":2},
+ {"label":"6", "x":8.25, "y":2},
+ {"label":"7", "x":9.25, "y":2},
+ {"label":"8", "x":10.25, "y":2},
+ {"label":"9", "x":11.25, "y":2},
+ {"label":"0", "x":12.25, "y":2},
+ {"label":"MINUS", "x":13.25, "y":2},
+ {"label":"EQUAL", "x":14.25, "y":2},
+ {"label":"BACKSLASH", "x":15.25, "y":2},
+ {"label":"GRAVE", "x":16.25, "y":2},
+ {"label":"INSERT", "x":17.5, "y":2},
+ {"label":"HOME", "x":18.5, "y":2},
+ {"label":"PAGE UP", "x":19.5, "y":2},
+ {"label":"NUM LOCK", "x":20.75, "y":2},
+ {"label":"PSLASH", "x":21.75, "y":2},
+ {"label":"PASTERISK", "x":22.75, "y":2},
+ {"label":"PMINUS", "x":23.75, "y":2},
+ {"label":"MENU", "x":0, "y":3},
+ {"label":"UNDO", "x":1, "y":3},
+ {"label":"TAB", "x":2.25, "y":3, "w":1.5},
+ {"label":"Q", "x":3.75, "y":3},
+ {"label":"W", "x":4.75, "y":3},
+ {"label":"E", "x":5.75, "y":3},
+ {"label":"R", "x":6.75, "y":3},
+ {"label":"T", "x":7.75, "y":3},
+ {"label":"Y", "x":8.75, "y":3},
+ {"label":"U", "x":9.75, "y":3},
+ {"label":"I", "x":10.75, "y":3},
+ {"label":"O", "x":11.75, "y":3},
+ {"label":"P", "x":12.75, "y":3},
+ {"label":"LBRACKET", "x":13.75, "y":3},
+ {"label":"RBRACKET", "x":14.75, "y":3},
+ {"label":"BACKSPACE", "x":15.75, "y":3, "w":1.5},
+ {"label":"DELETE", "x":17.5, "y":3},
+ {"label":"END", "x":18.5, "y":3},
+ {"label":"PAGE DOWN", "x":19.5, "y":3},
+ {"label":"P7", "x":20.75, "y":3},
+ {"label":"P8", "x":21.75, "y":3},
+ {"label":"P9", "x":22.75, "y":3},
+ {"label":"PPLUS", "x":23.75, "y":3, "h":2},
+ {"label":"SELECT", "x":0, "y":4},
+ {"label":"COPY", "x":1, "y":4},
+ {"label":"LCTRL", "x":2.25, "y":4, "w":1.75},
+ {"label":"A", "x":4, "y":4},
+ {"label":"S", "x":5, "y":4},
+ {"label":"D", "x":6, "y":4},
+ {"label":"F", "x":7, "y":4},
+ {"label":"G", "x":8, "y":4},
+ {"label":"H", "x":9, "y":4},
+ {"label":"J", "x":10, "y":4},
+ {"label":"K", "x":11, "y":4},
+ {"label":"L", "x":12, "y":4},
+ {"label":"SEMICOLON", "x":13, "y":4},
+ {"label":"QUOTE", "x":14, "y":4},
+ {"label":"ENTER", "x":15, "y":4, "w":2.25},
+ {"label":"P4", "x":20.75, "y":4},
+ {"label":"P5", "x":21.75, "y":4},
+ {"label":"P6", "x":22.75, "y":4},
+ {"label":"EXECUTE", "x":0, "y":5},
+ {"label":"PASTE", "x":1, "y":5},
+ {"label":"LSHIFT", "x":2.25, "y":5, "w":2.25},
+ {"label":"Z", "x":4.5, "y":5},
+ {"label":"X", "x":5.5, "y":5},
+ {"label":"C", "x":6.5, "y":5},
+ {"label":"V", "x":7.5, "y":5},
+ {"label":"B", "x":8.5, "y":5},
+ {"label":"N", "x":9.5, "y":5},
+ {"label":"M", "x":10.5, "y":5},
+ {"label":"COMMA", "x":11.5, "y":5},
+ {"label":"PERIOD", "x":12.5, "y":5},
+ {"label":"SLASH", "x":13.5, "y":5},
+ {"label":"RSHIFT", "x":14.5, "y":5, "w":2.75},
+ {"label":"UP", "x":18.5, "y":5},
+ {"label":"P1", "x":20.75, "y":5},
+ {"label":"P2", "x":21.75, "y":5},
+ {"label":"P3", "x":22.75, "y":5},
+ {"label":"PENTER", "x":23.75, "y":5, "h":2},
+ {"label":"FIND", "x":0, "y":6},
+ {"label":"CUT", "x":1, "y":6},
+ {"label":"CAPS LOCK", "x":2.25, "y":6, "w":1.75},
+ {"label":"LALT", "x":4, "y":6},
+ {"label":"LGUI", "x":5, "y":6},
+ {"label":"SPACE", "x":6, "y":6, "w":8.25},
+ {"label":"RGUI", "x":14.25, "y":6},
+ {"label":"APP", "x":15.25, "y":6},
+ {"label":"RALT", "x":16.25, "y":6},
+ {"label":"LEFT", "x":17.5, "y":6},
+ {"label":"DOWN", "x":18.5, "y":6},
+ {"label":"RIGHT", "x":19.5, "y":6},
+ {"label":"P0", "x":20.75, "y":6, "w":2},
+ {"label":"PDOT", "x":22.75, "y":6}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "layout": [
+ {"label":"HELP", "x":0, "y":0, "w":2},
+ {"label":"ESC", "x":2.25, "y":0},
+ {"label":"F1", "x":4.25, "y":0},
+ {"label":"F2", "x":5.25, "y":0},
+ {"label":"F3", "x":6.25, "y":0},
+ {"label":"F4", "x":7.25, "y":0},
+ {"label":"F5", "x":8.75, "y":0},
+ {"label":"F6", "x":9.75, "y":0},
+ {"label":"F7", "x":10.75, "y":0},
+ {"label":"F8", "x":11.75, "y":0},
+ {"label":"F9", "x":13.25, "y":0},
+ {"label":"F10", "x":14.25, "y":0},
+ {"label":"F11", "x":15.25, "y":0},
+ {"label":"F12", "x":16.25, "y":0},
+ {"label":"PRINT SCREEN", "x":17.5, "y":0},
+ {"label":"SCROLL LOCK", "x":18.5, "y":0},
+ {"label":"PAUSE", "x":19.5, "y":0},
+ {"label":"MUTE", "x":20.75, "y":0},
+ {"label":"VOLD", "x":21.75, "y":0},
+ {"label":"VOLU", "x":22.75, "y":0},
+ {"label":"PWR", "x":23.75, "y":0},
+ {"label":"STOP", "x":0, "y":2},
+ {"label":"AGAIN", "x":1, "y":2},
+ {"label":"GRAVE", "x":2.25, "y":2},
+ {"label":"1", "x":3.25, "y":2},
+ {"label":"2", "x":4.25, "y":2},
+ {"label":"3", "x":5.25, "y":2},
+ {"label":"4", "x":6.25, "y":2},
+ {"label":"5", "x":7.25, "y":2},
+ {"label":"6", "x":8.25, "y":2},
+ {"label":"7", "x":9.25, "y":2},
+ {"label":"8", "x":10.25, "y":2},
+ {"label":"9", "x":11.25, "y":2},
+ {"label":"0", "x":12.25, "y":2},
+ {"label":"MINUS", "x":13.25, "y":2},
+ {"label":"EQUAL", "x":14.25, "y":2},
+ {"label":"BACKSPACE", "x":15.25, "y":2, "w":2},
+ {"label":"INSERT", "x":17.5, "y":2},
+ {"label":"HOME", "x":18.5, "y":2},
+ {"label":"PAGE UP", "x":19.5, "y":2},
+ {"label":"NUM LOCK", "x":20.75, "y":2},
+ {"label":"PSLASH", "x":21.75, "y":2},
+ {"label":"PASTERISK", "x":22.75, "y":2},
+ {"label":"PMINUS", "x":23.75, "y":2},
+ {"label":"MENU", "x":0, "y":3},
+ {"label":"UNDO", "x":1, "y":3},
+ {"label":"TAB", "x":2.25, "y":3, "w":1.5},
+ {"label":"Q", "x":3.75, "y":3},
+ {"label":"W", "x":4.75, "y":3},
+ {"label":"E", "x":5.75, "y":3},
+ {"label":"R", "x":6.75, "y":3},
+ {"label":"T", "x":7.75, "y":3},
+ {"label":"Y", "x":8.75, "y":3},
+ {"label":"U", "x":9.75, "y":3},
+ {"label":"I", "x":10.75, "y":3},
+ {"label":"O", "x":11.75, "y":3},
+ {"label":"P", "x":12.75, "y":3},
+ {"label":"LBRACKET", "x":13.75, "y":3},
+ {"label":"RBRACKET", "x":14.75, "y":3},
+ {"label":"BACKSLASH", "x":15.75, "y":3, "w":1.5},
+ {"label":"DELETE", "x":17.5, "y":3},
+ {"label":"END", "x":18.5, "y":3},
+ {"label":"PAGE DOWN", "x":19.5, "y":3},
+ {"label":"P7", "x":20.75, "y":3},
+ {"label":"P8", "x":21.75, "y":3},
+ {"label":"P9", "x":22.75, "y":3},
+ {"label":"PPLUS", "x":23.75, "y":3, "h":2},
+ {"label":"SELECT", "x":0, "y":4},
+ {"label":"COPY", "x":1, "y":4},
+ {"label":"CAPS LOCK", "x":2.25, "y":4, "w":1.75},
+ {"label":"A", "x":4, "y":4},
+ {"label":"S", "x":5, "y":4},
+ {"label":"D", "x":6, "y":4},
+ {"label":"F", "x":7, "y":4},
+ {"label":"G", "x":8, "y":4},
+ {"label":"H", "x":9, "y":4},
+ {"label":"J", "x":10, "y":4},
+ {"label":"K", "x":11, "y":4},
+ {"label":"L", "x":12, "y":4},
+ {"label":"SEMICOLON", "x":13, "y":4},
+ {"label":"QUOTE", "x":14, "y":4},
+ {"label":"ENTER", "x":15, "y":4, "w":2.25},
+ {"label":"P4", "x":20.75, "y":4},
+ {"label":"P5", "x":21.75, "y":4},
+ {"label":"P6", "x":22.75, "y":4},
+ {"label":"EXECUTE", "x":0, "y":5},
+ {"label":"PASTE", "x":1, "y":5},
+ {"label":"LSHIFT", "x":2.25, "y":5, "w":2.25},
+ {"label":"Z", "x":4.5, "y":5},
+ {"label":"X", "x":5.5, "y":5},
+ {"label":"C", "x":6.5, "y":5},
+ {"label":"V", "x":7.5, "y":5},
+ {"label":"B", "x":8.5, "y":5},
+ {"label":"N", "x":9.5, "y":5},
+ {"label":"M", "x":10.5, "y":5},
+ {"label":"COMMA", "x":11.5, "y":5},
+ {"label":"PERIOD", "x":12.5, "y":5},
+ {"label":"SLASH", "x":13.5, "y":5},
+ {"label":"RSHIFT", "x":14.5, "y":5, "w":2.75},
+ {"label":"UP", "x":18.5, "y":5},
+ {"label":"P1", "x":20.75, "y":5},
+ {"label":"P2", "x":21.75, "y":5},
+ {"label":"P3", "x":22.75, "y":5},
+ {"label":"PENTER", "x":23.75, "y":5, "h":2},
+ {"label":"FIND", "x":0, "y":6},
+ {"label":"CUT", "x":1, "y":6},
+ {"label":"LCTRL", "x":2.25, "y":6, "w":1.75},
+ {"label":"LALT", "x":4, "y":6},
+ {"label":"LGUI", "x":5, "y":6},
+ {"label":"SPACE", "x":6, "y":6, "w":8.25},
+ {"label":"RGUI", "x":14.25, "y":6},
+ {"label":"APP", "x":15.25, "y":6},
+ {"label":"RALT", "x":16.25, "y":6},
+ {"label":"LEFT", "x":17.5, "y":6},
+ {"label":"DOWN", "x":18.5, "y":6},
+ {"label":"RIGHT", "x":19.5, "y":6},
+ {"label":"P0", "x":20.75, "y":6, "w":2},
+ {"label":"PDOT", "x":22.75, "y":6}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/sun_usb/type5/keymaps/default/keymap.c b/keyboards/converter/sun_usb/type5/keymaps/default/keymap.c
new file mode 100644
index 000000000..5e04ff4b3
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/keymaps/default/keymap.c
@@ -0,0 +1,30 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* LAYOUT_jp_unix is a superset of the other layouts, hence the default */
+ LAYOUT_jp_unix(
+ KC_HELP, KC_NO, KC_F1,KC_F2,KC_F3,KC_F4, KC_F5,KC_F6,KC_F7,KC_F8, KC_F9,KC_F10,KC_F11,KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, KC_MUTE,KC_VOLD,KC_VOLU,KC_PWR,
+ KC_STOP, KC_AGAIN, 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_INS, KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,
+ KC_MENU, KC_UNDO, KC_TAB, KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC, KC_BSPC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_SELECT, KC_COPY, KC_LCTL, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_EXECUTE,KC_PASTE, 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_FIND, KC_CUT, KC_CAPS,KC_LALT,KC_LGUI,KC_HENK, KC_SPC, KC_MHEN,KC_KANA,KC_RGUI,KC_APP,KC_RALT, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT
+ ),
+};
diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c b/keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c
new file mode 100644
index 000000000..1c7ea3efc
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/keymaps/sigma/keymap.c
@@ -0,0 +1,31 @@
+/*
+Copyright 2018 Yann Hodique <yann.hodique@gmail.com> @sigma
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You 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 "sigma.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] =
+ {
+ [_QWERTY] = LAYOUT_us_unix(
+ KC_LEAD, KC_SCRT, KC_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_MUTE,KC_VOLD,KC_VOLU,KC_OS_LOCK,
+ KC_STOP, KC_OS_REDO, 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_INS, KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,
+ VRSN, KC_OS_UNDO, KC_TAB, KC_Q,KC_W,KC_E,KC_R,KC_T,KC_Y,KC_U,KC_I,KC_O,KC_P,KC_LBRC,KC_RBRC, KC_BSPC, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_MAKE, KC_OS_COPY, KC_LCTL, KC_A,KC_S,KC_D,KC_F,KC_G,KC_H,KC_J,KC_K,KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_EXECUTE,KC_OS_PASTE, 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_FIND, KC_OS_CUT, KC_CAPS,KC_LGUI,KC_LALT, KC_SPC, KC_RGUI,KC_APP,KC_RALT, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT
+ ),
+ };
diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md b/keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md
new file mode 100644
index 000000000..6ae011f86
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/keymaps/sigma/readme.md
@@ -0,0 +1,12 @@
+Overview
+========
+
+This is my personal Sun Type 5 configuration.
+
+How to build
+------------
+
+ make converter/sun_usb/type5:sigma:teensy
+
+Layers
+------
diff --git a/keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk b/keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk
new file mode 100644
index 000000000..09a3af829
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/keymaps/sigma/rules.mk
@@ -0,0 +1 @@
+BOOTLOADER = halfkay
diff --git a/keyboards/converter/sun_usb/type5/rules.mk b/keyboards/converter/sun_usb/type5/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/rules.mk
diff --git a/keyboards/converter/sun_usb/type5/type5.h b/keyboards/converter/sun_usb/type5/type5.h
new file mode 100644
index 000000000..da66d80ab
--- /dev/null
+++ b/keyboards/converter/sun_usb/type5/type5.h
@@ -0,0 +1,148 @@
+/*
+ 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/>.
+*/
+
+#ifndef TYPE5_H
+#define TYPE5_H
+
+#include "quantum.h"
+
+/* sun type 5 keyboard, JP Unix-style
+,-------. ,---, ,---------------. ,---------------. ,---------------. ,-----------. ,---------------.
+| 76 | | 0F| | 05| 06| 08| 0A| | 0C| 0E| 10| 11| | 12| 07| 09| 0B| | 16| 17| 15| | 2D| 02| 04| 30|
+`-------' `---' `---------------' `---------------' `---------------' `-----------' `---------------'
+,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
+| 01| 03| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2C| 34| 60| | 62| 2E| 2F| 47|
+|-------| |-----------------------------------------------------------| |------------ |---------------|
+| 19| 1A| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 2B | | 42| 4A| 7B| | 44| 45| 46| |
+|-------| |-----------------------------------------------------------| `-----------' |-----------| 7D|
+| 31| 33| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D| |
+|-------| |-----------------------------------------------------------| ,---. |-----------|---|
+| 48| 49| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E | | 14| | 70| 71| 72| |
+|-------| |-----------------------------------------------------------| .-----------. |-----------| 5A|
+| 5F| 61| | 77 | 13| 78 |*73 | 79 |*74 |*75| 7A | 43| 0D| | 18| 1B| 1C| | 5E | 32| |
+`-------' `-----------------------------------------------------------' `-----------' `---------------'
+*/
+#define LAYOUT_jp_unix( \
+ K76, K0F, K05,K06,K08,K0A, K0C,K0E,K10,K11, K12,K07,K09,K0B, K16,K17,K15, K2D,K02,K04,K30, \
+ K01,K03, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2C,K34,K60, K62,K2E,K2F,K47, \
+ K19,K1A, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K2B, K42,K4A,K7B, K44,K45,K46,K7D, \
+ K31,K33, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \
+ K48,K49, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E, K14, K70,K71,K72,K5A, \
+ K5F,K61, K77,K13, K78, K73, K79, K74, K75, K7A, K43, K0D, K18,K1B,K1C, K5E, K32 \
+) { \
+ { KC_NO, K01 , K02 , K03 , K04 , K05 , K06 , K07 }, \
+ { K08 , K09 , K0A , K0B , K0C , K0D , K0E , K0F ,}, \
+ { K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 }, \
+ { K18 , K19 , K1A , K1B , K1C , K1D , K1E , K1F }, \
+ { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \
+ { K28 , K29 , K2A , K2B , K2C , K2D , K2E , K2F }, \
+ { K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 }, \
+ { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \
+ { K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 }, \
+ { K48 , K49 , K4A , KC_NO, K4C , K4D , K4E , K4F }, \
+ { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \
+ { K58 , K59 , K5A , K5B , K5C , K5D , K5E , K5F }, \
+ { K60 , K61 , K62 , K63 , K64 , K65 , K66 , K67 }, \
+ { K68 , K69 , K6A , K6B , K6C , K6D , K6E , KC_NO }, \
+ { K70 , K71 , K72 , K73 , K74 , K75 , K76 , K77 }, \
+ { K78 , K79 , K7A , K7B , KC_NO, K7D , KC_NO, KC_NO } \
+}
+
+/* Sun type 5 keyboard, US Unix-style
+,-------. ,---, ,---------------. ,---------------. ,---------------. ,-----------. ,---------------.
+| 76 | | 0F| | 05| 06| 08| 0A| | 0C| 0E| 10| 11| | 12| 07| 09| 0B| | 16| 17| 15| | 2D| 02| 04| 30|
+`-------' `---' `---------------' `---------------' `---------------' `-----------' `---------------'
+,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
+| 01| 03| | 1D| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 58| 2A| | 2C| 34| 60| | 62| 2E| 2F| 47|
+|-------| |-----------------------------------------------------------| |------------ |---------------|
+| 19| 1A| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 2B | | 42| 4A| 7B| | 44| 45| 46| |
+|-------| |-----------------------------------------------------------| `-----------' |-----------| 7D|
+| 31| 33| | 4C | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D| |
+|-------| |-----------------------------------------------------------| ,---. |-----------|---|
+| 48| 49| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E | | 14| | 70| 71| 72| |
+|-------| |-----------------------------------------------------------| .-----------. |-----------| 5A|
+| 5F| 61| | 77 | 13| 78 | 79 | 7A | 43| 0D| | 18| 1B| 1C| | 5E | 32| |
+`-------' `-----------------------------------------------------------' `-----------' `---------------'
+*/
+#define LAYOUT_us_unix( \
+ K76, K0F, K05,K06,K08,K0A, K0C,K0E,K10,K11, K12,K07,K09,K0B, K16,K17,K15, K2D,K02,K04,K30, \
+ K01,K03, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K58,K2A, K2C,K34,K60, K62,K2E,K2F,K47, \
+ K19,K1A, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K2B, K42,K4A,K7B, K44,K45,K46,K7D, \
+ K31,K33, K4C, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \
+ K48,K49, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E, K14, K70,K71,K72,K5A, \
+ K5F,K61, K77,K13, K78, K79, K7A, K43, K0D, K18,K1B,K1C, K5E, K32 \
+) { \
+ { KC_NO, K01 , K02 , K03 , K04 , K05 , K06 , K07 }, \
+ { K08 , K09 , K0A , K0B , K0C , K0D , K0E , K0F ,}, \
+ { K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 }, \
+ { K18 , K19 , K1A , K1B , K1C , K1D , K1E , K1F }, \
+ { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \
+ { K28 , K29 , K2A , K2B , K2C , K2D , K2E , K2F }, \
+ { K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 }, \
+ { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \
+ { K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 }, \
+ { K48 , K49 , K4A , KC_NO, K4C , K4D , K4E , K4F }, \
+ { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \
+ { K58 , K59 , K5A , K5B , K5C , K5D , K5E , K5F }, \
+ { K60 , K61 , K62 , K63 , K64 , K65 , K66 , K67 }, \
+ { K68 , K69 , K6A , K6B , K6C , K6D , K6E , KC_NO }, \
+ { K70 , K71 , K72 , KC_NO, KC_NO, KC_NO, K76 , K77 }, \
+ { K78 , K79 , K7A , K7B , KC_NO, K7D , KC_NO, KC_NO } \
+}
+
+/* Sun type 5 keyboard, US ANSI-style
+ ,-------. ,---, ,---------------. ,---------------. ,---------------. ,-----------. ,---------------.
+ | 76 | | 1D| | 05| 06| 08| 0A| | 0C| 0E| 10| 11| | 12| 07| 09| 0B| | 16| 17| 15| | 2D| 02| 04| 30|
+ `-------' `---' `---------------' `---------------' `---------------' `-----------' `---------------'
+ ,-------. ,-----------------------------------------------------------. ,-----------. ,---------------.
+ | 01| 03| | 2A| 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| 2B | | 2C| 34| 60| | 62| 2E| 2F| 47|
+ |-------| |-----------------------------------------------------------| |------------ |---------------|
+ | 19| 1A| | 35 | 36| 37| 38| 39| 3A| 3B| 3C| 3D| 3E| 3F| 40| 41| 58 | | 42| 4A| 7B| | 44| 45| 46| |
+ |-------| |-----------------------------------------------------------| `-----------' |-----------| 7D|
+ | 31| 33| | 77 | 4D| 4E| 4F| 50| 51| 52| 53| 54| 55| 56| 57| 59 | | 5B| 5C| 5D| |
+ |-------| |-----------------------------------------------------------| ,---. |-----------|---|
+ | 48| 49| | 63 | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E | | 14| | 70| 71| 72| |
+ |-------| |-----------------------------------------------------------| .-----------. |-----------| 5A|
+ | 5F| 61| | 4C | 13| 78 | 79 | 7A | 43| 0D| | 18| 1B| 1C| | 5E | 32| |
+ `-------' `-----------------------------------------------------------' `-----------' `---------------'
+*/
+#define LAYOUT_ansi( \
+ K76, K1D, K05,K06,K08,K0A, K0C,K0E,K10,K11, K12,K07,K09,K0B, K16,K17,K15, K2D,K02,K04,K30, \
+ K01,K03, K2A,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29, K2B, K2C,K34,K60, K62,K2E,K2F,K47, \
+ K19,K1A, K35, K36,K37,K38,K39,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41, K58, K42,K4A,K7B, K44,K45,K46,K7D, \
+ K31,K33, K77, K4D,K4E,K4F,K50,K51,K52,K53,K54,K55,K56,K57, K59, K5B,K5C,K5D, \
+ K48,K49, K63, K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D, K6E, K14, K70,K71,K72,K5A, \
+ K5F,K61, K4C,K13, K78, K79, K7A, K43, K0D, K18,K1B,K1C, K5E, K32 \
+) { \
+ { KC_NO, K01 , K02 , K03 , K04 , K05 , K06 , K07 }, \
+ { K08 , K09 , K0A , K0B , K0C , K0D , K0E , KC_NO,}, \
+ { K10 , K11 , K12 , K13 , K14 , K15 , K16 , K17 }, \
+ { K18 , K19 , K1A , K1B , K1C , K1D , K1E , K1F }, \
+ { K20 , K21 , K22 , K23 , K24 , K25 , K26 , K27 }, \
+ { K28 , K29 , K2A , K2B , K2C , K2D , K2E , K2F }, \
+ { K30 , K31 , K32 , K33 , K34 , K35 , K36 , K37 }, \
+ { K38 , K39 , K3A , K3B , K3C , K3D , K3E , K3F }, \
+ { K40 , K41 , K42 , K43 , K44 , K45 , K46 , K47 }, \
+ { K48 , K49 , K4A , KC_NO, K4C , K4D , K4E , K4F }, \
+ { K50 , K51 , K52 , K53 , K54 , K55 , K56 , K57 }, \
+ { K58 , K59 , K5A , K5B , K5C , K5D , K5E , K5F }, \
+ { K60 , K61 , K62 , K63 , K64 , K65 , K66 , K67 }, \
+ { K68 , K69 , K6A , K6B , K6C , K6D , K6E , KC_NO }, \
+ { K70 , K71 , K72 , KC_NO, KC_NO, KC_NO, K76 , K77 }, \
+ { K78 , K79 , K7A , K7B , KC_NO, K7D , KC_NO, KC_NO } \
+}
+#endif
diff --git a/keyboards/converter/usb_usb/README.md b/keyboards/converter/usb_usb/README.md
index b529fbd28..faee7a5fd 100644
--- a/keyboards/converter/usb_usb/README.md
+++ b/keyboards/converter/usb_usb/README.md
@@ -3,8 +3,8 @@ USB to USB keyboard protocol converter
A small device to connect between your USB keyboard and your PC that makes (almost) every keyboard fully programmable.
Original code from the [TMK firmware](https://github.com/tmk/tmk_keyboard/tree/master/converter/usb_usb). Ported to QMK by [Balz Guenat](https://github.com/BalzGuenat).
-Keyboard Maintainer: [Balz Guenat](https://github.com/BalzGuenat)
-Hardware Supported: [Hasu's USB-USB converter](https://geekhack.org/index.php?topic=69169.0), [Pro Micro + USB Host Shield](https://geekhack.org/index.php?topic=80421.0), maybe more
+Keyboard Maintainer: [Balz Guenat](https://github.com/BalzGuenat)
+Hardware Supported: [Hasu's USB-USB converter](https://geekhack.org/index.php?topic=69169.0), [Pro Micro + USB Host Shield](https://geekhack.org/index.php?topic=80421.0), maybe more
Hardware Availability: [GH thread](https://geekhack.org/index.php?topic=72052.0), self-built
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/converter/usb_usb/ble/config.h b/keyboards/converter/usb_usb/ble/config.h
index 45aa778d5..3bf3b2963 100644
--- a/keyboards/converter/usb_usb/ble/config.h
+++ b/keyboards/converter/usb_usb/ble/config.h
@@ -1,13 +1,15 @@
-#ifndef CONFIG_BLE_H
-#define CONFIG_BLE_H
+#pragma once
#undef PRODUCT
#define PRODUCT QMK BLE Adapter
#undef DESCRIPTION
-#define DESCRIPTION
+#define DESCRIPTION
// Turn off the mode leds on the BLE module
#define ADAFRUIT_BLE_ENABLE_MODE_LEDS 0
#define ADAFRUIT_BLE_ENABLE_POWER_LED 0
-#endif
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+#define NO_ACTION_ONESHOT
+
diff --git a/keyboards/converter/usb_usb/ble/rules.mk b/keyboards/converter/usb_usb/ble/rules.mk
index 16090962d..f5ab3880b 100644
--- a/keyboards/converter/usb_usb/ble/rules.mk
+++ b/keyboards/converter/usb_usb/ble/rules.mk
@@ -1,3 +1,23 @@
BLUETOOTH = AdafruitBLE
ADAFRUIT_BLE_ENABLE = yes
F_CPU = 8000000
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+
+EXTRAFLAGS += -flto
diff --git a/keyboards/converter/usb_usb/info.json b/keyboards/converter/usb_usb/info.json
new file mode 100644
index 000000000..af3dd0b5e
--- /dev/null
+++ b/keyboards/converter/usb_usb/info.json
@@ -0,0 +1,485 @@
+{
+ "keyboard_name": "converter/usb_usb",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 22.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label":"F13", "x":2, "y":0},
+ {"label":"F14", "x":3, "y":0},
+ {"label":"F15", "x":4, "y":0},
+ {"label":"F16", "x":5, "y":0},
+ {"label":"F17", "x":6.5, "y":0},
+ {"label":"F18", "x":7.5, "y":0},
+ {"label":"F19", "x":8.5, "y":0},
+ {"label":"F20", "x":9.5, "y":0},
+ {"label":"F21", "x":11, "y":0},
+ {"label":"F22", "x":12, "y":0},
+ {"label":"F23", "x":13, "y":0},
+ {"label":"F24", "x":14, "y":0},
+ {"label":"Esc", "x":0, "y":1},
+ {"label":"F1", "x":2, "y":1},
+ {"label":"F2", "x":3, "y":1},
+ {"label":"F3", "x":4, "y":1},
+ {"label":"F4", "x":5, "y":1},
+ {"label":"F5", "x":6.5, "y":1},
+ {"label":"F6", "x":7.5, "y":1},
+ {"label":"F7", "x":8.5, "y":1},
+ {"label":"F8", "x":9.5, "y":1},
+ {"label":"F9", "x":11, "y":1},
+ {"label":"F10", "x":12, "y":1},
+ {"label":"F11", "x":13, "y":1},
+ {"label":"F12", "x":14, "y":1},
+ {"label":"Print Screen", "x":15.25, "y":1},
+ {"label":"Scroll Lock", "x":16.25, "y":1},
+ {"label":"Pause", "x":17.25, "y":1},
+ {"label":"Volume Down", "x":18.5, "y":1},
+ {"label":"Vol Up", "x":19.5, "y":1},
+ {"label":"Mute", "x":20.5, "y":1},
+ {"label":"Power", "x":21.5, "y":1},
+ {"label":"Help", "x":22.75, "y":1},
+ {"label":"`", "x":0, "y":2.5},
+ {"label":"1", "x":1, "y":2.5},
+ {"label":"2", "x":2, "y":2.5},
+ {"label":"3", "x":3, "y":2.5},
+ {"label":"4", "x":4, "y":2.5},
+ {"label":"5", "x":5, "y":2.5},
+ {"label":"6", "x":6, "y":2.5},
+ {"label":"7", "x":7, "y":2.5},
+ {"label":"8", "x":8, "y":2.5},
+ {"label":"9", "x":9, "y":2.5},
+ {"label":"0", "x":10, "y":2.5},
+ {"label":"-", "x":11, "y":2.5},
+ {"label":"=", "x":12, "y":2.5},
+ {"label":"Yen", "x":13, "y":2.5},
+ {"label":"Back Space", "x":14, "y":2.5},
+ {"label":"Insert", "x":15.25, "y":2.5},
+ {"label":"Home", "x":16.25, "y":2.5},
+ {"label":"Page Up", "x":17.25, "y":2.5},
+ {"label":"Num Lock", "x":18.5, "y":2.5},
+ {"label":"Num /", "x":19.5, "y":2.5},
+ {"label":"Num *", "x":20.5, "y":2.5},
+ {"label":"Num -", "x":21.5, "y":2.5},
+ {"label":"Stop", "x":22.75, "y":2.5},
+ {"label":"Again", "x":23.75, "y":2.5},
+ {"label":"Tab", "x":0, "y":3.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":3.5},
+ {"label":"W", "x":2.5, "y":3.5},
+ {"label":"E", "x":3.5, "y":3.5},
+ {"label":"R", "x":4.5, "y":3.5},
+ {"label":"T", "x":5.5, "y":3.5},
+ {"label":"Y", "x":6.5, "y":3.5},
+ {"label":"U", "x":7.5, "y":3.5},
+ {"label":"I", "x":8.5, "y":3.5},
+ {"label":"O", "x":9.5, "y":3.5},
+ {"label":"P", "x":10.5, "y":3.5},
+ {"label":"[", "x":11.5, "y":3.5},
+ {"label":"]", "x":12.5, "y":3.5},
+ {"label":"\\", "x":13.5, "y":3.5, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":3.5},
+ {"label":"End", "x":16.25, "y":3.5},
+ {"label":"Page Down", "x":17.25, "y":3.5},
+ {"label":"Num 7", "x":18.5, "y":3.5},
+ {"label":"Num 8", "x":19.5, "y":3.5},
+ {"label":"Num 9", "x":20.5, "y":3.5},
+ {"label":"Num +", "x":21.5, "y":3.5},
+ {"label":"Menu", "x":22.75, "y":3.5},
+ {"label":"Undo", "x":23.75, "y":3.5},
+ {"label":"Caps Lock", "x":0, "y":4.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":4.5},
+ {"label":"S", "x":2.75, "y":4.5},
+ {"label":"D", "x":3.75, "y":4.5},
+ {"label":"F", "x":4.75, "y":4.5},
+ {"label":"G", "x":5.75, "y":4.5},
+ {"label":"H", "x":6.75, "y":4.5},
+ {"label":"J", "x":7.75, "y":4.5},
+ {"label":"K", "x":8.75, "y":4.5},
+ {"label":"L", "x":9.75, "y":4.5},
+ {"label":";", "x":10.75, "y":4.5},
+ {"label":"\"", "x":11.75, "y":4.5},
+ {"label":"ISO #", "x":12.75, "y":4.5},
+ {"label":"Enter", "x":13.75, "y":4.5, "w":1.25},
+ {"label":"Num 4", "x":18.5, "y":4.5},
+ {"label":"Num 5", "x":19.5, "y":4.5},
+ {"label":"Num 6", "x":20.5, "y":4.5},
+ {"label":"Num , ", "x":21.5, "y":4.5},
+ {"label":"Select", "x":22.75, "y":4.5},
+ {"label":"Copy", "x":23.75, "y":4.5},
+ {"label":"Shift", "x":0, "y":5.5, "w":1.25},
+ {"label":"ISO \\", "x":1.25, "y":5.5},
+ {"label":"Z", "x":2.25, "y":5.5},
+ {"label":"X", "x":3.25, "y":5.5},
+ {"label":"C", "x":4.25, "y":5.5},
+ {"label":"V", "x":5.25, "y":5.5},
+ {"label":"B", "x":6.25, "y":5.5},
+ {"label":"N", "x":7.25, "y":5.5},
+ {"label":"M", "x":8.25, "y":5.5},
+ {"label":",", "x":9.25, "y":5.5},
+ {"label":".", "x":10.25, "y":5.5},
+ {"label":"/", "x":11.25, "y":5.5},
+ {"label":"JIS \\", "x":12.25, "y":5.5},
+ {"label":"Shift", "x":13.25, "y":5.5, "w":1.75},
+ {"label":"Up", "x":16.25, "y":5.5},
+ {"label":"Num 1", "x":18.5, "y":5.5},
+ {"label":"Num 2", "x":19.5, "y":5.5},
+ {"label":"Num 3", "x":20.5, "y":5.5},
+ {"label":"Num =", "x":21.5, "y":5.5},
+ {"label":"Exec", "x":22.75, "y":5.5},
+ {"label":"Paste", "x":23.75, "y":5.5},
+ {"label":"Ctrl", "x":0, "y":6.5},
+ {"label":"GUI", "x":1, "y":6.5},
+ {"label":"Alt", "x":2, "y":6.5},
+ {"label":"JIS Muhenkan", "x":3, "y":6.5},
+ {"label":"Hanja", "x":4, "y":6.5},
+ {"label":"Space", "x":5, "y":6.5, "w":3},
+ {"label":"Hangul/English", "x":8, "y":6.5},
+ {"label":"JIS Henkan", "x":9, "y":6.5},
+ {"label":"JIS Katakana/Hiragana", "x":10, "y":6.5},
+ {"label":"Alt", "x":11, "y":6.5},
+ {"label":"GUI", "x":12, "y":6.5},
+ {"label":"App", "x":13, "y":6.5},
+ {"label":"Ctrl", "x":14, "y":6.5},
+ {"label":"Left", "x":15.25, "y":6.5},
+ {"label":"Down", "x":16.25, "y":6.5},
+ {"label":"Right", "x":17.25, "y":6.5},
+ {"label":"Num 0", "x":18.5, "y":6.5, "w":2},
+ {"label":"Num .", "x":20.5, "y":6.5},
+ {"label":"Num Enter", "x":21.5, "y":6.5},
+ {"label":"Find", "x":22.75, "y":6.5},
+ {"label":"Cut", "x":23.75, "y":6.5}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"PrtSc", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Num Lock", "x":18.5, "y":1.5},
+ {"label":"Num /", "x":19.5, "y":1.5},
+ {"label":"Num *", "x":20.5, "y":1.5},
+ {"label":"Num -", "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":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Num 7", "x":18.5, "y":2.5},
+ {"label":"Num 8", "x":19.5, "y":2.5},
+ {"label":"Num 9", "x":20.5, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":":", "x":10.75, "y":3.5},
+ {"label":"\"", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"Num 4", "x":18.5, "y":3.5},
+ {"label":"Num 5", "x":19.5, "y":3.5},
+ {"label":"Num 6", "x":20.5, "y":3.5},
+ {"label":"Num +", "x":21.5, "y":2.5, "h":2},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Num 1", "x":18.5, "y":4.5},
+ {"label":"Num 2", "x":19.5, "y":4.5},
+ {"label":"Num 3", "x":20.5, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"Alt", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5},
+ {"label":"Num 0", "x":18.5, "y":5.5, "w":2},
+ {"label":"Num .", "x":20.5, "y":5.5},
+ {"label":"Num Enter", "x":21.5, "y":4.5, "h":2}
+ ]
+ },
+ "LAYOUT_iso": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Num Lock", "x":18.5, "y":1.5},
+ {"label":"Num /", "x":19.5, "y":1.5},
+ {"label":"Num *", "x":20.5, "y":1.5},
+ {"label":"Num -", "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":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Num 7", "x":18.5, "y":2.5},
+ {"label":"Num 8", "x":19.5, "y":2.5},
+ {"label":"Num 9", "x":20.5, "y":2.5},
+ {"label":"Num +", "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":"ISO #", "x":12.75, "y":3.5},
+ {"label":"Num 4", "x":18.5, "y":3.5},
+ {"label":"Num 5", "x":19.5, "y":3.5},
+ {"label":"Num 6", "x":20.5, "y":3.5},
+ {"label":"Shift", "x":0, "y":4.5, "w":1.25},
+ {"label":"ISO \\", "x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Num 1", "x":18.5, "y":4.5},
+ {"label":"Num 2", "x":19.5, "y":4.5},
+ {"label":"Num 3", "x":20.5, "y":4.5},
+ {"label":"Num Enter", "x":21.5, "y":4.5, "h":2},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"AltGr", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5},
+ {"label":"Num 0", "x":18.5, "y":5.5, "w":2},
+ {"label":"Num .", "x":20.5, "y":5.5}
+ ]
+ },
+ "LAYOUT_jis": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"JIS Hankaku / Zenkaku", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"&circ;", "x":12, "y":1.5},
+ {"label":"JIS Yen", "x":13, "y":1.5},
+ {"label":"Back Space", "x":14, "y":1.5},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"Num Lock", "x":18.5, "y":1.5},
+ {"label":"Num /", "x":19.5, "y":1.5},
+ {"label":"Num *", "x":20.5, "y":1.5},
+ {"label":"Num -", "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":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"Page Down", "x":17.25, "y":2.5},
+ {"label":"Num 7", "x":18.5, "y":2.5},
+ {"label":"Num 8", "x":19.5, "y":2.5},
+ {"label":"Num 9", "x":20.5, "y":2.5},
+ {"label":"Num +", "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":"]", "x":12.75, "y":3.5},
+ {"label":"Num 4", "x":18.5, "y":3.5},
+ {"label":"Num 5", "x":19.5, "y":3.5},
+ {"label":"Num 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":"JIS \\", "x":12.25, "y":4.5},
+ {"label":"Shift", "x":13.25, "y":4.5, "w":1.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Num 1", "x":18.5, "y":4.5},
+ {"label":"Num 2", "x":19.5, "y":4.5},
+ {"label":"Num 3", "x":20.5, "y":4.5},
+ {"label":"Num Enter", "x":21.5, "y":4.5, "h":2},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"JIS Muhenkan", "x":3.75, "y":5.5, "w":1.25},
+ {"label":"Space", "x":5, "y":5.5, "w":2.5},
+ {"label":"JIS Henkan", "x":7.5, "y":5.5, "w":1.25},
+ {"label":"JIS Hiragana / Katakana", "x":8.75, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":10, "y":5.5, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5},
+ {"label":"Num 0", "x":18.5, "y":5.5, "w":2},
+ {"label":"Num .", "x":20.5, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/usb_usb/keymap.c b/keyboards/converter/usb_usb/keymap.c
deleted file mode 100644
index 16f2a2809..000000000
--- a/keyboards/converter/usb_usb/keymap.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
-Copyright 2017 Balz Guenat <balz.guenat@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 "keymap_common.h"
-
-
-const uint8_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
- /* 0: plain Qwerty without layer switching
- * ,---------------. ,---------------. ,---------------.
- * |F13|F14|F15|F16| |F17|F18|F19|F20| |F21|F22|F23|F24|
- * ,---. |---------------| |---------------| |---------------| ,-----------. ,---------------. ,-------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|Pwr| | Help |
- * `---' `---------------' `---------------' `---------------' `-----------' `---------------' `-------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------. ,-------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -| |Stp|Agn|
- * |-----------------------------------------------------------| |-----------| |---------------| |-------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +| |Mnu|Und|
- * |-----------------------------------------------------------| `-----------' |---------------| |-------|
- * |CapsL | A| S| D| F| G| H| J| K| L| ;| :| #|Retn| | 4| 5| 6|KP,| |Sel|Cpy|
- * |-----------------------------------------------------------| ,---. |---------------| |-------|
- * |Shft| <| Z| X| C| V| B| N| M| ,| ,| /| RO|Shift | |Up | | 1| 2| 3|KP=| |Exe|Pst|
- * |-----------------------------------------------------------| ,-----------. |---------------| |-------|
- * |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
- * `-----------------------------------------------------------' `-----------' `---------------' `-------'
- */
- // KEYMAP_ALL(
- // F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- // ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- // GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- // TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- // CAPS,A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- // LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- // LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- // ),
- KEYMAP_ALL(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- FN0, A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- ),
- KEYMAP_ALL(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,
- GRV, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- CAPS,MPRV,VOLU,MNXT,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,MUTE,VOLD,MPLY,TRNS,TRNS,LEFT,DOWN,UP, RGHT,TRNS,TRNS, TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, TRNS,TRNS
- ),
-};
-
-// const action_t fn_actions[] PROGMEM = {};
-
-const action_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(1),
-};
-
-
-
-/*
- * Keymap samples
- */
-#if 0
- /* ANSI layout
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
- * `---' `---------------' `---------------' `---------------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
- * |-----------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +|
- * |-----------------------------------------------------------| `-----------' |-----------| |
- * |CapsL | A| S| D| F| G| H| J| K| L| ;| '| Return| | 4| 5| 6| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shift | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3| |
- * |-----------------------------------------------------------| ,-----------. |-----------| |
- * |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent|
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, ENT, P4, P5, P6, PPLS,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT
- ),
-
- /* ISO layout
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
- * `---' `---------------' `---------------' `---------------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| ^| Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
- * |-----------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Retn| |Del|End|PgD| | 7| 8| 9| +|
- * |------------------------------------------------------` | `-----------' |-----------| |
- * |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #| | | 4| 5| 6| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shft|\ | Z| X| C| V| B| N| M| ,| ,| /|Shift | |Up | | 1| 2| 3|Ent|
- * |-----------------------------------------------------------| ,-----------. |-----------| |
- * |Ctl|Gui|Alt| Space |HNK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP_ISO(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,ENT, DEL, END, PGDN, P7, P8, P9, PPLS,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6,
- LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3, PENT,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
- ),
-
- /* JIS layout
- * ,---. ,---------------. ,---------------. ,---------------. ,-----------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau|
- * `---' `---------------' `---------------' `---------------' `-----------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| ^|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
- * |-----------------------------------------------------------| |-----------| |---------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| @| [| Retn| |Del|End|PgD| | 7| 8| 9| +|
- * |------------------------------------------------------` | `-----------' |-----------| |
- * |CapsL | A| S| D| F| G| H| J| K| L| ;| :| ]| | | 4| 5| 6| |
- * |-----------------------------------------------------------| ,---. |---------------|
- * |Shft | Z| X| C| V| B| N| M| ,| ,| /| RO|Shift | |Up | | 1| 2| 3|Ent|
- * |-----------------------------------------------------------| ,-----------. |-----------| |
- * |Ctl|Gui|Alt|MHEN| Space |HENK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
- * `-----------------------------------------------------------' `-----------' `---------------'
- */
- KEYMAP_JIS(
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JPY, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, ENT, DEL, END, PGDN, P7, P8, P9, PPLS,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6,
- LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PENT,
- LCTL,LGUI,LALT,MHEN, SPC, HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
- ),
-
- /* Colemak http://colemak.com
- * ,-----------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
- * |-----------------------------------------------------------|
- * |Tab | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \|
- * |-----------------------------------------------------------|
- * |BackSp| A| R| S| T| D| H| N| E| I| O| '|Return |
- * |-----------------------------------------------------------|
- * |Shift | Z| X| C| V| B| K| M| ,| ,| /|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
- * `----------------------------------------------------------'
- */
- KEYMAP_ALL(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- TAB, Q, W, F, P, G, J, L, U, Y, SCLN,LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- BSPC,A, R, S, T, D, H, N, E, I, O, QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- LSFT,NUBS,Z, X, C, V, B, K, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- ),
-
- /* Dvorak http://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard
- * ,-----------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| [| ]|Backspa|
- * |-----------------------------------------------------------|
- * |Tab | '| ,| .| P| Y| F| G| C| R| L| /| =| \|
- * |-----------------------------------------------------------|
- * |BackSp| A| O| E| U| I| D| H| T| N| S| -|Return |
- * |-----------------------------------------------------------|
- * |Shift | ;| Q| J| K| X| B| M| Wl V| Z|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
- * `-----------------------------------------------------------'
- */
- KEYMAP_ALL(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- TAB, QUOT,COMM,DOT, P, Y, F, G, C, R, L, SLSH,EQL, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- CAPS,A, O, E, U, I, D, H, T, N, S, MINS, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- LSFT,NUBS,SCLN,Q, J, K, X, B, M, W, V, Z, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- ),
-
- /* Workman http://viralintrospection.wordpress.com/2010/09/06/a-different-philosophy-in-designing-keyboard-layouts/
- * ,-----------------------------------------------------------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backspa|
- * |-----------------------------------------------------------|
- * |Tab | Q| D| R| W| B| J| F| U| P| ;| [| ]| \|
- * |-----------------------------------------------------------|
- * |CapsLo| A| S| H| T| G| Y| N| E| O| I| '|Return |
- * |-----------------------------------------------------------|
- * |Shift | Z| X| M| C| V| K| L| ,| ,| /|Shift |
- * |-----------------------------------------------------------|
- * |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
- * `-----------------------------------------------------------'
- */
- KEYMAP_ALL(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- TAB, Q, D, R, W, B, J, F, U, P, SCLN,LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- CAPS,A, S, H, T, G, Y, N, E, O, I, QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- LSFT,NUBS,Z, X, M, C, V, K, L, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- ),
-
-
-/*
- * SpaceFN layout
- * http://geekhack.org/index.php?topic=51069.0
- */
-const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* 0: plain Qwerty
- * ,---------------. ,---------------. ,---------------.
- * |F13|F14|F15|F16| |F17|F18|F19|F20| |F21|F22|F23|F24|
- * ,---. |---------------| |---------------| |---------------| ,-----------. ,---------------. ,-------.
- * |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|Pwr| | Help |
- * `---' `---------------' `---------------' `---------------' `-----------' `---------------' `-------'
- * ,-----------------------------------------------------------. ,-----------. ,---------------. ,-------.
- * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -| |Stp|Agn|
- * |-----------------------------------------------------------| |-----------| |---------------| |-------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +| |Mnu|Und|
- * |-----------------------------------------------------------| `-----------' |---------------| |-------|
- * |LCtrl | A| S| D| F| G| H| J| K| L| ;| :| #|Retn| | 4| 5| 6|KP,| |Sel|Cpy|
- * |-----------------------------------------------------------| ,---. |---------------| |-------|
- * |Shft| <| Z| X| C| V| B| N| M| ,| ,| /| RO|Shift | |Up | | 1| 2| 3|KP=| |Exe|Pst|
- * |-----------------------------------------------------------| ,-----------. |---------------| |-------|
- * |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
- * `-----------------------------------------------------------' `-----------' `---------------' `-------'
- */
- [0] = KEYMAP_ALL(
- F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
- ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
- ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
- TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, BSLS, DEL, END, PGDN, P7, P8, P9, PPLS, MENU,UNDO,
- LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT, NUHS,ENT, P4, P5, P6, PCMM, SLCT,COPY,
- LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
- LCTL,LGUI,LALT,MHEN,HANJ, FN0, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
- ),
-
- /* 1: SpaceFN
- * ,-----------------------------------------------------------.
- * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|Delete |
- * |-----------------------------------------------------------|
- * |Caps | | |Esc| | | |Hom|Up |End|Psc|Slk|Pau|Ins |
- * |-----------------------------------------------------------|
- * | | | | | | |PgU|Lef|Dow|Rig| | | |
- * |-----------------------------------------------------------|
- * | | | | | |Spc|PgD|` |~ | |Men| |
- * |-----------------------------------------------------------|
- * | | | | | | | | |
- * `-----------------------------------------------------------'
- */
- [1] = KEYMAP_ALL(
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
- TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- CAPS,TRNS,TRNS,ESC, TRNS,TRNS,TRNS,HOME,UP, END, PSCR,SLCK,PAUS, INS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,PGUP,LEFT,DOWN,RGHT,TRNS,TRNS, TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,SPC, PGDN,GRV, FN1, TRNS,APP, TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
- TRNS,TRNS,TRNS,TRNS,TRNS, TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS, TRNS,TRNS, TRNS,TRNS
- ),
-};
-
-const action_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_TAP_KEY(1, KC_SPACE),
- [1] = ACTION_MODS_KEY(MOD_LSFT, KC_GRV), // tilde
-};
-
-#endif
diff --git a/keyboards/converter/usb_usb/keymaps/ble/keymap.c b/keyboards/converter/usb_usb/keymaps/ble/keymap.c
index 094bd9569..190b3319f 100644
--- a/keyboards/converter/usb_usb/keymaps/ble/keymap.c
+++ b/keyboards/converter/usb_usb/keymaps/ble/keymap.c
@@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "usb_usb.h"
+#include QMK_KEYBOARD_H
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
/* 0: plain Qwerty without layer switching
@@ -36,9 +36,9 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
* |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
* `-----------------------------------------------------------' `-----------' `---------------' `-------'
*/
- [0] = KEYMAP_ALL(
+ [0] = LAYOUT_all(
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
- KC_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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
+ 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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
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_JYEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_STOP, KC_AGIN,
KC_TAB, KC_Q, KC_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_MENU, KC_UNDO,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM, KC_SLCT, KC_COPY,
@@ -47,18 +47,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch(id) {
- default:
- return MACRO_NONE;
- }
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c b/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c
index 0cc66fd53..6dfd1ad79 100644
--- a/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c
+++ b/keyboards/converter/usb_usb/keymaps/coloneljesus/keymap.c
@@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "usb_usb.h"
+#include QMK_KEYBOARD_H
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
/* 0: plain Qwerty without layer switching
@@ -36,7 +36,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
* |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
* `-----------------------------------------------------------' `-----------' `---------------' `-------'
*/
- // KEYMAP_ALL(
+ // LAYOUT_all(
// F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
// ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
// GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
@@ -45,17 +45,17 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
// LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PEQL, EXEC,PSTE,
// LCTL,LGUI,LALT,MHEN,HANJ, SPC, HAEN,HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT,PENT, FIND,CUT
// ),
- KEYMAP_ALL(
+ LAYOUT_all(
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
- KC_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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
+ 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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
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_JYEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_STOP, KC_AGIN,
KC_TAB, KC_Q, KC_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_MENU, KC_UNDO,
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM, KC_SLCT, KC_COPY,
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_RO, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PEQL, KC_EXEC, KC_PSTE,
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_HANJ, KC_SPC, KC_HAEN, KC_HENK, KC_KANA, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT, KC_FIND, KC_CUT
),
- KEYMAP_ALL(
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ LAYOUT_all(
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,
KC_GRV, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______,
KC_CAPS, KC_MPRV, KC_VOLU, KC_MNXT, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______,
@@ -65,18 +65,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch(id) {
- default:
- return MACRO_NONE;
- }
-};
-
-
void matrix_init_user(void) {
}
@@ -113,7 +101,7 @@ void led_set_user(uint8_t usb_led) {
* |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent|
* `-----------------------------------------------------------' `-----------' `---------------'
*/
- KEYMAP(
+ LAYOUT_ansi(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, DEL, END, PGDN, P7, P8, P9,
@@ -138,13 +126,13 @@ void led_set_user(uint8_t usb_led) {
* |Ctl|Gui|Alt| Space |HNK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
- KEYMAP_ISO(
+ LAYOUT_iso(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,ENT, DEL, END, PGDN, P7, P8, P9, PPLS,
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6,
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RSFT, UP, P1, P2, P3, PENT,
- LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
+ LCTL,LGUI,LALT, SPC, RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
),
/* JIS layout
@@ -163,13 +151,13 @@ void led_set_user(uint8_t usb_led) {
* |Ctl|Gui|Alt|MHEN| Space |HENK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
- KEYMAP_JIS(
+ LAYOUT_jis(
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,BRK,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JPY, BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS,
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC, ENT, DEL, END, PGDN, P7, P8, P9, PPLS,
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,NUHS, P4, P5, P6,
LSFT,Z, X, C, V, B, N, M, COMM,DOT, SLSH, RO, RSFT, UP, P1, P2, P3, PENT,
- LCTL,LGUI,LALT,MHEN, SPC, HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
+ LCTL,LGUI,LALT,MHEN, SPC, HENK,KANA,RALT,RGUI,APP, RCTL, LEFT,DOWN,RGHT, P0, PDOT
),
/* Colemak http://colemak.com
@@ -185,7 +173,7 @@ void led_set_user(uint8_t usb_led) {
* |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
* `----------------------------------------------------------'
*/
- KEYMAP_ALL(
+ LAYOUT_all(
F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
@@ -208,7 +196,7 @@ void led_set_user(uint8_t usb_led) {
* |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
* `-----------------------------------------------------------'
*/
- KEYMAP_ALL(
+ LAYOUT_all(
F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, LBRC,RBRC,JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
@@ -231,7 +219,7 @@ void led_set_user(uint8_t usb_led) {
* |Ctrl |Gui |Alt | Space |Alt |Gui |Menu|Ctrl|
* `-----------------------------------------------------------'
*/
- KEYMAP_ALL(
+ LAYOUT_all(
F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
GRV, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
@@ -265,7 +253,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
* `-----------------------------------------------------------' `-----------' `---------------' `-------'
*/
- [0] = KEYMAP_ALL(
+ [0] = LAYOUT_all(
F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24,
ESC, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, PSCR,SLCK,PAUS, VOLD,VOLU,MUTE,PWR, HELP,
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, JYEN,BSPC, INS, HOME,PGUP, NLCK,PSLS,PAST,PMNS, STOP,AGIN,
@@ -288,7 +276,7 @@ const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | |
* `-----------------------------------------------------------'
*/
- [1] = KEYMAP_ALL(
+ [1] = LAYOUT_all(
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,
TRNS, TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,DEL, TRNS,TRNS,TRNS, TRNS,TRNS,TRNS,TRNS, TRNS,TRNS,
diff --git a/keyboards/converter/usb_usb/keymaps/default/keymap.c b/keyboards/converter/usb_usb/keymaps/default/keymap.c
index 9817a607d..170ed31ef 100644
--- a/keyboards/converter/usb_usb/keymaps/default/keymap.c
+++ b/keyboards/converter/usb_usb/keymaps/default/keymap.c
@@ -15,7 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "usb_usb.h"
+#include QMK_KEYBOARD_H
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
/* 0: plain Qwerty without layer switching
@@ -36,17 +36,17 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
* |Ctl|Gui|Alt|MHEN|HNJ| Space |H/E|HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0 | .|Ent| |Fnd|Cut|
* `-----------------------------------------------------------' `-----------' `---------------' `-------'
*/
- [0] = KEYMAP_ALL(
+ [0] = LAYOUT_all(
KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
- KC_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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
+ 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_VOLD, KC_VOLU, KC_MUTE, KC_PWR, KC_HELP,
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_JYEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, KC_STOP, KC_AGIN,
KC_TAB, KC_Q, KC_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_MENU, KC_UNDO,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM, KC_SLCT, KC_COPY,
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_RO, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PEQL, KC_EXEC, KC_PSTE,
KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_HANJ, KC_SPC, KC_HAEN, KC_HENK, KC_KANA, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT, KC_FIND, KC_CUT
),
- [1] = KEYMAP_ALL(
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ [1] = LAYOUT_all(
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,______,______, ______,______,______,______, ______,______,
@@ -56,18 +56,6 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch(id) {
- default:
- return MACRO_NONE;
- }
-};
-
-
void matrix_init_user(void) {
}
diff --git a/keyboards/converter/usb_usb/usb_usb.h b/keyboards/converter/usb_usb/usb_usb.h
index c31fae1d0..e0c7c9c0d 100644
--- a/keyboards/converter/usb_usb/usb_usb.h
+++ b/keyboards/converter/usb_usb/usb_usb.h
@@ -62,7 +62,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* TODO: use same keycode to pass through instead of KC_NO?
*/
-#define KEYMAP_ALL( \
+#define LAYOUT_all( \
K68,K69,K6A,K6B,K6C,K6D,K6E,K6F,K70,K71,K72,K73, \
K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, K81,K80,K7F,K66, K75, \
K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K89,K2A, K49,K4A,K4B, K53,K54,K55,K56, K78,K79, \
@@ -120,21 +120,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent|
* `-----------------------------------------------------------' `-----------' `---------------'
*/
-#define KEYMAP( \
+#define LAYOUT_ansi( \
K29,K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, \
K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K2A, K49,K4A,K4B, K53,K54,K55,K56, \
K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30,K31, K4C,K4D,K4E, K5F,K60,K61, \
K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K28, K5C,K5D,K5E,K57, \
KE1,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KE5, K52, K59,K5A,K5B, \
KE0,KE3,KE2, K2C, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58 \
-) KEYMAP_ALL( \
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,KC_NO, K2A, K49,K4A,K4B, K53,K54,K55,K56, KC_NO, KC_NO, \
- K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K31, K4C,K4D,K4E, K5F,K60,K61,K57, KC_NO, KC_NO, \
- K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, KC_NO, K28, K5C,K5D,K5E,KC_NO, KC_NO, KC_NO, \
- KE1,KC_NO, K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KC_NO, KE5, K52, K59,K5A,K5B,KC_NO, KC_NO, KC_NO, \
- KE0,KE3,KE2,KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58, KC_NO, KC_NO \
+) LAYOUT_all( \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K29, K3A, K3B, K3C, K3D, K3E, K3F, K40, K41, K42, K43, K44, K45, K46, K47, K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K35, K1E, K1F, K20, K21, K22, K23, K24, K25, K26, K27, K2D, K2E, KC_NO, K2A, K49, K4A, K4B, K53, K54, K55, K56, KC_NO, KC_NO, \
+ K2B, K14, K1A, K08, K15, K17, K1C, K18, K0C, K12, K13, K2F, K30, K31, K4C, K4D, K4E, K5F, K60, K61, K57, KC_NO, KC_NO, \
+ K39, K04, K16, K07, K09, K0A, K0B, K0D, K0E, K0F, K33, K34, KC_NO, K28, K5C, K5D, K5E, KC_NO, KC_NO, KC_NO, \
+ KE1, KC_NO, K1D, K1B, K06, K19, K05, K11, K10, K36, K37, K38, KC_NO, KE5, K52, K59, K5A, K5B, KC_NO, KC_NO, KC_NO, \
+ KE0, KE3, KE2, KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6, KE7, K65, KE4, K50, K51, K4F, K62, K63, K58, KC_NO, KC_NO \
)
/* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
@@ -152,21 +152,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* |Ctl|Gui|Alt| Space |Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
-#define KEYMAP_ISO( \
+#define LAYOUT_iso( \
K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, \
K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K2A, K49,K4A,K4B, K53,K54,K55,K56, \
K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30,K28, K4C,K4D,K4E, K5F,K60,K61,K57, \
K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34,K32, K5C,K5D,K5E, \
KE1,K64,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KE5, K52, K59,K5A,K5B,K58, \
KE0,KE3,KE2, K2C, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63 \
-) KEYMAP_ALL( \
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,KC_NO, K2A, K49,K4A,K4B, K53,K54,K55,K56, KC_NO, KC_NO, \
- K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K32, K4C,K4D,K4E, K5F,K60,K61,K57, KC_NO, KC_NO, \
- K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K32,K28, K5C,K5D,K5E,KC_NO, KC_NO, KC_NO, \
- KE1,K64,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, KC_NO, KE5, K52, K59,K5A,K5B,KC_NO, KC_NO, KC_NO, \
- KE0,KE3,KE2,KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58, KC_NO, KC_NO \
+) LAYOUT_all( \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K29, K3A, K3B, K3C, K3D, K3E, K3F, K40, K41, K42, K43, K44, K45, K46, K47, K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K35, K1E, K1F, K20, K21, K22, K23, K24, K25, K26, K27, K2D, K2E, KC_NO, K2A, K49, K4A, K4B, K53, K54, K55, K56, KC_NO, KC_NO, \
+ K2B, K14, K1A, K08, K15, K17, K1C, K18, K0C, K12, K13, K2F, K30, K32, K4C, K4D, K4E, K5F, K60, K61, K57, KC_NO, KC_NO, \
+ K39, K04, K16, K07, K09, K0A, K0B, K0D, K0E, K0F, K33, K34, K32, K28, K5C, K5D, K5E, KC_NO, KC_NO, KC_NO, \
+ KE1, K64, K1D, K1B, K06, K19, K05, K11, K10, K36, K37, K38, KC_NO, KE5, K52, K59, K5A, K5B, KC_NO, KC_NO, KC_NO, \
+ KE0, KE3, KE2, KC_NO, KC_NO, K2C, KC_NO, KC_NO, KC_NO, KE6, KE7, K65, KE4, K50, K51, K4F, K62, K63, K58, KC_NO, KC_NO \
)
/* ,---. ,---------------. ,---------------. ,---------------. ,-----------.
@@ -184,20 +184,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* |Ctl|Gui|Alt|MHEN| Space |HENK|KNA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .| |
* `-----------------------------------------------------------' `-----------' `---------------'
*/
-#define KEYMAP_JIS( \
+#define LAYOUT_jis( \
K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, \
K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K89,K2A, K49,K4A,K4B, K53,K54,K55,K56, \
K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K28, K4C,K4D,K4E, K5F,K60,K61,K57, \
K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34,K32, K5C,K5D,K5E, \
KE1,K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, K87,KE5, K52, K59,K5A,K5B,K58, \
KE0,KE3,KE2,K8B, K2C, K8A,K88,KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63 \
-) KEYMAP_ALL( \
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K29, K3A,K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K45, K46,K47,K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- K35,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K2D,K2E,K89,K2A, K49,K4A,K4B, K53,K54,K55,K56, KC_NO, KC_NO, \
- K2B,K14,K1A,K08,K15,K17,K1C,K18,K0C,K12,K13,K2F,K30, K32, K4C,K4D,K4E, K5F,K60,K61,K57, KC_NO, KC_NO, \
- K39,K04,K16,K07,K09,K0A,K0B,K0D,K0E,K0F,K33,K34, K32,K28, K5C,K5D,K5E,KC_NO, KC_NO, KC_NO, \
- KE1,KC_NO, K1D,K1B,K06,K19,K05,K11,K10,K36,K37,K38, K87,KE5, K52, K59,K5A,K5B,KC_NO, KC_NO, KC_NO, \
- KE0,KE3,KE2,K8B,KC_NO, K2C, KC_NO, K8A,K88,KE6,KE7,K65,KE4, K50,K51,K4F, K62, K63,K58, KC_NO, KC_NO \
+) LAYOUT_all( \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K29, K3A, K3B, K3C, K3D, K3E, K3F, K40, K41, K42, K43, K44, K45, K46, K47, K48, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ K35, K1E, K1F, K20, K21, K22, K23, K24, K25, K26, K27, K2D, K2E, K89, K2A, K49, K4A, K4B, K53, K54, K55, K56, KC_NO, KC_NO, \
+ K2B, K14, K1A, K08, K15, K17, K1C, K18, K0C, K12, K13, K2F, K30, K32, K4C, K4D, K4E, K5F, K60, K61, K57, KC_NO, KC_NO, \
+ K39, K04, K16, K07, K09, K0A, K0B, K0D, K0E, K0F, K33, K34, K32, K28, K5C, K5D, K5E, KC_NO, KC_NO, KC_NO, \
+ KE1, KC_NO, K1D, K1B, K06, K19, K05, K11, K10, K36, K37, K38, K87, KE5, K52, K59, K5A, K5B, KC_NO, KC_NO, KC_NO, \
+ KE0, KE3, KE2, K8B, KC_NO, K2C, KC_NO, K8A, K88, KE6, KE7, K65, KE4, K50, K51, K4F, K62, K63, K58, KC_NO, KC_NO \
)
#endif
diff --git a/keyboards/converter/xt_usb/README.md b/keyboards/converter/xt_usb/README.md
new file mode 100644
index 000000000..40b265a18
--- /dev/null
+++ b/keyboards/converter/xt_usb/README.md
@@ -0,0 +1,17 @@
+XT to USB keyboard converter
+==============================
+This is a port of TMK's converter/xt_usb to QMK.
+
+This firmware converts XT keyboard protocol to USB.(It supports Scan Code Set 1.)
+
+
+Connect Wires
+-------------
+1. Connect **Vcc** and **GND**.
+2. Connect **Clock** and **Data** line. **Clock** is on `PD1`, **Data** on `PD0` by default. And optionally you can use `PB7` for **Reset**.(Compatible to Soarer's converter) To change pin configuration edit `config.h`.
+3. You need pull-up resistor. **1K-10K Ohm** will be OK.
+
+
+XT keyboard protocol resource
+------------------------------
+https://github.com/tmk/tmk_keyboard/wiki/IBM-PC-XT-Keyboard-Protocol
diff --git a/keyboards/converter/xt_usb/config.h b/keyboards/converter/xt_usb/config.h
new file mode 100644
index 000000000..963a3c639
--- /dev/null
+++ b/keyboards/converter/xt_usb/config.h
@@ -0,0 +1,78 @@
+/*
+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 VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6512
+#define DEVICE_VER 0x0001
+#define MANUFACTURER QMK
+#define PRODUCT XT keyboard converter
+#define DESCRIPTION convert XT keyboard to USB
+
+
+/* matrix size */
+#define MATRIX_ROWS 16 // keycode bit: 3-0
+#define MATRIX_COLS 8 // keycode bit: 6-4
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) || \
+ keyboard_report->mods == (MOD_BIT(KC_LCTRL) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
+//#define NO_SUSPEND_POWER_DOWN
+
+/*
+ * XT Pin interrupt
+ */
+#define XT_CLOCK_PORT PORTD
+#define XT_CLOCK_PIN PIND
+#define XT_CLOCK_DDR DDRD
+#define XT_CLOCK_BIT 1
+#define XT_DATA_PORT PORTD
+#define XT_DATA_PIN PIND
+#define XT_DATA_DDR DDRD
+#define XT_DATA_BIT 0
+#define XT_RST_PORT PORTB
+#define XT_RST_PIN PINB
+#define XT_RST_DDR DDRB
+#define XT_RST_BIT 7
+
+/* hard reset: low pulse for 500ms and after that HiZ for safety */
+#define XT_RESET() do { \
+ XT_RST_PORT &= ~(1<<XT_RST_BIT); \
+ XT_RST_DDR |= (1<<XT_RST_BIT); \
+ _delay_ms(500); \
+ XT_RST_DDR &= ~(1<<XT_RST_BIT); \
+} while (0)
+
+/* INT1 for falling edge of clock line */
+#define XT_INT_INIT() do { \
+ EICRA |= ((1<<ISC11) | \
+ (0<<ISC10)); \
+} while (0)
+/* clears flag and enables interrupt */
+#define XT_INT_ON() do { \
+ EIFR |= (1<<INTF1); \
+ EIMSK |= (1<<INT1); \
+} while (0)
+#define XT_INT_OFF() do { \
+ EIMSK &= ~(1<<INT1); \
+} while (0)
+#define XT_INT_VECT INT1_vect
diff --git a/keyboards/converter/xt_usb/info.json b/keyboards/converter/xt_usb/info.json
new file mode 100644
index 000000000..1fde77d1f
--- /dev/null
+++ b/keyboards/converter/xt_usb/info.json
@@ -0,0 +1,229 @@
+{
+ "keyboard_name": "IBM PC XT",
+ "keyboard_folder": "converter/xt_usb",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 21,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_xt": {
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"F2", "x":1, "y":0},
+ {"label":"Esc", "x":2.25, "y":0},
+ {"label":"1", "x":3.25, "y":0},
+ {"label":"2", "x":4.25, "y":0},
+ {"label":"3", "x":5.25, "y":0},
+ {"label":"4", "x":6.25, "y":0},
+ {"label":"5", "x":7.25, "y":0},
+ {"label":"6", "x":8.25, "y":0},
+ {"label":"7", "x":9.25, "y":0},
+ {"label":"8", "x":10.25, "y":0},
+ {"label":"9", "x":11.25, "y":0},
+ {"label":"0", "x":12.25, "y":0},
+ {"label":"-", "x":13.25, "y":0},
+ {"label":"=", "x":14.25, "y":0},
+ {"label":"Backspace", "x":15.25, "y":0, "w":1.75},
+ {"label":"Num Lock", "x":17, "y":0, "w":2},
+ {"label":"Scroll Lock", "x":19, "y":0, "w":2},
+ {"label":"F3", "x":0, "y":1},
+ {"label":"F4", "x":1, "y":1},
+ {"label":"Tab", "x":2.25, "y":1, "w":1.5},
+ {"label":"Q", "x":3.75, "y":1},
+ {"label":"W", "x":4.75, "y":1},
+ {"label":"E", "x":5.75, "y":1},
+ {"label":"R", "x":6.75, "y":1},
+ {"label":"T", "x":7.75, "y":1},
+ {"label":"Y", "x":8.75, "y":1},
+ {"label":"U", "x":9.75, "y":1},
+ {"label":"I", "x":10.75, "y":1},
+ {"label":"O", "x":11.75, "y":1},
+ {"label":"P", "x":12.75, "y":1},
+ {"label":"[", "x":13.75, "y":1},
+ {"label":"]", "x":14.75, "y":1},
+ {"label":"7", "x":17, "y":1},
+ {"label":"8", "x":18, "y":1},
+ {"label":"9", "x":19, "y":1},
+ {"label":"-", "x":20, "y":1},
+ {"label":"F5", "x":0, "y":2},
+ {"label":"F6", "x":1, "y":2},
+ {"label":"Ctrl", "x":2.25, "y":2, "w":1.75},
+ {"label":"A", "x":4, "y":2},
+ {"label":"S", "x":5, "y":2},
+ {"label":"D", "x":6, "y":2},
+ {"label":"F", "x":7, "y":2},
+ {"label":"G", "x":8, "y":2},
+ {"label":"H", "x":9, "y":2},
+ {"label":"J", "x":10, "y":2},
+ {"label":"K", "x":11, "y":2},
+ {"label":"L", "x":12, "y":2},
+ {"label":";", "x":13, "y":2},
+ {"label":"'", "x":14, "y":2},
+ {"label":"`", "x":15, "y":2},
+ {"label":"Enter", "x":16, "y":1, "h":2},
+ {"label":"4", "x":17, "y":2},
+ {"label":"5", "x":18, "y":2},
+ {"label":"6", "x":19, "y":2},
+ {"label":"F7", "x":0, "y":3},
+ {"label":"F8", "x":1, "y":3},
+ {"label":"Shift", "x":2.25, "y":3, "w":1.25},
+ {"label":"\\", "x":3.5, "y":3},
+ {"label":"Z", "x":4.5, "y":3},
+ {"label":"X", "x":5.5, "y":3},
+ {"label":"C", "x":6.5, "y":3},
+ {"label":"V", "x":7.5, "y":3},
+ {"label":"B", "x":8.5, "y":3},
+ {"label":"N", "x":9.5, "y":3},
+ {"label":"M", "x":10.5, "y":3},
+ {"label":",", "x":11.5, "y":3},
+ {"label":".", "x":12.5, "y":3},
+ {"label":"/", "x":13.5, "y":3},
+ {"label":"Shift", "x":14.5, "y":3, "w":1.5},
+ {"label":"Print Screen", "x":16, "y":3},
+ {"label":"1", "x":17, "y":3},
+ {"label":"2", "x":18, "y":3},
+ {"label":"3", "x":19, "y":3},
+ {"label":"+", "x":20, "y":2, "h":3},
+ {"label":"F9", "x":0, "y":4},
+ {"label":"F10", "x":1, "y":4},
+ {"label":"Alt", "x":2.25, "y":4, "w":2},
+ {"label":"Space", "x":4.25, "y":4, "w":9.75},
+ {"label":"Caps Lock", "x":14, "y":4, "w":2},
+ {"label":"0", "x":16, "y":4, "w":2},
+ {"label":".", "x":18, "y":4, "w":2}
+ ]
+ },
+ "LAYOUT": {
+ "layout": [
+ {"label":"F13", "x":2, "y":0},
+ {"label":"F14", "x":3, "y":0},
+ {"label":"F15", "x":4, "y":0},
+ {"label":"F16", "x":5, "y":0},
+ {"label":"F17", "x":6, "y":0},
+ {"label":"F18", "x":7, "y":0},
+ {"label":"F19", "x":8, "y":0},
+ {"label":"F20", "x":9, "y":0},
+ {"label":"F21", "x":10, "y":0},
+ {"label":"F22", "x":11, "y":0},
+ {"label":"F23", "x":12, "y":0},
+ {"label":"F24", "x":13, "y":0},
+ {"label":"Esc", "x":0, "y":1},
+ {"label":"F1", "x":2, "y":1},
+ {"label":"F2", "x":3, "y":1},
+ {"label":"F3", "x":4, "y":1},
+ {"label":"F4", "x":5, "y":1},
+ {"label":"F5", "x":6, "y":1},
+ {"label":"F6", "x":7, "y":1},
+ {"label":"F7", "x":8, "y":1},
+ {"label":"F8", "x":9, "y":1},
+ {"label":"F9", "x":10, "y":1},
+ {"label":"F10", "x":11, "y":1},
+ {"label":"F11", "x":12, "y":1},
+ {"label":"F12", "x":13, "y":1},
+ {"label":"Print Screen", "x":15.25, "y":1},
+ {"label":"Scroll Lock", "x":16.25, "y":1},
+ {"label":"Pause", "x":17.25, "y":1},
+ {"label":"Volume Down", "x":19.5, "y":1},
+ {"label":"Volume Up", "x":20.5, "y":1},
+ {"label":"Mute", "x":21.5, "y":1},
+ {"label":"`", "x":0, "y":2.5},
+ {"label":"1", "x":1, "y":2.5},
+ {"label":"2", "x":2, "y":2.5},
+ {"label":"3", "x":3, "y":2.5},
+ {"label":"4", "x":4, "y":2.5},
+ {"label":"5", "x":5, "y":2.5},
+ {"label":"6", "x":6, "y":2.5},
+ {"label":"7", "x":7, "y":2.5},
+ {"label":"8", "x":8, "y":2.5},
+ {"label":"9", "x":9, "y":2.5},
+ {"label":"0", "x":10, "y":2.5},
+ {"label":"-", "x":11, "y":2.5},
+ {"label":"=", "x":12, "y":2.5},
+ {"label":"JP Yen", "x":13, "y":2.5},
+ {"label":"Back Space", "x":14, "y":2.5},
+ {"label":"Insert", "x":15.25, "y":2.5},
+ {"label":"Home", "x":16.25, "y":2.5},
+ {"label":"Page Up", "x":17.25, "y":2.5},
+ {"label":"Num Lock", "x":18.5, "y":2.5},
+ {"label":"KP/", "x":19.5, "y":2.5},
+ {"label":"KP*", "x":20.5, "y":2.5},
+ {"label":"KP-", "x":21.5, "y":2.5},
+ {"label":"Tab", "x":0, "y":3.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":3.5},
+ {"label":"W", "x":2.5, "y":3.5},
+ {"label":"E", "x":3.5, "y":3.5},
+ {"label":"R", "x":4.5, "y":3.5},
+ {"label":"T", "x":5.5, "y":3.5},
+ {"label":"Y", "x":6.5, "y":3.5},
+ {"label":"U", "x":7.5, "y":3.5},
+ {"label":"I", "x":8.5, "y":3.5},
+ {"label":"O", "x":9.5, "y":3.5},
+ {"label":"P", "x":10.5, "y":3.5},
+ {"label":"[", "x":11.5, "y":3.5},
+ {"label":"]", "x":12.5, "y":3.5},
+ {"label":"\\", "x":13.5, "y":3.5, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":3.5},
+ {"label":"End", "x":16.25, "y":3.5},
+ {"label":"Page Down", "x":17.25, "y":3.5},
+ {"label":"KP 7", "x":18.5, "y":3.5},
+ {"label":"KP 8", "x":19.5, "y":3.5},
+ {"label":"KP 9", "x":20.5, "y":3.5},
+ {"label":"KP+", "x":21.5, "y":3.5},
+ {"label":"Caps Lock", "x":0, "y":4.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":4.5},
+ {"label":"S", "x":2.75, "y":4.5},
+ {"label":"D", "x":3.75, "y":4.5},
+ {"label":"F", "x":4.75, "y":4.5},
+ {"label":"G", "x":5.75, "y":4.5},
+ {"label":"H", "x":6.75, "y":4.5},
+ {"label":"J", "x":7.75, "y":4.5},
+ {"label":"K", "x":8.75, "y":4.5},
+ {"label":"L", "x":9.75, "y":4.5},
+ {"label":";", "x":10.75, "y":4.5},
+ {"label":"'", "x":11.75, "y":4.5},
+ {"label":"ISO #", "x":12.75, "y":4.5},
+ {"label":"Enter", "x":13.75, "y":4.5, "w":1.25},
+ {"label":"KP 4", "x":18.5, "y":4.5},
+ {"label":"KP 5", "x":19.5, "y":4.5},
+ {"label":"KP 6", "x":20.5, "y":4.5},
+ {"label":"KP ,", "x":21.5, "y":4.5},
+ {"label":"Shift", "x":0, "y":5.5, "w":1.25},
+ {"label":"ISO \\", "x":1.25, "y":5.5},
+ {"label":"Z", "x":2.25, "y":5.5},
+ {"label":"X", "x":3.25, "y":5.5},
+ {"label":"C", "x":4.25, "y":5.5},
+ {"label":"V", "x":5.25, "y":5.5},
+ {"label":"B", "x":6.25, "y":5.5},
+ {"label":"N", "x":7.25, "y":5.5},
+ {"label":"M", "x":8.25, "y":5.5},
+ {"label":",", "x":9.25, "y":5.5},
+ {"label":".", "x":10.25, "y":5.5},
+ {"label":"/", "x":11.25, "y":5.5},
+ {"label":"JP RO", "x":12.25, "y":5.5},
+ {"label":"Shift", "x":13.25, "y":5.5, "w":1.75},
+ {"label":"Up", "x":16.25, "y":5.5},
+ {"label":"KP 1", "x":18.5, "y":5.5},
+ {"label":"KP 2", "x":19.5, "y":5.5},
+ {"label":"KP 3", "x":20.5, "y":5.5},
+ {"label":"KP Enter", "x":21.5, "y":5.5},
+ {"label":"Ctrl", "x":0, "y":6.5, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":6.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":6.5, "w":1.25},
+ {"label":"Muhenkan", "x":3.75, "y":6.5, "w":1.25},
+ {"label":"Space", "x":5, "y":6.5, "w":3.25},
+ {"label":"Henkan", "x":8.25, "y":6.5, "w":1.25},
+ {"label":"Kana", "x":9.5, "y":6.5, "w":1.25},
+ {"label":"Alt", "x":10.75, "y":6.5},
+ {"label":"GUI", "x":11.75, "y":6.5},
+ {"label":"Menu", "x":12.75, "y":6.5},
+ {"label":"Ctrl", "x":13.75, "y":6.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":6.5},
+ {"label":"Down", "x":16.25, "y":6.5},
+ {"label":"Right", "x":17.25, "y":6.5},
+ {"label":"KP 0", "x":18.5, "y":6.5, "w":2},
+ {"label":"KP .", "x":20.5, "y":6.5},
+ {"label":"KP =", "x":21.5, "y":6.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/converter/xt_usb/keymaps/default/config.h b/keyboards/converter/xt_usb/keymaps/default/config.h
new file mode 100644
index 000000000..6f70f09be
--- /dev/null
+++ b/keyboards/converter/xt_usb/keymaps/default/config.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/keyboards/converter/xt_usb/keymaps/default/keymap.c b/keyboards/converter/xt_usb/keymaps/default/keymap.c
new file mode 100644
index 000000000..3ef606070
--- /dev/null
+++ b/keyboards/converter/xt_usb/keymaps/default/keymap.c
@@ -0,0 +1,55 @@
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* IBM XT keyboard layout
+ * ,-------. ,--------------------------------------------------------------------------.
+ * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck |
+ * |-------| |--------------------------------------------------------------------------|
+ * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -|
+ * |-------| |------------------------------------------------------|Ent|---------------|
+ * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| |
+ * |-------| |----------------------------------------------------------------------| |
+ * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +|
+ * |-------| |----------------------------------------------------------------------| |
+ * | F9|F10| | Alt | Space |CapsLck| 0 | . | |
+ * `-------' `--------------------------------------------------------------------------'
+ */
+ LAYOUT_xt( \
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_NLCK, KC_SLCK,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_P7, KC_P8, KC_P9, KC_PMNS,
+ KC_F5, KC_F6, 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_GRV, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_F7, KC_F8, KC_LSFT,KC_BSLS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,KC_PSCR,KC_P1, KC_P2, KC_P3, KC_PPLS,
+ KC_F9, KC_F10, KC_LALT, KC_SPC, KC_CAPS, KC_P0, KC_PDOT
+ ),
+
+ /* Extended keyboard layout
+ * ,-----------------------------------------------.
+ * |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24|
+ * ,---. |-----------------------------------------------| ,-----------. ,-----------.
+ * |Esc| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|
+ * `---' `-----------------------------------------------' `-----------' `-----------'
+ * ,-----------------------------------------------------------. ,-----------. ,---------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
+ * |-----------------------------------------------------------| |-----------| |---------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +|
+ * |-----------------------------------------------------------| `-----------' |---------------|
+ * |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #|Entr| | 4| 5| 6|KP,|
+ * |-----------------------------------------------------------| ,---. |---------------|
+ * |Shft| <| Z| X| C| V| B| N| M| ,| .| /| RO|Shift | |Up | | 1| 2| 3|KP=|
+ * |-----------------------------------------------------------| ,-----------. |---------------|
+ * |Ctl|Gui|Alt|MHEN| Space |HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|Ent|
+ * `-----------------------------------------------------------' `-----------' `---------------'
+ */
+ /* Try this if your keyboad has exotic keys.
+ LAYOUT(
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ KC_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_VOLD,KC_VOLU,KC_MUTE,
+ 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_JYEN,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS,KC_ENT, KC_P4, KC_P5, KC_P6, KC_PCMM,
+ 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_RO, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL,KC_LGUI,KC_LALT,KC_MHEN, KC_SPC, KC_HENK,KC_KANA,KC_RALT,KC_RGUI,KC_APP, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0, KC_PDOT,KC_PEQL
+ ),
+ */
+};
diff --git a/keyboards/converter/xt_usb/led.c b/keyboards/converter/xt_usb/led.c
new file mode 100644
index 000000000..6fa077032
--- /dev/null
+++ b/keyboards/converter/xt_usb/led.c
@@ -0,0 +1,22 @@
+/*
+Copyright 2016 Ethan Apodaca <papodaca@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 "led.h"
+
+void led_set(uint8_t usb_led) {
+ //XT Keyboards do not have LEDs, nothing to do.
+}
diff --git a/keyboards/converter/xt_usb/matrix.c b/keyboards/converter/xt_usb/matrix.c
new file mode 100644
index 000000000..e2d7117b1
--- /dev/null
+++ b/keyboards/converter/xt_usb/matrix.c
@@ -0,0 +1,309 @@
+/*
+Copyright 2011 Jun Wako <wakojun@gmail.com>
+Copyright 2016 Ethan Apodaca <papodaca@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 <stdint.h>
+#include <stdbool.h>
+#include "action.h"
+#include "print.h"
+#include "util.h"
+#include "debug.h"
+#include "xt.h"
+#include "matrix.h"
+
+
+static void matrix_make(uint8_t code);
+static void matrix_break(uint8_t code);
+
+static uint8_t matrix[MATRIX_ROWS];
+#define ROW(code) (code>>3)
+#define COL(code) (code&0x07)
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void matrix_init(void)
+{
+ debug_enable = true;
+ xt_host_init();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+
+ matrix_init_quantum();
+}
+
+// convert E0-escaped codes into unused area
+static uint8_t move_e0code(uint8_t code) {
+ switch(code) {
+ // Original IBM XT keyboard has these keys
+ case 0x37: return 0x54; // Print Screen
+ case 0x46: return 0x55; // Ctrl + Pause
+ case 0x1C: return 0x6F; // Keypad Enter
+ case 0x35: return 0x7F; // Keypad /
+
+ // Any XT keyobard with these keys?
+ // http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf
+ // https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc
+ case 0x5B: return 0x5A; // Left GUI
+ case 0x5C: return 0x5B; // Right GUI
+ case 0x5D: return 0x5C; // Application
+ case 0x5E: return 0x5D; // Power(not used)
+ case 0x5F: return 0x5E; // Sleep(not used)
+ case 0x63: return 0x5F; // Wake (not used)
+ case 0x48: return 0x60; // Up
+ case 0x4B: return 0x61; // Left
+ case 0x50: return 0x62; // Down
+ case 0x4D: return 0x63; // Right
+ case 0x52: return 0x71; // Insert
+ case 0x53: return 0x72; // Delete
+ case 0x47: return 0x74; // Home
+ case 0x4F: return 0x75; // End
+ case 0x49: return 0x77; // Home
+ case 0x51: return 0x78; // End
+ case 0x1D: return 0x7A; // Right Ctrl
+ case 0x38: return 0x7C; // Right Alt
+ }
+ return 0x00;
+}
+
+uint8_t matrix_scan(void)
+{
+ static enum {
+ INIT,
+ E0,
+ // Pause: E1 1D 45, E1 9D C5
+ E1,
+ E1_1D,
+ E1_9D,
+ } state = INIT;
+
+ uint8_t code = xt_host_recv();
+ if (!code) return 0;
+ xprintf("%02X ", code);
+ switch (state) {
+ case INIT:
+ switch (code) {
+ case 0xE0:
+ state = E0;
+ break;
+ case 0xE1:
+ state = E1;
+ break;
+ default:
+ if (code < 0x80)
+ matrix_make(code);
+ else
+ matrix_break(code & 0x7F);
+ break;
+ }
+ break;
+ case E0:
+ switch (code) {
+ case 0x2A:
+ case 0xAA:
+ case 0x36:
+ case 0xB6:
+ //ignore fake shift
+ state = INIT;
+ break;
+ default:
+ if (code < 0x80)
+ matrix_make(move_e0code(code));
+ else
+ matrix_break(move_e0code(code & 0x7F));
+ state = INIT;
+ break;
+ }
+ break;
+ case E1:
+ switch (code) {
+ case 0x1D:
+ state = E1_1D;
+ break;
+ case 0x9D:
+ state = E1_9D;
+ break;
+ default:
+ state = INIT;
+ break;
+ }
+ break;
+ case E1_1D:
+ switch (code) {
+ case 0x45:
+ matrix_make(0x55);
+ break;
+ default:
+ state = INIT;
+ break;
+ }
+ break;
+ case E1_9D:
+ switch (code) {
+ case 0x45:
+ matrix_break(0x55);
+ break;
+ default:
+ state = INIT;
+ break;
+ }
+ break;
+ default:
+ state = INIT;
+ }
+ matrix_scan_quantum();
+ return 1;
+}
+
+inline
+uint8_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+inline
+static void matrix_make(uint8_t code)
+{
+ if (!matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] |= 1<<COL(code);
+ }
+}
+
+inline
+static void matrix_break(uint8_t code)
+{
+ if (matrix_is_on(ROW(code), COL(code))) {
+ matrix[ROW(code)] &= ~(1<<COL(code));
+ }
+}
+
+void matrix_clear(void)
+{
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) matrix[i] = 0x00;
+}
+
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix_get_row(row) & (1<<col));
+}
+
+#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))
+#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))
+#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))
+#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");
+ }
+}
+
+/*
+XT Scancodes
+============
+- http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/translate.pdf
+- https://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/scancode.doc
+
+01-53: Normal codes used in original XT keyboard
+54-7F: Not used in original XT keyboard
+
+ 0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 50 - - - - * * x x x x * * * o o o
+ 60 * * * * x x x x x x x x x x x *
+ 70 x * * x * * x * * x * x * x x *
+
+-: codes existed in original XT keyboard
+*: E0-escaped codes converted into unused code area(internal use in TMK)
+x: Non-espcaped codes(not used in real keyboards probably, for CodeSet2-CodeSet1 translation purpose)
+o: reserved
+
+Usage in TMK:
+
+ 00 (reserved) DO NOT USE
+ 54 PrintScr*
+ 55 Pause*
+ 56 Euro2
+ 57 F11
+ 58 F12
+ 59 Keypad =
+ 5A LGUI*
+ 5B RGUI*
+ 5C APP*
+ 5D (reserved)
+ 5E (reserved)
+ 5F (reserved)
+ 60 cursor*
+ 61 cursor*
+ 62 cursor*
+ 63 cursor*
+ 64 F13
+ 65 F14
+ 66 F15
+ 67 F16
+ 68 F17
+ 69 F18
+ 6A F19
+ 6B F20
+ 6C F21
+ 6D F22
+ 6E F23
+ 6F Keypad Enter*
+ 70 KANA
+ 71 nav*
+ 72 nav*
+ 73 RO
+ 74 nav*
+ 75 nav*
+ 76 F24
+ 77 nav*
+ 78 nav*
+ 79 HENKAN
+ 7A RCTL*
+ 7B MUHENKAN
+ 7C RALT*
+ 7D JPY
+ 7E Keypad ,
+ 7F Keypad / *
+
+*/
diff --git a/keyboards/converter/xt_usb/rules.mk b/keyboards/converter/xt_usb/rules.mk
new file mode 100644
index 000000000..0b8731f32
--- /dev/null
+++ b/keyboards/converter/xt_usb/rules.mk
@@ -0,0 +1,62 @@
+# 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
+# This indicates which bootloader is present on the board.
+# BOOTLOADER = caterina # Pro Micro
+BOOTLOADER = halfkay # Teensy
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover
+XT_ENABLE = yes
+CUSTOM_MATRIX = yes
+
+
+# Optimize size but this may cause error "relocation truncated to fit"
+#EXTRALDFLAGS = -Wl,--relax
+
+SRC = matrix.c led.c
diff --git a/keyboards/converter/xt_usb/xt_usb.c b/keyboards/converter/xt_usb/xt_usb.c
new file mode 100644
index 000000000..88acee0b0
--- /dev/null
+++ b/keyboards/converter/xt_usb/xt_usb.c
@@ -0,0 +1 @@
+#include "xt_usb.h"
diff --git a/keyboards/converter/xt_usb/xt_usb.h b/keyboards/converter/xt_usb/xt_usb.h
new file mode 100644
index 000000000..9785158b4
--- /dev/null
+++ b/keyboards/converter/xt_usb/xt_usb.h
@@ -0,0 +1,132 @@
+/*
+Copyright 2011,2012,2013 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+#include "quantum.h"
+
+/* IBM XT keyboard layout
+ * ,-------. ,--------------------------------------------------------------------------.
+ * | F1| F2| |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| BS |NumLck |ScrLck |
+ * |-------| |--------------------------------------------------------------------------|
+ * | F3| F4| | Tab | Q| W| E| R| T| Y| U| I| O| P| [| ] | | 7| 8| 9| -|
+ * |-------| |------------------------------------------------------|Ent|---------------|
+ * | F5| F6| | Ctrl | A| S| D| F| G| H| J| K| L| ;| '| `| | 4| 5| 6| |
+ * |-------| |----------------------------------------------------------------------| |
+ * | F7| F8| |Shif| \| Z| X| C| V| B| N| M| ,| .| /|Shift|PrS| 1| 2| 3| +|
+ * |-------| |----------------------------------------------------------------------| |
+ * | F9|F10| | Alt | Space |CapsLck| 0 | . | |
+ * `-------' `--------------------------------------------------------------------------'
+ * Scan code set 1
+ * ,-------. ,--------------------------------------------------------------------------.
+ * | 3B| 3C| | 01| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 0E | 45 | 46 |
+ * |-------| |--------------------------------------------------------------------------|
+ * | 3D| 3E| | 0F | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B | | 47| 48| 49| 4A|
+ * |-------| |------------------------------------------------------| 1C|---------------|
+ * | 3F| 40| | 1D | 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 29| | 4B| 4C| 4D| |
+ * |-------| |----------------------------------------------------------------------| |
+ * | 41| 42| | 2A | 2B| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35| 36 |*37| 4F| 50| 51| 4E|
+ * |-------| |----------------------------------------------------------------------| |
+ * | 43| 44| | 38 | 39 | 3A | 52 | 53 | |
+ * `-------' `--------------------------------------------------------------------------'
+ */
+#define LAYOUT_xt( \
+ K3B,K3C, K01,K02,K03,K04,K05,K06,K07,K08,K09,K0A,K0B,K0C,K0D,K0E, K45, K46, \
+ K3D,K3E, K0F,K10,K11,K12,K13,K14,K15,K16,K17,K18,K19,K1A,K1B, K47,K48,K49,K4A, \
+ K3F,K40, K1D,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28,K29,K1C,K4B,K4C,K4D, \
+ K41,K42, K2A,K2B,K2C,K2D,K2E,K2F,K30,K31,K32,K33,K34,K35,K36,K54,K4F,K50,K51,K4E, \
+ K43,K44, K38, K39, K3A, K52, K53 \
+) { \
+ { KC_NO, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, KC_NO }, \
+ { K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \
+ { K50, K51, K52, K53, K54, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
+}
+
+/* Extended keyboard layout
+ * ,-----------------------------------------------.
+ * |F13|F14|F15|F16|F17|F18|F19|F20|F21|F22|F23|F24|
+ * ,---. |-----------------------------------------------| ,-----------. ,-----------.
+ * |Esc| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |PrS|ScL|Pau| |VDn|VUp|Mut|
+ * `---' `-----------------------------------------------' `-----------' `-----------'
+ * ,-----------------------------------------------------------. ,-----------. ,---------------.
+ * | `| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|JPY|Bsp| |Ins|Hom|PgU| |NmL| /| *| -|
+ * |-----------------------------------------------------------| |-----------| |---------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ | |Del|End|PgD| | 7| 8| 9| +|
+ * |-----------------------------------------------------------| `-----------' |---------------|
+ * |CapsL | A| S| D| F| G| H| J| K| L| ;| '| #|Entr| | 4| 5| 6|KP,|
+ * |-----------------------------------------------------------| ,---. |---------------|
+ * |Shft| <| Z| X| C| V| B| N| M| ,| .| /| RO|Shift | |Up | | 1| 2| 3|Ent|
+ * |-----------------------------------------------------------| ,-----------. |---------------|
+ * |Ctl|Gui|Alt|MHEN| Space |HENK|KANA|Alt|Gui|App|Ctl| |Lef|Dow|Rig| | 0| .|KP=|
+ * `-----------------------------------------------------------' `-----------' `---------------'
+ * ,-----------------------------------------------.
+ * | 64| 65| 66| 67| 68| 69| 6A| 6B| 6C| 6D| 6E| 76|
+ * ,---. |-----------------------------------------------| ,-----------. ,-----------.
+ * | 01| | 3B| 3C| 3D| 3E| 3F| 40| 41| 42| 43| 44| 57| 58| |*37| 46|*45| |e5E|e5F|e63|
+ * `---' `-----------------------------------------------' `-----------' `-----------'
+ * ,-----------------------------------------------------------. ,-----------. ,---------------.
+ * | 29| 02| 03| 04| 05| 06| 07| 08| 09| 0A| 0B| 0C| 0D| 7D| 0E| |e52|e47|e49| | 45|e35| 37| 4A|
+ * |-----------------------------------------------------------| |-----------| |---------------|
+ * | 0F | 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1A| 1B| 2B | |e53|e4F|e51| | 47| 48| 49| 4E|
+ * |-----------------------------------------------------------| `-----------' |---------------|
+ * | 3A | 1E| 1F| 20| 21| 22| 23| 24| 25| 26| 27| 28| 00| 1C | | 4B| 4C| 4D| 7E|
+ * |-----------------------------------------------------------| ,---. |---------------|
+ * | 2A | 56| 2C| 2D| 2E| 2F| 30| 31| 32| 33| 34| 35| 73| 36 | |e48| | 4F| 50| 51|e1C|
+ * |-----------------------------------------------------------| ,-----------. |---------------|
+ * | 1D|e5B| 38| 7B | 39 | 79 | 70 |e38|e5C|e5D|e1D| |e4B|e50|e4D| | 52| 53| 59|
+ * `-----------------------------------------------------------' `-----------' `---------------'
+ * e: E0-escaped codes
+ * *: special handling codes
+ */
+#define LAYOUT( \
+ K64,K65,K66,K67,K68,K69,K6A,K6B,K6C,K6D,K6E,K76, \
+ K01, K3B,K3C,K3D,K3E,K3F,K40,K41,K42,K43,K44,K57,K58, K54,K46,K55, K5D,K5E,K5F, \
+ K29,K02,K03,K04,K05,K06,K07,K08,K09,K0A,K0B,K0C,K0D,K7D,K0E, K71,K74,K77, K45,K7F,K37,K4A, \
+ K0F,K10,K11,K12,K13,K14,K15,K16,K17,K18,K19,K1A,K1B, K2B, K72,K75,K78, K47,K48,K49,K4E, \
+ K3A,K1E,K1F,K20,K21,K22,K23,K24,K25,K26,K27,K28, K00,K1C, K4B,K4C,K4D,K7E, \
+ K2A,K56,K2C,K2D,K2E,K2F,K30,K31,K32,K33,K34,K35, K73,K36, K60, K4F,K50,K51,K6F, \
+ K1D,K5A,K38,K7B, K39, K79,K70,K7C,K5B,K5C,K7A, K61,K62,K63, K52,K53,K59 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37 }, \
+ { K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K48, K49, K4A, K4B, K4C, K4D, K4E, K4F }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K58, K59, K5A, K5B, K5C, K5D, K5E, K5F }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77 }, \
+ { K78, K79, K7A, K7B, K7C, K7D, K7E, K7F } \
+}
diff --git a/keyboards/cospad/cospad.h b/keyboards/cospad/cospad.h
index 36c7f3367..df42b0df1 100644
--- a/keyboards/cospad/cospad.h
+++ b/keyboards/cospad/cospad.h
@@ -22,6 +22,21 @@
* `-------------------'
*/
+/* COSPAD gamepad matrix layout
+ * ,-------------------.
+ * | 00 | 01 | 02 | 03 |
+ * |----|----|----|----|
+ * | 10 | 11 | 12 | 13 |
+ * |----|----|----|----|
+ * | 20 | 21 | 22 | |
+ * |----|----|----| 23 |
+ * | 30 | 31 | 32 | |
+ * |----|----|----|----|
+ * | 40 | 41 | 42 | 43 |
+ * |----|----|----|----|
+ * | 50 | 51 | 52 | 53 |
+ * `-------------------'
+ */
/* COSPAD numpad matrix layout
* ,-------------------.
@@ -41,7 +56,7 @@
// The first section contains all of the arguments
// The second converts the arguments into a two-dimensional array
#define LAYOUT_ortho_6x4( \
- k00, k01, k02, k03, \
+ k00, k01, k02, k03, \
k10, k11, k12, k13, \
k20, k21, k22, k23, \
k30, k31, k32, k33, \
@@ -57,8 +72,25 @@
{k50, k51, k52, k53} \
}
+#define LAYOUT_gamepad_6x4( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13, \
+ k20, k21, k22, \
+ k30, k31, k32, k23, \
+ k40, k41, k42, k43, \
+ k50, k51, k52, k53 \
+) \
+{ \
+ {k00, k01, k02, k03}, \
+ {k10, k11, k12, k13}, \
+ {k20, k21, k22, k23}, \
+ {k30, k31, k32, KC_NO}, \
+ {k40, k41, k42, k43}, \
+ {k50, k51, k52, k53} \
+}
+
#define LAYOUT_numpad_6x4( \
- k00, k01, k02, k03, \
+ k00, k01, k02, k03, \
k10, k11, k12, k13, \
k20, k21, k22, \
k30, k31, k32, k23, \
diff --git a/keyboards/cospad/info.json b/keyboards/cospad/info.json
index 4fd2ea087..b34013a47 100644
--- a/keyboards/cospad/info.json
+++ b/keyboards/cospad/info.json
@@ -1,16 +1,67 @@
{
- "keyboard_name": "",
- "url": "",
- "maintainer": "qmk",
- "width": 4,
- "height": 6,
- "layouts": {
- "LAYOUT_numpad_6x4": {
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Tab", "x":1, "y":0}, {"label":"Fn", "x":2, "y":0}, {"label":"Back", "x":3, "y":0}, {"label":"Num Lock", "x":0, "y":1}, {"label":"/", "x":1, "y":1}, {"label":"*", "x":2, "y":1}, {"label":"-", "x":3, "y":1}, {"label":"7", "x":0, "y":2}, {"label":"8", "x":1, "y":2}, {"label":"9", "x":2, "y":2}, {"label":"+", "x":3, "y":2, "h":2}, {"label":"4", "x":0, "y":3}, {"label":"5", "x":1, "y":3}, {"label":"6", "x":2, "y":3}, {"label":"1", "x":0, "y":4}, {"label":"2", "x":1, "y":4}, {"label":"3", "x":2, "y":4}, {"label":"Enter", "x":3, "y":4, "h":2}, {"label":"0", "x":0, "y":5, "w":2}, {"label":".", "x":2, "y":5}]
- },
+ "keyboard_name": "Cospad",
+ "keyboard_folder": "cospad",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 6,
+ "layouts": {
+ "LAYOUT_numpad_6x4": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"Tab", "x":1, "y":0},
+ {"label":"Fn", "x":2, "y":0},
+ {"label":"Back", "x":3, "y":0},
+ {"label":"Num Lock", "x":0, "y":1},
+ {"label":"/", "x":1, "y":1},
+ {"label":"*", "x":2, "y":1},
+ {"label":"-", "x":3, "y":1},
+ {"label":"7", "x":0, "y":2},
+ {"label":"8", "x":1, "y":2},
+ {"label":"9", "x":2, "y":2},
+ {"label":"4", "x":0, "y":3},
+ {"label":"5", "x":1, "y":3},
+ {"label":"6", "x":2, "y":3},
+ {"label":"+", "x":3, "y":2, "h":2},
+ {"label":"1", "x":0, "y":4},
+ {"label":"2", "x":1, "y":4},
+ {"label":"3", "x":2, "y":4},
+ {"label":"0", "x":0, "y":5, "w":2},
+ {"label":".", "x":2, "y":5},
+ {"label":"Enter", "x":3, "y":4, "h":2}
+ ]
+ },
- "LAYOUT_ortho_6x4": {
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Tab", "x":1, "y":0}, {"label":"Fn", "x":2, "y":0}, {"label":"Back", "x":3, "y":0}, {"label":"Num Lock", "x":0, "y":1}, {"label":"/", "x":1, "y":1}, {"label":"*", "x":2, "y":1}, {"label":"-", "x":3, "y":1}, {"label":"7", "x":0, "y":2}, {"label":"8", "x":1, "y":2}, {"label":"9", "x":2, "y":2}, {"label":"+", "x":3, "y":2}, {"label":"4", "x":0, "y":3}, {"label":"5", "x":1, "y":3}, {"label":"6", "x":2, "y":3}, {"x":3, "y":3}, {"label":"1", "x":0, "y":4}, {"label":"2", "x":1, "y":4}, {"label":"3", "x":2, "y":4}, {"label":"Enter", "x":3, "y":4}, {"label":"0", "x":0, "y":5}, {"x":1, "y":5}, {"label":".", "x":2, "y":5}, {"x":3, "y":5}]
- }
+ "LAYOUT_gamepad_6x4": {
+ "layout": [
+ {"label":"k00", "x":5, "y":0},
+ {"label":"k01", "x":5, "y":1},
+ {"label":"k02", "x":5, "y":2},
+ {"label":"k03", "x":5, "y":3},
+ {"label":"k10", "x":4, "y":0},
+ {"label":"k11", "x":4, "y":1},
+ {"label":"k12", "x":4, "y":2},
+ {"label":"k13", "x":4, "y":3},
+ {"label":"k20", "x":3, "y":0},
+ {"label":"k21", "x":3, "y":1},
+ {"label":"k22", "x":3, "y":2},
+ {"label":"k30", "x":2, "y":0},
+ {"label":"k31", "x":2, "y":1},
+ {"label":"k32", "x":2, "y":2},
+ {"label":"k23", "x":2, "y":3, "w":2},
+ {"label":"k40", "x":1, "y":0},
+ {"label":"k41", "x":1, "y":1},
+ {"label":"k42", "x":1, "y":2},
+ {"label":"k43", "x":1, "y":3},
+ {"label":"k50", "x":0, "y":0},
+ {"label":"k51", "x":0, "y":1},
+ {"label":"k52", "x":0, "y":2},
+ {"label":"k53", "x":0, "y":3}
+ ]
+ },
+
+ "LAYOUT_ortho_6x4": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"Tab", "x":1, "y":0}, {"label":"Fn", "x":2, "y":0}, {"label":"Back", "x":3, "y":0}, {"label":"Num Lock", "x":0, "y":1}, {"label":"/", "x":1, "y":1}, {"label":"*", "x":2, "y":1}, {"label":"-", "x":3, "y":1}, {"label":"7", "x":0, "y":2}, {"label":"8", "x":1, "y":2}, {"label":"9", "x":2, "y":2}, {"label":"+", "x":3, "y":2}, {"label":"4", "x":0, "y":3}, {"label":"5", "x":1, "y":3}, {"label":"6", "x":2, "y":3}, {"x":3, "y":3}, {"label":"1", "x":0, "y":4}, {"label":"2", "x":1, "y":4}, {"label":"3", "x":2, "y":4}, {"label":"Enter", "x":3, "y":4}, {"label":"0", "x":0, "y":5}, {"x":1, "y":5}, {"label":".", "x":2, "y":5}, {"x":3, "y":5}]
}
-} \ No newline at end of file
+ }
+}
diff --git a/keyboards/cospad/keymaps/detrus/keymap.c b/keyboards/cospad/keymaps/detrus/keymap.c
new file mode 100644
index 000000000..f9eddc2a8
--- /dev/null
+++ b/keyboards/cospad/keymaps/detrus/keymap.c
@@ -0,0 +1,369 @@
+#include QMK_KEYBOARD_H
+#include "led.h"
+#include <print.h>
+
+#ifdef RGBLIGHT_ENABLE
+#include "rgblight.h"
+#endif
+
+#define _______ KC_TRNS
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+enum cospad_layers {
+ _QWERTY_LAYER,
+ _QWERTZ_LAYER,
+ _COLEMA_LAYER,
+ _DVORAK_LAYER,
+ _QWERTY_LOWER_LAYER,
+ _QWERTZ_LOWER_LAYER,
+ _COLEMA_LOWER_LAYER,
+ _DVORAK_LOWER_LAYER,
+ _RAISE_LAYER,
+ _ALTER_LAYER,
+};
+
+// To switch the default layer used for the layout, there are special keycodes.
+// Which onces detected below serve to switch it.
+enum cospad_keycodes {
+ QWERTY = SAFE_RANGE,
+ QWERTZ,
+ COLEMAK,
+ DVORAK
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Keymap _QWERTY_LAYER: Default layer
+ * ,-----------------------.
+ * | T | G | B | Alt |
+ * |-----|-----|-----|-----|
+ * | R | F | V | LOW |
+ * |-----|-----|-----|-----|
+ * | E | D | C | |
+ * |-----|-----|-----| Spc |
+ * | W | S | X | |
+ * |-----|-----|-----|-----|
+ * | Q | A | Z | RAI |
+ * |-----|-----|-----|-----|
+ * | Esc | Tab | Sft | Ctl |
+ * `-----------------------'
+ *
+ * And it's LOWER layer
+ * ,-----------------------.
+ * | P | ; | / | Alt |
+ * |-----|-----|-----|-----|
+ * | O | L | . | LOW |
+ * |-----|-----|-----|-----|
+ * | I | K | , | |
+ * |-----|-----|-----| Ent |
+ * | U | J | M | |
+ * |-----|-----|-----|-----|
+ * | Y | H | N | RAI |
+ * |-----|-----|-----|-----|
+ * | Esc | Tab | Sft | Ctl |
+ * `-----------------------'
+ */
+ [_QWERTY_LAYER] = LAYOUT_gamepad_6x4(
+ KC_T, KC_G, KC_B, KC_LALT, \
+ KC_R, KC_F, KC_V, MO(_QWERTY_LOWER_LAYER),\
+ KC_E, KC_D, KC_C, \
+ KC_W, KC_S, KC_X, KC_SPACE, \
+ KC_Q, KC_A, KC_Z, MO(_RAISE_LAYER),\
+ KC_GESC, KC_TAB, KC_LSFT, KC_LCTRL),
+ [_QWERTY_LOWER_LAYER] = LAYOUT_gamepad_6x4(
+ KC_P, KC_SCLN, KC_SLSH, KC_LALT, \
+ KC_O, KC_L, KC_DOT, _______, \
+ KC_I, KC_K, KC_COMM, \
+ KC_U, KC_J, KC_M, KC_ENTER, \
+ KC_Y, KC_H, KC_N, _______, \
+ _______, _______, _______, _______),
+
+
+
+ /* Keymap _QWERTZ_LAYER: Alternate default layer
+ * ,-----------------------.
+ * | T | G | B | Alt |
+ * |-----|-----|-----|-----|
+ * | R | F | V | LOW |
+ * |-----|-----|-----|-----|
+ * | E | D | C | |
+ * |-----|-----|-----| Spc |
+ * | W | S | X | |
+ * |-----|-----|-----|-----|
+ * | Q | A | Y | RAI |
+ * |-----|-----|-----|-----|
+ * | Esc | Tab | Sft | Ctl |
+ * `-----------------------'
+ *
+ * And it's LOWER layer
+ * ,-----------------------.
+ * | P | ; | / | Alt |
+ * |-----|-----|-----|-----|
+ * | O | L | > | LOW |
+ * |-----|-----|-----|-----|
+ * | I | K | < | |
+ * |-----|-----|-----| Ent |
+ * | U | J | M | |
+ * |-----|-----|-----|-----|
+ * | Z | H | N | RAI |
+ * |-----|-----|-----|-----|
+ * | Esc | Tab | Sft | Ctl |
+ * `-----------------------'
+ */
+ [_QWERTZ_LAYER] = LAYOUT_gamepad_6x4(
+ KC_T, KC_G, KC_B, KC_LALT, \
+ KC_R, KC_F, KC_V, MO(_QWERTZ_LOWER_LAYER),\
+ KC_E, KC_D, KC_C, \
+ KC_W, KC_S, KC_X, KC_SPACE, \
+ KC_Q, KC_A, KC_Y, MO(_RAISE_LAYER),\
+ KC_GESC, KC_TAB, KC_LSFT, KC_LCTRL),
+ [_QWERTZ_LOWER_LAYER] = LAYOUT_gamepad_6x4(
+ KC_P, KC_SCLN, KC_SLSH, KC_LALT, \
+ KC_O, KC_L, KC_DOT, _______, \
+ KC_I, KC_K, KC_COMM, \
+ KC_U, KC_J, KC_M, KC_ENTER, \
+ KC_Z, KC_H, KC_N, _______, \
+ _______, _______, _______, _______),
+
+
+
+ /* Keymap _COLEMA_LAYER: Alternate default layer
+ * ,-----------------------.
+ * | G | D | B | Alt |
+ * |-----|-----|-----|-----|
+ * | P | T | V | LOW |
+ * |-----|-----|-----|-----|
+ * | F | S | C | |
+ * |-----|-----|-----| Spc |
+ * | W | R | X | |
+ * |-----|-----|-----|-----|
+ * | Q | A | Z | RAI |
+ * |-----|-----|-----|-----|
+ * | Esc | Tab | Sft | Ctl |
+ * `-----------------------'
+ *
+ * And it's LOWER layer
+ * ,-----------------------.
+ * | ; | O | / | Alt |
+ * |-----|-----|-----|-----|
+ * | Y | I | . | LOW |
+ * |-----|-----|-----|-----|
+ * | U | E | , | |
+ * |-----|-----|-----| Ent |
+ * | L | N | M | |
+ * |-----|-----|-----|-----|
+ * | J | H | K | RAI |
+ * |-----|-----|-----|-----|
+ * | Esc | Tab | Sft | Ctl |
+ * `-----------------------'
+ */
+ [_COLEMA_LAYER] = LAYOUT_gamepad_6x4(
+ KC_T, KC_D, KC_B, KC_LALT, \
+ KC_R, KC_T, KC_V, MO(_COLEMA_LOWER_LAYER),\
+ KC_E, KC_S, KC_C, \
+ KC_W, KC_R, KC_X, KC_SPACE, \
+ KC_Q, KC_A, KC_Z, MO(_RAISE_LAYER),\
+ KC_GESC, KC_TAB, KC_LSFT, KC_LCTRL),
+ [_COLEMA_LOWER_LAYER] = LAYOUT_gamepad_6x4(
+ KC_SCLN, KC_O, KC_SLSH, _______, \
+ KC_Y, KC_I, KC_DOT, _______, \
+ KC_U, KC_E, KC_COMM, \
+ KC_L, KC_N, KC_M, KC_ENTER, \
+ KC_J, KC_H, KC_K, _______, \
+ KC_F, KC_G, _______, _______),
+
+
+
+ /* Keymap _DVORAK_LAYER: Alternate default layer
+ * ,-----------------------.
+ * | Y | I | X | Alt |
+ * |-----|-----|-----|-----|
+ * | P | U | K | LOW |
+ * |-----|-----|-----|-----|
+ * | . | E | J | |
+ * |-----|-----|-----| Spc |
+ * | , | O | Q | |
+ * |-----|-----|-----|-----|
+ * | ' | A | ; | RAI |
+ * |-----|-----|-----|-----|
+ * | Esc | Tab | Sft | Ctl |
+ * `-----------------------'
+ *
+ * And it's LOWER layer
+ * ,-----------------------.
+ * | L | S | Z | Alt |
+ * |-----|-----|-----|-----|
+ * | R | N | V | LOW |
+ * |-----|-----|-----|-----|
+ * | C | T | W | |
+ * |-----|-----|-----| Ent |
+ * | G | H | M | |
+ * |-----|-----|-----|-----|
+ * | F | D | B | RAI |
+ * |-----|-----|-----|-----|
+ * | Esc | Tab | Sft | Ctl |
+ * `-----------------------'
+ */
+ [_DVORAK_LAYER] = LAYOUT_gamepad_6x4(
+ KC_Y, KC_I, KC_X, KC_LALT, \
+ KC_P, KC_U, KC_K, MO(_DVORAK_LOWER_LAYER),\
+ KC_DOT, KC_E, KC_J, \
+ KC_COMM, KC_O, KC_A, KC_SPACE, \
+ KC_QUOT, KC_A, KC_SCLN, MO(_RAISE_LAYER),\
+ KC_GESC, KC_TAB, KC_LSFT, KC_LCTRL),
+ [_DVORAK_LOWER_LAYER] = LAYOUT_gamepad_6x4(
+ KC_L, KC_S, KC_Z, KC_LALT, \
+ KC_R, KC_N, KC_V, _______, \
+ KC_C, KC_T, KC_W, \
+ KC_G, KC_H, KC_M, KC_ENTER,\
+ KC_F, KC_D, KC_B, _______, \
+ _______, _______, _______, _______),
+
+
+
+ /* Keymap _RAISE_LAYER: Additional layer to access more
+ * ,-----------------------.
+ * | 5 | 0 | del | Alt |
+ * |-----|-----|-----|-----|
+ * | 4 | 9 | -> | LOW |
+ * |-----|-----|-----|-----|
+ * | 3 | 8 | <- | |
+ * |-----|-----|-----| Spc |
+ * | 2 | 7 | -> | |
+ * |-----|-----|-----|-----|
+ * | 1 | 6 | <- | RAI |
+ * |-----|-----|-----|-----|
+ * | Esc | Tab | Sft | Ctl |
+ * `-----------------------'
+ */
+ [_RAISE_LAYER] = LAYOUT_gamepad_6x4(
+ KC_5, KC_0, KC_BSPC, _______, \
+ KC_4, KC_9, KC_RIGHT, _______, \
+ KC_3, KC_8, KC_UP, \
+ KC_2, KC_7, KC_DOWN, _______, \
+ KC_1, KC_6, KC_LEFT, _______, \
+ _______, _______, _______, _______),
+
+
+
+ /* Keymap _ALTER_LAYER: Function layer used to control the Leds
+ * and use media buttons
+ * ,----------------------------------------.
+ * | Val Dec | Bl Toggle | Qwertz | Super |
+ * |---------|------------|---------|-------|
+ * | Val Inc | Bl Off | Qwerty | |
+ * |---------|------------|---------|-------|
+ * | Sat Dec | Bl On | Colemak | |
+ * |---------|------------|---------| |
+ * | Sat Inc | RGB Toggle | Dvorak | |
+ * |---------|------------|---------|-------|
+ * | Hue Dec | RGB Next | Vol Dwn | |
+ * |---------|------------|---------|-------|
+ * | Hue Inc | RGB Prev | Vol Up | Reset |
+ * `----------------------------------------'
+ */
+ [_ALTER_LAYER] = LAYOUT_gamepad_6x4(
+ RGB_VAD, BL_TOGG, QWERTZ, KC_LGUI, \
+ RGB_VAI, BL_OFF, QWERTY, _______, \
+ RGB_SAD, BL_ON, COLEMAK, \
+ RGB_SAI, RGB_TOG, DVORAK, _______, \
+ RGB_HUD, RGB_MOD, KC_VOLD, _______, \
+ RGB_HUI, RGB_RMOD, KC_VOLU, RESET),
+};
+
+// Makes sure to update the good tri-layer if a layer changes
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(default_layer_state)) {
+ case _QWERTY_LAYER:
+ state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTY_LOWER_LAYER, _ALTER_LAYER);
+ break;
+ case _QWERTZ_LAYER:
+ state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTZ_LOWER_LAYER, _ALTER_LAYER);
+ break;
+ case _COLEMA_LAYER:
+ state = update_tri_layer_state(state, _RAISE_LAYER, _COLEMA_LOWER_LAYER, _ALTER_LAYER);
+ break;
+ case _DVORAK_LAYER:
+ state = update_tri_layer_state(state, _RAISE_LAYER, _DVORAK_LOWER_LAYER, _ALTER_LAYER);
+ break;
+ }
+ return state;
+}
+
+// Makes the tri-layer
+uint32_t default_layer_state_set_kb(uint32_t state) {
+ switch (biton32(state)) {
+ case _QWERTY_LAYER:
+ state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTZ_LOWER_LAYER, _ALTER_LAYER);
+ state = update_tri_layer_state(state, _RAISE_LAYER, _COLEMA_LOWER_LAYER, _ALTER_LAYER);
+ state = update_tri_layer_state(state, _RAISE_LAYER, _DVORAK_LOWER_LAYER, _ALTER_LAYER);
+ layer_move(_QWERTY_LAYER);
+ break;
+ case _QWERTZ_LAYER:
+ state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTY_LOWER_LAYER, _ALTER_LAYER);
+ state = update_tri_layer_state(state, _RAISE_LAYER, _COLEMA_LOWER_LAYER, _ALTER_LAYER);
+ state = update_tri_layer_state(state, _RAISE_LAYER, _DVORAK_LOWER_LAYER, _ALTER_LAYER);
+ layer_move(_QWERTZ_LAYER);
+ break;
+ case _COLEMA_LAYER:
+ state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTY_LOWER_LAYER, _ALTER_LAYER);
+ state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTZ_LOWER_LAYER, _ALTER_LAYER);
+ state = update_tri_layer_state(state, _RAISE_LAYER, _DVORAK_LOWER_LAYER, _ALTER_LAYER);
+ layer_move(_COLEMA_LAYER);
+ break;
+ case _DVORAK_LAYER:
+ state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTY_LOWER_LAYER, _ALTER_LAYER);
+ state = update_tri_layer_state(state, _RAISE_LAYER, _QWERTZ_LOWER_LAYER, _ALTER_LAYER);
+ state = update_tri_layer_state(state, _RAISE_LAYER, _COLEMA_LOWER_LAYER, _ALTER_LAYER);
+ layer_move(_DVORAK_LAYER);
+ break;
+ }
+ return state;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case BL_TOGG:
+ if (record->event.pressed) {
+ cospad_bl_led_togg();
+ }
+ return false;
+ case BL_ON:
+ if (record->event.pressed) {
+ cospad_bl_led_on();
+ }
+ return false;
+ case BL_OFF:
+ if (record->event.pressed) {
+ cospad_bl_led_off();
+ }
+ return false;
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY_LAYER);
+ print("switched to QWERTY layout\n");
+ }
+ return false;
+ break;
+ case QWERTZ:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTZ_LAYER);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMA_LAYER);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK_LAYER);
+ }
+ return false;
+ break;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/cospad/readme.md b/keyboards/cospad/readme.md
index 436b87dce..2e9add691 100644
--- a/keyboards/cospad/readme.md
+++ b/keyboards/cospad/readme.md
@@ -4,8 +4,8 @@ COSPAD
A DIY Keypad Kit sold by KPRepublic, runs TKG natively.
Keyboard Maintainer: QMK Community
-Hardware Supported: COSPAD
-Hardware Availability: https://aliexpress.com/item/cospad-Custom-Mechanical-Keyboard-Kit-up-tp-24-keys-Supports-TKG-TOOLS-Underglow-RGB-PCB-20/32818383873.html
+Hardware Supported: COSPAD
+Hardware Availability: [KPrepublic on Aliexpress](https://aliexpress.com/item/cospad-Custom-Mechanical-Keyboard-Kit-up-tp-24-keys-Supports-TKG-TOOLS-Underglow-RGB-PCB-20/32818383873.html)
Only supports on and off for the backlight leds, as they are not connected to a PWM pin.
@@ -18,4 +18,4 @@ Make example for this keyboard (after setting up your build environment):
make cospad:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/crawlpad/config.h b/keyboards/crawlpad/config.h
index a07c79cd2..c72be83f2 100755
--- a/keyboards/crawlpad/config.h
+++ b/keyboards/crawlpad/config.h
@@ -40,9 +40,6 @@
false \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#ifdef RGBLIGHT_ENABLE
#define RGB_DI_PIN D3
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/crkbd/config.h b/keyboards/crkbd/config.h
index c910d8f24..4357a218d 100644
--- a/keyboards/crkbd/config.h
+++ b/keyboards/crkbd/config.h
@@ -16,9 +16,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/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
+#include <serial_config.h>
-#endif
+#define USE_I2C
+#define USE_SERIAL
+
+#ifdef USE_Link_Time_Optimization
+ // LTO has issues with macros (action_get_macro) and "functions" (fn_actions),
+ // so just disable them
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+
+ #define DISABLE_LEADER
+#endif // USE_Link_Time_Optimization
diff --git a/keyboards/crkbd/crkbd.c b/keyboards/crkbd/crkbd.c
index 5e8ba8bac..d420ccda2 100644
--- a/keyboards/crkbd/crkbd.c
+++ b/keyboards/crkbd/crkbd.c
@@ -1 +1,10 @@
#include "crkbd.h"
+#include "ssd1306.h"
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+#ifdef SSD1306OLED
+ return process_record_gfx(keycode,record) && process_record_user(keycode, record);
+#else
+ return process_record_user(keycode, record);
+#endif
+}
diff --git a/keyboards/crkbd/crkbd.h b/keyboards/crkbd/crkbd.h
index 889bcb9ae..73f2a3f07 100644
--- a/keyboards/crkbd/crkbd.h
+++ b/keyboards/crkbd/crkbd.h
@@ -1,8 +1,5 @@
-#ifndef CRKBD_H
-#define CRKBD_H
+#pragma once
#ifdef KEYBOARD_crkbd_rev1
#include "rev1.h"
#endif
-
-#endif
diff --git a/keyboards/crkbd/i2c.c b/keyboards/crkbd/i2c.c
index 084c890c4..4bee5c639 100644
--- a/keyboards/crkbd/i2c.c
+++ b/keyboards/crkbd/i2c.c
@@ -34,7 +34,7 @@ void i2c_delay(void) {
// _delay_us(100);
}
-// Setup twi to run at 100kHz
+// Setup twi to run at 100kHz or 400kHz (see ./i2c.h SCL_CLOCK)
void i2c_master_init(void) {
// no prescaler
TWSR = 0;
diff --git a/keyboards/crkbd/i2c.h b/keyboards/crkbd/i2c.h
index c15b6bc50..710662c7a 100644
--- a/keyboards/crkbd/i2c.h
+++ b/keyboards/crkbd/i2c.h
@@ -1,5 +1,4 @@
-#ifndef I2C_H
-#define I2C_H
+#pragma once
#include <stdint.h>
@@ -15,7 +14,7 @@
#define SLAVE_BUFFER_SIZE 0x10
-// i2c SCL clock frequency
+// i2c SCL clock frequency 400kHz
#define SCL_CLOCK 400000L
extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
@@ -45,5 +44,3 @@ extern unsigned char i2c_readNak(void);
extern unsigned char i2c_read(unsigned char ack);
#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
-
-#endif
diff --git a/keyboards/crkbd/info.json b/keyboards/crkbd/info.json
new file mode 100644
index 000000000..45a0255c1
--- /dev/null
+++ b/keyboards/crkbd/info.json
@@ -0,0 +1,62 @@
+{
+ "keyboard_name": "crkbd rev. 1",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 4.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0.3},
+ {"label":"Q", "x":1, "y":0.3},
+ {"label":"W", "x":2, "y":0.1},
+ {"label":"E", "x":3, "y":0},
+ {"label":"R", "x":4, "y":0.1},
+ {"label":"T", "x":5, "y":0.2},
+
+ {"label":"Y", "x":9, "y":0.2},
+ {"label":"U", "x":10, "y":0.1},
+ {"label":"I", "x":11, "y":0},
+ {"label":"O", "x":12, "y":0.1},
+ {"label":"P", "x":13, "y":0.3},
+ {"label":"Back Space", "x":14, "y":0.3},
+
+ {"label":"Ctrl / Tab", "x":0, "y":1.3},
+ {"label":"A", "x":1, "y":1.3},
+ {"label":"S", "x":2, "y":1.1},
+ {"label":"D", "x":3, "y":1},
+ {"label":"F", "x":4, "y":1.1},
+ {"label":"G", "x":5, "y":1.2},
+
+ {"label":"H", "x":9, "y":1.2},
+ {"label":"J", "x":10, "y":1.1},
+ {"label":"K", "x":11, "y":1},
+ {"label":"L", "x":12, "y":1.1},
+ {"label":";", "x":13, "y":1.3},
+ {"label":"'", "x":14, "y":1.3},
+
+ {"label":"Shift", "x":0, "y":2.3},
+ {"label":"Z", "x":1, "y":2.3},
+ {"label":"X", "x":2, "y":2.1},
+ {"label":"C", "x":3, "y":2},
+ {"label":"V", "x":4, "y":2.1},
+ {"label":"B", "x":5, "y":2.2},
+
+ {"label":"N", "x":9, "y":2.2},
+ {"label":"M", "x":10, "y":2.1},
+ {"label":",", "x":11, "y":2},
+ {"label":".", "x":12, "y":2.1},
+ {"label":"/", "x":13, "y":2.3},
+ {"label":"Shift", "x":14, "y":2.3},
+
+ {"label":"GUI / KC_HANJ", "x":4, "y":3.7},
+ {"label":"Lower", "x":5, "y":3.7},
+ {"label":"Space", "x":6, "y":3.2, "h":1.5},
+
+ {"label":"Enter", "x":8, "y":3.2, "h":1.5},
+ {"label":"Raise", "x":9, "y":3.7},
+ {"label":"Alt / KC_HAEN", "x":10, "y":3.7}
+ ]
+ }
+ }
+}
diff --git a/keyboards/crkbd/keymaps/default/config.h b/keyboards/crkbd/keymaps/default/config.h
index 15aeb098b..644e81365 100644
--- a/keyboards/crkbd/keymaps/default/config.h
+++ b/keyboards/crkbd/keymaps/default/config.h
@@ -18,15 +18,8 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
-#include "../../config.h"
-
-/* Use I2C or Serial */
-
-#define USE_I2C
-#define USE_SERIAL
//#define USE_MATRIX_I2C
/* Select hand configuration */
@@ -39,7 +32,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define USE_SERIAL_PD2
-#define PREVENT_STUCK_MODIFIERS
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 100
@@ -50,4 +42,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
-#endif
diff --git a/keyboards/crkbd/keymaps/default/glcdfont.c b/keyboards/crkbd/keymaps/default/glcdfont.c
deleted file mode 100644
index 4e7b27bc0..000000000
--- a/keyboards/crkbd/keymaps/default/glcdfont.c
+++ /dev/null
@@ -1,244 +0,0 @@
-// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
-// See gfxfont.h for newer custom bitmap font info.
-
-#ifndef FONT5X7_H
-#define FONT5X7_H
-
-#ifdef __AVR__
- #include <avr/io.h>
- #include <avr/pgmspace.h>
-#elif defined(ESP8266)
- #include <pgmspace.h>
-#else
- #define PROGMEM
-#endif
-
-// Standard ASCII 5x7 font
-
-static const unsigned char font[] PROGMEM = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
-0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
-0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
-0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
-0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
-0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
-0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
-0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
-0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
-0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
-0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
-0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
-0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
-0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
-0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
-0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
-0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
-0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
-0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
-0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
-0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
-0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
-0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
-0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
-0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
-0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
-0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
-0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
-0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
-0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
-0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
-0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
-0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
-0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
-0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
-0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
-0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
-0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
-0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
-0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
-0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
-0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
-0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
-0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
-0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
-0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
-0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
-0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
-0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
-0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
-0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
-0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
-0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
-0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
-0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
-0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
-0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
-0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
-0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
-0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
-0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
-0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
-0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
-0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
-0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
-0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
-0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
-0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
-0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
-0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
-0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
-0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
-0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
-0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
-0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
-0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
-0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
-0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
-0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
-0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
-0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
-0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
-0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
-0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
-0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
-0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
-0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
-0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
-0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
-0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
-0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
-0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
-0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
-0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
-0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
-0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
-0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
-0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
-0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
-0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
-0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
-0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
-0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
-0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
-0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
-0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
-0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
-0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
-0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
-0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
-0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
-0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
-0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
-0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
-0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
-0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
-0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
-0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
-0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
-0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
-0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
-0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
-0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
-0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
-0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x0E, 0x3F, 0xFF, 0xFF,
-0xFF, 0xFF, 0xFE, 0xE0, 0x80, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x1E, 0xBE,
-0x7F, 0xFF, 0xFF, 0xFE, 0xFE, 0xF0,
-0xE0, 0xC0, 0x80, 0x00, 0x0E, 0xEF,
-0xDF, 0xDE, 0xBE, 0x3C, 0x38, 0x70,
-0xE0, 0xDD, 0xBB, 0x7B, 0x07, 0x0E,
-0x0E, 0x0C, 0x98, 0xF0, 0xE0, 0xF0,
-0xF0, 0xF8, 0x78, 0x3C, 0x1C, 0x1E,
-0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F,
-0x1F, 0xFE, 0xFE, 0xF8, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
-0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
-0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
-0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
-0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
-0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
-0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
-0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x03,
-0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE,
-0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x7F,
-0xFF, 0xFE, 0xFD, 0xFB, 0x1B, 0x07,
-0x07, 0x0F, 0x1F, 0x1F, 0x1E, 0x1D,
-0x0B, 0x07, 0x01, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
-0xF8, 0xFE, 0xFF, 0xFF, 0x1F, 0x07,
-0x01, 0x01, 0x01, 0x03, 0x06, 0x06,
-0x0C, 0x0C, 0x08, 0x0C, 0x0C, 0x0E,
-0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30,
-0x18, 0x1C, 0x7C, 0xCC, 0x8C, 0xDC,
-0xF8, 0xC0, 0xE0, 0xE0, 0x70, 0xB8,
-0xF0, 0x60, 0x00, 0x00, 0x80, 0xC0,
-0xE0, 0xF0, 0x70, 0xF8, 0xFC, 0xFC,
-0x3C, 0x30, 0x38, 0xF8, 0xF8, 0xF8,
-0x78, 0x00, 0x80, 0x80, 0xC0, 0xE0,
-0x70, 0x38, 0x38, 0x9C, 0xDC, 0xFC,
-0x7C, 0x38, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
-0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
-0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
-0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
-0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
-0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
-0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
-0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x03, 0x07,
-0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F,
-0x7E, 0x7D, 0x3B, 0x17, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
-0x0F, 0x1F, 0x3F, 0x3F, 0x7E, 0x7C,
-0x78, 0x70, 0x70, 0x70, 0x70, 0x70,
-0x70, 0x78, 0x38, 0x18, 0x1C, 0x0E,
-0x07, 0x0F, 0x1F, 0x3F, 0x3C, 0x38,
-0x38, 0x18, 0x0C, 0x06, 0x03, 0x01,
-0x01, 0x01, 0x01, 0x0E, 0x1F, 0x1F,
-0x1C, 0x1C, 0x1E, 0x0F, 0x0F, 0x03,
-0x1D, 0x0E, 0x07, 0x03, 0x01, 0x00,
-0x00, 0x0E, 0x1F, 0x1F, 0x1D, 0x1E,
-0x0F, 0x07, 0x03, 0x03, 0x0F, 0x1F,
-0x1F, 0x19, 0x19, 0x19, 0x19, 0x0C,
-0x0C, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-#endif // FONT5X7_H
diff --git a/keyboards/crkbd/keymaps/default/keymap.c b/keyboards/crkbd/keymaps/default/keymap.c
index ac3b7215c..1e2e57a2b 100644
--- a/keyboards/crkbd/keymaps/default/keymap.c
+++ b/keyboards/crkbd/keymaps/default/keymap.c
@@ -1,24 +1,13 @@
-#include "crkbd.h"
+#include QMK_KEYBOARD_H
#include "bootloader.h"
-#include "action_layer.h"
-#include "action_util.h"
-#include "eeconfig.h"
#ifdef PROTOCOL_LUFA
-#include "lufa.h"
-#include "split_util.h"
+ #include "lufa.h"
+ #include "split_util.h"
#endif
-#include "LUFA/Drivers/Peripheral/TWI.h"
#ifdef SSD1306OLED
#include "ssd1306.h"
#endif
-#include "../lib/mode_icon_reader.c"
-#include "../lib/layer_state_reader.c"
-#include "../lib/host_led_state_reader.c"
-#include "../lib/logo_reader.c"
-#include "../lib/keylogger.c"
-#include "../lib/timelogger.c"
-
extern keymap_config_t keymap_config;
#ifdef RGBLIGHT_ENABLE
@@ -63,7 +52,7 @@ enum macro_keycodes {
#define KC_LSAD RGB_SAD
#define KC_LVAI RGB_VAI
#define KC_LVAD RGB_VAD
-#define KC_LSMOD RGB_SMOD
+#define KC_LMOD RGB_MOD
#define KC_CTLTB CTL_T(KC_TAB)
#define KC_GUIEI GUI_T(KC_LANG2)
#define KC_ALTKN ALT_T(KC_LANG1)
@@ -111,7 +100,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|------+------+------+------+------+------| |------+------+------+------+------+------|
LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- LSMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
GUIEI, LOWER, SPC, ENT, RAISE, ALTKN \
//`--------------------' `--------------------'
@@ -140,7 +129,6 @@ void matrix_init_user(void) {
#endif
//SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED
- TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
iota_gfx_init(!has_usb()); // turns on the display
#endif
}
@@ -148,12 +136,25 @@ void matrix_init_user(void) {
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
#ifdef SSD1306OLED
+// When add source files to SRC in rules.mk, you can use functions.
+const char *read_layer_state(void);
+const char *read_logo(void);
+void set_keylog(uint16_t keycode, keyrecord_t *record);
+const char *read_keylog(void);
+const char *read_keylogs(void);
+
+// const char *read_mode_icon(bool swap);
+// const char *read_host_led_state(void);
+// void set_timelog(void);
+// const char *read_timelog(void);
+
void matrix_scan_user(void) {
iota_gfx_task();
}
void matrix_render_user(struct CharacterMatrix *matrix) {
if (is_master) {
+ // If you want to change the display of OLED, you need to change here
matrix_write_ln(matrix, read_layer_state());
matrix_write_ln(matrix, read_keylog());
matrix_write_ln(matrix, read_keylogs());
@@ -178,11 +179,14 @@ void iota_gfx_task_user(void) {
matrix_render_user(&matrix);
matrix_update(&display, &matrix);
}
+#endif//SSD1306OLED
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
+#ifdef SSD1306OLED
set_keylog(keycode, record);
- set_timelog();
+#endif
+ // set_timelog();
}
switch (keycode) {
@@ -243,4 +247,3 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
-#endif
diff --git a/keyboards/crkbd/keymaps/default/rules.mk b/keyboards/crkbd/keymaps/default/rules.mk
index 33ddd82a4..16deaf45d 100644
--- a/keyboards/crkbd/keymaps/default/rules.mk
+++ b/keyboards/crkbd/keymaps/default/rules.mk
@@ -4,22 +4,28 @@
# 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)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-ONEHAND_ENABLE = no # Enable one-hand typing
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
+# 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/keymaps/drashna/config.h b/keyboards/crkbd/keymaps/drashna/config.h
new file mode 100644
index 000000000..cbc3feeb6
--- /dev/null
+++ b/keyboards/crkbd/keymaps/drashna/config.h
@@ -0,0 +1,50 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+
+/* Select hand configuration */
+
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
+
+#define SSD1306OLED
+
+#define USE_SERIAL_PD2
+
+// #define TAPPING_FORCE_HOLD
+// #define TAPPING_TERM 100
+
+#ifdef RGBLIGHT_ENABLE
+#undef RGBLED_NUM
+#define RGBLED_NUM 27
+
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_LIMIT_VAL 100
+#endif
+
+#ifdef AUDIO_ENABLE
+#define B6_AUDIO
+// #define NO_MUSIC_MODE
+#endif
diff --git a/keyboards/crkbd/keymaps/drashna/keymap.c b/keyboards/crkbd/keymaps/drashna/keymap.c
new file mode 100644
index 000000000..678fd33b5
--- /dev/null
+++ b/keyboards/crkbd/keymaps/drashna/keymap.c
@@ -0,0 +1,266 @@
+#include QMK_KEYBOARD_H
+#include "drashna.h"
+#ifdef PROTOCOL_LUFA
+ #include "lufa.h"
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+extern uint8_t is_master;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+enum crkbd_keycodes {
+ RGBRST = NEW_SAFE_RANGE
+};
+
+#define LAYOUT_crkbd_base( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
+ ) \
+ LAYOUT_wrapper( \
+ KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_MINS, \
+ KC_TAB, ALT_T(K11), K12, K13, K14, K15, K16, K17, K18, K19, K1A, RGUI_T(KC_QUOT), \
+ OS_LSFT, CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, CTL_T(K2A), OS_RSFT, \
+ LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE \
+ )
+#define LAYOUT_crkbd_base_wrapper(...) LAYOUT_crkbd_base(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_crkbd_base_wrapper(
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
+ ),
+
+ [_COLEMAK] = LAYOUT_crkbd_base_wrapper(
+ _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
+ _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
+ _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
+ ),
+
+ [_DVORAK] = LAYOUT_crkbd_base_wrapper(
+ _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
+ _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
+ _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
+ ),
+
+ [_WORKMAN] = LAYOUT_crkbd_base_wrapper(
+ _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
+ _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
+ _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
+ ),
+
+ [_MODS] = LAYOUT_wrapper(
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ KC_LSFT, ___________________BLANK___________________, ___________________BLANK___________________, KC_RSFT,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_LOWER] = LAYOUT_wrapper(
+ KC_F11, _________________LOWER_L1__________________, _________________LOWER_R1__________________, KC_F11,
+ KC_F12, _________________LOWER_L2__________________, _________________LOWER_R2__________________, KC_PIPE,
+ _______, _________________LOWER_L3__________________, _________________LOWER_R3__________________, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_RAISE] = LAYOUT_wrapper( \
+ _______, _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
+ _______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
+ _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, _______,
+ _______, _______, _______, _______, _______, _______
+ ),
+
+ [_ADJUST] = LAYOUT_wrapper( \
+ KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RESET,
+ VRSN, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, EEP_RST,
+ _______, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, KC_MPLY,
+ _______, _______, _______, KC_NUKE, TG_MODS, _______
+ )
+};
+
+void matrix_init_keymap(void) {
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+
+ #ifndef CONVERT_TO_PROTON_C
+ setPinOutput(D5);
+ writePinHigh(D5);
+
+ setPinOutput(B0);
+ writePinHigh(B0);
+ #endif
+}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// When add source files to SRC in rules.mk, you can use functions.
+const char *read_logo(void);
+char layer_state_str[24];
+char modifier_state_str[24];
+char host_led_state_str[24];
+char keylog_str[24] = {};
+char keylogs_str[21] = {};
+int keylogs_str_idx = 0;
+
+// const char *read_mode_icon(bool swap);
+// void set_timelog(void);
+// const char *read_timelog(void);
+
+const char code_to_name[60] = {
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
+ 'R', 'E', 'B', 'T', '_', '-', '=', '[', ']', '\\',
+ '#', ';', '\'', '`', ',', '.', '/', ' ', ' ', ' '};
+
+void set_keylog(uint16_t keycode, keyrecord_t *record) {
+ char name = ' ';
+ if ((keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) || (keycode >= QK_LAYER_TAP && keycode <= QK_LAYER_TAP_MAX)) { keycode = keycode & 0xFF; }
+ if (keycode < 60) {
+ name = code_to_name[keycode];
+ }
+ // update keylog
+ snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
+ record->event.key.row, record->event.key.col,
+ keycode, name);
+
+ // update keylogs
+ if (keylogs_str_idx == sizeof(keylogs_str) - 1) {
+ keylogs_str_idx = 0;
+ for (int i = 0; i < sizeof(keylogs_str) - 1; i++) {
+ keylogs_str[i] = ' ';
+ }
+ }
+
+ keylogs_str[keylogs_str_idx] = name;
+ keylogs_str_idx++;
+}
+
+const char *read_keylog(void) {
+ return keylog_str;
+}
+
+const char *read_keylogs(void) {
+ return keylogs_str;
+}
+
+
+const char* read_modifier_state(void) {
+ uint8_t modifiers = get_mods();
+ uint8_t one_shot = get_oneshot_mods();
+
+ snprintf(modifier_state_str, sizeof(modifier_state_str), "Mods:%s %s %s %s",
+ (modifiers & MODS_CTRL_MASK || one_shot & MODS_CTRL_MASK) ? "CTL" : " ",
+ (modifiers & MODS_GUI_MASK || one_shot & MODS_GUI_MASK) ? "GUI" : " ",
+ (modifiers & MODS_ALT_MASK || one_shot & MODS_ALT_MASK) ? "ALT" : " ",
+ (modifiers & MODS_SHIFT_MASK || one_shot & MODS_SHIFT_MASK) ? "SFT" : " "
+ );
+
+ return modifier_state_str;
+}
+
+const char *read_host_led_state(void) {
+ uint8_t leds = host_keyboard_leds();
+
+ snprintf(host_led_state_str, sizeof(host_led_state_str), "NL:%s CL:%s SL:%s",
+ (leds & (1 << USB_LED_NUM_LOCK)) ? "on" : "- ",
+ (leds & (1 << USB_LED_CAPS_LOCK)) ? "on" : "- ",
+ (leds & (1 << USB_LED_SCROLL_LOCK)) ? "on" : "- "
+ );
+
+ return host_led_state_str;
+}
+
+const char* read_layer_state(void) {
+ switch (biton32(layer_state)) {
+ case _RAISE:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Raise ");
+ break;
+ case _LOWER:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Lower ");
+ break;
+ case _ADJUST:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Adjust ");
+ break;
+ default:
+ switch (biton32(default_layer_state)) {
+ case _QWERTY:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Qwerty ");
+ break;
+ case _COLEMAK:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Colemak");
+ break;
+ case _DVORAK:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Dvorak ");
+ break;
+ case _WORKMAN:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Workman");
+ break;
+ }
+ break;
+ }
+
+ return layer_state_str;
+}
+
+void matrix_scan_keymap(void) {
+ iota_gfx_task();
+}
+
+void matrix_render_user(struct CharacterMatrix *matrix) {
+ if (is_master) {
+ //If you want to change the display of OLED, you need to change here
+ matrix_write_ln(matrix, read_layer_state());
+ matrix_write_ln(matrix, read_modifier_state());
+ // matrix_write_ln(matrix, read_keylog());
+ matrix_write_ln(matrix, read_keylogs());
+ // matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
+ matrix_write(matrix, read_host_led_state());
+ //matrix_write_ln(matrix, read_timelog());
+ } else {
+ matrix_write(matrix, read_logo());
+ }
+}
+
+void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+ matrix_clear(&matrix);
+ matrix_render_user(&matrix);
+ matrix_update(&display, &matrix);
+}
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_A ... KC_SLASH:
+ case KC_F1 ... KC_F12:
+ case KC_INSERT ... KC_UP:
+ case KC_KP_SLASH ... KC_KP_DOT:
+ case KC_F13 ... KC_F24:
+ if (record->event.pressed) { set_keylog(keycode, record); }
+ break;
+ // set_timelog();
+ }
+ return true;
+}
+
+#endif
diff --git a/keyboards/crkbd/keymaps/drashna/rules.mk b/keyboards/crkbd/keymaps/drashna/rules.mk
new file mode 100644
index 000000000..4b70f66f7
--- /dev/null
+++ b/keyboards/crkbd/keymaps/drashna/rules.mk
@@ -0,0 +1,33 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+BOOTLOADER = qmk-dfu
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./lib/glcdfont.c \
+ ./lib/rgb_state_reader.c \
+ ./lib/logo_reader.c \
+ # ./lib/keylogger.c \
+ # ./lib/host_led_state_reader.c \
+ # ./lib/mode_icon_reader.c \
+ # ./lib/layer_state_reader.c \
+ # ./lib/timelogger.c \
diff --git a/keyboards/crkbd/keymaps/edvorakjp/config.h b/keyboards/crkbd/keymaps/edvorakjp/config.h
new file mode 100644
index 000000000..515591a42
--- /dev/null
+++ b/keyboards/crkbd/keymaps/edvorakjp/config.h
@@ -0,0 +1,24 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define SSD1306OLED
+#define SWAP_SCLN
+
+// #define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 120
+
+#undef RGBLED_NUM
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLED_NUM 27
+#define RGBLIGHT_LIMIT_VAL 100
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
+
+#endif // CONFIG_USER_H
diff --git a/keyboards/crkbd/keymaps/edvorakjp/keymap.c b/keyboards/crkbd/keymaps/edvorakjp/keymap.c
new file mode 100644
index 000000000..ae2f710a0
--- /dev/null
+++ b/keyboards/crkbd/keymaps/edvorakjp/keymap.c
@@ -0,0 +1,158 @@
+#include QMK_KEYBOARD_H
+#ifdef PROTOCOL_LUFA
+ #include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "oled.h"
+#endif
+
+#include "edvorakjp.h"
+
+/*
+ * enum custom_keycodes {
+ * KC_LOCK = NEW_SAFE_RANGE,
+ * };
+ */
+
+#define KC_ KC_TRNS
+
+#define KC_TMB1 LGUI_T(KC_TAB)
+#define KC_TMB2 LSFT_T(KC_SPC)
+#define KC_TMB3 TD(TD_LOWER) // act as LOWER when hold, as KC_LANG2(=English) when tapped
+#define KC_TMB4 TD(TD_RAISE) // act as RAISE when hold, as KC_LANG1(=Japanese) when tapped
+#define KC_TMB5 RCTL_T(KC_BSPC)
+#define KC_TMB6 RALT_T(KC_ENT)
+#define KC_TMB7 KC_DEL
+#define KC_TMB8 RALT(KC_ENT)
+#define KC_TMB9 LGUI(KC_TAB)
+
+#define KC_RST RESET
+#define KC_DBUG DEBUG
+#define KC_RTOG RGB_TOG
+#define KC_EDJP EDVORAK
+#define KC_QWER QWERTY
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_EDVORAK] = LAYOUT_kc(
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ESC ,QUOT,COMM,DOT , Y , P , F , G , R , W , Q ,BSLS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ EQL , A , O , E , I , U , D , T , N , S , M ,MINS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ GRV ,SCLN, X , C , V , Z , B , H , J , K , L ,SLSH,
+ //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
+ TMB1,TMB2,TMB3, TMB4,TMB5,TMB6
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_EDVORAKJ1] = LAYOUT_kc(
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , AI , OU , EI , , , , , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , , Y , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,ANN ,ONN ,ENN ,INN ,UNN , , , , , , ,
+ //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_EDVORAKJ2] = LAYOUT_kc(
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , AI , OU , EI , , , , , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , Y , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,ANN ,ONN ,ENN ,INN ,UNN , , , , , , ,
+ //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_QWERTY] = LAYOUT_kc(
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ EQL , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ GRV , Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,BSLS,
+ //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_LOWER] = LAYOUT_kc(
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , 1 ,EXLM, AT ,HASH,DLR , PERC,CIRC,AMPR,ASTR, 0 , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , LT ,LCBR,LPRN,LBRC, RBRC,RPRN,RCBR, GT , , ,
+ //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
+ , , , ,TMB7,TMB8
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_RAISE] = LAYOUT_kc(
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,F11 ,F12 ,PSCR,SLCK,PAUS, ,HOME,PGDN,PGUP,END , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , ,LEFT,DOWN, UP ,RGHT, ,
+ //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
+ TMB9, , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_ADJUST] = LAYOUT_kc(
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , ,EXTOFF, , ,EXTON, , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , ,QWER,WIN ,RST , RTOG,MAC ,EDJP, , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , , , , ,
+ //`----+----+----+----+----+----+----| |----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ )
+};
+
+#ifdef SSD1306OLED
+void matrix_init_keymap(void) {
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ iota_gfx_init(!has_usb()); // turns on the display
+}
+
+void matrix_scan_user(void) {
+ iota_gfx_task(); // this is what updates the display continuously
+}
+#endif
+
+#ifdef RGBLIGHT_EFFECT_STATIC_GRADIENT
+uint32_t layer_state_set_keymap(uint32_t state) {
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+ switch (biton32(state)) {
+ case _EDVORAKJ1:
+ case _EDVORAKJ2:
+ // _EDVORAKJ1 & J2 are same colored
+ rgblight_sethsv_noeeprom_white();
+ break;
+ case _LOWER:
+ rgblight_sethsv_noeeprom_red();
+ break;
+ case _RAISE:
+ rgblight_sethsv_noeeprom_blue();
+ break;
+ case _ADJUST:
+ rgblight_sethsv_noeeprom_green();
+ break;
+ default: // for any other layers, or the default layer
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
+ rgblight_sethsv_noeeprom_red();
+ break;
+ }
+ return state;
+}
+#endif
diff --git a/keyboards/crkbd/keymaps/edvorakjp/oled.c b/keyboards/crkbd/keymaps/edvorakjp/oled.c
new file mode 100644
index 000000000..e4cccf3e7
--- /dev/null
+++ b/keyboards/crkbd/keymaps/edvorakjp/oled.c
@@ -0,0 +1,82 @@
+#include <string.h>
+#include "oled.h"
+
+// NOTE: Redefined to avoid to use snprintf(); It makes size of firmware big.
+const char *read_mode_icon(bool windows_mode) {
+ static const char logo[][2][3] = {{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}};
+ static char mode_icon[10];
+
+ int mode_number = windows_mode ? 1 : 0;
+ strcpy(mode_icon, logo[mode_number][0]);
+
+ strcat(mode_icon, "\n");
+ strcat(mode_icon, logo[mode_number][1]);
+
+ return mode_icon;
+}
+
+const char *read_layer_state(void) {
+ static char layer_state_str[24];
+ char layer_name[17];
+
+ switch (biton32(layer_state)) {
+ case L_BASE:
+ strcpy(layer_name, default_layer_state == 1UL<<_EDVORAK ? "EDVORAK" : "QWERTY");
+ break;
+ case _EDVORAKJ1:
+ case _EDVORAKJ2:
+ strcpy(layer_name, "JP_EXT");
+ break;
+ case _RAISE:
+ strcpy(layer_name, "Raise");
+ break;
+ case _LOWER:
+ strcpy(layer_name, "Lower");
+ break;
+ case _ADJUST:
+ strcpy(layer_name, "Adjust");
+ break;
+ default:
+ snprintf(layer_name, sizeof(layer_name), "Undef-%ld", layer_state);
+ }
+
+ strcpy(layer_state_str, "Layer: ");
+
+ strcat(layer_state_str, layer_name);
+ strcat(layer_state_str, "\n");
+ return layer_state_str;
+}
+
+const char *read_host_led_state(void) {
+ static char led_str[24];
+ bool ext_status = get_enable_jp_extra_layer() && get_japanese_mode();
+ strcpy(led_str, ext_status ? "EXT" : " ");
+
+ strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? " NMLK" : " ");
+ strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? " CAPS" : " ");
+ strcat(led_str, (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? " SCLK" : " ");
+ return led_str;
+}
+
+void matrix_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+
+ matrix_clear(&matrix);
+ if (is_master) {
+ matrix_write(&matrix, read_mode_icon(!get_enable_kc_lang()));
+ matrix_write(&matrix, " ");
+ matrix_write(&matrix, read_layer_state());
+ matrix_write(&matrix, read_host_led_state());
+ } else {
+ matrix_write(&matrix, read_logo());
+ }
+ matrix_update(&display, &matrix);
+}
diff --git a/keyboards/crkbd/keymaps/edvorakjp/oled.h b/keyboards/crkbd/keymaps/edvorakjp/oled.h
new file mode 100644
index 000000000..896347aea
--- /dev/null
+++ b/keyboards/crkbd/keymaps/edvorakjp/oled.h
@@ -0,0 +1,24 @@
+#ifndef OLED_USER_H
+#define OLED_USER_H
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#include "ssd1306.h"
+#include "edvorakjp.h"
+
+//assign the right code to your layers for OLED display
+#define L_BASE 0
+
+extern uint8_t is_master;
+extern bool japanese_mode;
+
+// method prototypes defined in crkbd/lib
+extern const char *read_logo(void);
+
+const char *read_mode_icon(bool swap);
+const char *read_layer_state(void);
+const char *read_host_led_state(void);
+void matrix_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source);
+void iota_gfx_task_user(void);
+
+#endif // OLED_CONFIG_USER_H
diff --git a/keyboards/crkbd/keymaps/edvorakjp/readme.md b/keyboards/crkbd/keymaps/edvorakjp/readme.md
new file mode 100644
index 000000000..dd406523d
--- /dev/null
+++ b/keyboards/crkbd/keymaps/edvorakjp/readme.md
@@ -0,0 +1,21 @@
+# edvorakjp
+
+Epaew's Enhanced Dvorak layout for Japanese Programmer
+see [here](/users/edvorakjp) for more informations.
+
+## License
+
+Copyright 2018 Ryo Maeda epaew.333@gmail.com @epaew
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/keyboards/crkbd/keymaps/edvorakjp/rules.mk b/keyboards/crkbd/keymaps/edvorakjp/rules.mk
new file mode 100644
index 000000000..b4f6d2f1f
--- /dev/null
+++ b/keyboards/crkbd/keymaps/edvorakjp/rules.mk
@@ -0,0 +1,32 @@
+# 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
+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
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./lib/glcdfont.c \
+ ./lib/logo_reader.c \
+ oled.c \
+ # ./lib/rgb_state_reader.c \
+ # ./lib/layer_state_reader.c \
+ # ./lib/keylogger.c \
+ # ./lib/mode_icon_reader.c \
+ # ./lib/host_led_state_reader.c \
+ # ./lib/timelogger.c \
diff --git a/keyboards/crkbd/keymaps/lib/host_led_state_reader.c b/keyboards/crkbd/keymaps/lib/host_led_state_reader.c
deleted file mode 100644
index c19af11f8..000000000
--- a/keyboards/crkbd/keymaps/lib/host_led_state_reader.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include "crkbd.h"
-
-char host_led_state[40];
-
-char *read_host_led_state(void)
-{
- snprintf(host_led_state, sizeof(host_led_state), "\n%s %s %s",
- (host_keyboard_leds() & (1 << USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
- (host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
- (host_keyboard_leds() & (1 << USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
-
- return host_led_state;
-}
diff --git a/keyboards/crkbd/keymaps/lib/keylogger.c b/keyboards/crkbd/keymaps/lib/keylogger.c
deleted file mode 100644
index ee14ff033..000000000
--- a/keyboards/crkbd/keymaps/lib/keylogger.c
+++ /dev/null
@@ -1,49 +0,0 @@
-#include "crkbd.h"
-
-char keylog[40] = {};
-char keylogs[21] = {};
-int keylogs_idx = 0;
-
-char code_to_name[60] = {
- ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
- 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
- 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
- '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
- 'R', 'E', 'B', 'T', ' ', ' ', ' ', ' ', ' ', ' ',
- ' ', ';', '\'', ' ', ',', '.', '/', ' ', ' ', ' '};
-
-void set_keylog(uint16_t keycode, keyrecord_t *record)
-{
- char name = ' ';
- if (keycode < 60)
- {
- name = code_to_name[keycode];
- }
-
- // update keylog
- snprintf(keylog, sizeof(keylog), "%dx%d, k%2d : %c",
- record->event.key.row,
- record->event.key.col,
- keycode,
- name);
-
- // update keylogs
- if (keylogs_idx == sizeof(keylogs) - 1)
- {
- keylogs_idx = 0;
- for (int i = 0; i < sizeof(keylogs) - 1; i++)
- {
- keylogs[i] = ' ';
- }
- }
- keylogs[keylogs_idx] = name;
- keylogs_idx++;
-}
-
-char *read_keylog(void) {
- return keylog;
-}
-
-char *read_keylogs(void) {
- return keylogs;
-}
diff --git a/keyboards/crkbd/keymaps/lib/layer_state_reader.c b/keyboards/crkbd/keymaps/lib/layer_state_reader.c
deleted file mode 100644
index f79720d6f..000000000
--- a/keyboards/crkbd/keymaps/lib/layer_state_reader.c
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "crkbd.h"
-
-#define L_BASE 0
-#define L_LOWER 8
-#define L_RAISE 16
-#define L_ADJUST 65536
-#define L_ADJUST_TRI 65560
-
-char layer_state_str[40];
-
-char *read_layer_state(void)
-{
- switch (layer_state)
- {
- case L_BASE:
- snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Default");
- break;
- case L_RAISE:
- snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Raise");
- break;
- case L_LOWER:
- snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Lower");
- break;
- case L_ADJUST:
- case L_ADJUST_TRI:
- snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Adjust");
- break;
- default:
- snprintf(layer_state_str,sizeof(layer_state_str), "Layer: Undef-%ld", layer_state);
- }
-
- return layer_state_str;
-}
diff --git a/keyboards/crkbd/keymaps/lib/logo_reader.c b/keyboards/crkbd/keymaps/lib/logo_reader.c
deleted file mode 100644
index 46de17bfe..000000000
--- a/keyboards/crkbd/keymaps/lib/logo_reader.c
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "crkbd.h"
-
-char *read_logo(void)
-{
- static char logo[]={
- 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
- 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
- 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
- 0};
-
- return logo;
-}
diff --git a/keyboards/crkbd/keymaps/lib/mode_icon_reader.c b/keyboards/crkbd/keymaps/lib/mode_icon_reader.c
deleted file mode 100644
index cb3d8adb1..000000000
--- a/keyboards/crkbd/keymaps/lib/mode_icon_reader.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "crkbd.h"
-
-char mode_icon[40];
-
-char *read_mode_icon(bool swap)
-{
- static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
- if(swap == false){
- snprintf(mode_icon, sizeof(mode_icon), "%s\n%s", logo[0][0], logo[0][1]);
- }else{
- snprintf(mode_icon, sizeof(mode_icon), "%s\n%s", logo[1][0], logo[1][1]);
- }
-
- return mode_icon;
-}
diff --git a/keyboards/crkbd/keymaps/lib/timelogger.c b/keyboards/crkbd/keymaps/lib/timelogger.c
deleted file mode 100644
index 0e22bafe7..000000000
--- a/keyboards/crkbd/keymaps/lib/timelogger.c
+++ /dev/null
@@ -1,17 +0,0 @@
-#include "crkbd.h"
-
-char timelog[40] = {};
-int last_time = 0;
-int elapsed_time = 0;
-
-void set_timelog(void)
-{
- elapsed_time = timer_elapsed(last_time);
- last_time = timer_read();
- snprintf(timelog, sizeof(timelog), "lt:%5d, et:%5d", last_time, elapsed_time);
-}
-
-char *read_timelog(void)
-{
- return timelog;
-}
diff --git a/keyboards/crkbd/keymaps/like_jis/config.h b/keyboards/crkbd/keymaps/like_jis/config.h
index 4c31cc779..a061b4fb0 100644
--- a/keyboards/crkbd/keymaps/like_jis/config.h
+++ b/keyboards/crkbd/keymaps/like_jis/config.h
@@ -20,10 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
-/* Use I2C or Serial */
-
-#define USE_I2C
-#define USE_SERIAL
//#define USE_MATRIX_I2C
/* Select hand configuration */
@@ -38,7 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PREVENT_STUCK_MODIFIERS
#define TAPPING_FORCE_HOLD
-#define TAPPING_TERM 150
+#define TAPPING_TERM 250
#undef RGBLED_NUM
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/crkbd/keymaps/like_jis/glcdfont.c b/keyboards/crkbd/keymaps/like_jis/glcdfont.c
deleted file mode 100644
index 4e7b27bc0..000000000
--- a/keyboards/crkbd/keymaps/like_jis/glcdfont.c
+++ /dev/null
@@ -1,244 +0,0 @@
-// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
-// See gfxfont.h for newer custom bitmap font info.
-
-#ifndef FONT5X7_H
-#define FONT5X7_H
-
-#ifdef __AVR__
- #include <avr/io.h>
- #include <avr/pgmspace.h>
-#elif defined(ESP8266)
- #include <pgmspace.h>
-#else
- #define PROGMEM
-#endif
-
-// Standard ASCII 5x7 font
-
-static const unsigned char font[] PROGMEM = {
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
-0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
-0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
-0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
-0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
-0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
-0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
-0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
-0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
-0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
-0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
-0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
-0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
-0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
-0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
-0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
-0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
-0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
-0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
-0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
-0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
-0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
-0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
-0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
-0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
-0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
-0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
-0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
-0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
-0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
-0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
-0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
-0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
-0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
-0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
-0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
-0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
-0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
-0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
-0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
-0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
-0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
-0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
-0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
-0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
-0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
-0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
-0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
-0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
-0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
-0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
-0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
-0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
-0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
-0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
-0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
-0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
-0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
-0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
-0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
-0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
-0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
-0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
-0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
-0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
-0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
-0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
-0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
-0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
-0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
-0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
-0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
-0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
-0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
-0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
-0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
-0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
-0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
-0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
-0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
-0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
-0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
-0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
-0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
-0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
-0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
-0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
-0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
-0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
-0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
-0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
-0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
-0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
-0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
-0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
-0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
-0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
-0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
-0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
-0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
-0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
-0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
-0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
-0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
-0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
-0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
-0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
-0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
-0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
-0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
-0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
-0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
-0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
-0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
-0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
-0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
-0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
-0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
-0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
-0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
-0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
-0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
-0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
-0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
-0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x0E, 0x3F, 0xFF, 0xFF,
-0xFF, 0xFF, 0xFE, 0xE0, 0x80, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x1E, 0xBE,
-0x7F, 0xFF, 0xFF, 0xFE, 0xFE, 0xF0,
-0xE0, 0xC0, 0x80, 0x00, 0x0E, 0xEF,
-0xDF, 0xDE, 0xBE, 0x3C, 0x38, 0x70,
-0xE0, 0xDD, 0xBB, 0x7B, 0x07, 0x0E,
-0x0E, 0x0C, 0x98, 0xF0, 0xE0, 0xF0,
-0xF0, 0xF8, 0x78, 0x3C, 0x1C, 0x1E,
-0x0E, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F,
-0x1F, 0xFE, 0xFE, 0xF8, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
-0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
-0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
-0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
-0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
-0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
-0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
-0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x01, 0x03,
-0x0F, 0x3F, 0xFF, 0xFF, 0xFF, 0xFE,
-0xF8, 0xF0, 0xE0, 0xC0, 0x80, 0x7F,
-0xFF, 0xFE, 0xFD, 0xFB, 0x1B, 0x07,
-0x07, 0x0F, 0x1F, 0x1F, 0x1E, 0x1D,
-0x0B, 0x07, 0x01, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
-0xF8, 0xFE, 0xFF, 0xFF, 0x1F, 0x07,
-0x01, 0x01, 0x01, 0x03, 0x06, 0x06,
-0x0C, 0x0C, 0x08, 0x0C, 0x0C, 0x0E,
-0x07, 0x83, 0xC1, 0xE0, 0x70, 0x30,
-0x18, 0x1C, 0x7C, 0xCC, 0x8C, 0xDC,
-0xF8, 0xC0, 0xE0, 0xE0, 0x70, 0xB8,
-0xF0, 0x60, 0x00, 0x00, 0x80, 0xC0,
-0xE0, 0xF0, 0x70, 0xF8, 0xFC, 0xFC,
-0x3C, 0x30, 0x38, 0xF8, 0xF8, 0xF8,
-0x78, 0x00, 0x80, 0x80, 0xC0, 0xE0,
-0x70, 0x38, 0x38, 0x9C, 0xDC, 0xFC,
-0x7C, 0x38, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
-0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
-0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
-0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
-0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
-0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
-0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
-0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x01, 0x03, 0x07,
-0x1F, 0x3F, 0x3F, 0x7F, 0x7F, 0x7F,
-0x7E, 0x7D, 0x3B, 0x17, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
-0x0F, 0x1F, 0x3F, 0x3F, 0x7E, 0x7C,
-0x78, 0x70, 0x70, 0x70, 0x70, 0x70,
-0x70, 0x78, 0x38, 0x18, 0x1C, 0x0E,
-0x07, 0x0F, 0x1F, 0x3F, 0x3C, 0x38,
-0x38, 0x18, 0x0C, 0x06, 0x03, 0x01,
-0x01, 0x01, 0x01, 0x0E, 0x1F, 0x1F,
-0x1C, 0x1C, 0x1E, 0x0F, 0x0F, 0x03,
-0x1D, 0x0E, 0x07, 0x03, 0x01, 0x00,
-0x00, 0x0E, 0x1F, 0x1F, 0x1D, 0x1E,
-0x0F, 0x07, 0x03, 0x03, 0x0F, 0x1F,
-0x1F, 0x19, 0x19, 0x19, 0x19, 0x0C,
-0x0C, 0x04, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-};
-#endif // FONT5X7_H
diff --git a/keyboards/crkbd/keymaps/like_jis/keymap.c b/keyboards/crkbd/keymaps/like_jis/keymap.c
index 0dd9c1550..b1b6c64b1 100644
--- a/keyboards/crkbd/keymaps/like_jis/keymap.c
+++ b/keyboards/crkbd/keymaps/like_jis/keymap.c
@@ -7,13 +7,7 @@
#ifdef SSD1306OLED
#include "ssd1306.h"
#endif
-
-#include "../lib/mode_icon_reader.c"
-#include "../lib/layer_state_reader.c"
-#include "../lib/host_led_state_reader.c"
-#include "../lib/logo_reader.c"
-#include "../lib/keylogger.c"
-#include "../lib/timelogger.c"
+#include "oled_helper.h"
extern keymap_config_t keymap_config;
@@ -28,27 +22,35 @@ extern uint8_t is_master;
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
-#define _QWERTY 0
-#define _LOWER 3
-#define _RAISE 4
-#define _ADJUST 16
+enum layer_number {
+ _BASE = 0,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
enum custom_keycodes {
LOWER = SAFE_RANGE,
RAISE,
ADJUST,
+ KANJI,
RGBRST
};
-#define KC______ KC_TRNS
-#define KC_XXXXX KC_NO
-#define KC_KANJI KC_GRV
+enum tapdances{
+ TD_CODO = 0,
+ // TD_MNUB,
+};
+// Layer Mode aliases
#define KC_LOWER LOWER
#define KC_RAISE RAISE
-#define KC_RST RESET
+#define KC______ KC_TRNS
+#define KC_XXXXX KC_NO
+#define KC_KANJI KANJI
+#define KC_RST RESET
#define KC_LRST RGBRST
#define KC_LTOG RGB_TOG
#define KC_LHUI RGB_HUI
@@ -57,173 +59,237 @@ enum custom_keycodes {
#define KC_LSAD RGB_SAD
#define KC_LVAI RGB_VAI
#define KC_LVAD RGB_VAD
-#define KC_LSMOD RGB_SMOD
-
+#define KC_LMOD RGB_MOD
#define KC_KNRM AG_NORM
#define KC_KSWP AG_SWAP
-#define KC_GUAP LALT_T(KC_APP)
+
+#define KC_TBSF LSFT_T(KC_TAB)
+// #define KC_SPSF LSFT_T(KC_SPC)
+#define KC_ALAP LALT_T(KC_APP)
+
+#define KC_CODO TD(TD_CODO)
+// #define KC_MNUB TD(TD_MNUB)
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_CODO] = ACTION_TAP_DANCE_DOUBLE(KC_COMM, KC_DOT),
+ // [TD_MNUB] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, LSFT(KC_RO)),
+};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_kc( \
+ [_BASE] = LAYOUT_kc( \
//,-----------------------------------------. ,-----------------------------------------.
ESC, Q, W, E, R, T, Y, U, I, O, P, MINS,\
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- LSFT, A, S, D, F, G, H, J, K, L, UP, ENT,\
+ TBSF, A, S, D, F, G, H, J, K, L, UP, ENT,\
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- LCTRL, Z, X, C, V, B, N, M, COMM, LEFT, DOWN, RGHT,\
+ LCTRL, Z, X, C, V, B, N, M, CODO, LEFT, DOWN, RGHT,\
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- LGUI, LOWER, BSPC, SPC, RAISE, GUAP \
+ LGUI, LOWER, BSPC, SPC, RAISE, ALAP \
//`--------------------' `--------------------'
),
[_LOWER] = LAYOUT_kc( \
//,-----------------------------------------. ,-----------------------------------------.
- TAB, F1, F2, F3, F4, F5, XXXXX, MINS, EQL, JYEN, LBRC, RBRC,\
+ _____, F1, F2, F3, F4, F5, XXXXX, MINS, EQL, JYEN, LBRC, RBRC,\
//|------+------+------+------+------+------| |------+------+------+------+------+------|
_____, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, SCLN, QUOT, BSLS,\
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- _____, F11, F12, XXXXX, KANJI, ENT, XXXXX, XXXXX, COMM, DOT, SLSH, RO,\
+ _____, F11, F12, TAB, KANJI, ENT, XXXXX, XXXXX, COMM, DOT, SLSH, RO,\
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- _____, _____, DEL, XXXXX, _____, APP \
+ _____, _____, DEL, _____, _____, APP \
//`--------------------' `--------------------'
),
[_RAISE] = LAYOUT_kc( \
//,-----------------------------------------. ,-----------------------------------------.
- _____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, XXXXX,\
+ _____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, PSLS,\
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 4, 5, 6, QUOT, XXXXX,\
+ _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, QUOT, 4, 5, 6, PPLS, PAST,\
//|------+------+------+------+------+------| |------+------+------+------+------+------|
- _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 0, 1, 2, 3, DOT, XXXXX,\
+ _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 0, 1, 2, 3, DOT, PMNS,\
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- _____, _____, XXXXX, XXXXX, _____, LALT \
+ _____, _____, BSPC, _____, _____, LALT \
//`--------------------' `--------------------'
),
[_ADJUST] = LAYOUT_kc( \
//,-----------------------------------------. ,-----------------------------------------.
- RST, LRST, KNRM, KSWP, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
- //|------+------+------+------+------+------| |------+------+------+------+------+------|
- LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, PGUP, XXXXX,\
- //|------+------+------+------+------+------| |------+------+------+------+------+------|
- LSMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, HOME, PGDN, END,\
+ _____, RST, LRST, KNRM, KSWP, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
+ //|------+-------+------+------+------+-----| |------+------+------+------+------+------|
+ _____, LTOG, LHUI, LSAI, LVAI, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, PGUP, XXXXX,\
+ //|------+-------+------+------+------+-----| |------+------+------+------+------+------|
+ _____, LMOD, LHUD, LSAD, LVAD, XXXXX, XXXXX, XXXXX, XXXXX, HOME, PGDN, END,\
//|------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- _____, _____, XXXXX, XXXXX, _____, XXXXX \
+ _____, _____, XXXXX, _____, _____, XXXXX \
//`--------------------' `--------------------'
)
};
-int RGB_current_mode;
+#define L_BASE _BASE
+#define L_LOWER (1<<_LOWER)
+#define L_RAISE (1<<_RAISE)
+#define L_ADJUST (1<<_ADJUST)
+#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
-// Setting ADJUST layer RGB back to default
-inline void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
- if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
- layer_on(layer3);
- } else {
- layer_off(layer3);
- }
-}
+#ifdef SSD1306OLED
+typedef struct {
+ uint8_t state;
+ char name[8];
+}LAYER_DISPLAY_NAME;
-void matrix_init_user(void) {
- #ifdef RGBLIGHT_ENABLE
- RGB_current_mode = rgblight_config.mode;
- #endif
- //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
- #ifdef SSD1306OLED
- iota_gfx_init(!has_usb()); // turns on the display
- #endif
-}
+#define LAYER_DISPLAY_MAX 5
+const LAYER_DISPLAY_NAME layer_display_name[LAYER_DISPLAY_MAX] = {
+ {L_BASE, "Base"},
+ {L_BASE + 1, "Base"},
+ {L_LOWER, "Lower"},
+ {L_RAISE, "Raise"},
+ {L_ADJUST_TRI, "Adjust"}
+};
-//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
-#ifdef SSD1306OLED
+static inline const char* get_leyer_status(void) {
-void matrix_scan_user(void) {
- iota_gfx_task();
-}
+ for (uint8_t i = 0; i < LAYER_DISPLAY_MAX; ++i) {
+ if (layer_state == 0 && layer_display_name[i].state == default_layer_state) {
-inline void matrix_render_user(struct CharacterMatrix *matrix) {
- if (is_master) {
- matrix_write_ln(matrix, read_layer_state());
- matrix_write_ln(matrix, read_keylog());
- matrix_write_ln(matrix, read_keylogs());
- //matrix_write_ln(matrix, read_mode_icon(keymap_config.swap_lalt_lgui));
- //matrix_write_ln(matrix, read_host_led_state());
- //matrix_write_ln(matrix, read_timelog());
- } else {
- matrix_write(matrix, read_logo());
+ return layer_display_name[i].name;
+ } else if (layer_state != 0 && layer_display_name[i].state == layer_state) {
+
+ return layer_display_name[i].name;
+ }
}
+
+ return "?";
}
-inline void matrix_update(struct CharacterMatrix *dest, const struct CharacterMatrix *source) {
- if (memcmp(dest->display, source->display, sizeof(dest->display))) {
- memcpy(dest->display, source->display, sizeof(dest->display));
- dest->dirty = true;
- }
+static char layer_status_buf[24] = "Layer state ready.\n";
+static inline void update_keymap_status(void) {
+
+ snprintf(layer_status_buf, sizeof(layer_status_buf) - 1, "OS:%s Layer:%s\n",
+ keymap_config.swap_lalt_lgui? "win" : "mac", get_leyer_status());
}
-void iota_gfx_task_user(void) {
- struct CharacterMatrix matrix;
- matrix_clear(&matrix);
- matrix_render_user(&matrix);
- matrix_update(&display, &matrix);
+static inline void render_keymap_status(struct CharacterMatrix *matrix) {
+
+ matrix_write(matrix, layer_status_buf);
}
+#define UPDATE_KEYMAP_STATUS() update_keymap_status()
+#define RENDER_KEYMAP_STATUS(a) render_keymap_status(a)
+
+#else
+
+#define UPDATE_KEYMAP_STATUS()
+#define RENDER_KEYMAP_STATUS(a)
+
#endif
+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) {
- #ifdef SSD1306OLED
- if (record->event.pressed) {
- set_keylog(keycode, record);
- set_timelog();
- }
- #endif
+ UPDATE_KEY_STATUS(keycode, record);
+
+ bool result = false;
switch (keycode) {
case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- }
+ 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) {
- layer_on(_RAISE);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ if (keymap_config.swap_lalt_lgui == false) {
+ register_code(KC_LANG2);
+ } else {
+ SEND_STRING(SS_LALT("`"));
+ }
} else {
- layer_off(_RAISE);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ unregister_code(KC_LANG2);
}
break;
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_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;
+ 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:
- return true;
+ result = true;
+ break;
}
- return false;
+ UPDATE_KEYMAP_STATUS();
+ return result;
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
}
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+void matrix_scan_user(void) {
+ iota_gfx_task(); // this is what updates the display continuously
+}
+
+static inline void matrix_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+static inline void render_status(struct CharacterMatrix *matrix) {
+
+ UPDATE_LED_STATUS();
+ RENDER_LED_STATUS(matrix);
+ RENDER_KEYMAP_STATUS(matrix);
+ UPDATE_LOCK_STATUS();
+ RENDER_LOCK_STATUS(matrix);
+ RENDER_KEY_STATUS(matrix);
+}
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+
+ #if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+ #endif
+
+ matrix_clear(&matrix);
+ if (is_master) {
+ render_status(&matrix);
+ } else {
+ RENDER_LOGO(&matrix);
+ }
+
+ matrix_update(&display, &matrix);
+}
+
+#endif
diff --git a/keyboards/crkbd/keymaps/like_jis/oled_helper.c b/keyboards/crkbd/keymaps/like_jis/oled_helper.c
new file mode 100644
index 000000000..500d3c0dc
--- /dev/null
+++ b/keyboards/crkbd/keymaps/like_jis/oled_helper.c
@@ -0,0 +1,83 @@
+#ifdef SSD1306OLED
+#include QMK_KEYBOARD_H
+#include "ssd1306.h"
+
+void render_logo(struct CharacterMatrix *matrix) {
+
+ const char logo_buf[]={
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
+ 0};
+
+ matrix_write(matrix, logo_buf);
+}
+
+static char keylog_buf[24] = "Key state ready.";
+const char code_to_name[60] = {
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
+ 'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ',
+ ' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '};
+
+void update_key_status(uint16_t keycode, keyrecord_t *record) {
+
+ if (!record->event.pressed) return;
+
+ char name = (keycode < 60) ? code_to_name[keycode] : ' ';
+ snprintf(keylog_buf, sizeof(keylog_buf) - 1, "Key:%dx%d %2x %c",
+ record->event.key.row, record->event.key.col,
+ (uint16_t)keycode, name);
+}
+
+void render_key_status(struct CharacterMatrix *matrix) {
+
+ matrix_write(matrix, keylog_buf);
+}
+
+static char lock_buf[24] = "Lock state ready.\n";
+void update_lock_status(void) {
+
+ uint8_t leds = host_keyboard_leds();
+ char *num_lock = (leds & (1<<USB_LED_NUM_LOCK)) ? "Num" : "";
+ char *caps_lock = (leds & (1<<USB_LED_CAPS_LOCK)) ? "Caps" : "";
+ char *scrl_lock = (leds & (1<<USB_LED_SCROLL_LOCK)) ? "Scrn" : "";
+ snprintf(lock_buf, sizeof(lock_buf) - 1, "Lock:%s %s %s\n",
+ num_lock, caps_lock, scrl_lock);
+}
+
+void render_lock_status(struct CharacterMatrix *matrix) {
+
+ matrix_write(matrix, lock_buf);
+}
+
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+
+static char led_buf[24] = "LED state ready.\n";
+rgblight_config_t rgblight_config_bak;
+void update_led_status(void) {
+
+ if (rgblight_config_bak.enable != rgblight_config.enable ||
+ rgblight_config_bak.mode != rgblight_config.mode ||
+ rgblight_config_bak.hue != rgblight_config.hue ||
+ rgblight_config_bak.sat != rgblight_config.sat ||
+ rgblight_config_bak.val != rgblight_config.val
+ ) {
+ snprintf(led_buf, sizeof(led_buf) - 1, "LED%c:%2d hsv:%2d %2d %2d\n",
+ rgblight_config.enable ? '*' : '.', (uint8_t)rgblight_config.mode,
+ (uint8_t)(rgblight_config.hue / RGBLIGHT_HUE_STEP),
+ (uint8_t)(rgblight_config.sat / RGBLIGHT_SAT_STEP),
+ (uint8_t)(rgblight_config.val / RGBLIGHT_VAL_STEP));
+ rgblight_config_bak = rgblight_config;
+ }
+}
+
+void render_led_status(struct CharacterMatrix *matrix) {
+
+ matrix_write(matrix, led_buf);
+}
+#endif
+#endif
diff --git a/keyboards/crkbd/keymaps/like_jis/oled_helper.h b/keyboards/crkbd/keymaps/like_jis/oled_helper.h
new file mode 100644
index 000000000..44628a526
--- /dev/null
+++ b/keyboards/crkbd/keymaps/like_jis/oled_helper.h
@@ -0,0 +1,35 @@
+#ifdef SSD1306OLED
+
+void render_logo(struct CharacterMatrix *matrix);
+void update_key_status(uint16_t keycode, keyrecord_t *record);
+void render_key_status(struct CharacterMatrix *matrix);
+void update_lock_status(void);
+void render_lock_status(struct CharacterMatrix *matrix);
+
+#define RENDER_LOGO(a) render_logo(a)
+#define UPDATE_KEY_STATUS(a, b) update_key_status(a, b)
+#define RENDER_KEY_STATUS(a) render_key_status(a)
+#define UPDATE_LOCK_STATUS() update_lock_status()
+#define RENDER_LOCK_STATUS(a) render_lock_status(a)
+
+#ifdef RGBLIGHT_ENABLE
+ void update_led_status(void);
+ void render_led_status(struct CharacterMatrix *matrix);
+ #define UPDATE_LED_STATUS() update_led_status()
+ #define RENDER_LED_STATUS(a) render_led_status(a)
+#else
+ #define UPDATE_LED_STATUS()
+ #define RENDER_LED_STATUS(a)
+#endif
+
+#else
+
+#define RENDER_LOGO(a)
+#define UPDATE_KEY_STATUS(a, b)
+#define RENDER_KEY_STATUS(a)
+#define UPDATE_LOCK_STATUS()
+#define RENDER_LOCK_STATUS(a)
+#define UPDATE_LED_STATUS()
+#define RENDER_LED_STATUS(a)
+
+#endif
diff --git a/keyboards/crkbd/keymaps/like_jis/rules.mk b/keyboards/crkbd/keymaps/like_jis/rules.mk
index 3f1bd9108..92f4693aa 100644
--- a/keyboards/crkbd/keymaps/like_jis/rules.mk
+++ b/keyboards/crkbd/keymaps/like_jis/rules.mk
@@ -4,18 +4,29 @@
# 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)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+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
+
+Link_Time_Optimization = yes # if firmware size over limit, try this option
+
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+endif
+
+# If you want to change the display of OLED, you need to change here
+SRC += ./lib/glcdfont.c \
+ oled_helper.c \
diff --git a/keyboards/crkbd/lib/glcdfont.c b/keyboards/crkbd/lib/glcdfont.c
new file mode 100644
index 000000000..f7567c57c
--- /dev/null
+++ b/keyboards/crkbd/lib/glcdfont.c
@@ -0,0 +1,243 @@
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+
+#ifndef FONT5X7_H
+#define FONT5X7_H
+
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/pgmspace.h>
+#elif defined(ESP8266)
+ #include <pgmspace.h>
+#else
+ #define PROGMEM
+#endif
+
+// Standard ASCII 5x7 font
+const unsigned char font[] PROGMEM = {
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
+0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
+0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
+0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
+0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
+0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
+0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
+0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
+0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
+0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
+0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
+0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
+0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
+0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
+0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
+0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
+0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
+0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
+0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
+0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
+0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
+0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
+0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
+0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
+0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
+0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
+0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
+0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
+0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
+0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
+0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
+0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
+0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
+0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
+0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
+0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
+0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
+0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
+0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
+0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
+0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
+0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
+0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
+0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
+0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
+0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
+0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
+0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
+0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
+0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
+0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
+0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
+0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
+0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
+0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
+0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
+0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
+0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
+0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
+0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
+0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
+0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
+0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
+0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
+0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
+0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
+0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
+0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
+0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
+0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
+0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
+0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
+0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
+0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
+0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
+0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
+0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
+0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
+0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
+0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
+0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
+0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
+0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
+0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
+0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
+0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
+0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
+0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
+0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
+0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
+0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
+0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
+0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
+0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
+0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
+0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
+0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
+0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
+0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
+0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
+0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
+0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
+0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
+0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
+0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
+0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
+0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
+0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
+0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
+0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
+0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
+0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
+0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
+0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
+0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
+0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
+0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
+0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
+0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
+0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
+0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
+0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
+0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0xC0, 0xE0,
+0xF0, 0xF8, 0xF8, 0x18, 0x00, 0xC0,
+0xF0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x80, 0xC0, 0xE0, 0xE0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,
+0x80, 0xC0, 0xE0, 0xE0, 0xE0, 0xE0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
+0x00, 0x00, 0x00, 0xE0, 0xE0, 0xC0,
+0xC0, 0xE0, 0xE0, 0xE0, 0xE0, 0x00,
+0x00, 0xE0, 0xE0, 0xC0, 0xC0, 0xE0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xC0, 0x80,
+0x00, 0x00, 0x00, 0x00, 0x80, 0xC0,
+0xE0, 0xE0, 0xE0, 0xE0, 0xE0, 0xE0,
+0xE0, 0xE0, 0xC0, 0x80, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
+0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
+0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
+0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
+0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
+0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
+0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
+0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0xF8, 0xFC, 0xFE,
+0xFF, 0xE0, 0x00, 0xFF, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0x80, 0xFF, 0xFF,
+0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+0xFF, 0x1F, 0x07, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xFF, 0xFF, 0xFF, 0x81, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x81,
+0xC3, 0xC3, 0xC3, 0x00, 0x00, 0xFF,
+0xFF, 0xFF, 0x81, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x81, 0xFF, 0xFF,
+0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
+0x00, 0x00, 0x00, 0x01, 0xFF, 0xFF,
+0xFF, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
+0x9D, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C,
+0x1C, 0x9D, 0xDF, 0xDF, 0xDF, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
+0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
+0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
+0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
+0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
+0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
+0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
+0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x03, 0x0F, 0x1F,
+0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x1F,
+0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x3F,
+0x3F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
+0x7F, 0x7C, 0x78, 0x78, 0x38, 0x1C,
+0x0F, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x01, 0x03, 0x07, 0x07,
+0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
+0x01, 0x03, 0x07, 0x07, 0x07, 0x07,
+0x07, 0x07, 0x07, 0x07, 0x03, 0x01,
+0x00, 0x00, 0x00, 0x07, 0x07, 0x07,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x07, 0x07, 0x07, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x07, 0x07,
+0x07, 0x00, 0x00, 0x00, 0x01, 0x03,
+0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
+0x07, 0x07, 0x03, 0x01, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+#endif // FONT5X7_H
diff --git a/keyboards/crkbd/lib/host_led_state_reader.c b/keyboards/crkbd/lib/host_led_state_reader.c
new file mode 100644
index 000000000..41ac55dc2
--- /dev/null
+++ b/keyboards/crkbd/lib/host_led_state_reader.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include "crkbd.h"
+
+char host_led_state_str[24];
+
+const char *read_host_led_state(void)
+{
+ uint8_t leds = host_keyboard_leds();
+ snprintf(host_led_state_str, sizeof(host_led_state_str), "NL:%s CL:%s SL:%s",
+ (leds & (1 << USB_LED_NUM_LOCK)) ? "on" : "- ",
+ (leds & (1 << USB_LED_CAPS_LOCK)) ? "on" : "- ",
+ (leds & (1 << USB_LED_SCROLL_LOCK)) ? "on" : "- ");
+
+ return host_led_state_str;
+}
diff --git a/keyboards/crkbd/lib/keylogger.c b/keyboards/crkbd/lib/keylogger.c
new file mode 100644
index 000000000..8f2a8ce3c
--- /dev/null
+++ b/keyboards/crkbd/lib/keylogger.c
@@ -0,0 +1,45 @@
+#include <stdio.h>
+#include "crkbd.h"
+
+char keylog_str[24] = {};
+char keylogs_str[21] = {};
+int keylogs_str_idx = 0;
+
+const char code_to_name[60] = {
+ ' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+ 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+ '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
+ 'R', 'E', 'B', 'T', ' ', ' ', ' ', ' ', ' ', ' ',
+ ' ', ';', '\'', ' ', ',', '.', '/', ' ', ' ', ' '};
+
+void set_keylog(uint16_t keycode, keyrecord_t *record) {
+ char name = ' ';
+ if (keycode < 60) {
+ name = code_to_name[keycode];
+ }
+
+ // update keylog
+ snprintf(keylog_str, sizeof(keylog_str), "%dx%d, k%2d : %c",
+ record->event.key.row, record->event.key.col,
+ keycode, name);
+
+ // update keylogs
+ if (keylogs_str_idx == sizeof(keylogs_str) - 1) {
+ keylogs_str_idx = 0;
+ for (int i = 0; i < sizeof(keylogs_str) - 1; i++) {
+ keylogs_str[i] = ' ';
+ }
+ }
+
+ keylogs_str[keylogs_str_idx] = name;
+ keylogs_str_idx++;
+}
+
+const char *read_keylog(void) {
+ return keylog_str;
+}
+
+const char *read_keylogs(void) {
+ return keylogs_str;
+}
diff --git a/keyboards/crkbd/lib/layer_state_reader.c b/keyboards/crkbd/lib/layer_state_reader.c
new file mode 100644
index 000000000..eddb71337
--- /dev/null
+++ b/keyboards/crkbd/lib/layer_state_reader.c
@@ -0,0 +1,35 @@
+
+#include QMK_KEYBOARD_H
+#include <stdio.h>
+#include "crkbd.h"
+
+#define L_BASE 0
+#define L_LOWER 8
+#define L_RAISE 16
+#define L_ADJUST 65536
+#define L_ADJUST_TRI 65560
+
+char layer_state_str[24];
+
+const char *read_layer_state(void) {
+ switch (layer_state)
+ {
+ case L_BASE:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Default");
+ break;
+ case L_RAISE:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Raise");
+ break;
+ case L_LOWER:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Lower");
+ break;
+ case L_ADJUST:
+ case L_ADJUST_TRI:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Adjust");
+ break;
+ default:
+ snprintf(layer_state_str, sizeof(layer_state_str), "Layer: Undef-%ld", layer_state);
+ }
+
+ return layer_state_str;
+}
diff --git a/keyboards/crkbd/lib/logo_reader.c b/keyboards/crkbd/lib/logo_reader.c
new file mode 100644
index 000000000..1bc1503a6
--- /dev/null
+++ b/keyboards/crkbd/lib/logo_reader.c
@@ -0,0 +1,11 @@
+#include "crkbd.h"
+
+const char *read_logo(void) {
+ static char logo[] = {
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93, 0x94,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4,
+ 0};
+
+ return logo;
+}
diff --git a/keyboards/crkbd/lib/mode_icon_reader.c b/keyboards/crkbd/lib/mode_icon_reader.c
new file mode 100644
index 000000000..04c226506
--- /dev/null
+++ b/keyboards/crkbd/lib/mode_icon_reader.c
@@ -0,0 +1,15 @@
+#include <stdio.h>
+#include "crkbd.h"
+
+char mode_icon[24];
+
+const char *read_mode_icon(bool swap) {
+ static char logo[][2][3] = {{{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}};
+ if (swap == false) {
+ snprintf(mode_icon, sizeof(mode_icon), "%s\n%s", logo[0][0], logo[0][1]);
+ } else {
+ snprintf(mode_icon, sizeof(mode_icon), "%s\n%s", logo[1][0], logo[1][1]);
+ }
+
+ return mode_icon;
+}
diff --git a/keyboards/crkbd/lib/rgb_state_reader.c b/keyboards/crkbd/lib/rgb_state_reader.c
new file mode 100644
index 000000000..e0efe2e52
--- /dev/null
+++ b/keyboards/crkbd/lib/rgb_state_reader.c
@@ -0,0 +1,15 @@
+#ifdef RGBLIGHT_ENABLE
+
+#include QMK_KEYBOARD_H
+#include <stdio.h>
+
+extern rgblight_config_t rgblight_config;
+char rbf_info_str[24];
+const char *read_rgb_info(void) {
+
+ snprintf(rbf_info_str, sizeof(rbf_info_str), "%s %2d h%3d s%3d v%3d",
+ rgblight_config.enable ? "on" : "- ", rgblight_config.mode,
+ rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
+ return rbf_info_str;
+}
+#endif
diff --git a/keyboards/crkbd/lib/timelogger.c b/keyboards/crkbd/lib/timelogger.c
new file mode 100644
index 000000000..69828a3a0
--- /dev/null
+++ b/keyboards/crkbd/lib/timelogger.c
@@ -0,0 +1,16 @@
+#include <stdio.h>
+#include "crkbd.h"
+
+char timelog_str[24] = {};
+int last_time = 0;
+int elapsed_time = 0;
+
+void set_timelog(void) {
+ elapsed_time = timer_elapsed(last_time);
+ last_time = timer_read();
+ snprintf(timelog_str, sizeof(timelog_str), "lt:%5d, et:%5d", last_time, elapsed_time);
+}
+
+const char *read_timelog(void) {
+ return timelog_str;
+}
diff --git a/keyboards/crkbd/pro_micro.h b/keyboards/crkbd/pro_micro.h
index f9e7ed75d..366633372 100644
--- a/keyboards/crkbd/pro_micro.h
+++ b/keyboards/crkbd/pro_micro.h
@@ -21,9 +21,7 @@
$Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
*/
-
-#ifndef Pins_Arduino_h
-#define Pins_Arduino_h
+#pragma once
#include <avr/pgmspace.h>
@@ -358,5 +356,3 @@ const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
#define SERIAL_PORT_USBVIRTUAL Serial
#define SERIAL_PORT_HARDWARE Serial1
#define SERIAL_PORT_HARDWARE_OPEN Serial1
-
-#endif /* Pins_Arduino_h */
diff --git a/keyboards/crkbd/readme.md b/keyboards/crkbd/readme.md
index 2f9f047a4..591fdfe0d 100644
--- a/keyboards/crkbd/readme.md
+++ b/keyboards/crkbd/readme.md
@@ -10,8 +10,9 @@ A split keyboard with 3x6 vertically staggered keys and 3 thumb keys.
Keyboard Maintainer: [foostan](https://github.com/foostan/) [@foostan](https://twitter.com/foostan)
Hardware Supported: Crkbd PCB, Pro Micro
Hardware Availability: [PCB & Case Data](https://github.com/foostan/crkbd)
+
Make example for this keyboard (after setting up your build environment):
make crkbd:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/crkbd/rev1/config.h b/keyboards/crkbd/rev1/config.h
index 6321136a7..915779060 100644
--- a/keyboards/crkbd/rev1/config.h
+++ b/keyboards/crkbd/rev1/config.h
@@ -16,10 +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 REV1_CONFIG_H
-#define REV1_CONFIG_H
-
-#include "../config.h"
+#pragma once
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
@@ -60,10 +57,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
@@ -82,6 +77,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-
-#endif
diff --git a/keyboards/crkbd/rev1/matrix.c b/keyboards/crkbd/rev1/matrix.c
index 117ff8d37..718cc5744 100644
--- a/keyboards/crkbd/rev1/matrix.c
+++ b/keyboards/crkbd/rev1/matrix.c
@@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdint.h>
#include <stdbool.h>
+#include <string.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
@@ -30,12 +31,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "matrix.h"
#include "split_util.h"
#include "pro_micro.h"
-#include "config.h"
#ifdef USE_MATRIX_I2C
# include "i2c.h"
#else // USE_SERIAL
-# include "serial.h"
+# include "split_scomm.h"
#endif
#ifndef DEBOUNCE
@@ -103,6 +103,8 @@ void matrix_init(void)
init_cols();
TX_RX_LED_INIT;
+ TXLED0;
+ RXLED0;
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
@@ -179,17 +181,20 @@ i2c_error: // the cable is disconnceted, or something else went wrong
#else // USE_SERIAL
-int serial_transaction(void) {
+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;
+ if(ret==2) RXLED1;
return 1;
}
-RXLED0;
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_slave_buffer[i];
- }
+ RXLED0;
+ memcpy(&matrix[slaveOffset],
+ (void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
return 0;
}
#endif
@@ -200,19 +205,9 @@ uint8_t matrix_scan(void)
matrix_master_scan();
}else{
matrix_slave_scan();
-
-// if(serial_slave_DATA_CORRUPT()){
-// TXLED0;
- int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[offset+i] = serial_master_buffer[i];
- }
-
-// }else{
-// TXLED1;
-// }
-
+ int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
+ memcpy(&matrix[offset],
+ (void *)serial_master_buffer, SERIAL_MASTER_BUFFER_LENGTH);
matrix_scan_quantum();
}
return 1;
@@ -222,6 +217,7 @@ uint8_t matrix_scan(void)
uint8_t matrix_master_scan(void) {
int ret = _matrix_scan();
+ int mchanged = 1;
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
@@ -231,15 +227,18 @@ uint8_t matrix_master_scan(void) {
// i2c_slave_buffer[i] = matrix[offset+i];
// }
#else // USE_SERIAL
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_master_buffer[i] = matrix[offset+i];
- }
+ #ifdef SERIAL_USE_MULTI_TRANSACTION
+ mchanged = memcmp((void *)serial_master_buffer,
+ &matrix[offset], SERIAL_MASTER_BUFFER_LENGTH);
+ #endif
+ memcpy((void *)serial_master_buffer,
+ &matrix[offset], SERIAL_MASTER_BUFFER_LENGTH);
#endif
#ifdef USE_MATRIX_I2C
if( i2c_transaction() ) {
#else // USE_SERIAL
- if( serial_transaction() ) {
+ if( serial_transaction(mchanged) ) {
#endif
// turn on the indicator led when halves are disconnected
TXLED1;
@@ -273,9 +272,19 @@ void matrix_slave_scan(void) {
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
}
diff --git a/keyboards/crkbd/rev1/rev1.h b/keyboards/crkbd/rev1/rev1.h
index d02c51f30..cdd61d2bf 100644
--- a/keyboards/crkbd/rev1/rev1.h
+++ b/keyboards/crkbd/rev1/rev1.h
@@ -1,5 +1,4 @@
-#ifndef REV1_H
-#define REV1_CONFIG_H
+#pragma once
#include "../crkbd.h"
@@ -49,5 +48,3 @@
KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
KC_##L30, KC_##L31, KC_##L32, KC_##R30, KC_##R31, KC_##R32 \
)
-
-#endif
diff --git a/keyboards/crkbd/rev1/rules.mk b/keyboards/crkbd/rev1/rules.mk
index 7af7ffdb8..6028b5a5b 100644
--- a/keyboards/crkbd/rev1/rules.mk
+++ b/keyboards/crkbd/rev1/rules.mk
@@ -1,2 +1,3 @@
-SRC += rev1/matrix.c \
- ws2812.c
+SRC += rev1/matrix.c
+SRC += rev1/split_util.c
+SRC += rev1/split_scomm.c
diff --git a/keyboards/crkbd/rev1/serial_config.h b/keyboards/crkbd/rev1/serial_config.h
new file mode 100644
index 000000000..4fab8e8dd
--- /dev/null
+++ b/keyboards/crkbd/rev1/serial_config.h
@@ -0,0 +1,4 @@
+#ifndef SOFT_SERIAL_PIN
+#define SOFT_SERIAL_PIN D2
+#define SERIAL_USE_MULTI_TRANSACTION
+#endif
diff --git a/keyboards/crkbd/rev1/serial_config_simpleapi.h b/keyboards/crkbd/rev1/serial_config_simpleapi.h
new file mode 100644
index 000000000..0e1dd9e4a
--- /dev/null
+++ b/keyboards/crkbd/rev1/serial_config_simpleapi.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#undef SERIAL_USE_MULTI_TRANSACTION
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
diff --git a/keyboards/crkbd/rev1/split_scomm.c b/keyboards/crkbd/rev1/split_scomm.c
new file mode 100644
index 000000000..a1fe6ba5b
--- /dev/null
+++ b/keyboards/crkbd/rev1/split_scomm.c
@@ -0,0 +1,91 @@
+#ifdef USE_SERIAL
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE flexible API (using multi-type transaction function) --- */
+
+#include <stdbool.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <split_scomm.h>
+#include "serial.h"
+#ifdef CONSOLE_ENABLE
+ #include <print.h>
+#endif
+
+uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
+uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
+uint8_t volatile status_com = 0;
+uint8_t volatile status1 = 0;
+uint8_t slave_buffer_change_count = 0;
+uint8_t s_change_old = 0xff;
+uint8_t s_change_new = 0xff;
+
+SSTD_t transactions[] = {
+#define GET_SLAVE_STATUS 0
+ /* master buffer not changed, only recive slave_buffer_change_count */
+ { (uint8_t *)&status_com,
+ 0, NULL,
+ sizeof(slave_buffer_change_count), &slave_buffer_change_count,
+ },
+#define PUT_MASTER_GET_SLAVE_STATUS 1
+ /* master buffer changed need send, and recive slave_buffer_change_count */
+ { (uint8_t *)&status_com,
+ sizeof(serial_master_buffer), (uint8_t *)serial_master_buffer,
+ sizeof(slave_buffer_change_count), &slave_buffer_change_count,
+ },
+#define GET_SLAVE_BUFFER 2
+ /* recive serial_slave_buffer */
+ { (uint8_t *)&status1,
+ 0, NULL,
+ sizeof(serial_slave_buffer), (uint8_t *)serial_slave_buffer
+ }
+};
+
+void serial_master_init(void)
+{
+ soft_serial_initiator_init(transactions, TID_LIMIT(transactions));
+}
+
+void serial_slave_init(void)
+{
+ soft_serial_target_init(transactions, TID_LIMIT(transactions));
+}
+
+// 0 => no error
+// 1 => slave did not respond
+// 2 => checksum error
+int serial_update_buffers(int master_update)
+{
+ int status, smatstatus;
+ static int need_retry = 0;
+
+ if( s_change_old != s_change_new ) {
+ smatstatus = soft_serial_transaction(GET_SLAVE_BUFFER);
+ if( smatstatus == TRANSACTION_END ) {
+ s_change_old = s_change_new;
+#ifdef CONSOLE_ENABLE
+ uprintf("slave matrix = %b %b %b %b\n",
+ serial_slave_buffer[0], serial_slave_buffer[1],
+ serial_slave_buffer[2], serial_slave_buffer[3]);
+#endif
+ }
+ } else {
+ // serial_slave_buffer dosen't change
+ smatstatus = TRANSACTION_END; // dummy status
+ }
+
+ if( !master_update && !need_retry) {
+ status = soft_serial_transaction(GET_SLAVE_STATUS);
+ } else {
+ status = soft_serial_transaction(PUT_MASTER_GET_SLAVE_STATUS);
+ }
+ if( status == TRANSACTION_END ) {
+ s_change_new = slave_buffer_change_count;
+ need_retry = 0;
+ } else {
+ need_retry = 1;
+ }
+ return smatstatus;
+}
+
+#endif // SERIAL_USE_MULTI_TRANSACTION
+#endif /* USE_SERIAL */
diff --git a/keyboards/crkbd/rev1/split_scomm.h b/keyboards/crkbd/rev1/split_scomm.h
new file mode 100644
index 000000000..873d8939d
--- /dev/null
+++ b/keyboards/crkbd/rev1/split_scomm.h
@@ -0,0 +1,24 @@
+#ifndef SPLIT_COMM_H
+#define SPLIT_COMM_H
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (OLD API, compatible with let's split serial.c) --- */
+#include "serial.h"
+
+#else
+/* --- USE flexible API (using multi-type transaction function) --- */
+// Buffers for master - slave communication
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
+extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+extern uint8_t slave_buffer_change_count;
+
+void serial_master_init(void);
+void serial_slave_init(void);
+int serial_update_buffers(int master_changed);
+
+#endif
+
+#endif /* SPLIT_COMM_H */
diff --git a/keyboards/crkbd/rev1/split_util.c b/keyboards/crkbd/rev1/split_util.c
new file mode 100644
index 000000000..e1ff8b437
--- /dev/null
+++ b/keyboards/crkbd/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/crkbd/split_util.h b/keyboards/crkbd/rev1/split_util.h
index 687ca19bd..687ca19bd 100644
--- a/keyboards/crkbd/split_util.h
+++ b/keyboards/crkbd/rev1/split_util.h
diff --git a/keyboards/crkbd/rules.mk b/keyboards/crkbd/rules.mk
index d88daebf3..426ed0c03 100644
--- a/keyboards/crkbd/rules.mk
+++ b/keyboards/crkbd/rules.mk
@@ -1,7 +1,9 @@
-SRC += i2c.c \
- serial.c \
- split_util.c \
- ssd1306.c
+SRC += i2c.c
+SRC += serial.c
+SRC += ssd1306.c
+
+# if firmware size over limit, try this option
+# CFLAGS += -flto
# MCU name
#MCU = at90usb1287
@@ -63,7 +65,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = no
USE_I2C = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/crkbd/serial.c b/keyboards/crkbd/serial.c
index e918ab6ee..325c29a3f 100644
--- a/keyboards/crkbd/serial.c
+++ b/keyboards/crkbd/serial.c
@@ -1,5 +1,10 @@
/*
* WARNING: be careful changing this code, it is very timing dependent
+ *
+ * 2018-10-28 checked
+ * avr-gcc 4.9.2
+ * avr-gcc 5.4.0
+ * avr-gcc 7.3.0
*/
#ifndef F_CPU
@@ -9,230 +14,577 @@
#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
-#ifdef USE_SERIAL
+#else
+ #error serial.c now support ATmega32U4 only
+#endif
+
+//////////////// for backward compatibility ////////////////////////////////
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (OLD API, compatible with let's split serial.c) */
+ #if SERIAL_SLAVE_BUFFER_LENGTH > 0
+ 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
+ }
+};
-// Serial pulse period in microseconds. Its probably a bad idea to lower this
-// value.
-#define SERIAL_DELAY 24
+void serial_master_init(void)
+{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
+void serial_slave_init(void)
+{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
+// 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 Simple API (OLD API, compatible with let's split serial.c)
+////////////////////////////////////////////////////////////////////////////
+
+#define ALWAYS_INLINE __attribute__((always_inline))
+#define NO_INLINE __attribute__((noinline))
+#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
+
+// 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);
}
-void serial_delay_short(void) {
- _delay_us(SERIAL_DELAY-1);
+
+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(void) {
+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 serial_master_init(void) {
- serial_output();
- serial_high();
+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 serial_slave_init(void) {
- serial_input();
-
-#ifndef USE_SERIAL_PD2
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
+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
- // Enable INT2
- EIMSK |= _BV(INT2);
- // Trigger on falling edge of INT2
- EICRA &= ~(_BV(ISC20) | _BV(ISC21));
+ // Trigger on falling edge of INT0-INT3
+ EICRA &= EICRx_BIT;
#endif
}
-// Used by the master to synchronize timing with the slave.
+// Used by the sender to synchronize timing with the reciver.
+static void sync_recv(void) NO_INLINE;
static
void sync_recv(void) {
- serial_input();
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
+ 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());
- //serial_delay();
- _delay_us(SERIAL_DELAY-5);
}
-// Used by the slave to send a synchronization signal to the master.
+// 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_output();
-
serial_low();
serial_delay();
-
serial_high();
}
// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
- serial_input();
- for ( uint8_t i = 0; i < 8; ++i) {
- byte = (byte << 1) | serial_read_pin();
- serial_delay();
- _delay_us(1);
+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
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 8;
- serial_output();
- while( b-- ) {
- if(data & (1 << b)) {
- serial_high();
- } else {
- serial_low();
+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();
- }
-}
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- sync_send();
+ serial_low(); // sync_send() / senc_recv() need raise edge
+}
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_slave_buffer[i]);
+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();
- checksum += serial_slave_buffer[i];
+ serial_write_chunk(data,8);
}
- serial_write_byte(checksum);
- sync_send();
+}
- // wait for the sync to finish sending
- serial_delay();
+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
+}
- // read the middle of pulses
- _delay_us(SERIAL_DELAY/2);
+inline static
+void change_reciver2sender(void) {
+ sync_recv(); //0
+ serial_delay(); //1
+ serial_low(); //3
+ serial_output(); //3
+ serial_delay_half1(); //4
+}
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_master_buffer[i] = serial_read_byte();
- sync_send();
- checksum_computed += serial_master_buffer[i];
+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;
}
- uint8_t checksum_received = serial_read_byte();
- sync_send();
+ serial_delay_half1();
- serial_input(); // end transaction
+ 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
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
+ // 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 {
- status &= ~SLAVE_DATA_CORRUPT;
+ *trans->status = TRANSACTION_ACCEPTED;
}
-}
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
+ sync_recv(); //weit initiator output to high
}
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
+/////////
+// start transaction by initiator
+//
+// int soft_serial_transaction(int sstd_index)
//
// Returns:
-// 0 => no error
-// 1 => slave did not respond
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
+// 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 slave that we want to start a transaction
+ // signal to the target that we want to start a transaction
serial_output();
serial_low();
- _delay_us(1);
+ _delay_us(SLAVE_INT_WIDTH_US);
- // wait for the slaves response
- serial_input();
- serial_high();
- _delay_us(SERIAL_DELAY);
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+ // wait for the target response
+ serial_input_with_pullup();
+ _delay_us(SLAVE_INT_RESPONSE_TIME);
- // check if the slave is present
+ // check if the target is present
if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
+ // target failed to pull the line low, assume not present
+ serial_output();
+ serial_high();
+ *trans->status = TRANSACTION_NO_RESPONSE;
sei();
- return 1;
+ return TRANSACTION_NO_RESPONSE;
}
- // if the slave is present syncronize with it
- sync_recv();
-
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_slave_buffer[i] = serial_read_byte();
- sync_recv();
- checksum_computed += serial_slave_buffer[i];
+#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);
}
- uint8_t checksum_received = serial_read_byte();
- sync_recv();
- if (checksum_computed != checksum_received) {
- sei();
- return 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
- uint8_t checksum = 0;
- // send data to the slave
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_master_buffer[i]);
- sync_recv();
- checksum += serial_master_buffer[i];
+ // 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);
}
- serial_write_byte(checksum);
- sync_recv();
// always, release the line when not in use
- serial_output();
- serial_high();
+ sync_send();
+ *trans->status = TRANSACTION_END;
sei();
- return 0;
+ 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/crkbd/serial.h b/keyboards/crkbd/serial.h
index 43e51f7fa..7e0c0847a 100644
--- a/keyboards/crkbd/serial.h
+++ b/keyboards/crkbd/serial.h
@@ -1,32 +1,84 @@
-#ifndef MY_SERIAL_H
-#define MY_SERIAL_H
+#ifndef SOFT_SERIAL_H
+#define SOFT_SERIAL_H
-#include "config.h"
#include <stdbool.h>
-/* TODO: some defines for interrupt setup */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
+// /////////////////////////////////////////////////////////////////
+// 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 Simple API (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 flexible API (using multi-type transaction function)
+// #define SERIAL_USE_MULTI_TRANSACTION
+//
+// /////////////////////////////////////////////////////////////////
-#ifndef USE_SERIAL_PD2
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
-#else
-#define SERIAL_PIN_MASK _BV(PD2)
-#define SERIAL_PIN_INTERRUPT INT2_vect
-#endif
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
-// Buffers for master - slave communication
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (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);
-bool serial_slave_data_corrupt(void);
+#endif // USE Simple 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
+
+#endif /* SOFT_SERIAL_H */
diff --git a/keyboards/crkbd/split_util.c b/keyboards/crkbd/split_util.c
deleted file mode 100644
index 8bc064174..000000000
--- a/keyboards/crkbd/split_util.c
+++ /dev/null
@@ -1,71 +0,0 @@
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/power.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/eeprom.h>
-#include "split_util.h"
-#include "matrix.h"
-#include "keyboard.h"
-#include "config.h"
-
-#ifdef USE_MATRIX_I2C
-# include "i2c.h"
-#else
-# include "serial.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/crkbd/ssd1306.c b/keyboards/crkbd/ssd1306.c
index d07900119..4330c8497 100644
--- a/keyboards/crkbd/ssd1306.c
+++ b/keyboards/crkbd/ssd1306.c
@@ -4,7 +4,6 @@
#include "i2c.h"
#include <string.h>
#include "print.h"
-#include "glcdfont.c"
#ifdef ADAFRUIT_BLE_ENABLE
#include "adafruit_ble.h"
#endif
@@ -14,6 +13,8 @@
#include "sendchar.h"
#include "timer.h"
+static const unsigned char font[] PROGMEM;
+
// Set this to 1 to help diagnose early startup problems
// when testing power-on with ble. Turn it off otherwise,
// as the latency of printing most of the debug info messes
@@ -23,12 +24,17 @@
//static uint16_t last_battery_update;
//static uint32_t vbat;
//#define BatteryUpdateInterval 10000 /* milliseconds */
-#define ScreenOffInterval 300000 /* milliseconds */
+
+// 'last_flush' is declared as uint16_t,
+// so this must be less than 65535
+#define ScreenOffInterval 60000 /* milliseconds */
#if DEBUG_TO_SCREEN
static uint8_t displaying;
#endif
static uint16_t last_flush;
+static bool force_dirty = true;
+
// Write command sequence.
// Returns true on success.
static inline bool _send_cmd1(uint8_t cmd) {
@@ -123,6 +129,7 @@ static int8_t capture_sendchar(uint8_t c) {
bool iota_gfx_init(bool rotate) {
bool success = false;
+ i2c_master_init();
send_cmd1(DisplayOff);
send_cmd2(SetDisplayClockDiv, 0x80);
send_cmd2(SetMultiPlex, DisplayHeight - 1);
@@ -319,12 +326,19 @@ void iota_gfx_task_user(void) {
void iota_gfx_task(void) {
iota_gfx_task_user();
- if (display.dirty) {
+ if (display.dirty|| force_dirty) {
iota_gfx_flush();
+ force_dirty = false;
}
if (timer_elapsed(last_flush) > ScreenOffInterval) {
iota_gfx_off();
}
}
+
+bool process_record_gfx(uint16_t keycode, keyrecord_t *record) {
+ force_dirty = true;
+ return true;
+}
+
#endif
diff --git a/keyboards/crkbd/ssd1306.h b/keyboards/crkbd/ssd1306.h
index 59d31c9f3..ea8c92328 100644
--- a/keyboards/crkbd/ssd1306.h
+++ b/keyboards/crkbd/ssd1306.h
@@ -1,10 +1,9 @@
-#ifndef SSD1306_H
-#define SSD1306_H
+#pragma once
#include <stdbool.h>
#include <stdio.h>
#include "pincontrol.h"
-#include "config.h"
+#include "action.h"
enum ssd1306_cmds {
DisplayOff = 0xAE,
@@ -89,6 +88,4 @@ void matrix_write_ln(struct CharacterMatrix *matrix, const char *data);
void matrix_write_P(struct CharacterMatrix *matrix, const char *data);
void matrix_render(struct CharacterMatrix *matrix);
-
-
-#endif
+bool process_record_gfx(uint16_t keycode, keyrecord_t *record); \ No newline at end of file
diff --git a/keyboards/daisy/keymaps/default/keymap.c b/keyboards/daisy/keymaps/default/keymap.c
index 833620b01..f1a5e353f 100644
--- a/keyboards/daisy/keymaps/default/keymap.c
+++ b/keyboards/daisy/keymaps/default/keymap.c
@@ -64,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_RS] = LAYOUT(
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS,
KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_END, KC_PGDN, KC_TRNS,
- KC_TRNS, RGB_TOG, RGB_SMOD, RGB_HUD, RGB_HUI, RGB_VAD, RGB_VAI, RGB_SAD, RGB_SAI, BL_STEP, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_VAD, RGB_VAI, RGB_SAD, RGB_SAI, BL_STEP, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
diff --git a/keyboards/daisy/rules.mk b/keyboards/daisy/rules.mk
index f24df2fd6..8157b168e 100644
--- a/keyboards/daisy/rules.mk
+++ b/keyboards/daisy/rules.mk
@@ -62,5 +62,5 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
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 this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend \ No newline at end of file
diff --git a/keyboards/dc01/left/config.h b/keyboards/dc01/left/config.h
index 68484d835..e3d49404e 100644
--- a/keyboards/dc01/left/config.h
+++ b/keyboards/dc01/left/config.h
@@ -46,6 +46,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_COL_PINS { F4, F1, F0, F7, F6, F5 }
#define UNUSED_PINS
+#define F_SCL 300000UL
+
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/dc01/left/matrix.c b/keyboards/dc01/left/matrix.c
index 792376635..806583580 100644
--- a/keyboards/dc01/left/matrix.c
+++ b/keyboards/dc01/left/matrix.c
@@ -43,7 +43,7 @@ static uint8_t error_count_arrow = 0;
/* Set 0 if debouncing isn't needed */
#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
+# define DEBOUNCING_DELAY 5
#endif
#if (DEBOUNCING_DELAY > 0)
@@ -135,10 +135,7 @@ uint8_t matrix_cols(void) {
return MATRIX_COLS;
}
-
i2c_status_t i2c_transaction(uint8_t address, uint32_t mask, uint8_t col_offset);
-//uint8_t i2c_transaction_numpad(void);
-//uint8_t i2c_transaction_arrow(void);
//this replases tmk code
void matrix_setup(void){
@@ -220,7 +217,7 @@ uint8_t matrix_scan(void)
matrix[i] &= 0x3F; //mask bits to keep
}
}
- }else{ //no error
+ }else{ //no error
error_count_right = 0;
}
@@ -440,40 +437,28 @@ static void unselect_cols(void)
// Complete rows from other modules over i2c
i2c_status_t i2c_transaction(uint8_t address, uint32_t mask, uint8_t col_offset) {
i2c_status_t err = i2c_start((address << 1) | I2C_WRITE, 10);
- if (err) return err;
- i2c_write(0x01, 10);
- if (err) return err;
+ i2c_write(0x01, 10); //request data in address 1
- i2c_start((address << 1) | I2C_READ, 10);
- if (err) return err;
+ i2c_start((address << 1) | I2C_READ, 5);
err = i2c_read_ack(10);
if (err == 0x55) { //synchronization byte
- for (uint8_t i = 0; i < MATRIX_ROWS-1 ; i++) { //assemble slave matrix in main matrix
- matrix[i] &= mask; //mask bits to keep
- err = i2c_read_ack(10);
- if (err >= 0) {
- matrix[i] |= ((uint32_t)err << (MATRIX_COLS_SCANNED + col_offset)); //add new bits at the end
- } else {
- return err;
- }
- }
- //last read request must be followed by a NACK
- matrix[MATRIX_ROWS - 1] &= mask; //mask bits to keep
- err = i2c_read_nack(10);
- if (err >= 0) {
+ for (uint8_t i = 0; i < MATRIX_ROWS-1 ; i++) { //assemble slave matrix in main matrix
+ matrix[i] &= mask; //mask bits to keep
+ err = i2c_read_ack(10);
+ matrix[i] |= ((uint32_t)err << (MATRIX_COLS_SCANNED + col_offset)); //add new bits at the end
+ }
+ //last read request must be followed by a NACK
+ matrix[MATRIX_ROWS - 1] &= mask; //mask bits to keep
+ err = i2c_read_nack(10);
matrix[MATRIX_ROWS - 1] |= ((uint32_t)err << (MATRIX_COLS_SCANNED + col_offset)); //add new bits at the end
- } else {
- return err;
- }
+
} else {
i2c_stop(10);
return 1;
}
i2c_stop(10);
- if (err) return err;
-
return 0;
} \ No newline at end of file
diff --git a/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk b/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk
index bab3b4c56..75db99ebe 100644
--- a/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk
+++ b/keyboards/deltasplit75/keymaps/itsaferbie/rules.mk
@@ -1,4 +1,4 @@
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
AUDIO_ENABLE = no # Audio disabled while using RGB underlight.
EXTRAKEY_ENABLE = yes
diff --git a/keyboards/deltasplit75/rules.mk b/keyboards/deltasplit75/rules.mk
index 2a13dbdfc..5c7571b9d 100644
--- a/keyboards/deltasplit75/rules.mk
+++ b/keyboards/deltasplit75/rules.mk
@@ -41,7 +41,7 @@ F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
-# different sizes, comment this out, and the correct address will be loaded
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina
@@ -63,7 +63,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = yes
USE_I2C = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
@@ -71,4 +71,4 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
CUSTOM_MATRIX = yes
-DEFAULT_FOLDER = deltasplit75/v2 \ No newline at end of file
+DEFAULT_FOLDER = deltasplit75/v2
diff --git a/keyboards/deltasplit75/v2/config.h b/keyboards/deltasplit75/v2/config.h
index 319a149fb..475a5c9dc 100644
--- a/keyboards/deltasplit75/v2/config.h
+++ b/keyboards/deltasplit75/v2/config.h
@@ -61,10 +61,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
@@ -85,4 +83,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_FUNCTION
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/dichotemy/config.h b/keyboards/dichotemy/config.h
deleted file mode 100644
index b3bd6d942..000000000
--- a/keyboards/dichotemy/config.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0xACC7
-#define DEVICE_VER 0x0001
-#define MANUFACTURER unknown
-#define PRODUCT Dichotemy
-#define DESCRIPTION q.m.k. keyboard firmware for Dichotemy
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 12
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-//#define BACKLIGHT_LEVELS 3
-
-#define ONESHOT_TIMEOUT 500
-
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-#define PREVENT_STUCK_MODIFIERS
-
-/* 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
-
-//UART settings for communication with the RF microcontroller
-#define SERIAL_UART_BAUD 1000000
-#define SERIAL_UART_DATA UDR1
-#define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
-#define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
-#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
-#define SERIAL_UART_INIT() do { \
- /* baud rate */ \
- UBRR1L = SERIAL_UART_UBRR; \
- /* baud rate */ \
- UBRR1H = SERIAL_UART_UBRR >> 8; \
- /* enable TX and RX */ \
- UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
- } while(0)
-
-#endif
diff --git a/keyboards/dichotemy/dichotemy.c b/keyboards/dichotemy/dichotemy.c
deleted file mode 100644
index 080c2654c..000000000
--- a/keyboards/dichotemy/dichotemy.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#include "dichotemy.h"
-#include "pointing_device.h"
-#include "report.h"
-
-void uart_init(void) {
- SERIAL_UART_INIT();
-}
-
-void pointing_device_task(void){
- report_mouse_t currentReport = {};
- SERIAL_UART_INIT();
- uint32_t timeout = 0;
-
- //the m character requests the RF slave to send the mouse report
- SERIAL_UART_DATA = 'm';
-
- //trust the external inputs completely, erase old data
- uint8_t uart_data[5] = {0};
-
- //there are 10 bytes corresponding to 10 columns, and an end byte
- for (uint8_t i = 0; i < 5; i++) {
- //wait for the serial data, timeout if it's been too long
- //this only happened in testing with a loose wire, but does no
- //harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
- timeout++;
- if (timeout > 10000){
- break;
- }
- }
- uart_data[i] = SERIAL_UART_DATA;
- }
-
- //check for the end packet, bits 1-4 are movement and scroll
- //but bit 5 has bits 0-3 for the scroll button state
- //(1000 if pressed, 0000 if not) and bits 4-7 are always 1
- //We can use this to verify the report sent properly.
- if (uart_data[4] == 0x0F || uart_data[4] == 0x8F)
- {
- currentReport = pointing_device_get_report();
- //shifting and transferring the info to the mouse report varaible
- //mouseReport.x = 127 max -127 min
- currentReport.x = uart_data[0];
- //mouseReport.y = 127 max -127 min
- currentReport.y = uart_data[1];
- //mouseReport.v = 127 max -127 min (scroll vertical)
- currentReport.v = uart_data[2];
- //mouseReport.h = 127 max -127 min (scroll horizontal)
- currentReport.h = uart_data[3];
- //mouseReport.buttons = 0x31 max (bitmask for mouse buttons 1-5) 0x00 min
- //mouse buttons 1 and 2 are handled by the keymap, but not 3
- if (uart_data[4] == 0x0F) { //then 3 is not pressed
- currentReport.buttons &= ~MOUSE_BTN3; //MOUSE_BTN3 is def in report.h
- } else { //3 must be pressed
- currentReport.buttons |= MOUSE_BTN3;
- }
- pointing_device_set_report(currentReport);
- }
- pointing_device_send();
-}
-
-void led_init(void) {
- DDRD |= (1<<1);
- PORTD |= (1<<1);
- DDRF |= (1<<4) | (1<<5);
- PORTF |= (1<<4) | (1<<5);
-}
-
-
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
- matrix_init_user();
- uart_init();
- led_init();
-}
-
-void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
- matrix_scan_user();
-}
-
-void led_set_kb(uint8_t usb_led) {
-
-}
diff --git a/keyboards/dichotemy/dichotemy.h b/keyboards/dichotemy/dichotemy.h
deleted file mode 100644
index 1d617d91c..000000000
--- a/keyboards/dichotemy/dichotemy.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef DICHOTEMY_H
-#define DICHOTEMY_H
-
-#include "quantum.h"
-#include "matrix.h"
-#include "backlight.h"
-#include <stddef.h>
-
-#define red_led_off PORTF |= (1<<5)
-#define red_led_on PORTF &= ~(1<<5)
-#define blu_led_off PORTF |= (1<<4)
-#define blu_led_on PORTF &= ~(1<<4)
-#define grn_led_off PORTD |= (1<<1)
-#define grn_led_on PORTD &= ~(1<<1)
-
-#define set_led_off red_led_off; grn_led_off; blu_led_off
-#define set_led_red red_led_on; grn_led_off; blu_led_off
-#define set_led_blue red_led_off; grn_led_off; blu_led_on
-#define set_led_green red_led_off; grn_led_on; blu_led_off
-#define set_led_yellow red_led_on; grn_led_on; blu_led_off
-#define set_led_magenta red_led_on; grn_led_off; blu_led_on
-#define set_led_cyan red_led_off; grn_led_on; blu_led_on
-#define set_led_white red_led_on; grn_led_on; blu_led_on
-
-/*
-#define LED_B 5
-#define LED_R 6
-#define LED_G 7
-
-#define all_leds_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
-
-#define red_led_on PORTF |= (1<<LED_R)
-#define red_led_off PORTF &= ~(1<<LED_R)
-#define grn_led_on PORTF |= (1<<LED_G)
-#define grn_led_off PORTF &= ~(1<<LED_G)
-#define blu_led_on PORTF |= (1<<LED_B)
-#define blu_led_off PORTF &= ~(1<<LED_B)
-
-#define set_led_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
-#define set_led_red PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_G) | (1<<LED_R)
-#define set_led_blue PORTF = PORTF & ~(1<<LED_G) & ~(1<<LED_R) | (1<<LED_B)
-#define set_led_green PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_R) | (1<<LED_G)
-#define set_led_yellow PORTF = PORTF & ~(1<<LED_B) | (1<<LED_R) | (1<<LED_G)
-#define set_led_magenta PORTF = PORTF & ~(1<<LED_G) | (1<<LED_R) | (1<<LED_B)
-#define set_led_cyan PORTF = PORTF & ~(1<<LED_R) | (1<<LED_B) | (1<<LED_G)
-#define set_led_white PORTF |= (1<<LED_B) | (1<<LED_R) | (1<<LED_G)
-*/
-
-// This a shortcut to help you visually see your layout.
-// The first section contains all of the arguements
-// The second converts the arguments into a two-dimensional array
-#define LAYOUT( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, \
- k33, k34, k35, k36, k37, k38, \
- k43, k44, k45, k46, k47, k48 \
-) \
-{ \
- { 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 }, \
- { KC_NO, KC_NO, KC_NO, k33, k34, k35, k36, k37, k38, KC_NO, KC_NO, KC_NO }, \
- { KC_NO, KC_NO, KC_NO, k43, k44, k45, k46, k47, k48, KC_NO, KC_NO, KC_NO } \
-}
-
-#endif
diff --git a/keyboards/dichotemy/info.json b/keyboards/dichotemy/info.json
deleted file mode 100644
index fc4390cdd..000000000
--- a/keyboards/dichotemy/info.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "keyboard_name": "Dichotemy",
- "url": "",
- "maintainer": "qmk",
- "width": 13,
- "height": 6,
- "layouts": {
- "LAYOUT": {
- "layout": [{"label":"k00", "x":0, "y":0.5}, {"label":"k01", "x":1, "y":0.5}, {"label":"k02", "x":2, "y":0.25}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0.5}, {"label":"k05", "x":5, "y":0.5}, {"label":"k06", "x":7, "y":0.5}, {"label":"k07", "x":8, "y":0.5}, {"label":"k08", "x":9, "y":0}, {"label":"k09", "x":10, "y":0.25}, {"label":"k0A", "x":11, "y":0.5}, {"label":"k0B", "x":12, "y":0.5}, {"label":"k10", "x":0, "y":1.5}, {"label":"k11", "x":1, "y":1.5}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1}, {"label":"k14", "x":4, "y":1.5}, {"label":"k15", "x":5, "y":1.5}, {"label":"k16", "x":7, "y":1.5}, {"label":"k17", "x":8, "y":1.5}, {"label":"k18", "x":9, "y":1}, {"label":"k19", "x":10, "y":1.25}, {"label":"k1A", "x":11, "y":1.5}, {"label":"k1B", "x":12, "y":1.5}, {"label":"k20", "x":0, "y":2.5}, {"label":"k21", "x":1, "y":2.5}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2}, {"label":"k24", "x":4, "y":2.5}, {"label":"k25", "x":5, "y":2.5}, {"label":"k26", "x":7, "y":2.5}, {"label":"k27", "x":8, "y":2.5}, {"label":"k28", "x":9, "y":2}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2A", "x":11, "y":2.5}, {"label":"k2B", "x":12, "y":2.5}, {"label":"k33", "x":3, "y":4}, {"label":"k34", "x":4, "y":4}, {"label":"k35", "x":5, "y":4}, {"label":"k36", "x":7, "y":4}, {"label":"k37", "x":8, "y":4}, {"label":"k38", "x":9, "y":4}, {"label":"k43", "x":3, "y":5}, {"label":"k44", "x":4, "y":5}, {"label":"k45", "x":5, "y":5}, {"label":"k46", "x":7, "y":5}, {"label":"k47", "x":8, "y":5}, {"label":"k48", "x":9, "y":5}]
- }
- }
-}
diff --git a/keyboards/dichotemy/keymaps/default/keymap.c b/keyboards/dichotemy/keymaps/default/keymap.c
deleted file mode 100644
index 8742116f1..000000000
--- a/keyboards/dichotemy/keymaps/default/keymap.c
+++ /dev/null
@@ -1,394 +0,0 @@
-// this is the style you want to emulate.
-// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
-
-#include QMK_KEYBOARD_H
-#include "pointing_device.h"
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-enum dichotemy_layers
-{
- _BS,
- _SF,
- _NM,
- _NS,
- _MS
-};
-
-#define LONGPRESS_COUNT 4
-
-enum dichotemy_keycodes
-{
- CK_1G = SAFE_RANGE,
- CK_BSPE,
- CK_QE,
- CK_TE, //these 4 CK_XXXX keys are special "alternate long-press" keys controlled with unique timers. Make sure you understand them before you mess with them.
- NS_HYPH,
- NS_EQU,
- NUMKEY,
- SFTKEY,
- MOUSE,
- MS_BTN1,
- MS_BTN2
- //MS_BTN3
-};
-
-// Macro definitions for readability
-enum dichotemy_macros
-{
- VOLU,
- VOLD,
- ESCM
-};
-
-#define LONGPRESS_DELAY 150
-#define MAX_TOGGLE_LENGTH 300
-#define TAPPING_TOGGLE 1
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_BS] = LAYOUT( /* Base layout, nearly qwerty but with modifications because it's not a full keyboard. Obviously. */
- CK_TE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- NUMKEY, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, CK_QE,
- SFTKEY, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MOUSE,
- KC_LCTL, KC_LALT, KC_LGUI, KC_RGUI, KC_RALT, KC_RCTL,
- KC_LBRC, KC_LPRN, KC_QUOT, KC_SPC, KC_RPRN, KC_RBRC
- ),
-
- [_SF] = LAYOUT( /* Shifted layout, small changes (because angle brackets have been moved to thumb cluster buttons) */
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, NS_HYPH, KC_UNDS, _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, KC_LABK, _______, _______, KC_RABK, _______
- ),
-
- [_NM] = LAYOUT( /* Number layout, basically the main function layer */
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
- _______, CK_1G, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, CK_BSPE,
- _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______
- ),
-
- [_NS] = LAYOUT( /* Shifted number/function layout, for per-key control. Only active when shift is held, and number is toggled or held */
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS, NS_EQU, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______
- ),
-
- [_MS] = LAYOUT( /* Mouse layer, including buttons for clicking. */
- _______, _______, _______, _______, _______, _______, KC_VOLU, KC_HOME, KC_PGUP, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, MS_BTN1, MS_BTN2, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, KC_VOLD, KC_END, KC_PGDN, _______, _______, _______,
- _______, _______, _______, _______, KC_UP, _______,
- _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT
- )
-
-};
-
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-static uint16_t special_timers[LONGPRESS_COUNT] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF};
-static bool special_key_states[LONGPRESS_COUNT] = {0,0,0,0};
-
-static uint16_t shift_timer;
-static uint16_t num_timer;
-static uint16_t mouse_timer;
-
-static bool shift_singular_key = false;
-static bool number_singular_key = false;
-static bool mouse_singular_key = false;
-
-static bool shift_held = false;
-static bool shift_suspended = false;
-report_mouse_t currentReport = {};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
-
- //uint8_t layer;
- //layer = biton32(layer_state); // get the current layer //Or don't, I didn't use it.
-
- //custom layer handling for tri_layer,
- switch (keycode) {
- case NUMKEY:
- if (record->event.pressed) {
- num_timer = timer_read();
- number_singular_key = true;
- layer_invert(_NM);
- } else {
- if (timer_elapsed(num_timer) < MAX_TOGGLE_LENGTH && number_singular_key) {
- //do nothing, the layer has already been inverted
- } else {
- layer_invert(_NM);
- }
- }
- update_tri_layer(_NM, _SF, _NS);
- return false;
- break;
- //SHIFT is handled as LSHIFT in the general case - 'toggle' shoudl activate caps, while the layer is only active when shift is held.
- case SFTKEY:
- if (record->event.pressed) {
- shift_held = true;
- shift_suspended = false;
- shift_timer = timer_read();
- shift_singular_key = true;
- layer_on(_SF);
- register_code(KC_LSFT);
- } else {
- shift_held = false;
- if (timer_elapsed(shift_timer) < MAX_TOGGLE_LENGTH && shift_singular_key) {
- //this was basically a toggle, so activate/deactivate caps lock.
- SEND_STRING(SS_TAP(X_CAPSLOCK));
- }
- layer_off(_SF);
- unregister_code(KC_LSFT);
- }
- update_tri_layer(_NM, _SF, _NS);
- return false;
- break;
- //MOUSE layer needs to be handled the same way as NUMKEY, but differently from shift
- case MOUSE:
- if (record->event.pressed) {
- mouse_timer = timer_read();
- mouse_singular_key = true;
- layer_invert(_MS);
- } else {
- if (timer_elapsed(mouse_timer) < MAX_TOGGLE_LENGTH && number_singular_key){
- //do nothing, it was a toggle (and it's already been toggled)
- } else {
- layer_invert(_MS);
- }
- }
- return false;
- break;
- //Custom macros for strange keys with different long-tap behavior
- case CK_1G:
- if (shift_held && shift_suspended){
- register_code(KC_LSFT);
- shift_suspended = false;
- }
- shift_singular_key = false;
- number_singular_key = false;
- mouse_singular_key = false;
- if (record->event.pressed) {
- special_timers[CK_1G-SAFE_RANGE] = timer_read();
- } else {
- if (special_key_states[CK_1G-SAFE_RANGE]){
- //key was activated after longpress_delay, need to close those keycodes
- special_key_states[CK_1G-SAFE_RANGE] = 0;
- unregister_code(KC_GRAVE);
- } else {
- //key was not activated, return macro activating proper, pre-long-tap key
- SEND_STRING(SS_TAP(X_1));
- }
- special_timers[CK_1G-SAFE_RANGE] = 0xFFFF;
- }
- break;
- case CK_BSPE:
- if (shift_held && shift_suspended){
- register_code(KC_LSFT);
- shift_suspended = false;
- }
- shift_singular_key = false;
- number_singular_key = false;
- mouse_singular_key = false;
- if (record->event.pressed) {
- special_timers[CK_BSPE-SAFE_RANGE] = timer_read();
- } else {
- if (special_key_states[CK_BSPE-SAFE_RANGE]){
- //key was activated after longpress_delay, need to close those keycodes
- special_key_states[CK_BSPE-SAFE_RANGE] = 0;
- unregister_code(KC_ENTER);
- } else {
- //key was not activated, return macro activating proper, pre-long-tap key
- SEND_STRING(SS_TAP(X_BSLASH));
- }
- special_timers[CK_BSPE-SAFE_RANGE] = 0xFFFF;
- }
- break;
- case CK_QE:
- if (shift_held && shift_suspended){
- register_code(KC_LSFT);
- shift_suspended = false;
- }
- shift_singular_key = false;
- number_singular_key = false;
- mouse_singular_key = false;
- if (record->event.pressed) {
- special_timers[CK_QE-SAFE_RANGE] = timer_read();
- } else {
- if (special_key_states[CK_QE-SAFE_RANGE]){
- //key was activated after longpress_delay, need to close those keycodes
- special_key_states[CK_QE-SAFE_RANGE] = 0;
- unregister_code(KC_ENTER);
- } else {
- //key was not activated, return macro activating proper, pre-long-tap key
- SEND_STRING(SS_TAP(X_QUOTE));
- }
- special_timers[CK_QE-SAFE_RANGE] = 0xFFFF;
- }
- break;
- case CK_TE:
- if (shift_held && shift_suspended){
- register_code(KC_LSFT);
- shift_suspended = false;
- }
- if (record->event.pressed) {
- special_timers[CK_TE-SAFE_RANGE] = timer_read();
- } else {
- if (special_key_states[CK_TE-SAFE_RANGE]){
- //key was activated after longpress_delay, need to close those keycodes
- special_key_states[CK_TE-SAFE_RANGE] = 0;
- unregister_code(KC_ENTER);
- } else {
- //key was not activated, return macro activating proper, pre-long-tap key
- SEND_STRING(SS_TAP(X_TAB));
- }
- special_timers[CK_TE-SAFE_RANGE] = 0xFFFF;
- }
- break;
- //No-shift keys, they unregister the KC_LSFT code so they can send
- //unshifted values - but they don't change the bool. if any other
- //key is pressed and the bool is set, KC_LSFT is registered again.
- case NS_HYPH:
- if (record->event.pressed) {
- shift_suspended = true;
- unregister_code(KC_LSFT);
- register_code(KC_MINS);
- } else {
- unregister_code(KC_MINS);
- if (shift_held && shift_suspended){
- register_code(KC_LSFT);
- shift_suspended = false;
- }
- }
- break;
- case NS_EQU:
- if (record->event.pressed) {
- shift_suspended = true;
- unregister_code(KC_LSFT);
- register_code(KC_EQUAL);
- } else {
- unregister_code(KC_EQUAL);
- if (shift_held && shift_suspended){
- register_code(KC_LSFT);
- shift_suspended = false;
- }
- }
- break;
-
- //mouse buttons, for 1-3, to update the mouse report:
- case MS_BTN1:
- currentReport = pointing_device_get_report();
- if (record->event.pressed) {
- if (shift_held && shift_suspended){
- register_code(KC_LSFT);
- shift_suspended = false;
- }
- //update mouse report here
- currentReport.buttons |= MOUSE_BTN1; //MOUSE_BTN1 is a const defined in report.h
- } else {
- //update mouse report here
- currentReport.buttons &= ~MOUSE_BTN1;
- }
- pointing_device_set_report(currentReport);
- break;
- case MS_BTN2:
- currentReport = pointing_device_get_report();
- if (record->event.pressed) {
- if (shift_held && shift_suspended){
- register_code(KC_LSFT);
- shift_suspended = false;
- }
- //update mouse report here
- currentReport.buttons |= MOUSE_BTN2; //MOUSE_BTN2 is a const defined in report.h
- } else {
- //update mouse report here
- }
- pointing_device_set_report(currentReport);
- break;
- //there is a case for button 3, but that's handled in dichotemy.c, and this is being
- //disabled to avoid any conflict.
- /*case MS_BTN3:
- currentReport = pointing_device_get_report();
- if (record->event.pressed) {
- if (shift_held && shift_suspended){
- register_code(KC_LSFT);
- shift_suspended = false;
- }
- //update mouse report here
- currentReport.buttons |= MOUSE_BTN3; //MOUSE_BTN2 is a const defined in report.h
- } else {
- //update mouse report here
- }
- pointing_device_set_report(currentReport);
- break;*/
-
- //If any other key was pressed during the layer mod hold period,
- //then the layer mod was used momentarily, and should block latching
- //Additionally, if NS_ keys are in use, then shift may be held (but is
- //disabled for the unshifted keycodes to be send. Check the bool and
- //register shift as necessary.
- default:
- if (shift_held){
- register_code(KC_LSFT);
- }
- shift_singular_key = false;
- number_singular_key = false;
- mouse_singular_key = false;
- break;
- }
- return true;
-};
-
-void matrix_scan_user(void) {
- uint8_t layer = biton32(layer_state);
- for (uint8_t i = 0; i<LONGPRESS_COUNT; i++){
- if (timer_elapsed(special_timers[i]) >= LONGPRESS_DELAY && !special_key_states[i]){
- switch (i + SAFE_RANGE){
- case CK_1G:
- register_code(KC_GRAVE);
- break;
- case CK_BSPE:
- register_code(KC_ENTER);
- break;
- case CK_QE:
- register_code(KC_ENTER);
- break;
- case CK_TE:
- register_code(KC_ESCAPE);
- break;
- }
- special_key_states[i] = 1;
- }
- }
- switch (layer) {
- case _BS:
- set_led_off;
- break;
- case _NM:
- set_led_blue;
- break;
- case _SF:
- set_led_red;
- break;
- case _NS:
- set_led_green;
- break;
- default:
- break;
- }
-};
-
diff --git a/keyboards/dichotemy/matrix.c b/keyboards/dichotemy/matrix.c
deleted file mode 100644
index f2841df1d..000000000
--- a/keyboards/dichotemy/matrix.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
-Copyright 2012 Jun Wako
-Copyright 2014 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 <stdint.h>
-#include <stdbool.h>
-#if defined(__AVR__)
-#include <avr/io.h>
-#endif
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "timer.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
-
-#define MAIN_ROWMASK 0xFFF0;
-#define LOWER_ROWMASK 0x1F80;
-
-/* matrix state(1:on, 0:off) */
-static matrix_row_t matrix[MATRIX_ROWS];
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-void matrix_init(void) {
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void)
-{
- SERIAL_UART_INIT();
-
- uint32_t timeout = 0;
-
- //the s character requests the RF slave to send the matrix
- SERIAL_UART_DATA = 's';
-
- //trust the external keystates entirely, erase the last data
- uint8_t uart_data[7] = {0};
-
- //there are 10 bytes corresponding to 10 columns, and an end byte
- for (uint8_t i = 0; i < 7; i++) {
- //wait for the serial data, timeout if it's been too long
- //this only happened in testing with a loose wire, but does no
- //harm to leave it in here
- while(!SERIAL_UART_RXD_PRESENT){
- timeout++;
- if (timeout > 10000){
- break;
- }
- }
- uart_data[i] = SERIAL_UART_DATA;
- }
-
- //check for the end packet, the key state bytes use the LSBs, so 0xE0
- //will only show up here if the correct bytes were recieved
- if (uart_data[6] == 0x96) { //this is an arbitrary binary checksum (10010110)
- //shifting and transferring the keystates to the QMK matrix variable
- //bits 1-12 are row 1, 13-24 are row 2, 25-36 are row 3,
- //bits 37-42 are row 4 (only 6 wide, 1-3 are 0, and 10-12 are 0)
- //bits 43-48 are row 5 (same as row 4)
- /* ASSUMING MSB FIRST */
- matrix[0] = (((uint16_t) uart_data[0] << 8) | ((uint16_t) uart_data[1])) & MAIN_ROWMASK;
- matrix[1] = ((uint16_t) uart_data[1] << 12) | ((uint16_t) uart_data[2] << 4);
- matrix[2] = (((uint16_t) uart_data[3] << 8) | ((uint16_t) uart_data[4])) & MAIN_ROWMASK;
- matrix[3] = (((uint16_t) uart_data[4] << 9) | ((uint16_t) uart_data[5] << 1)) & LOWER_ROWMASK;
- matrix[4] = ((uint16_t) uart_data[5] << 7) & LOWER_ROWMASK;
- /* OK, TURNS OUT THAT WAS A BAD ASSUMPTION */
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- //I've unpacked these into the mirror image of what QMK expects them to be, so...
- matrix[i] = ((matrix[i] * 0x0802LU & 0x22110LU) | (matrix[i] * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
- //bithack mirror! Doesn't make any sense, but works - and efficiently.
- }
- }
-
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print_matrix_header();
-
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- phex(row); print(": ");
- print_matrix_row(row);
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += matrix_bitpop(i);
- }
- return count;
-}
diff --git a/keyboards/dichotemy/readme.md b/keyboards/dichotemy/readme.md
deleted file mode 100644
index b30cf00cb..000000000
--- a/keyboards/dichotemy/readme.md
+++ /dev/null
@@ -1,33 +0,0 @@
-Dichotemy Keyboard Firmware
-======================
-
-These configuration files were based off the Mitosis keyboard. This keyboard uses a completely different 'matrix scan' system to other keyboards, it relies on an external nRF51822 microcontroller maintaining a matrix of keystates received from the keyboard halves - it also receives mouse pointer information from the keyboard halves, which is implemented through a new feature, "Pointing Device". The matrix.c file contains the code to poll the external microcontroller for the key matrix, and the keymap.c file contains similar code to obtain the mouse report. As long as the relavant functions in these files are not changed, all other QMK features are supported.
-
-Build log of the keyboard can be found [here](http://google.com)
-
-Hardware design files can be found [here](http://google.com)
-
-Firmware for the nordic MCUs can be found [here](http://google.com)
-
-## Quantum MK Firmware
-
-For the full Quantum feature list, see [the parent readme](/).
-
-## Building
-
-Download or clone the whole firmware and navigate to the keyboards/atreus folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
-
-Depending on which keymap you would like to use, you will have to compile slightly differently.
-
-### Default
-To build with the default keymap, simply run `make default`.
-
-### Other Keymaps
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
-
-To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
-
-```
-$ make [default|jack|<name>]
-```
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/dichotemy/rules.mk b/keyboards/dichotemy/rules.mk
deleted file mode 100644
index 4e9db8687..000000000
--- a/keyboards/dichotemy/rules.mk
+++ /dev/null
@@ -1,75 +0,0 @@
-
-OPT_DEFS += -DDICHOTEMY_PROMICRO
-DICHOTEMY_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
- avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
-
-# # project specific files
-SRC = matrix.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
-# comment out to disable the options.
-#
-#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-#MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-POINTING_DEVICE_ENABLE = yes # Generic Pointer, not as big as mouse keys hopefully.
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
-# 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
-
-USB = /dev/ttyACM0
-
-#upload: build
-# $(DICHOTEMY_UPLOAD_COMMAND)
diff --git a/keyboards/dichotomy/config.h b/keyboards/dichotomy/config.h
new file mode 100755
index 000000000..f0847ec52
--- /dev/null
+++ b/keyboards/dichotomy/config.h
@@ -0,0 +1,85 @@
+/*
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xACC7
+#define DEVICE_VER 0x0002
+#define MANUFACTURER Broekhuijsen
+#define PRODUCT Dichotomy
+#define DESCRIPTION q.m.k. keyboard firmware for Dichotomy
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+#define ONESHOT_TIMEOUT 500
+
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+//UART settings for communication with the RF microcontroller
+#define SERIAL_UART_BAUD 1000000
+#define SERIAL_UART_DATA UDR1
+#define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
+#define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
+#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
+#define SERIAL_UART_INIT() do { \
+ /* baud rate */ \
+ UBRR1L = SERIAL_UART_UBRR; \
+ /* baud rate */ \
+ UBRR1H = SERIAL_UART_UBRR >> 8; \
+ /* enable TX and RX */ \
+ UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
+ /* 8-bit data */ \
+ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
+ } while(0)
+
+#endif
diff --git a/keyboards/dichotomy/dichotomy.c b/keyboards/dichotomy/dichotomy.c
new file mode 100755
index 000000000..41e12090c
--- /dev/null
+++ b/keyboards/dichotomy/dichotomy.c
@@ -0,0 +1,89 @@
+#include "dichotomy.h"
+
+void uart_init(void) {
+ SERIAL_UART_INIT();
+}
+
+void pointing_device_task(void){
+ /*report_mouse_t currentReport = {};
+ SERIAL_UART_INIT();
+ uint32_t timeout = 0;
+
+ //the m character requests the RF slave to send the mouse report
+ SERIAL_UART_DATA = 'm';
+
+ //trust the external inputs completely, erase old data
+ uint8_t uart_data[5] = {0};
+
+ //there are 10 bytes corresponding to 10 columns, and an end byte
+ for (uint8_t i = 0; i < 5; i++) {
+ //wait for the serial data, timeout if it's been too long
+ //this only happened in testing with a loose wire, but does no
+ //harm to leave it in here
+ while(!SERIAL_UART_RXD_PRESENT){
+ timeout++;
+ if (timeout > 10000){
+ xprintf("\r\nTIMED OUT");
+ break;
+ }
+ }
+ xprintf("\r\nGOT DATA for %d",i);
+ uart_data[i] = SERIAL_UART_DATA;
+ }
+
+ //check for the end packet, bytes 1-4 are movement and scroll
+ //but byte 5 has bits 0-3 for the scroll button state
+ //(1000 if pressed, 0000 if not) and bits 4-7 are always 1
+ //We can use this to verify the report sent properly.
+ if (uart_data[4] == 0x0F || uart_data[4] == 0x8F)
+ {
+ xprintf("\r\nREQUESTED MOUSE, RECEIVED %i, %i, %i, %i, %i",uart_data[0],uart_data[1],uart_data[2],uart_data[3],uart_data[4]);
+ currentReport = pointing_device_get_report();
+ //shifting and transferring the info to the mouse report varaible
+ //mouseReport.x = 127 max -127 min
+ currentReport.x = (int8_t) uart_data[0];
+ //mouseReport.y = 127 max -127 min
+ currentReport.y = (int8_t) uart_data[1];
+ //mouseReport.v = 127 max -127 min (scroll vertical)
+ currentReport.v = (int8_t) uart_data[2];
+ //mouseReport.h = 127 max -127 min (scroll horizontal)
+ currentReport.h = (int8_t) uart_data[3];
+ //mouseReport.buttons = 0x31 max (bitmask for mouse buttons 1-5) 0x00 min
+ //mouse buttons 1 and 2 are handled by the keymap, but not 3
+ if (uart_data[4] == 0x0F) { //then 3 is not pressed
+ currentReport.buttons &= ~MOUSE_BTN3; //MOUSE_BTN3 is def in report.h
+ } else { //3 must be pressed
+ currentReport.buttons |= MOUSE_BTN3;
+ }
+ pointing_device_set_report(currentReport);
+ } else {
+ xprintf("\r\nRequested packet, data 4 was %d",uart_data[4]);
+ }*/
+ pointing_device_send();
+}
+
+void led_init(void) {
+ DDRD |= (1<<1);
+ PORTD |= (1<<1);
+ DDRF |= (1<<4) | (1<<5);
+ PORTF |= (1<<4) | (1<<5);
+}
+
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ matrix_init_user();
+ uart_init();
+ led_init();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+ matrix_scan_user();
+}
+
+void led_set_kb(uint8_t usb_led) {
+
+}
diff --git a/keyboards/dichotomy/dichotomy.h b/keyboards/dichotomy/dichotomy.h
new file mode 100755
index 000000000..030209ff0
--- /dev/null
+++ b/keyboards/dichotomy/dichotomy.h
@@ -0,0 +1,46 @@
+#ifndef DICHOTOMY_H
+#define DICHOTOMY_H
+
+#include QMK_KEYBOARD_H
+#include "report.h"
+#include "pointing_device.h"
+#include "quantum.h"
+#include "matrix.h"
+#include "backlight.h"
+#include <stddef.h>
+
+#define red_led_off() PORTF |= (1<<6)
+#define red_led_on() PORTF &= ~(1<<6)
+#define blu_led_off() PORTF |= (1<<5)
+#define blu_led_on() PORTF &= ~(1<<5)
+#define grn_led_off() PORTD |= (1<<1)
+#define grn_led_on() PORTD &= ~(1<<1)
+
+#define set_led_off() red_led_off(); grn_led_off(); blu_led_off()
+#define set_led_red() red_led_on(); grn_led_off(); blu_led_off()
+#define set_led_blue() red_led_off(); grn_led_off(); blu_led_on()
+#define set_led_green() red_led_off(); grn_led_on(); blu_led_off()
+#define set_led_yellow() red_led_on(); grn_led_on(); blu_led_off()
+#define set_led_magenta() red_led_on(); grn_led_off(); blu_led_on()
+#define set_led_cyan() red_led_off(); grn_led_on(); blu_led_on()
+#define set_led_white() red_led_on(); grn_led_on(); blu_led_on()
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, \
+ k33, k34, k35, k36, k37, k38, \
+ k42, k43, k44, k45, k46, k47, k48, k49 \
+) \
+{ \
+ { 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 }, \
+ { KC_NO, KC_NO, KC_NO, k33, k34, k35, k36, k37, k38, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, k42, k43, k44, k45, k46, k47, k48, k49, KC_NO, KC_NO } \
+}
+
+#endif
diff --git a/keyboards/dichotomy/info.json b/keyboards/dichotomy/info.json
new file mode 100644
index 000000000..aeb00edce
--- /dev/null
+++ b/keyboards/dichotomy/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Dichotomy",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 13,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"k00", "x":0, "y":0.5}, {"label":"k01", "x":1, "y":0.5}, {"label":"k02", "x":2, "y":0.25}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0.5}, {"label":"k05", "x":5, "y":0.5}, {"label":"k06", "x":7, "y":0.5}, {"label":"k07", "x":8, "y":0.5}, {"label":"k08", "x":9, "y":0}, {"label":"k09", "x":10, "y":0.25}, {"label":"k0A", "x":11, "y":0.5}, {"label":"k0B", "x":12, "y":0.5}, {"label":"k10", "x":0, "y":1.5}, {"label":"k11", "x":1, "y":1.5}, {"label":"k12", "x":2, "y":1.25}, {"label":"k13", "x":3, "y":1}, {"label":"k14", "x":4, "y":1.5}, {"label":"k15", "x":5, "y":1.5}, {"label":"k16", "x":7, "y":1.5}, {"label":"k17", "x":8, "y":1.5}, {"label":"k18", "x":9, "y":1}, {"label":"k19", "x":10, "y":1.25}, {"label":"k1A", "x":11, "y":1.5}, {"label":"k1B", "x":12, "y":1.5}, {"label":"k20", "x":0, "y":2.5}, {"label":"k21", "x":1, "y":2.5}, {"label":"k22", "x":2, "y":2.25}, {"label":"k23", "x":3, "y":2}, {"label":"k24", "x":4, "y":2.5}, {"label":"k25", "x":5, "y":2.5}, {"label":"k26", "x":7, "y":2.5}, {"label":"k27", "x":8, "y":2.5}, {"label":"k28", "x":9, "y":2}, {"label":"k29", "x":10, "y":2.25}, {"label":"k2A", "x":11, "y":2.5}, {"label":"k2B", "x":12, "y":2.5}, {"label":"k33", "x":3, "y":4}, {"label":"k34", "x":4, "y":4}, {"label":"k35", "x":5, "y":4}, {"label":"k36", "x":7, "y":4}, {"label":"k37", "x":8, "y":4}, {"label":"k38", "x":9, "y":4}, {"label":"k43", "x":3, "y":5}, {"label":"k44", "x":4, "y":5}, {"label":"k45", "x":5, "y":5}, {"label":"k46", "x":7, "y":5}, {"label":"k47", "x":8, "y":5}, {"label":"k48", "x":9, "y":5}]
+ }
+ }
+}
diff --git a/keyboards/dichotomy/keymaps/alairock/keymap.c b/keyboards/dichotomy/keymaps/alairock/keymap.c
new file mode 100644
index 000000000..a1d196fb0
--- /dev/null
+++ b/keyboards/dichotomy/keymaps/alairock/keymap.c
@@ -0,0 +1,196 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _MOUSE 8
+#define _ADJUST 16
+
+
+enum dichotomy_keycodes
+{
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ MOUKEY,
+ MS_BTN1,
+ MS_BTN2,
+ MS_BTN3
+};
+
+#define RED_BRIGHTNESS 3
+#define GREEN_BRIGHTNESS 2
+#define BLUE_BRIGHTNESS 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+[_QWERTY] = LAYOUT( /* Base layout, nearly qwerty but with modifications because it's not a full keyboard. Obviously. */
+ KC_ESCAPE, 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_SLSH, MOUKEY,
+ KC_LCTL, KC_LALT, MOUKEY, KC_RGUI, KC_RALT, KC_RCTL,
+ MS_BTN3, SFT_T(KC_ESCAPE), KC_LGUI, KC_BSPC, KC_SPC, RAISE, LOWER, MS_BTN3
+),
+
+[_RAISE] = LAYOUT( /* Shifted layout, small changes (because angle brackets have been moved to thumb cluster buttons) */
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, _______, KC_VOLD, KC_VOLU, KC_MPLY, KC_MFFD, KC_MUTE, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______,
+ _______, _______, KC_GRV, _______, _______, KC_MRWD, _______, _______, _______, KC_BSLS, KC_QUOT, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_LABK, _______, _______, KC_RABK, _______, _______
+),
+
+[_LOWER] = LAYOUT( /* Number layout, basically the main function layer */
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, _______, KC_VOLD, KC_VOLU, KC_MPLY, KC_MFFD, KC_MUTE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______,
+ _______, _______, KC_TILD, _______, _______, KC_MRWD, _______, _______, _______, KC_PIPE, KC_DQT, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, RAISE, _______, _______, _______, _______, _______, _______
+),
+
+[_ADJUST] = LAYOUT( /* Shifted number/function layout, for per-key control. Only active when shift is held, and number is toggled or held */
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_UP, _______, _______, _______,
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_MOUSE] = LAYOUT( /* Mouse layer, including buttons for clicking. */
+ _______, _______, _______, _______, _______, _______, KC_VOLU, KC_HOME, KC_PGUP, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, MS_BTN1, MS_BTN2, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_VOLD, KC_END, KC_PGDN, _______, _______, _______,
+ _______, _______, _______, _______, KC_UP, _______,
+ _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______
+)
+
+}; // end keymaps block
+
+static bool shift_held = false;
+static bool shift_suspended = false;
+report_mouse_t currentReport = {};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ grn_led_on();
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ grn_led_off();
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ //SHIFT is handled as LSHIFT in the general case - 'toggle' shoudl activate caps, while the layer is only active when shift is held.
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ red_led_on();
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ red_led_off();
+ 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;
+ //MOUSE layer needs to be handled the same way as NUMKEY, but differently from shift
+ case MOUKEY:
+ if (record->event.pressed) {
+ layer_on(_MOUSE);
+ blu_led_on();
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_MOUSE);
+ blu_led_off();
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+
+ //mouse buttons, for 1-3, to update the mouse report:
+ case MS_BTN1:
+ currentReport = pointing_device_get_report();
+ if (record->event.pressed) {
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ //update mouse report here
+ currentReport.buttons |= MOUSE_BTN1; //MOUSE_BTN1 is a const defined in report.h
+ } else {
+ //update mouse report here
+ currentReport.buttons &= ~MOUSE_BTN1;
+ }
+ pointing_device_set_report(currentReport);
+ return false;
+ break;
+ case MS_BTN2:
+ currentReport = pointing_device_get_report();
+ if (record->event.pressed) {
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ //update mouse report here
+ currentReport.buttons |= MOUSE_BTN2; //MOUSE_BTN2 is a const defined in report.h
+ } else {
+ //update mouse report here
+ currentReport.buttons &= ~MOUSE_BTN2;
+ }
+ pointing_device_set_report(currentReport);
+ return false;
+ break;
+ case MS_BTN3:
+ currentReport = pointing_device_get_report();
+ if (record->event.pressed) {
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ //update mouse report here
+ currentReport.buttons |= MOUSE_BTN3; //MOUSE_BTN3 is a const defined in report.h
+ } else {
+ //update mouse report here
+ currentReport.buttons &= ~MOUSE_BTN3;
+ }
+ pointing_device_set_report(currentReport);
+ return false;
+ break;
+ //Additionally, if NS_ keys are in use, then shift may be held (but is
+ //disabled for the unshifted keycodes to be send. Check the bool and
+ //register shift as necessary.
+ // default:
+ // if (shift_held){
+ // register_code(KC_LSFT);
+ // }
+ // break;
+ }
+ return true;
+};
diff --git a/keyboards/dichotomy/keymaps/default/keymap.c b/keyboards/dichotomy/keymaps/default/keymap.c
new file mode 100755
index 000000000..e44bd21d9
--- /dev/null
+++ b/keyboards/dichotomy/keymaps/default/keymap.c
@@ -0,0 +1,506 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include "dichotomy.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum dichotomy_layers {
+ _BS,
+ _SF,
+ _NM,
+ _NS,
+ _MS
+};
+
+#define LONGPRESS_COUNT 4
+
+enum dichotomy_keycodes
+{
+ CK_1G = SAFE_RANGE,
+ CK_BSPE,
+ CK_QE,
+ CK_TE, //these 4 CK_XXXX keys are special "alternate long-press" keys controlled with unique timers. Make sure you understand them before you mess with them.
+ NS_HYPH,
+ NS_EQU,
+ NUMKEY,
+ SFTKEY,
+ MOUKEY,
+ MS_BTN1,
+ MS_BTN2,
+ MS_BTN3
+};
+
+#define CUSTOM_LONGPRESS 150
+#define CUSTOM_TOGGLE_TIME 300
+
+#define RED_BRIGHTNESS 3
+#define GREEN_BRIGHTNESS 2
+#define BLUE_BRIGHTNESS 2
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_BS] = LAYOUT( /* Base layout, nearly qwerty but with modifications because it's not a full keyboard. Obviously. */
+ CK_TE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ NUMKEY, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, CK_QE,
+ SFTKEY, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MOUKEY,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_RGUI, KC_RALT, KC_RCTL,
+ MS_BTN3, KC_LBRC, KC_LPRN, KC_SPC, KC_SPC, KC_RPRN, KC_RBRC, MS_BTN3
+),
+
+[_SF] = LAYOUT( /* Shifted layout, small changes (because angle brackets have been moved to thumb cluster buttons) */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, NS_HYPH, KC_UNDS, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_LABK, _______, _______, KC_RABK, _______, _______
+),
+
+[_NM] = LAYOUT( /* Number layout, basically the main function layer */
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ _______, CK_1G, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, CK_BSPE,
+ _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_NS] = LAYOUT( /* Shifted number/function layout, for per-key control. Only active when shift is held, and number is toggled or held */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PLUS, NS_EQU, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_MS] = LAYOUT( /* Mouse layer, including buttons for clicking. */
+ _______, _______, _______, _______, _______, _______, KC_VOLU, KC_HOME, KC_PGUP, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, MS_BTN1, MS_BTN2, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_VOLD, KC_END, KC_PGDN, _______, _______, _______,
+ _______, _______, _______, _______, KC_UP, _______,
+ _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______
+)
+
+};
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+static uint16_t special_timers[LONGPRESS_COUNT] = {0xFFFF,0xFFFF,0xFFFF,0xFFFF};
+static bool special_key_states[LONGPRESS_COUNT] = {0,0,0,0};
+static bool special_key_pressed[LONGPRESS_COUNT] = {0,0,0,0};
+
+static uint16_t shift_timer;
+static uint16_t num_timer;
+static uint16_t mouse_timer;
+
+static uint8_t red_timer;
+static uint8_t green_timer;
+static uint8_t blue_timer;
+
+static bool shift_singular_key = false;
+static bool number_singular_key = false;
+static bool mouse_singular_key = false;
+static bool capsLED = false;
+static bool shiftLED = false;
+static bool numLED = false;
+static bool mouseLED = false;
+
+static bool shift_held = false;
+static bool shift_suspended = false;
+report_mouse_t currentReport = {};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ //uint8_t layer;
+ //layer = biton32(layer_state); // get the current layer //Or don't, I didn't use it.
+ bool returnVal = true; //this is to determine if more key processing is needed.
+
+ //custom layer handling for tri_layer,
+ switch (keycode) {
+ case NUMKEY:
+ if (record->event.pressed) {
+ num_timer = timer_read();
+ number_singular_key = true;
+ layer_invert(_NM);
+ numLED = !numLED;
+ } else {
+ if (timer_elapsed(num_timer) < CUSTOM_TOGGLE_TIME && number_singular_key) {
+ //do nothing, the layer has already been inverted
+ } else {
+ layer_invert(_NM);
+ numLED = !numLED;
+ }
+ }
+ update_tri_layer(_NM, _SF, _NS);
+ returnVal = false;
+ break;
+ //SHIFT is handled as LSHIFT in the general case - 'toggle' shoudl activate caps, while the layer is only active when shift is held.
+ case SFTKEY:
+ if (record->event.pressed) {
+ shift_held = true;
+ shiftLED = true;
+ shift_suspended = false;
+ shift_timer = timer_read();
+ shift_singular_key = true;
+ layer_on(_SF);
+ register_code(KC_LSFT);
+ } else {
+ shift_held = false;
+ shiftLED = false;
+ if (timer_elapsed(shift_timer) < CUSTOM_TOGGLE_TIME && shift_singular_key) {
+ //this was basically a toggle, so activate/deactivate caps lock.
+ SEND_STRING(SS_TAP(X_CAPSLOCK));
+ capsLED = !capsLED;
+ }
+ layer_off(_SF);
+ unregister_code(KC_LSFT);
+ }
+ update_tri_layer(_NM, _SF, _NS);
+ returnVal = false;
+ break;
+ //MOUSE layer needs to be handled the same way as NUMKEY, but differently from shift
+ case MOUKEY:
+ if (record->event.pressed) {
+ mouse_timer = timer_read();
+ mouse_singular_key = true;
+ layer_invert(_MS);
+ mouseLED = !mouseLED;
+ } else {
+ if (timer_elapsed(mouse_timer) < CUSTOM_TOGGLE_TIME && mouse_singular_key){
+ //do nothing, it was a toggle (and it's already been toggled)
+ } else {
+ layer_invert(_MS);
+ mouseLED = !mouseLED;
+ }
+ }
+ returnVal = false;
+ break;
+ //Custom macros for strange keys with different long-tap behavior
+ case CK_1G:
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ if (record->event.pressed) {
+ special_timers[CK_1G-SAFE_RANGE] = timer_read();
+ special_key_pressed[CK_1G-SAFE_RANGE] = 1;
+ } else {
+ if (special_key_states[CK_1G-SAFE_RANGE]){
+ //key was activated after custom_longpress, need to close those keycodes
+ special_key_states[CK_1G-SAFE_RANGE] = 0;
+ unregister_code(KC_GRAVE);
+ } else {
+ if (special_key_pressed[CK_1G-SAFE_RANGE]){
+ //key was not activated, return macro activating proper, pre-long-tap key
+ SEND_STRING(SS_TAP(X_1));
+ special_key_pressed[CK_1G-SAFE_RANGE] = 0;
+ } else {
+ //the short key was already sent, because another key was pressed.
+ //Do nothing.
+ }
+
+ }
+ }
+ returnVal = false;
+ break;
+ case CK_BSPE:
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ if (record->event.pressed) {
+ special_timers[CK_BSPE-SAFE_RANGE] = timer_read();
+ special_key_pressed[CK_BSPE-SAFE_RANGE] = 1;
+ } else {
+ if (special_key_states[CK_BSPE-SAFE_RANGE]){
+ //key was activated after custom_longpress, need to close those keycodes
+ special_key_states[CK_BSPE-SAFE_RANGE] = 0;
+ unregister_code(KC_ENTER);
+ } else {
+ if (special_key_pressed[CK_BSPE-SAFE_RANGE]){
+ //key was not activated, return macro activating proper, pre-long-tap key
+ SEND_STRING(SS_TAP(X_BSLASH));
+ special_key_pressed[CK_BSPE-SAFE_RANGE] = 0;
+ } else {
+ //the short key was already sent, because another key was pressed.
+ //Do nothing.
+ }
+ }
+ }
+ returnVal = false;
+ break;
+ case CK_QE:
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ if (record->event.pressed) {
+ special_timers[CK_QE-SAFE_RANGE] = timer_read();
+ special_key_pressed[CK_QE-SAFE_RANGE] = 1;
+ } else {
+ if (special_key_states[CK_QE-SAFE_RANGE]){
+ //key was activated after custom_longpress, need to close those keycodes
+ special_key_states[CK_QE-SAFE_RANGE] = 0;
+ unregister_code(KC_ENTER);
+ } else {
+ if (special_key_pressed[CK_QE-SAFE_RANGE]){
+ //the long-press key was not activated, return macro activating proper, pre-long-tap key
+ SEND_STRING(SS_TAP(X_QUOTE));
+ special_key_pressed[CK_QE-SAFE_RANGE] = 0;
+ } else {
+ //the short key was already sent, because another key was pressed.
+ //Do nothing.
+ }
+ }
+ }
+ returnVal = false;
+ break;
+ case CK_TE:
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ if (record->event.pressed) {
+ special_timers[CK_TE-SAFE_RANGE] = timer_read();
+ special_key_pressed[CK_TE-SAFE_RANGE] = 1;
+ } else {
+ if (special_key_states[CK_TE-SAFE_RANGE]){
+ //key was activated after custom_longpress, need to close those keycodes
+ special_key_states[CK_TE-SAFE_RANGE] = 0;
+ unregister_code(KC_ESCAPE);
+ } else {
+ if (special_key_pressed[CK_TE-SAFE_RANGE]){
+ //the long-press key was not activated, return macro activating proper, pre-long-tap key
+ SEND_STRING(SS_TAP(X_TAB));
+ special_key_pressed[CK_TE-SAFE_RANGE] = 0;
+ } else {
+ //the short key was already sent, because another key was pressed.
+ //Do nothing.
+ }
+ }
+ }
+ returnVal = false;
+ break;
+ //No-shift keys, they unregister the KC_LSFT code so they can send
+ //unshifted values - but they don't change the bool. if any other
+ //key is pressed and the bool is set, KC_LSFT is registered again.
+ case NS_HYPH:
+ if (record->event.pressed) {
+ shift_suspended = true;
+ unregister_code(KC_LSFT);
+ register_code(KC_MINS);
+ } else {
+ unregister_code(KC_MINS);
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ }
+ returnVal = false;
+ break;
+ case NS_EQU:
+ if (record->event.pressed) {
+ shift_suspended = true;
+ unregister_code(KC_LSFT);
+ register_code(KC_EQUAL);
+ } else {
+ unregister_code(KC_EQUAL);
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ }
+ returnVal = false;
+ break;
+
+ //mouse buttons, for 1-3, to update the mouse report:
+ case MS_BTN1:
+ currentReport = pointing_device_get_report();
+ if (record->event.pressed) {
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ //update mouse report here
+ currentReport.buttons |= MOUSE_BTN1; //MOUSE_BTN1 is a const defined in report.h
+ } else {
+ //update mouse report here
+ currentReport.buttons &= ~MOUSE_BTN1;
+ }
+ pointing_device_set_report(currentReport);
+ returnVal = false;
+ break;
+ case MS_BTN2:
+ currentReport = pointing_device_get_report();
+ if (record->event.pressed) {
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ //update mouse report here
+ currentReport.buttons |= MOUSE_BTN2; //MOUSE_BTN2 is a const defined in report.h
+ } else {
+ //update mouse report here
+ currentReport.buttons &= ~MOUSE_BTN2;
+ }
+ pointing_device_set_report(currentReport);
+ returnVal = false;
+ break;
+ case MS_BTN3:
+ currentReport = pointing_device_get_report();
+ if (record->event.pressed) {
+ if (shift_held && shift_suspended){
+ register_code(KC_LSFT);
+ shift_suspended = false;
+ }
+ //update mouse report here
+ currentReport.buttons |= MOUSE_BTN3; //MOUSE_BTN3 is a const defined in report.h
+ } else {
+ //update mouse report here
+ currentReport.buttons &= ~MOUSE_BTN3;
+ }
+ pointing_device_set_report(currentReport);
+ returnVal = false;
+ break;
+ //Additionally, if NS_ keys are in use, then shift may be held (but is
+ //disabled for the unshifted keycodes to be send. Check the bool and
+ //register shift as necessary.
+ default:
+ if (shift_held){
+ register_code(KC_LSFT);
+ }
+ break;
+ }
+ switch (keycode){
+ case KC_BSPC:
+ case KC_NO:
+ case NUMKEY:
+ case SFTKEY:
+ case MOUKEY:
+ //don't want to reset single key variables
+ break;
+ default:
+ //If any other key was pressed during the layer mod hold period,
+ //then the layer mod was used momentarily, and should block latching
+ shift_singular_key = false;
+ number_singular_key = false;
+ mouse_singular_key = false;
+ break;
+ }
+ switch (keycode){
+ case KC_BSPC:
+ case KC_NO:
+ case NUMKEY:
+ case SFTKEY:
+ case MOUKEY:
+ case MOUSE_BTN1:
+ case MOUSE_BTN2:
+ case MOUSE_BTN3:
+ case KC_LCTL:
+ case KC_LALT:
+ case KC_LGUI:
+ case KC_RCTL:
+ case KC_RALT:
+ case KC_RGUI:
+ case CK_1G:
+ case CK_BSPE:
+ case CK_QE:
+ case CK_TE:
+ //Do nothing, don't want to trigger the timer key rollover
+ break;
+ default:
+ //Now we're checking to see if any of the special timer keys are pressed
+ //if so, we need to activate their short-press features
+ if (record->event.pressed) {
+ for (uint8_t i = 0; i<LONGPRESS_COUNT; i++){
+ if ((!special_key_states[i]) && special_key_pressed[i]){
+ switch (i + SAFE_RANGE){
+ case CK_1G:
+ SEND_STRING(SS_TAP(X_1));
+ break;
+ case CK_BSPE:
+ SEND_STRING(SS_TAP(X_BSLASH));
+ break;
+ case CK_QE:
+ SEND_STRING(SS_TAP(X_QUOTE));
+ break;
+ case CK_TE:
+ SEND_STRING(SS_TAP(X_TAB));
+ break;
+ }
+ special_key_pressed[i] = 0;
+ }
+ }
+ } else {
+ //do nothing, we don't want to trigger short presses on key releases.
+ }
+ break;
+ }
+ return returnVal;
+};
+
+void matrix_scan_user(void) {
+ //uint8_t layer = biton32(layer_state);
+ for (uint8_t i = 0; i<LONGPRESS_COUNT; i++){
+ if ((timer_elapsed(special_timers[i]) >= CUSTOM_LONGPRESS) && (!special_key_states[i]) && special_key_pressed[i]){
+ switch (i + SAFE_RANGE){
+ case CK_1G:
+ register_code(KC_GRAVE);
+ break;
+ case CK_BSPE:
+ register_code(KC_ENTER);
+ break;
+ case CK_QE:
+ register_code(KC_ENTER);
+ break;
+ case CK_TE:
+ register_code(KC_ESCAPE);
+ break;
+ }
+ special_key_pressed[i] = 0;
+ special_key_states[i] = 1;
+ }
+ }
+ if (shiftLED || capsLED){
+ red_timer++;
+ if (red_timer < RED_BRIGHTNESS){
+ red_led_on();
+ } else {
+ red_timer = 0;
+ red_led_off();
+ }
+ } else {
+ red_timer = 0;
+ red_led_off();
+ }
+ if (numLED){
+ green_timer++;
+ if (green_timer < GREEN_BRIGHTNESS){
+ grn_led_on();
+ } else {
+ green_timer = 0;
+ grn_led_off();
+ }
+ } else {
+ green_timer = 0;
+ grn_led_off();
+ }
+ if (mouseLED){
+ blue_timer++;
+ if (blue_timer < BLUE_BRIGHTNESS){
+ blu_led_on();
+ } else {
+ blue_timer = 0;
+ blu_led_off();
+ }
+ } else {
+ blue_timer = 0;
+ blu_led_off();
+ }
+};
diff --git a/keyboards/dichotomy/matrix.c b/keyboards/dichotomy/matrix.c
new file mode 100755
index 000000000..14c3f0d8e
--- /dev/null
+++ b/keyboards/dichotomy/matrix.c
@@ -0,0 +1,228 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2014 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 <stdint.h>
+#include <stdbool.h>
+#if defined(__AVR__)
+#include <avr/io.h>
+#endif
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.h"
+#include "dichotomy.h"
+#include "pointing_device.h"
+#include "report.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
+
+#define MAIN_ROWMASK 0xFFF0;
+#define LOWER_ROWMASK 0x3FC0;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+
+__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;
+}
+
+void matrix_init(void) {
+ DDRF |= (1<<6);
+ DDRF |= (1<<5);
+ DDRD |= (1<<1);
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ SERIAL_UART_INIT();
+ //xprintf("\r\nTRYING TO SCAN");
+
+ uint32_t timeout = 0;
+
+ //the s character requests the RF slave to send the matrix
+ SERIAL_UART_DATA = 's';
+
+ //trust the external keystates entirely, erase the last data
+ uint8_t uart_data[11] = {0};
+
+ //there are 10 bytes corresponding to 10 columns, and an end byte
+ for (uint8_t i = 0; i < 11; i++) {
+ //wait for the serial data, timeout if it's been too long
+ //this only happened in testing with a loose wire, but does no
+ //harm to leave it in here
+ while(!SERIAL_UART_RXD_PRESENT){
+ timeout++;
+ if (timeout > 10000){
+ xprintf("\r\nTime out in keyboard.");
+ break;
+ }
+ }
+ uart_data[i] = SERIAL_UART_DATA;
+ }
+
+ //check for the end packet, the key state bytes use the LSBs, so 0xE0
+ //will only show up here if the correct bytes were recieved
+ uint8_t checksum = 0x00;
+ for (uint8_t z=0; z<10; z++){
+ checksum = checksum^uart_data[z];
+ }
+ checksum = checksum ^ (uart_data[10] & 0xF0);
+ // Smash the checksum from 1 byte into 4 bits
+ checksum = (checksum ^ ((checksum & 0xF0)>>4)) & 0x0F;
+//xprintf("\r\nGOT RAW PACKET: \r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d",uart_data[0],uart_data[1],uart_data[2],uart_data[3],uart_data[4],uart_data[5],uart_data[6],uart_data[7],uart_data[8],uart_data[9],uart_data[10],checksum);
+ if ((uart_data[10] & 0x0F) == checksum) { //this is an arbitrary binary checksum (1001) (that would be 0x9.)
+ //xprintf("\r\nGOT PACKET: \r\n%d\r\n%d\r\n%d\r\n%d\r\n%d\r\n%d",uart_data[0],uart_data[1],uart_data[2],uart_data[3],uart_data[4],uart_data[5]);
+ //shifting and transferring the keystates to the QMK matrix variable
+ //bits 1-12 are row 1, 13-24 are row 2, 25-36 are row 3,
+ //bits 37-42 are row 4 (only 6 wide, 1-3 are 0, and 10-12 are 0)
+ //bits 43-48 are row 5 (same as row 4)
+ /* ASSUMING MSB FIRST */
+ matrix[0] = (((uint16_t) uart_data[0] << 8) | ((uint16_t) uart_data[1])) & MAIN_ROWMASK;
+ matrix[1] = ((uint16_t) uart_data[1] << 12) | ((uint16_t) uart_data[2] << 4);
+ matrix[2] = (((uint16_t) uart_data[3] << 8) | ((uint16_t) uart_data[4])) & MAIN_ROWMASK;
+ matrix[3] = (((uint16_t) uart_data[4] << 9) | ((uint16_t) uart_data[5] << 1)) & LOWER_ROWMASK;
+ matrix[4] = (((uint16_t) uart_data[5] << 7) | ((uart_data[10] & 1<<7) ? 1:0) << 13 | ((uart_data[10] & 1<<6) ? 1:0) << 6) & LOWER_ROWMASK;
+ /* OK, TURNS OUT THAT WAS A BAD ASSUMPTION */
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ //I've unpacked these into the mirror image of what QMK expects them to be, so...
+ /*uint8_t halfOne = (matrix[i]>>8);
+ uint8_t halfTwo = (matrix[i] & 0xFF);
+ halfOne = ((halfOne * 0x0802LU & 0x22110LU) | (halfOne * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
+ halfTwo = ((halfTwo * 0x0802LU & 0x22110LU) | (halfTwo * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
+ matrix[i] = ((halfTwo<<8) & halfOne);*/
+ //matrix[i] = ((matrix[i] * 0x0802LU & 0x22110LU) | (matrix[i] * 0x8020LU & 0x88440LU)) * 0x10101LU >> 16;
+ matrix[i] = bitrev16(matrix[i]);
+ //bithack mirror! Doesn't make any sense, but works - and efficiently.
+ }
+ //if (uart_data[6]!=0 || uart_data[7]!=0){
+ //if (maxCount<101){
+ // xprintf("\r\nMouse data: x=%d, y=%d",(int8_t)uart_data[6],(int8_t)uart_data[7]);
+ //}
+ report_mouse_t currentReport = {};
+ //check for the end packet, bytes 1-4 are movement and scroll
+ //but byte 5 has bits 0-3 for the scroll button state
+ //(1000 if pressed, 0000 if not) and bits 4-7 are always 1
+ //We can use this to verify the report sent properly.
+
+ currentReport = pointing_device_get_report();
+ //shifting and transferring the info to the mouse report varaible
+ //mouseReport.x = 127 max -127 min
+ currentReport.x = (int8_t) uart_data[6];
+ //mouseReport.y = 127 max -127 min
+ currentReport.y = (int8_t) uart_data[7];
+ //mouseReport.v = 127 max -127 min (scroll vertical)
+ currentReport.v = (int8_t) uart_data[8];
+ //mouseReport.h = 127 max -127 min (scroll horizontal)
+ currentReport.h = (int8_t) uart_data[9];
+ /*
+ currentReport.x = 0;
+ currentReport.y = 0;
+ currentReport.v = 0;
+ currentReport.h = 0;*/
+ pointing_device_set_report(currentReport);
+ } else {
+ //xprintf("\r\nRequested packet, data 10 was %d but checksum was %d",(uart_data[10] & 0x0F), (checksum & 0x0F));
+ }
+ //matrix_print();
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += matrix_bitpop(i);
+ }
+ return count;
+}
diff --git a/keyboards/dichotomy/readme.md b/keyboards/dichotomy/readme.md
new file mode 100755
index 000000000..9027825c3
--- /dev/null
+++ b/keyboards/dichotomy/readme.md
@@ -0,0 +1,33 @@
+Dichotomy Keyboard Firmware
+======================
+
+These configuration files were based off the Mitosis keyboard. This keyboard uses a completely different 'matrix scan' system to other keyboards, it relies on an external nRF51822 microcontroller maintaining a matrix of keystates received from the keyboard halves - it also receives mouse pointer information from the keyboard halves, which is implemented through a new feature, "Pointing Device". The matrix.c file contains the code to poll the external microcontroller for the key matrix, and the keymap.c file contains similar code to obtain the mouse report. As long as the relavant functions in these files are not changed, all other QMK features are supported.
+
+Build log of the keyboard can be found [here](http://google.com)
+
+Hardware design files can be found [here](http://google.com)
+
+Firmware for the nordic MCUs can be found [here](http://google.com)
+
+## Quantum MK Firmware
+
+For the full Quantum feature list, see [the parent readme](/).
+
+## Building
+
+Download or clone the whole firmware and navigate to the keyboards/atreus folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
+
+Depending on which keymap you would like to use, you will have to compile slightly differently.
+
+### Default
+To build with the default keymap, simply run `make default`.
+
+### Other Keymaps
+Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` and see keymap document (you can find in top readme.md) and existent keymap files.
+
+To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
+
+```
+$ make [default|jack|<name>]
+```
+Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/dichotomy/rules.mk b/keyboards/dichotomy/rules.mk
new file mode 100755
index 000000000..4dbc999b7
--- /dev/null
+++ b/keyboards/dichotomy/rules.mk
@@ -0,0 +1,77 @@
+
+OPT_DEFS += -DDICHOTOMY_PROMICRO
+DICHOTOMY_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
+ avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
+
+# # project specific files
+SRC = matrix.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
+# comment out to disable the options.
+#
+#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+#MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+POINTING_DEVICE_ENABLE = yes # Generic Pointer, not as big as mouse keys hopefully.
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
+# 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
+
+USB = /dev/ttyACM0
+
+#upload: build
+# $(DICHOTOMY_UPLOAD_COMMAND)
diff --git a/keyboards/dilly/config.h b/keyboards/dilly/config.h
index 97a6e533b..084186fc6 100644
--- a/keyboards/dilly/config.h
+++ b/keyboards/dilly/config.h
@@ -43,10 +43,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 8
@@ -54,9 +50,7 @@
#define RGBLIGHT_VAL_STEP 8
#endif
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 10
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/diverge3/.gitignore b/keyboards/diverge3/.gitignore
new file mode 100644
index 000000000..722d5e71d
--- /dev/null
+++ b/keyboards/diverge3/.gitignore
@@ -0,0 +1 @@
+.vscode
diff --git a/keyboards/diverge3/config.h b/keyboards/diverge3/config.h
index db3c6a6f7..464dc835f 100644
--- a/keyboards/diverge3/config.h
+++ b/keyboards/diverge3/config.h
@@ -31,8 +31,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* key matrix size */
#define MATRIX_ROWS 10
#define MATRIX_COLS 8
-// SERIAL is the only supported
-#define USE_SERIAL
/*
* Keyboard Matrix Assignments
@@ -51,18 +49,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
#define DIODE_DIRECTION ROW2COL
-// #define BACKLIGHT_PIN B7
-// #define BACKLIGHT_BREATHING
-// #define BACKLIGHT_LEVELS 3
+#define BACKLIGHT_PIN C6
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* 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
@@ -72,7 +72,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
*/
-// #define GRAVE_ESC_CTRL_OVERRIDE
+ #define GRAVE_ESC_CTRL_OVERRIDE
/*
* Force NKRO
diff --git a/keyboards/diverge3/keymaps/iso_uk/config.h b/keyboards/diverge3/keymaps/iso_uk/config.h
new file mode 100755
index 000000000..83f65979c
--- /dev/null
+++ b/keyboards/diverge3/keymaps/iso_uk/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2017 IslandMan93
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+
+// place overrides here
+#define MASTER_LEFT
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 150
+
diff --git a/keyboards/diverge3/keymaps/iso_uk/keymap.c b/keyboards/diverge3/keymaps/iso_uk/keymap.c
new file mode 100644
index 000000000..804334785
--- /dev/null
+++ b/keyboards/diverge3/keymaps/iso_uk/keymap.c
@@ -0,0 +1,45 @@
+/* Copyright 2017 IslandMan93
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+
+enum layers {
+ _QWERTY,
+ _LOWER,
+};
+
+#define LOWER MO(_LOWER)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT( \
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_CAPS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LCBR, KC_RCBR, 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_PSCR, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_NUHS,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_INS, KC_PGDN, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_HOME, KC_END, KC_SPC, KC_SPC, LOWER, KC_QUOT, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_SLASH
+ ),
+
+ [_LOWER] = LAYOUT(
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
+ BL_TOGG, KC_ASTG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_INC, KC_ASUP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ BL_DEC, KC_ASDN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_ASRP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+
+};
diff --git a/keyboards/diverge3/keymaps/iso_uk/readme.md b/keyboards/diverge3/keymaps/iso_uk/readme.md
new file mode 100755
index 000000000..ff4971754
--- /dev/null
+++ b/keyboards/diverge3/keymaps/iso_uk/readme.md
@@ -0,0 +1 @@
+# My UK based diverge 3 layout
diff --git a/keyboards/diverge3/keymaps/iso_uk/rules.mk b/keyboards/diverge3/keymaps/iso_uk/rules.mk
new file mode 100755
index 000000000..c9383ab8d
--- /dev/null
+++ b/keyboards/diverge3/keymaps/iso_uk/rules.mk
@@ -0,0 +1 @@
+AUTO_SHIFT_ENABLE = yes
diff --git a/keyboards/diverge3/keymaps/workman/config.h b/keyboards/diverge3/keymaps/workman/config.h
new file mode 100644
index 000000000..9829a604f
--- /dev/null
+++ b/keyboards/diverge3/keymaps/workman/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+// place overrides here
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 150 \ No newline at end of file
diff --git a/keyboards/diverge3/keymaps/workman/keymap.c b/keyboards/diverge3/keymaps/workman/keymap.c
new file mode 100644
index 000000000..5e681f418
--- /dev/null
+++ b/keyboards/diverge3/keymaps/workman/keymap.c
@@ -0,0 +1,212 @@
+/* Copyright 2017 IslandMan93
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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
+
+// KEYMAP
+extern keymap_config_t keymap_config;
+
+#define _WORKMAN_P 0
+#define _GAME 1
+#define _RAISE 2
+
+#define _______ KC_TRNS
+
+#define SHIFT_MOD MOD_BIT(KC_LSFT)
+#define SPACE_RAISE LT(_RAISE, KC_SPC)
+#define ENT_RAISE LT(_RAISE, KC_ENT)
+#define PAGE_PREV S(LCTL(KC_TAB))
+#define PAGE_NEXT LCTL(KC_TAB)
+
+enum custom_keycodes
+{
+ LO_BSPC = SAFE_RANGE,
+ LO_1,
+ LO_2,
+ LO_3,
+ LO_4,
+ LO_5,
+ LO_6,
+ LO_7,
+ LO_8,
+ LO_9,
+ LO_0,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t* record)
+{
+ if (record->event.pressed) {
+ switch (keycode) {
+ case LO_BSPC:
+ if (record->event.pressed) {
+ if (get_mods() & SHIFT_MOD) {
+ uint8_t current_mods = get_mods();
+ clear_mods();
+ SEND_STRING(SS_TAP(X_DELETE));
+ set_mods(current_mods);
+ } else {
+ SEND_STRING(SS_TAP(X_BSPACE));
+ }
+ }
+ return false;
+ case LO_1:
+ if (record->event.pressed) {
+ uint8_t current_mods = get_mods();
+ if (current_mods & SHIFT_MOD) {
+ clear_mods();
+ SEND_STRING("1");
+ set_mods(current_mods);
+ } else {
+ SEND_STRING("!");
+ }
+ }
+ return false;
+ case LO_2:
+ if (record->event.pressed) {
+ uint8_t current_mods = get_mods();
+ if (current_mods & SHIFT_MOD) {
+ clear_mods();
+ SEND_STRING("2");
+ set_mods(current_mods);
+ } else {
+ SEND_STRING("@");
+ }
+ }
+ return false;
+ case LO_3:
+ if (record->event.pressed) {
+ uint8_t current_mods = get_mods();
+ if (current_mods & SHIFT_MOD) {
+ clear_mods();
+ SEND_STRING("3");
+ set_mods(current_mods);
+ } else {
+ SEND_STRING("#");
+ }
+ }
+ return false;
+ case LO_4:
+ if (record->event.pressed) {
+ uint8_t current_mods = get_mods();
+ if (current_mods & SHIFT_MOD) {
+ clear_mods();
+ SEND_STRING("4");
+ set_mods(current_mods);
+ } else {
+ SEND_STRING("$");
+ }
+ }
+ return false;
+ case LO_5:
+ if (record->event.pressed) {
+ uint8_t current_mods = get_mods();
+ if (current_mods & SHIFT_MOD) {
+ clear_mods();
+ SEND_STRING("5");
+ set_mods(current_mods);
+ } else {
+ SEND_STRING("%");
+ }
+ }
+ return false;
+ case LO_6:
+ if (record->event.pressed) {
+ uint8_t current_mods = get_mods();
+ if (current_mods & SHIFT_MOD) {
+ clear_mods();
+ SEND_STRING("6");
+ set_mods(current_mods);
+ } else {
+ SEND_STRING("^");
+ }
+ }
+ return false;
+ case LO_7:
+ if (record->event.pressed) {
+ uint8_t current_mods = get_mods();
+ if (current_mods & SHIFT_MOD) {
+ clear_mods();
+ SEND_STRING("7");
+ set_mods(current_mods);
+ } else {
+ SEND_STRING("&");
+ }
+ }
+ return false;
+ case LO_8:
+ if (record->event.pressed) {
+ uint8_t current_mods = get_mods();
+ if (current_mods & SHIFT_MOD) {
+ clear_mods();
+ SEND_STRING("8");
+ set_mods(current_mods);
+ } else {
+ SEND_STRING("*");
+ }
+ }
+ return false;
+ case LO_9:
+ if (record->event.pressed) {
+ uint8_t current_mods = get_mods();
+ if (current_mods & SHIFT_MOD) {
+ clear_mods();
+ SEND_STRING("9");
+ set_mods(current_mods);
+ } else {
+ SEND_STRING("(");
+ }
+ }
+ return false;
+ case LO_0:
+ if (record->event.pressed) {
+ uint8_t current_mods = get_mods();
+ if (current_mods & SHIFT_MOD) {
+ clear_mods();
+ SEND_STRING("0");
+ set_mods(current_mods);
+ } else {
+ SEND_STRING(")");
+ }
+ }
+ return false;
+ }
+ }
+ return true;
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_WORKMAN_P] = LAYOUT(
+ KC_ESC, LO_1, LO_2, LO_3, LO_4, LO_5, LO_6, LO_6, LO_7, LO_8, LO_9, LO_0, KC_MINS, KC_ESC,
+ KC_GRV, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_LPRN, KC_RPRN, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_EQL,
+ KC_TAB, KC_A, KC_S, KC_H, KC_T, KC_G, KC_LCBR, KC_RCBR, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_BSLS,
+ KC_LCTL, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_LBRC, KC_RBRC, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ KC_LSFT, RESET, PAGE_PREV, PAGE_NEXT, KC_END, KC_LGUI, KC_LALT, TG(_GAME), LO_BSPC, ENT_RAISE, SPACE_RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL),
+
+ [_GAME] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_ESC,
+ KC_GRV, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_LPRN, KC_RPRN, KC_J, KC_F, KC_U, KC_P, KC_SCLN, KC_EQL,
+ KC_TAB, KC_A, KC_S, KC_H, KC_T, KC_G, KC_LCBR, KC_RCBR, KC_Y, KC_N, KC_E, KC_O, KC_I, KC_BSLS,
+ KC_LCTL, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_LBRC, KC_RBRC, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ KC_LSFT, KC_F1, KC_F2, KC_3, KC_F5, KC_SPC, KC_LALT, TG(_GAME), LO_BSPC, ENT_RAISE, SPACE_RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_RCTL),
+
+ [_RAISE] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, RESET,
+ _______, _______, _______, _______, _______, _______, BL_INC, KC_VOLU, _______, _______, _______, _______, _______, KC_F12,
+ _______, _______, _______, _______, _______, _______, BL_DEC, KC_VOLD, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, BL_BRTG, KC_MUTE, _______, _______, KC_MPRV, KC_MNXT, KC_MPLY, _______,
+ _______, _______, _______, _______, _______, _______, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+}; \ No newline at end of file
diff --git a/keyboards/diverge3/keymaps/workman/readme.md b/keyboards/diverge3/keymaps/workman/readme.md
new file mode 100644
index 000000000..48ba482fe
--- /dev/null
+++ b/keyboards/diverge3/keymaps/workman/readme.md
@@ -0,0 +1,21 @@
+# The Workman keymap for diverge3
+
+Basic example of the [Workman Programming Layout](https://github.com/ojbucao/workman) which uses the `SHIFT`ed variants of the number row, by default.
+
+## Layer 1 - Default Layer
+
+Workman programming layout.
+
+![Workman Layout Picture](https://i.imgur.com/IOOmRfI.png)
+
+## Layer 2 - Gaming Layer
+
+Reverts the number row to the normal 1, 2, 3, etc... for better gaming compatibility.
+
+![Gaming Layer Picture](https://i.imgur.com/E0vmEAa.png)
+
+## Layer 3 - Raise Layer
+
+Volume and backlight controls (although backlight is not fully functional using `USE_SERIAL` in `../config.h`).
+
+![Raise Layer Misc Buttons Picture](https://i.imgur.com/50L3O62.png)
diff --git a/keyboards/diverge3/keymaps/workman/rules.mk b/keyboards/diverge3/keymaps/workman/rules.mk
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/keyboards/diverge3/keymaps/workman/rules.mk
@@ -0,0 +1 @@
+
diff --git a/keyboards/diverge3/readme.md b/keyboards/diverge3/readme.md
index 2ecfbca3b..43add9d99 100644
--- a/keyboards/diverge3/readme.md
+++ b/keyboards/diverge3/readme.md
@@ -10,7 +10,11 @@ Make example for this keyboard (after setting up your build environment):
make diverge3:default
+Or for the [Workman](https://github.com/ojbucao/workman) layout:
+
+ make diverge3:workman
+
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
# Reflashing Animus
-Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST) during the upload step. Then reapply your keymap through Arbites. \ No newline at end of file
+Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST pins) during the upload step. Then reapply your keymap through Arbites. \ No newline at end of file
diff --git a/keyboards/diverge3/rules.mk b/keyboards/diverge3/rules.mk
index aa7453054..36e8ccb47 100644
--- a/keyboards/diverge3/rules.mk
+++ b/keyboards/diverge3/rules.mk
@@ -1,6 +1,3 @@
-SRC += ../lets_split/matrix.c \
- ../lets_split/serial.c \
- ../lets_split/split_util.c
# MCU name
#MCU = at90usb1286
@@ -61,13 +58,12 @@ 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
+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 this with audio at the same time.
-
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SPLIT_KEYBOARD = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-CUSTOM_MATRIX = yes
diff --git a/keyboards/divergetm2/config.h b/keyboards/divergetm2/config.h
new file mode 100644
index 000000000..cbeeff9aa
--- /dev/null
+++ b/keyboards/divergetm2/config.h
@@ -0,0 +1,82 @@
+/* Copyright 2018 Christon DeWan (xton)
+ * Copyright 2017 IslandMan93
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 0x1256
+#define DEVICE_VER 0x0001
+#define MANUFACTURER UniKeyboard
+#define PRODUCT diverge tm2
+#define DESCRIPTION Split 46 key keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION ROW2COL
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* 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
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
diff --git a/keyboards/divergetm2/divergetm2.c b/keyboards/divergetm2/divergetm2.c
new file mode 100644
index 000000000..61ea45416
--- /dev/null
+++ b/keyboards/divergetm2/divergetm2.c
@@ -0,0 +1,17 @@
+/* Copyright 2018 Christon DeWan (xton)
+ * Copyright 2017 IslandMan93
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "divergetm2.h"
diff --git a/keyboards/divergetm2/divergetm2.h b/keyboards/divergetm2/divergetm2.h
new file mode 100644
index 000000000..50144b1d2
--- /dev/null
+++ b/keyboards/divergetm2/divergetm2.h
@@ -0,0 +1,74 @@
+/* Copyright 2018 Christon DeWan (xton)
+ * Copyright 2017 IslandMan93
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+#ifndef FLIP_HALF
+// Standard Keymap
+// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, R31, R32, R33, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, KC_NO }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { R35, R34, R33, R32, R31, KC_NO } \
+ }
+#else
+// Keymap with right side flipped
+// (TRRS jack on both halves are to the right)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, R31, R32, R33, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, KC_NO }, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { KC_NO, R31, R32, R33, R34, R35 } \
+ }
+#endif
+
+#define LAYOUT_ortho_4x12_2x2u LAYOUT
diff --git a/keyboards/divergetm2/keymaps/default/config.h b/keyboards/divergetm2/keymaps/default/config.h
new file mode 100644
index 000000000..ccd00621f
--- /dev/null
+++ b/keyboards/divergetm2/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/* Copyright 2018 Christon DeWan (xton)
+ * Copyright 2017 IslandMan93
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
+#define MASTER_RIGHT
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 150
diff --git a/keyboards/divergetm2/keymaps/default/keymap.c b/keyboards/divergetm2/keymaps/default/keymap.c
new file mode 100644
index 000000000..068705970
--- /dev/null
+++ b/keyboards/divergetm2/keymaps/default/keymap.c
@@ -0,0 +1,200 @@
+/* Copyright 2018 Christon DeWan (xton)
+ * Copyright 2017 IslandMan93
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK
+};
+
+
+
+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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Ctrl | Alt | GUI | Lower | Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_ortho_4x12_2x2u( \
+ 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 , \
+ RESET, KC_LCTL, KC_LALT, KC_LGUI, LT(_LOWER, KC_SPC), LT(_RAISE,KC_SPC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Ctrl | Alt | GUI | Lower | Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_4x12_2x2u( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ KC_NO, KC_LCTL, KC_LALT, KC_LGUI, LT(_LOWER, KC_SPC), LT(_RAISE,KC_SPC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Ctrl | Alt | GUI | Lower | Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_ortho_4x12_2x2u( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ KC_NO, KC_LCTL, KC_LALT, KC_LGUI, LT(_LOWER, KC_SPC), LT(_RAISE,KC_SPC), 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 | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12_2x2u( \
+ 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, \
+ BL_STEP, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
+ _______, _______, _______, _______, _______, MO(_RAISE), KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12_2x2u( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
+ _______, _______, _______, _______, MO(_LOWER), _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12_2x2u( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+#endif
+
+#define SPACE_WAIT 100
+uint16_t rl_start_time = 0;
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if(rl_start_time && record->event.pressed) rl_start_time = 0;
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ set_single_persistent_default_layer(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ set_single_persistent_default_layer(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ set_single_persistent_default_layer(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
+}
diff --git a/keyboards/divergetm2/keymaps/default/readme.md b/keyboards/divergetm2/keymaps/default/readme.md
new file mode 100644
index 000000000..dceb4f8a9
--- /dev/null
+++ b/keyboards/divergetm2/keymaps/default/readme.md
@@ -0,0 +1,5 @@
+# A default-ish keymap for diverge tm2
+
+Actually it's a Planck layout, but I needed something for the default. :-D
+
+The 2u spacebars are space when tapped, raise/lower when held.
diff --git a/keyboards/divergetm2/keymaps/default/rules.mk b/keyboards/divergetm2/keymaps/default/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/divergetm2/keymaps/default/rules.mk
diff --git a/keyboards/divergetm2/keymaps/xtonhasvim/config.h b/keyboards/divergetm2/keymaps/xtonhasvim/config.h
new file mode 100644
index 000000000..4ba4a5716
--- /dev/null
+++ b/keyboards/divergetm2/keymaps/xtonhasvim/config.h
@@ -0,0 +1,23 @@
+#pragma once
+
+// help for fast typist+dual function keys?
+#define PERMISSIVE_HOLD
+// Let me type `ls -l` more quickly.
+#define TAPPING_FORCE_HOLD
+
+// where is the cord plugged in?
+#define MASTER_RIGHT
+
+/* speed up mousekeys a bit */
+#define MOUSEKEY_DELAY 50
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 8
+#define MOUSEKEY_TIME_TO_MAX 30
+#define MOUSEKEY_WHEEL_MAX_SPEED 8
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
+
+// because I'm lazy and didn't case out the rgb support
+#define RGBLED_NUM 2
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_LEVELS 3
diff --git a/keyboards/divergetm2/keymaps/xtonhasvim/keymap.c b/keyboards/divergetm2/keymaps/xtonhasvim/keymap.c
new file mode 100644
index 000000000..9d5135baa
--- /dev/null
+++ b/keyboards/divergetm2/keymaps/xtonhasvim/keymap.c
@@ -0,0 +1,155 @@
+ /* Copyright 2018 Christon DeWan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "xtonhasvim.h"
+
+/************************************
+ * states
+ ************************************/
+
+enum layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _MOVE,
+ _MOUSE,
+ _CMD
+};
+
+extern uint8_t vim_cmd_layer(void) { return _CMD; }
+
+enum keymap_keycodes {
+ RAISE = VIM_SAFE_RANGE,
+ LOWER
+};
+
+/************************************
+ * keymaps!
+ ************************************/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Ctrl*| A | S | D | F | G | H | J | K | L | ;* | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | chkwm| | Alt | GUI | Lower* | Raise* | SPC | GUI | | Vim |
+ * `-----------------------------------------------------------------------------------'
+ *
+ * - Ctrl acts as Esc when tapped.
+ * - Holding ; switches to movement layer.
+ * - Tapping raise or lower produces space.
+ */
+[_QWERTY] = LAYOUT_ortho_4x12_2x2u( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,KC_SCLN), KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT) , \
+ LSFT(KC_LALT), MO(_MOVE), KC_LALT, KC_LGUI, LT(_LOWER, KC_SPC), LT(_RAISE, KC_SPC), KC_RGUI, KC_RALT, MO(_MOVE), VIM_START \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Next | Vol- | Vol+ | Play |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Bail | | | | Raise | | | Bail | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12_2x2u( \
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSPC, \
+ KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, X_____X, X_____X, X_____X, X_____X, FIREY_RETURN, \
+ RESET, TO(_QWERTY), _______, _______, _______, MO(_RAISE), _______, _______, TO(_QWERTY), X_____X \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Next | Vol- | Vol+ | Play |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Bail | | | Lower | | | | Bail | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12_2x2u( \
+ KC_GRV, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_DEL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, \
+ _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, FIREY_RETURN, \
+ X_____X, TO(_QWERTY), _______, _______, MO(_LOWER), _______, _______, _______, TO(_QWERTY), RESET \
+),
+
+
+/* Adjust (Lower + Raise)
+ * ,-------------------------------------------------------------------------------------.
+ * |BL Raise| | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------+------+------+------+------+------|
+ * |BL Lower| | | | | | | | | | | |
+ * |--------+------+------+------+------+------|------+------+------+------+------+------|
+ * |BL STEP | | | | | | | Next | Vol- | Vol+ | Play | |
+ * |--------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Backlite| Mouse| | | | | | | Bail | |
+ * `-------------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12_2x2u( \
+ BL_INC, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, \
+ BL_DEC, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, \
+ BL_STEP, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, X_____X, \
+ BL_TOGG, TO(_MOUSE), _______, _______, _______, _______, _______, _______, TO(_QWERTY), X_____X \
+),
+
+
+/* movement layer (hold semicolon) */
+[_MOVE] = LAYOUT_ortho_4x12_2x2u( \
+ TO(_QWERTY), X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X, \
+ _______, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, X_____X, \
+ _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, X_____X \
+),
+
+/* mouse layer
+ */
+[_MOUSE] = LAYOUT_ortho_4x12_2x2u( \
+ TO(_QWERTY), X_____X, X_____X, KC_MS_UP, X_____X, X_____X, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, X_____X, X_____X , \
+ _______, X_____X, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, X_____X, X_____X, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, X_____X, X_____X, \
+ _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______, \
+ _______, TO(_QWERTY), _______, _______, _______, _______, _______, _______, TO(_QWERTY), X_____X \
+),
+
+/* vim command layer.
+ */
+[_CMD] = LAYOUT_ortho_4x12_2x2u( \
+ X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X, \
+ VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X, \
+ VIM_SHIFT, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT, \
+ _______, TO(_QWERTY), _______, _______, X_____X, X_____X, _______, _______, TO(_QWERTY), X_____X \
+)
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
+}
diff --git a/keyboards/divergetm2/keymaps/xtonhasvim/readme.md b/keyboards/divergetm2/keymaps/xtonhasvim/readme.md
new file mode 100644
index 000000000..9ff4ce1f1
--- /dev/null
+++ b/keyboards/divergetm2/keymaps/xtonhasvim/readme.md
@@ -0,0 +1,9 @@
+# Xton has a tiny keyboard! With Vim!
+
+Based on the standard Planck layout with a few changes:
+
+* Escape moved to dual-function with control.
+* Dedicated movement and mouse layers.
+* Top and middle row swapped in `_RAISE` and `_LOWER` because I never use F-keys.
+* Vim layers! See `users/xtonhasvim`.
+
diff --git a/keyboards/divergetm2/keymaps/xtonhasvim/rules.mk b/keyboards/divergetm2/keymaps/xtonhasvim/rules.mk
new file mode 100644
index 000000000..ede4e02b6
--- /dev/null
+++ b/keyboards/divergetm2/keymaps/xtonhasvim/rules.mk
@@ -0,0 +1,3 @@
+MOUSEKEY_ENABLE = yes
+# BACKLIGHT_ENABLE = yes
+AUDIO_ENABLE = no
diff --git a/keyboards/divergetm2/readme.md b/keyboards/divergetm2/readme.md
new file mode 100644
index 000000000..893b82cb5
--- /dev/null
+++ b/keyboards/divergetm2/readme.md
@@ -0,0 +1,21 @@
+# diverge tm2
+
+A 4x6x2 split ortholinear keyboard with 2u spacebars like the Levinson (similar to Let's Split). Made by [Unikeyboard](https://unikeyboard.io).
+
+Keyboard Maintainer: [IslandMan93](https://github.com/islandman93) and [xton](https://github.com/xton)
+Hardware Supported: Pro Micro
+Hardware Availability: [Diverge TM2](https://unikeyboard.io/product/diverge-tm/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make divergetm2:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+# Flashing the first time
+
+Disassemble the case so you have access to each Pro Micro. Flash each half with QMK Toolbox by connecting the USB cable and shorting RST and GND. After that, just use the soft reset key on your respective layout to reflash both halves.
+
+# Reflashing Animus
+
+Reflashing the stock firmware is pretty easy. Just follow the same steps in the [original guide](https://imgur.com/a/8UapN). You will have to manually reset the Pro Micro (by shorting the GND and RST) during the upload step. Then reapply your keymap through Arbites.
diff --git a/keyboards/divergetm2/rules.mk b/keyboards/divergetm2/rules.mk
new file mode 100644
index 000000000..084a3bf63
--- /dev/null
+++ b/keyboards/divergetm2/rules.mk
@@ -0,0 +1,75 @@
+
+
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = 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.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+SPLIT_KEYBOARD = yes
+
+# must specify this to enable soft-reset
+BOOTLOADER = caterina
diff --git a/keyboards/do60/do60.h b/keyboards/do60/do60.h
index 30615d1d3..8ee902204 100644
--- a/keyboards/do60/do60.h
+++ b/keyboards/do60/do60.h
@@ -39,6 +39,20 @@ inline void setdefaultrgb(void){ rgblight_sethsv(100,100,100); }
{ K40, K41, K42, KC_NO,KC_NO,K45, K46, K47, KC_NO,KC_NO,K4A, K4B, K4C, K4D, K4E } \
}
+#define LAYOUT_60_hhkb( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2E, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
+ K41, K42, K46, K4A, K4B \
+) { \
+ { 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, KC_NO, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, KC_NO, K2E }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \
+ { KC_NO, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, KC_NO, KC_NO, KC_NO } \
+}
+
#define LAYOUT_60_ansi( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, \
diff --git a/keyboards/do60/info.json b/keyboards/do60/info.json
index 6acfa08ef..4c98bd851 100644
--- a/keyboards/do60/info.json
+++ b/keyboards/do60/info.json
@@ -9,6 +9,10 @@
"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":"\u2190", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"x":12, "y":3}, {"label":"\u2191", "x":13, "y":3}, {"label":"Del", "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":"3u(Space)", "x":3.75, "y":4, "w":2.75}, {"x":6.5, "y":4}, {"label":"3u(Space)", "x":7.5, "y":4, "w":2.25}, {"label":"Alt", "x":9.75, "y":4, "w":1.25}, {"label":"win", "x":11, "y":4}, {"label":"\u2190", "x":12, "y":4}, {"label":"\u2193", "x":13, "y":4}, {"label":"\u2192", "x":14, "y":4}]
},
+ "LAYOUT_60_hhkb": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
+ },
+
"LAYOUT_chiwi60_default": {
"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":"\u2190", "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, "w":1.75}, {"label":"\u2191", "x":13, "y":3}, {"label":"Del", "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":"3u(Space)", "x":3.75, "y":4, "w":3}, {"label":"3u(Space)", "x":6.75, "y":4, "w":3}, {"label":"Alt", "x":9.75, "y":4, "w":1.25}, {"label":"win", "x":11, "y":4}, {"label":"\u2190", "x":12, "y":4}, {"label":"\u2193", "x":13, "y":4}, {"label":"\u2192", "x":14, "y":4}]
},
diff --git a/keyboards/do60/keymaps/default/keymap.c b/keyboards/do60/keymaps/default/keymap.c
index 1a8b98a46..7c66f0ac0 100644
--- a/keyboards/do60/keymaps/default/keymap.c
+++ b/keyboards/do60/keymaps/default/keymap.c
@@ -15,7 +15,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[1] = LAYOUT_all(
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, \
KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, BL_TOGG,BL_ON, BL_INC, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, \
- KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SMOD, BL_STEP,BL_OFF, BL_DEC, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
+ KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD, BL_STEP,BL_OFF, BL_DEC, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP, KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_RSFT, KC_NO , KC_PGUP, KC_INS, \
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC,KC_SPC, KC_DEL, KC_RGUI, F(0), KC_HOME, KC_PGDOWN,KC_END),
diff --git a/keyboards/do60/keymaps/test/keymap.c b/keyboards/do60/keymaps/test/keymap.c
index 04b5f44bb..6bac713fd 100644
--- a/keyboards/do60/keymaps/test/keymap.c
+++ b/keyboards/do60/keymaps/test/keymap.c
@@ -15,7 +15,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[1] = LAYOUT_all(
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, \
KC_NO, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, KC_HOME,KC_CALC,KC_NO, KC_INS, KC_NO, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL, \
- KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SMOD, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
+ KC_NO, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD, KC_END, KC_PGDN,KC_NO, KC_NO, KC_NO, KC_HOME, KC_PGUP, KC_NO, KC_ENT, \
KC_LSFT, KC_NO, KC_NO, KC_APP, BL_STEP, KC_NO, KC_NO, KC_VOLD,KC_VOLU,KC_MUTE, KC_END, KC_RSFT, KC_NO , KC_PGUP, KC_INS, \
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC,KC_SPC, KC_DEL, KC_RGUI, F(0), KC_HOME, KC_PGDOWN,KC_END),
diff --git a/keyboards/do60/readme.md b/keyboards/do60/readme.md
index fce7c922c..c4122361f 100644
--- a/keyboards/do60/readme.md
+++ b/keyboards/do60/readme.md
@@ -1,11 +1,14 @@
-# QMK Firmware for DoyuStudio DO60 PCB
+# DoyuStudio DO60 PCB
+60% board supporting in-switch LEDs (two-pin, single colour)
+Build-in WS2182 RGB LED for underglow lighting.
-## Quantum MK Firmware
-For the full Quantum feature list, see [the parent readme.md](/readme.md).
+Keyboard Maintainer: QMK Community
+Hardware Supported: Doyu Studios 60% PCB
+Hardware Availability: [Doyustudio](https://shopkey.doyustudio.com/001pcb60)
-Board supports in-switch LEDs (two-pin, single colour)
-Build-in WS2182 RGB LED for underglow lighting.
+Make example for this keyboard (after setting up your build environment):
+
+ make do60:default
-## Build
-To build the default keymap, simply run `make do60:default`. \ No newline at end of file
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file
diff --git a/keyboards/do60/rules.mk b/keyboards/do60/rules.mk
index e7314caf9..7370a6262 100644
--- a/keyboards/do60/rules.mk
+++ b/keyboards/do60/rules.mk
@@ -59,8 +59,8 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
MIDI_ENABLE = no # MIDI controls
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
UNICODE_ENABLE = no # Unicode
-LAYOUTS = 60_ansi 60_ansi_split_bs_rshift \ No newline at end of file
+LAYOUTS = 60_ansi 60_hhkb 60_ansi_split_bs_rshift \ No newline at end of file
diff --git a/keyboards/duck/eagle_viper/info.json b/keyboards/duck/eagle_viper/info.json
new file mode 100644
index 000000000..f20babdbc
--- /dev/null
+++ b/keyboards/duck/eagle_viper/info.json
@@ -0,0 +1,19 @@
+{
+ "keyboard_name": "Eagle/Viper",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "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":"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#", "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\\", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"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.25}, {"label":"GUI", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_eagle": {
+ "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":"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.25}, {"label":"GUI", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_eagle_splits": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"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.25}, {"label":"GUI", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_viper": {
+ "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":"GUI", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"GUI", "x":12.5, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/duck/eagle_viper/readme.md b/keyboards/duck/eagle_viper/readme.md
new file mode 100644
index 000000000..ded0fa72e
--- /dev/null
+++ b/keyboards/duck/eagle_viper/readme.md
@@ -0,0 +1,12 @@
+# Duck Eagle/Viper
+
+Non official firmware for custom Korean keyboard with 60% key layout made by Duck.
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+Newest version is the [Eagle/Viper V2](http://duck0113.tistory.com/127)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make duck/eagle_viper/v2:default
+
diff --git a/keyboards/duck/eagle_viper/rules.mk b/keyboards/duck/eagle_viper/rules.mk
new file mode 100644
index 000000000..263767d06
--- /dev/null
+++ b/keyboards/duck/eagle_viper/rules.mk
@@ -0,0 +1,3 @@
+DEFAULT_FOLDER = duck/eagle_viper/v2
+
+LAYOUTS = 60_ansi \ No newline at end of file
diff --git a/keyboards/eagle_viper/v2/config.h b/keyboards/duck/eagle_viper/v2/config.h
index f04b4a0fd..f04b4a0fd 100644
--- a/keyboards/eagle_viper/v2/config.h
+++ b/keyboards/duck/eagle_viper/v2/config.h
diff --git a/keyboards/eagle_viper/v2/indicator_leds.c b/keyboards/duck/eagle_viper/v2/indicator_leds.c
index 03a93197d..03a93197d 100644
--- a/keyboards/eagle_viper/v2/indicator_leds.c
+++ b/keyboards/duck/eagle_viper/v2/indicator_leds.c
diff --git a/keyboards/eagle_viper/v2/indicator_leds.h b/keyboards/duck/eagle_viper/v2/indicator_leds.h
index c174fa404..c174fa404 100644
--- a/keyboards/eagle_viper/v2/indicator_leds.h
+++ b/keyboards/duck/eagle_viper/v2/indicator_leds.h
diff --git a/keyboards/duck/eagle_viper/v2/keymaps/default/keymap.c b/keyboards/duck/eagle_viper/v2/keymaps/default/keymap.c
new file mode 100644
index 000000000..332db66e6
--- /dev/null
+++ b/keyboards/duck/eagle_viper/v2/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* layer 0: qwerty */
+ [0] = LAYOUT_all(\
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, XXXXXXX, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
+ KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, XXXXXXX, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RGUI, KC_RCTL \
+ ),
+
+ [1] = LAYOUT_all(\
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ return MACRO_NONE;
+};
diff --git a/keyboards/eagle_viper/v2/keymaps/default/readme.md b/keyboards/duck/eagle_viper/v2/keymaps/default/readme.md
index 834ff7cd3..834ff7cd3 100644
--- a/keyboards/eagle_viper/v2/keymaps/default/readme.md
+++ b/keyboards/duck/eagle_viper/v2/keymaps/default/readme.md
diff --git a/keyboards/duck/eagle_viper/v2/keymaps/profanum429/keymap.c b/keyboards/duck/eagle_viper/v2/keymaps/profanum429/keymap.c
new file mode 100644
index 000000000..a0163ad6a
--- /dev/null
+++ b/keyboards/duck/eagle_viper/v2/keymaps/profanum429/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* layer 0: qwerty */
+ [0] = LAYOUT_viper( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), \
+ KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI \
+ ),
+
+ [1] = LAYOUT_viper( \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS, RGB_TOG, RGB_MOD, RGB_VAI, RESET, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_BSPC, \
+ _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_ENT, \
+ _______, _______, _______, _______, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______, \
+ _______, _______, _______, _______, _______ \
+ ),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ return MACRO_NONE;
+};
diff --git a/keyboards/eagle_viper/v2/keymaps/profanum429/readme.md b/keyboards/duck/eagle_viper/v2/keymaps/profanum429/readme.md
index 0f993559e..0f993559e 100644
--- a/keyboards/eagle_viper/v2/keymaps/profanum429/readme.md
+++ b/keyboards/duck/eagle_viper/v2/keymaps/profanum429/readme.md
diff --git a/keyboards/eagle_viper/v2/matrix.c b/keyboards/duck/eagle_viper/v2/matrix.c
index 7003a7ae0..7003a7ae0 100644
--- a/keyboards/eagle_viper/v2/matrix.c
+++ b/keyboards/duck/eagle_viper/v2/matrix.c
diff --git a/keyboards/eagle_viper/v2/readme.md b/keyboards/duck/eagle_viper/v2/readme.md
index b613b63b9..b613b63b9 100644
--- a/keyboards/eagle_viper/v2/readme.md
+++ b/keyboards/duck/eagle_viper/v2/readme.md
diff --git a/keyboards/eagle_viper/v2/rules.mk b/keyboards/duck/eagle_viper/v2/rules.mk
index 64d839fcb..64d839fcb 100644
--- a/keyboards/eagle_viper/v2/rules.mk
+++ b/keyboards/duck/eagle_viper/v2/rules.mk
diff --git a/keyboards/eagle_viper/v2/v2.c b/keyboards/duck/eagle_viper/v2/v2.c
index a60acb978..a60acb978 100644
--- a/keyboards/eagle_viper/v2/v2.c
+++ b/keyboards/duck/eagle_viper/v2/v2.c
diff --git a/keyboards/duck/eagle_viper/v2/v2.h b/keyboards/duck/eagle_viper/v2/v2.h
new file mode 100644
index 000000000..d149471ba
--- /dev/null
+++ b/keyboards/duck/eagle_viper/v2/v2.h
@@ -0,0 +1,81 @@
+/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef V2_H
+#define V2_H
+
+#include "quantum.h"
+
+#define ___ KC_NO
+
+#define LAYOUT_all( \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2O, \
+ K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1O, \
+ K0A, K0B, K0C, K0I, K0K, K0M, K0N, K0O \
+) { \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, ___, K3O }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, ___, K2O }, \
+ { K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, ___, K1M, K1N, K1O }, \
+ { K0A, K0B, K0C, ___, ___, ___, ___, ___, K0I, ___, K0K, ___, K0M, K0N, K0O } \
+}
+
+#define LAYOUT_60_ansi( \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4O, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2O, \
+ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, \
+ K0A, K0B, K0C, K0I, K0K, K0M, K0N, K0O \
+) { \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, ___, K4O }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, ___, K3O }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, ___, ___, K2O }, \
+ { K1A, ___, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, ___, K1M, K1N, ___ }, \
+ { K0A, K0B, K0C, ___, ___, ___, ___, ___, K0I, ___, K0K, ___, K0M, K0N, K0O } \
+}
+
+#define LAYOUT_eagle_splits( \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2O, \
+ K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1O, \
+ K0A, K0B, K0C, K0I, K0K, K0M, K0N, K0O \
+) { \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, ___, K3O }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, ___, ___, K2O }, \
+ { K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, ___, K1M, K1N, K1O }, \
+ { K0A, K0B, K0C, ___, ___, ___, ___, ___, K0I, ___, K0K, ___, K0M, K0N, K0O } \
+}
+
+#define LAYOUT_viper( \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2O, \
+ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1O, \
+ K0B, K0C, K0I, K0M, K0N \
+) { \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, ___, K3O }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, ___, ___, K2O }, \
+ { K1A, ___, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, ___, K1M, K1N, K1O }, \
+ { ___, K0B, K0C, ___, ___, ___, ___, ___, K0I, ___, ___, ___, K0M, K0N, ___ } \
+}
+
+#define LAYOUT_eagle LAYOUT_60_ansi
+
+#endif
diff --git a/keyboards/duck/jetfire/backlight_led.c b/keyboards/duck/jetfire/backlight_led.c
new file mode 100644
index 000000000..7e9dca6e9
--- /dev/null
+++ b/keyboards/duck/jetfire/backlight_led.c
@@ -0,0 +1,129 @@
+/*
+Copyright 2016 Ralf Schmitt <ralf@bunkertor.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 <avr/interrupt.h>
+#include <avr/io.h>
+#include <stdbool.h>
+#include <util/delay.h>
+#include <stdint.h>
+#include "backlight_led.h"
+#include "quantum.h"
+// #include "led.h"
+
+
+#define T1H 900
+#define T1L 600
+#define T0H 400
+#define T0L 900
+#define RES 6000
+
+#define NS_PER_SEC (1000000000L)
+#define CYCLES_PER_SEC (F_CPU)
+#define NS_PER_CYCLE (NS_PER_SEC / CYCLES_PER_SEC)
+#define NS_TO_CYCLES(n) ((n) / NS_PER_CYCLE)
+
+void send_bit_d4(bool bitVal)
+{
+ if(bitVal) {
+ asm volatile (
+ "sbi %[port], %[bit] \n\t"
+ ".rept %[onCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ "cbi %[port], %[bit] \n\t"
+ ".rept %[offCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ ::
+ [port] "I" (_SFR_IO_ADDR(PORTD)),
+ [bit] "I" (4),
+ [onCycles] "I" (NS_TO_CYCLES(T1H) - 2),
+ [offCycles] "I" (NS_TO_CYCLES(T1L) - 2));
+ } else {
+ asm volatile (
+ "sbi %[port], %[bit] \n\t"
+ ".rept %[onCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ "cbi %[port], %[bit] \n\t"
+ ".rept %[offCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ ::
+ [port] "I" (_SFR_IO_ADDR(PORTD)),
+ [bit] "I" (4),
+ [onCycles] "I" (NS_TO_CYCLES(T0H) - 2),
+ [offCycles] "I" (NS_TO_CYCLES(T0L) - 2));
+ }
+}
+
+void send_bit_d6(bool bitVal)
+{
+ if(bitVal) {
+ asm volatile (
+ "sbi %[port], %[bit] \n\t"
+ ".rept %[onCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ "cbi %[port], %[bit] \n\t"
+ ".rept %[offCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ ::
+ [port] "I" (_SFR_IO_ADDR(PORTD)),
+ [bit] "I" (6),
+ [onCycles] "I" (NS_TO_CYCLES(T1H) - 2),
+ [offCycles] "I" (NS_TO_CYCLES(T1L) - 2));
+ } else {
+ asm volatile (
+ "sbi %[port], %[bit] \n\t"
+ ".rept %[onCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ "cbi %[port], %[bit] \n\t"
+ ".rept %[offCycles] \n\t"
+ "nop \n\t"
+ ".endr \n\t"
+ ::
+ [port] "I" (_SFR_IO_ADDR(PORTD)),
+ [bit] "I" (6),
+ [onCycles] "I" (NS_TO_CYCLES(T0H) - 2),
+ [offCycles] "I" (NS_TO_CYCLES(T0L) - 2));
+ }
+}
+
+void show(void)
+{
+ _delay_us((RES / 1000UL) + 1);
+}
+
+void send_value(uint8_t byte, enum Device device)
+{
+ for(uint8_t b = 0; b < 8; b++) {
+ if(device == Device_STATELED) {
+ send_bit_d4(byte & 0b10000000);
+ }
+ if(device == Device_PCBRGB) {
+ send_bit_d6(byte & 0b10000000);
+ }
+ byte <<= 1;
+ }
+}
+
+void send_color(uint8_t r, uint8_t g, uint8_t b, enum Device device)
+{
+ send_value(g, device);
+ send_value(r, device);
+ send_value(b, device);
+}
diff --git a/keyboards/duck/jetfire/backlight_led.h b/keyboards/duck/jetfire/backlight_led.h
new file mode 100644
index 000000000..36d8d9aa9
--- /dev/null
+++ b/keyboards/duck/jetfire/backlight_led.h
@@ -0,0 +1,18 @@
+#ifndef BACKLIGHT_LED_H
+#define BACKLIGHT_LED_H
+
+enum Device {
+ Device_PCBRGB,
+ Device_STATELED
+};
+
+void backlight_init_ports(void);
+void backlight_set_state(bool cfg[7]);
+void backlight_update_state(void);
+void backlight_toggle_rgb(bool enabled);
+void backlight_set_rgb(uint8_t cfg[17][3]);
+void backlight_set(uint8_t level);
+void send_color(uint8_t r, uint8_t g, uint8_t b, enum Device device);
+void show(void);
+
+#endif
diff --git a/keyboards/duck/jetfire/config.h b/keyboards/duck/jetfire/config.h
new file mode 100644
index 000000000..80b531fd5
--- /dev/null
+++ b/keyboards/duck/jetfire/config.h
@@ -0,0 +1,200 @@
+/*
+Copyright 2018 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6050
+#define DEVICE_VER 0x0104
+#define MANUFACTURER Duck
+#define PRODUCT Jetfire
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 20
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+
+#define BACKLIGHT_LEVELS 1
+
+#define RGB_DI_PIN D6
+// #ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 23
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/duck/jetfire/info.json b/keyboards/duck/jetfire/info.json
new file mode 100644
index 000000000..ec88a23ac
--- /dev/null
+++ b/keyboards/duck/jetfire/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "Jetfire",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 20.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "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}, {"x":15.25, "y":0}, {"label":"PrtSc", "x":16.5, "y":0}, {"label":"Scroll Lock", "x":17.5, "y":0}, {"label":"Pause", "x":18.5, "y":0}, {"x":19.5, "y":0}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"@", "x":2, "y":1.25}, {"label":"#", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"&", "x":7, "y":1.25}, {"label":"*", "x":8, "y":1.25}, {"label":"(", "x":9, "y":1.25}, {"label":")", "x":10, "y":1.25}, {"label":"_", "x":11, "y":1.25}, {"label":"+", "x":12, "y":1.25}, {"label":"Back Space", "x":13, "y":1.25}, {"x":14, "y":1.25}, {"label":"Insert", "x":15.25, "y":1.25}, {"label":"Num Lock", "x":16.5, "y":1.25}, {"label":"/", "x":17.5, "y":1.25}, {"label":"*", "x":18.5, "y":1.25}, {"label":"-", "x":19.5, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Y", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"{", "x":11.5, "y":2.25}, {"label":"}", "x":12.5, "y":2.25}, {"label":"|", "x":13.5, "y":2.25, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.25}, {"label":"7", "x":16.5, "y":2.25}, {"label":"8", "x":17.5, "y":2.25}, {"label":"9", "x":18.5, "y":2.25}, {"label":"+", "x":19.5, "y":2.25}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":":", "x":10.75, "y":3.25}, {"label":"\"", "x":11.75, "y":3.25}, {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, {"label":"4", "x":16.5, "y":3.25}, {"label":"5", "x":17.5, "y":3.25}, {"label":"6", "x":18.5, "y":3.25}, {"x":19.5, "y":3.25}, {"label":"Shift", "x":0, "y":4.25, "w":1.25}, {"label":"ISO \\", "x":1.25, "y":4.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":"<", "x":9.25, "y":4.25}, {"label":">", "x":10.25, "y":4.25}, {"label":"?", "x":11.25, "y":4.25}, {"label":"Shift", "x":12.25, "y":4.25, "w":1.75}, {"x":14, "y":4.25}, {"label":"\u2191", "x":15.25, "y":4.5}, {"label":"1", "x":16.5, "y":4.25}, {"label":"2", "x":17.5, "y":4.25}, {"label":"3", "x":18.5, "y":4.25}, {"label":"Enter", "x":19.5, "y":4.25}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.5}, {"label":"Win", "x":1.5, "y":5.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.5}, {"x":4, "y":5.25, "w":6.25}, {"label":"Alt", "x":10.25, "y":5.25, "w":1.25}, {"x":11.5, "y":5.25, "w":1.25}, {"label":"Ctrl", "x":12.75, "y":5.25, "w":1.25}, {"label":"\u2190", "x":14.25, "y":5.5}, {"label":"\u2193", "x":15.25, "y":5.5}, {"label":"\u2192", "x":16.25, "y":5.5}, {"label":"0", "x":17.5, "y":5.25}, {"label":".", "x":18.5, "y":5.25}, {"x":19.5, "y":5.25}]
+ },
+
+ "LAYOUT": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"x":15.25, "y":0}, {"label":"PrtSc", "x":16.5, "y":0}, {"label":"Scroll Lock", "x":17.5, "y":0}, {"label":"Pause", "x":18.5, "y":0}, {"x":19.5, "y":0}, {"label":"~", "x":0, "y":1.25}, {"label":"!", "x":1, "y":1.25}, {"label":"@", "x":2, "y":1.25}, {"label":"#", "x":3, "y":1.25}, {"label":"$", "x":4, "y":1.25}, {"label":"%", "x":5, "y":1.25}, {"label":"^", "x":6, "y":1.25}, {"label":"&", "x":7, "y":1.25}, {"label":"*", "x":8, "y":1.25}, {"label":"(", "x":9, "y":1.25}, {"label":")", "x":10, "y":1.25}, {"label":"_", "x":11, "y":1.25}, {"label":"+", "x":12, "y":1.25}, {"label":"Backspace", "x":13, "y":1.25, "w":2}, {"label":"Insert", "x":15.25, "y":1.25}, {"label":"Num Lock", "x":16.5, "y":1.25}, {"label":"/", "x":17.5, "y":1.25}, {"label":"*", "x":18.5, "y":1.25}, {"label":"-", "x":19.5, "y":1.25}, {"label":"Tab", "x":0, "y":2.25, "w":1.5}, {"label":"Q", "x":1.5, "y":2.25}, {"label":"W", "x":2.5, "y":2.25}, {"label":"E", "x":3.5, "y":2.25}, {"label":"R", "x":4.5, "y":2.25}, {"label":"T", "x":5.5, "y":2.25}, {"label":"Y", "x":6.5, "y":2.25}, {"label":"U", "x":7.5, "y":2.25}, {"label":"I", "x":8.5, "y":2.25}, {"label":"O", "x":9.5, "y":2.25}, {"label":"P", "x":10.5, "y":2.25}, {"label":"{", "x":11.5, "y":2.25}, {"label":"}", "x":12.5, "y":2.25}, {"label":"|", "x":13.5, "y":2.25, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.25}, {"label":"7", "x":16.5, "y":2.25}, {"label":"8", "x":17.5, "y":2.25}, {"label":"9", "x":18.5, "y":2.25}, {"label":"+", "x":19.5, "y":2.25, "h":2}, {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75}, {"label":"A", "x":1.75, "y":3.25}, {"label":"S", "x":2.75, "y":3.25}, {"label":"D", "x":3.75, "y":3.25}, {"label":"F", "x":4.75, "y":3.25}, {"label":"G", "x":5.75, "y":3.25}, {"label":"H", "x":6.75, "y":3.25}, {"label":"J", "x":7.75, "y":3.25}, {"label":"K", "x":8.75, "y":3.25}, {"label":"L", "x":9.75, "y":3.25}, {"label":":", "x":10.75, "y":3.25}, {"label":"\"", "x":11.75, "y":3.25}, {"label":"Enter", "x":12.75, "y":3.25, "w":2.25}, {"label":"4", "x":16.5, "y":3.25}, {"label":"5", "x":17.5, "y":3.25}, {"label":"6", "x":18.5, "y":3.25}, {"label":"Shift", "x":0, "y":4.25, "w":2.25}, {"label":"Z", "x":2.25, "y":4.25}, {"label":"X", "x":3.25, "y":4.25}, {"label":"C", "x":4.25, "y":4.25}, {"label":"V", "x":5.25, "y":4.25}, {"label":"B", "x":6.25, "y":4.25}, {"label":"N", "x":7.25, "y":4.25}, {"label":"M", "x":8.25, "y":4.25}, {"label":"<", "x":9.25, "y":4.25}, {"label":">", "x":10.25, "y":4.25}, {"label":"?", "x":11.25, "y":4.25}, {"label":"Shift", "x":12.25, "y":4.25, "w":2.75}, {"label":"\u2191", "x":15.25, "y":4.5}, {"label":"1", "x":16.5, "y":4.25}, {"label":"2", "x":17.5, "y":4.25}, {"label":"3", "x":18.5, "y":4.25}, {"label":"Enter", "x":19.5, "y":4.25, "h":2}, {"label":"Ctrl", "x":0, "y":5.25, "w":1.5}, {"label":"Win", "x":1.5, "y":5.25}, {"label":"Alt", "x":2.5, "y":5.25, "w":1.5}, {"x":4, "y":5.25, "w":7}, {"label":"Alt", "x":11, "y":5.25, "w":1.5}, {"label":"Ctrl", "x":12.5, "y":5.25, "w":1.5}, {"label":"\u2190", "x":14.25, "y":5.5}, {"label":"\u2193", "x":15.25, "y":5.5}, {"label":"\u2192", "x":16.25, "y":5.5}, {"label":"0", "x":17.5, "y":5.25}, {"label":".", "x":18.5, "y":5.25}]
+ }
+ }
+}
diff --git a/keyboards/duck/jetfire/jetfire.c b/keyboards/duck/jetfire/jetfire.c
new file mode 100644
index 000000000..81bdb95ba
--- /dev/null
+++ b/keyboards/duck/jetfire/jetfire.c
@@ -0,0 +1,171 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "jetfire.h"
+#include "backlight_led.h"
+
+enum backlight_level {
+ BACKLIGHT_ALPHA = 0b0000001,
+ BACKLIGHT_MOD = 0b0000010,
+ BACKLIGHT_FROW = 0b0000100,
+ BACKLIGHT_NUMBLOCK = 0b0001000,
+ BACKLIGHT_RGB = 0b0010000,
+ BACKLIGHT_SWITCH = 0b0001111
+};
+
+enum StateLed {
+ STATE_LED_SCROLL_LOCK,
+ STATE_LED_CAPS_LOCK,
+ STATE_LED_NUM_LOCK,
+ STATE_LED_LAYER_0,
+ STATE_LED_LAYER_1,
+ STATE_LED_LAYER_2,
+ STATE_LED_LAYER_3,
+ STATE_LED_LAYER_4
+};
+
+uint8_t backlight_rgb_r = 255;
+uint8_t backlight_rgb_g = 0;
+uint8_t backlight_rgb_b = 0;
+uint8_t backlight_state_led = 1<<STATE_LED_LAYER_0;
+
+
+void backlight_toggle_rgb(bool enabled)
+{
+ if(enabled) {
+ uint8_t rgb[RGBLED_NUM][3] = {
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b},
+ {backlight_rgb_r, backlight_rgb_g, backlight_rgb_b}
+ };
+ backlight_set_rgb(rgb);
+ } else {
+ uint8_t rgb[RGBLED_NUM][3] = {
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0},
+ {0, 0, 0}
+ };
+ backlight_set_rgb(rgb);
+ }
+}
+
+void backlight_set_rgb(uint8_t cfg[RGBLED_NUM][3])
+{
+ cli();
+ for(uint8_t i = 0; i < RGBLED_NUM; ++i) {
+ send_color(cfg[i][0], cfg[i][1], cfg[i][2], Device_PCBRGB);
+ }
+ sei();
+ show();
+}
+
+
+void backlight_set(uint8_t level)
+{
+ level & BACKLIGHT_ALPHA ? (PORTB |= 0b00000010) : (PORTB &= ~0b00000010);
+ level & BACKLIGHT_MOD ? (PORTB |= 0b00000100) : (PORTB &= ~0b00000100);
+ level & BACKLIGHT_FROW ? (PORTB |= 0b00001000) : (PORTB &= ~0b00001000);
+ level & BACKLIGHT_NUMBLOCK ? (PORTE |= 0b01000000) : (PORTE &= ~0b01000000);
+ backlight_toggle_rgb(level & BACKLIGHT_RGB);
+}
+
+
+
+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 backlight_update_state()
+{
+ cli();
+ send_color(backlight_state_led & (1<<STATE_LED_SCROLL_LOCK) ? 255 : 0,
+ backlight_state_led & (1<<STATE_LED_CAPS_LOCK) ? 255 : 0,
+ backlight_state_led & (1<<STATE_LED_NUM_LOCK) ? 255 : 0,
+ Device_STATELED);
+ send_color(backlight_state_led & (1<<STATE_LED_LAYER_1) ? 255 : 0,
+ backlight_state_led & (1<<STATE_LED_LAYER_2) ? 255 : 0,
+ backlight_state_led & (1<<STATE_LED_LAYER_0) ? 255 : 0,
+ Device_STATELED);
+ send_color(backlight_state_led & (1<<STATE_LED_LAYER_4) ? 255 : 0,
+ backlight_state_led & (1<<STATE_LED_LAYER_3) ? 255 : 0,
+ 0,
+ Device_STATELED);
+ sei();
+ show();
+}
+
+void led_set_kb(uint8_t usb_led)
+{
+ if(usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ backlight_state_led |= 1<<STATE_LED_CAPS_LOCK;
+ } else {
+ backlight_state_led &= ~(1<<STATE_LED_CAPS_LOCK);
+ }
+ if(usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+ backlight_state_led |= 1<<STATE_LED_SCROLL_LOCK;
+ } else {
+ backlight_state_led &= ~(1<<STATE_LED_SCROLL_LOCK);
+ }
+ if(usb_led & (1<<USB_LED_NUM_LOCK)) {
+ backlight_state_led |= 1<<STATE_LED_NUM_LOCK;
+ } else {
+ backlight_state_led &= ~(1<<STATE_LED_NUM_LOCK);
+ }
+ backlight_update_state();
+}
diff --git a/keyboards/duck/jetfire/jetfire.h b/keyboards/duck/jetfire/jetfire.h
new file mode 100644
index 000000000..9ce1406f0
--- /dev/null
+++ b/keyboards/duck/jetfire/jetfire.h
@@ -0,0 +1,60 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef JETFIRE_H
+#define JETFIRE_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguments representing the physical
+// layout of the board and position of the keys
+// The second converts the arguments into a two-dimensional array which
+// represents the switch matrix.
+
+#define LAYOUT_all( \
+ K5A, K5C, K5D, K5E, K5F, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, K5Q, K5R, K5S, K5T, \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, K4R, K4S, K4T, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, K3P, K3Q, K3R, K3S, K3T, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2O, K2Q, K2R, K2S, K2T, \
+ K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1O, K1P, K1Q, K1R, K1S, K1T, \
+ K0A, K0B, K0C, K0I, K0L, K0M, K0N, K0O, K0P, K0Q, K0R, K0S, K0T \
+) { \
+ { K5A, KC_NO, K5C, K5D, K5E, K5F, KC_NO, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, K5Q, K5R, K5S, K5T }, \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, K4P, K4Q, K4R, K4S, K4T }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, KC_NO, K3O, K3P, K3Q, K3R, K3S, K3T }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, KC_NO, K2O, KC_NO, K2Q, K2R, K2S, K2T }, \
+ { K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, KC_NO, K1M, K1N, K1O, K1P, K1Q, K1R, K1S, K1T }, \
+ { K0A, K0B, K0C, KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, K0I, KC_NO,KC_NO, K0L, K0M, K0N, K0O, K0P, K0Q, K0R, K0S, K0T } \
+}
+
+#define LAYOUT( \
+ K5A, K5C, K5D, K5E, K5F, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, K5Q, K5R, K5S, K5T, \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4O, K4P, K4Q, K4R, K4S, K4T, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, K3P, K3Q, K3R, K3S, K3T, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2O, K2Q, K2R, K2S, \
+ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1P, K1Q, K1R, K1S, K1T, \
+ K0A, K0B, K0C, K0I, K0M, K0N, K0O, K0P, K0Q, K0R, K0S \
+) { \
+ { K5A, KC_NO, K5C, K5D, K5E, K5F, KC_NO, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, K5Q, K5R, K5S, K5T }, \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, KC_NO, K4O, K4P, K4Q, K4R, K4S, K4T }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, KC_NO, K3O, K3P, K3Q, K3R, K3S, K3T }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, KC_NO, K2O, KC_NO, K2Q, K2R, K2S, KC_NO }, \
+ { K1A, KC_NO, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, KC_NO, K1M, K1N, KC_NO, K1P, K1Q, K1R, K1S, K1T }, \
+ { K0A, K0B, K0C, KC_NO,KC_NO,KC_NO,KC_NO,KC_NO, K0I, KC_NO,KC_NO,KC_NO, K0M, K0N, K0O, K0P, K0Q, K0R, K0S, KC_NO } \
+}
+
+#endif
diff --git a/keyboards/duck/jetfire/keymaps/default/config.h b/keyboards/duck/jetfire/keymaps/default/config.h
new file mode 100644
index 000000000..a3ed4f762
--- /dev/null
+++ b/keyboards/duck/jetfire/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/duck/jetfire/keymaps/default/keymap.c b/keyboards/duck/jetfire/keymaps/default/keymap.c
new file mode 100644
index 000000000..da0081a75
--- /dev/null
+++ b/keyboards/duck/jetfire/keymaps/default/keymap.c
@@ -0,0 +1,59 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // layer 0: qwerty
+ [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, RGB_MOD, KC_PSCR, KC_SLCK, KC_PAUS, KC_PGUP,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_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) {
+
+}
+
+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/duck/jetfire/keymaps/default/readme.md b/keyboards/duck/jetfire/keymaps/default/readme.md
new file mode 100644
index 000000000..8b807694b
--- /dev/null
+++ b/keyboards/duck/jetfire/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for jetfire
diff --git a/keyboards/duck/jetfire/matrix.c b/keyboards/duck/jetfire/matrix.c
new file mode 100644
index 000000000..51202aeb6
--- /dev/null
+++ b/keyboards/duck/jetfire/matrix.c
@@ -0,0 +1,277 @@
+/*
+Copyright 2016 Ralf Schmitt <ralf@bunkertor.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 <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <util/delay.h>
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+
+static uint8_t debouncing = DEBOUNCING_DELAY;
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+static uint8_t read_rows(uint8_t col);
+static void init_ports(void);
+static void unselect_cols(void);
+static void select_col(uint8_t col);
+
+__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 backlight_init_ports(void)
+{
+ DDRD |= 0b01010000;
+ PORTD &= 0b10101111;
+ DDRB |= 0b00001110;
+ PORTB &= 0b11110001;
+ DDRE |= 0b01000000;
+ PORTE &= 0b10111111;
+}
+
+void matrix_init(void)
+{
+ backlight_init_ports();
+ unselect_cols();
+ init_ports();
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+}
+
+uint8_t matrix_scan(void)
+{
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ select_col(col);
+ _delay_us(3);
+ uint8_t rows = read_rows(col);
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
+ bool curr_bit = rows & (1<<row);
+ if (prev_bit != curr_bit) {
+ matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
+ if (debouncing) {
+ dprint("bounce!: "); dprintf("%02X", debouncing); dprintln();
+ }
+ debouncing = DEBOUNCING_DELAY;
+ }
+ }
+ unselect_cols();
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+
+ return 1;
+}
+
+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++) {
+ xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row)));
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop32(matrix[i]);
+ }
+ return count;
+}
+
+static void init_ports(void)
+{
+ // Rows are inputs (inputs are 0)
+ DDRD &= 0b11010000;
+ DDRB &= 0b01111111;
+ DDRE &= 0b11111011;
+
+ // Columns are outputs (outputs are high)
+ DDRF |= 0b00000011;
+ DDRC |= 0b11000000;
+ DDRB |= 0b01110001;
+ DDRD |= 0b10000000;
+}
+
+static uint8_t read_rows(uint8_t col)
+{
+ if(col == 15) {
+ return (PINE&(1<<2) ? 0 : (1<<0)) |
+ (PIND&(1<<0) ? (1<<1) : 0) |
+ (PIND&(1<<1) ? (1<<2) : 0) |
+ (PIND&(1<<2) ? (1<<3) : 0) |
+ (PIND&(1<<3) ? (1<<4) : 0) |
+ (PIND&(1<<5) ? (1<<5) : 0);
+
+ } else {
+ return (PINB&(1<<7) ? (1<<0) : 0) |
+ (PIND&(1<<0) ? (1<<1) : 0) |
+ (PIND&(1<<1) ? (1<<2) : 0) |
+ (PIND&(1<<2) ? (1<<3) : 0) |
+ (PIND&(1<<3) ? (1<<4) : 0) |
+ (PIND&(1<<5) ? (1<<5) : 0);
+
+ }
+}
+
+static void unselect_cols(void)
+{
+ PORTF &= 0b11111100;
+ PORTC &= 0b00111111;
+ PORTB &= 0b10001110;
+ PORTD &= 0b01111111;
+}
+
+static void select_col(uint8_t col)
+{
+ switch (col) {
+ case 0:
+ PORTC |= 0b01000000;
+ break;
+ case 1:
+ PORTC |= 0b01000000;
+ PORTF |= 0b00000001;
+ break;
+ case 2:
+ PORTC |= 0b01000000;
+ PORTF |= 0b00000010;
+ break;
+ case 3:
+ PORTC |= 0b01000000;
+ PORTF |= 0b00000011;
+ break;
+ case 4:
+ PORTC |= 0b11000000;
+ break;
+ case 5:
+ PORTC |= 0b11000000;
+ PORTF |= 0b00000001;
+ break;
+ case 6:
+ PORTC |= 0b11000000;
+ PORTF |= 0b00000010;
+ break;
+ case 7:
+ PORTC |= 0b11000000;
+ PORTF |= 0b00000011;
+ break;
+ case 8:
+ PORTB |= 0b01000000;
+ break;
+ case 9:
+ PORTB |= 0b01000000;
+ PORTF |= 0b00000001;
+ break;
+ case 10:
+ PORTB |= 0b01000000;
+ PORTF |= 0b00000010;
+ break;
+ case 11:
+ PORTB |= 0b01000000;
+ PORTF |= 0b00000011;
+ break;
+ case 12:
+ PORTB |= 0b01000000;
+ PORTC |= 0b10000000;
+ break;
+ case 13:
+ PORTB |= 0b01000000;
+ PORTF |= 0b00000001;
+ PORTC |= 0b10000000;
+ break;
+ case 14:
+ PORTB |= 0b01000000;
+ PORTF |= 0b00000010;
+ PORTC |= 0b10000000;
+ break;
+ case 15:
+ PORTB |= 0b01000000;
+ PORTF |= 0b00000011;
+ PORTC |= 0b10000000;
+ break;
+ case 16:
+ PORTB |= 0b00100000;
+ break;
+ case 17:
+ PORTB |= 0b00010000;
+ break;
+ case 18:
+ PORTD |= 0b10000000;
+ break;
+ case 19:
+ PORTB |= 0b00000001;
+ break;
+ }
+} \ No newline at end of file
diff --git a/keyboards/duck/jetfire/readme.md b/keyboards/duck/jetfire/readme.md
new file mode 100644
index 000000000..fe641e622
--- /dev/null
+++ b/keyboards/duck/jetfire/readme.md
@@ -0,0 +1,18 @@
+# Jetfire
+
+![jetfire](imgur.com image replace me!)
+
+The Duck Jetfire is a hybrid full size and 1800 layout keyboard that went on
+Group Buy in November 2017.
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: Duck Jetfire PCB
+Hardware Availability: [Geekhack GB](https://geekhack.org/index.php?topic=92708.0)
+
+To get into bootloader mode, hold the top top most key above the 2 navigation keys while connecting the USB cable.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make duck/jetfire:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/duck/jetfire/rules.mk b/keyboards/duck/jetfire/rules.mk
new file mode 100644
index 000000000..8e05516df
--- /dev/null
+++ b/keyboards/duck/jetfire/rules.mk
@@ -0,0 +1,74 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+
+CUSTOM_MATRIX = yes
+SRC += backlight_led.c \
+ matrix.c
diff --git a/keyboards/lightsaver/config.h b/keyboards/duck/lightsaver/config.h
index bc984c7e5..bc984c7e5 100644
--- a/keyboards/lightsaver/config.h
+++ b/keyboards/duck/lightsaver/config.h
diff --git a/keyboards/lightsaver/indicator_leds.c b/keyboards/duck/lightsaver/indicator_leds.c
index 0a54e151e..0a54e151e 100644
--- a/keyboards/lightsaver/indicator_leds.c
+++ b/keyboards/duck/lightsaver/indicator_leds.c
diff --git a/keyboards/lightsaver/indicator_leds.h b/keyboards/duck/lightsaver/indicator_leds.h
index fe66eef6b..fe66eef6b 100644
--- a/keyboards/lightsaver/indicator_leds.h
+++ b/keyboards/duck/lightsaver/indicator_leds.h
diff --git a/keyboards/lightsaver/info.json b/keyboards/duck/lightsaver/info.json
index 0637ef9a1..0637ef9a1 100644
--- a/keyboards/lightsaver/info.json
+++ b/keyboards/duck/lightsaver/info.json
diff --git a/keyboards/lightsaver/keymaps/default/keymap.c b/keyboards/duck/lightsaver/keymaps/default/keymap.c
index d945ada24..d945ada24 100644
--- a/keyboards/lightsaver/keymaps/default/keymap.c
+++ b/keyboards/duck/lightsaver/keymaps/default/keymap.c
diff --git a/keyboards/lightsaver/keymaps/default/readme.md b/keyboards/duck/lightsaver/keymaps/default/readme.md
index 06f9aac5a..06f9aac5a 100644
--- a/keyboards/lightsaver/keymaps/default/readme.md
+++ b/keyboards/duck/lightsaver/keymaps/default/readme.md
diff --git a/keyboards/lightsaver/keymaps/rasmus/config.h b/keyboards/duck/lightsaver/keymaps/rasmus/config.h
index f2b5d264e..f2b5d264e 100644
--- a/keyboards/lightsaver/keymaps/rasmus/config.h
+++ b/keyboards/duck/lightsaver/keymaps/rasmus/config.h
diff --git a/keyboards/lightsaver/keymaps/rasmus/keymap.c b/keyboards/duck/lightsaver/keymaps/rasmus/keymap.c
index 518ba2d21..518ba2d21 100644
--- a/keyboards/lightsaver/keymaps/rasmus/keymap.c
+++ b/keyboards/duck/lightsaver/keymaps/rasmus/keymap.c
diff --git a/keyboards/lightsaver/keymaps/rasmus/readme.md b/keyboards/duck/lightsaver/keymaps/rasmus/readme.md
index 7670145f7..7670145f7 100644
--- a/keyboards/lightsaver/keymaps/rasmus/readme.md
+++ b/keyboards/duck/lightsaver/keymaps/rasmus/readme.md
diff --git a/keyboards/lightsaver/keymaps/rasmus/rules.mk b/keyboards/duck/lightsaver/keymaps/rasmus/rules.mk
index 3b11f9a9c..3b11f9a9c 100644
--- a/keyboards/lightsaver/keymaps/rasmus/rules.mk
+++ b/keyboards/duck/lightsaver/keymaps/rasmus/rules.mk
diff --git a/keyboards/lightsaver/lightsaver.c b/keyboards/duck/lightsaver/lightsaver.c
index 75e35b28b..75e35b28b 100644
--- a/keyboards/lightsaver/lightsaver.c
+++ b/keyboards/duck/lightsaver/lightsaver.c
diff --git a/keyboards/lightsaver/lightsaver.h b/keyboards/duck/lightsaver/lightsaver.h
index 19fcf36ba..19fcf36ba 100644
--- a/keyboards/lightsaver/lightsaver.h
+++ b/keyboards/duck/lightsaver/lightsaver.h
diff --git a/keyboards/lightsaver/matrix.c b/keyboards/duck/lightsaver/matrix.c
index a07cdd0d1..a07cdd0d1 100644
--- a/keyboards/lightsaver/matrix.c
+++ b/keyboards/duck/lightsaver/matrix.c
diff --git a/keyboards/lightsaver/readme.md b/keyboards/duck/lightsaver/readme.md
index 9d4b453c0..9d4b453c0 100644
--- a/keyboards/lightsaver/readme.md
+++ b/keyboards/duck/lightsaver/readme.md
diff --git a/keyboards/lightsaver/rules.mk b/keyboards/duck/lightsaver/rules.mk
index d95dbd960..d95dbd960 100644
--- a/keyboards/lightsaver/rules.mk
+++ b/keyboards/duck/lightsaver/rules.mk
diff --git a/keyboards/duck/octagon/keymaps/default/keymap.c b/keyboards/duck/octagon/keymaps/default/keymap.c
new file mode 100644
index 000000000..a2029ba05
--- /dev/null
+++ b/keyboards/duck/octagon/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2018 MechMerlin <mechmerlin@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+#define _BL 0 // Base Layer
+#define _FL 1 // Fn Layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_75_ansi(\
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_PAUS, KC_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FL), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_FL] = LAYOUT_75_ansi(\
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+}; \ No newline at end of file
diff --git a/keyboards/duck/octagon/keymaps/default/readme.md b/keyboards/duck/octagon/keymaps/default/readme.md
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/duck/octagon/keymaps/default/readme.md
diff --git a/keyboards/duck/octagon/readme.md b/keyboards/duck/octagon/readme.md
new file mode 100644
index 000000000..7f5b2f7e6
--- /dev/null
+++ b/keyboards/duck/octagon/readme.md
@@ -0,0 +1,11 @@
+# Duck Octagon
+
+Non official firmware for custom Korean keyboard with 75% key layout made by Duck.
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+Newest version is the [Octagon V2](http://duck0113.tistory.com/127)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make duck/octagon/v2:default
diff --git a/keyboards/duck/octagon/rules.mk b/keyboards/duck/octagon/rules.mk
new file mode 100644
index 000000000..46bd457bb
--- /dev/null
+++ b/keyboards/duck/octagon/rules.mk
@@ -0,0 +1 @@
+DEFAULT_FOLDER = duck/octagon/v2 \ No newline at end of file
diff --git a/keyboards/octagon/v1/config.h b/keyboards/duck/octagon/v1/config.h
index fbbc8999b..fbbc8999b 100644
--- a/keyboards/octagon/v1/config.h
+++ b/keyboards/duck/octagon/v1/config.h
diff --git a/keyboards/octagon/v1/info.json b/keyboards/duck/octagon/v1/info.json
index 1feff9519..1feff9519 100644
--- a/keyboards/octagon/v1/info.json
+++ b/keyboards/duck/octagon/v1/info.json
diff --git a/keyboards/octagon/v1/matrix.c b/keyboards/duck/octagon/v1/matrix.c
index 855534994..855534994 100644
--- a/keyboards/octagon/v1/matrix.c
+++ b/keyboards/duck/octagon/v1/matrix.c
diff --git a/keyboards/duck/octagon/v1/readme.md b/keyboards/duck/octagon/v1/readme.md
new file mode 100644
index 000000000..f5cb2d789
--- /dev/null
+++ b/keyboards/duck/octagon/v1/readme.md
@@ -0,0 +1,28 @@
+# Duck Octagon V1
+
+Non official firmware for custom Korean keyboard with 75% key layout made by Duck.
+Group buy was run October 2014 via [geekhack](https://geekhack.org/index.php?topic=65036.0) 35 keyboards total.
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: Duck Octagon PCB Ver 1.0, Atmega32u4
+Hardware Availability: Wait until GB of the next revision
+
+Make example for this keyboard (after setting up your build environment):
+
+ make duck/octagon/v1:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+## Hardware Notes
+
+The Duck Octagon V1 PCB consists of:
+
+### Microchips
+2 74HC237D 3-to-8 line decoders
+1 Atmega32u4 microcontroller
+2 WS2811 LED controller
+
+## Notes
+Thanks to Ralf Schmitt for previous implementations in his [TMK fork](https://github.com/xauser/tmk_keyboard/tree/xauser/) and few helping words.
+
+Based heavily on Rasmus Schults [Duck Lightsaver QMK Port](https://github.com/qmk/qmk_firmware/tree/master/keyboards/lightsaver)
diff --git a/keyboards/octagon/v1/rules.mk b/keyboards/duck/octagon/v1/rules.mk
index a08695b50..a08695b50 100644
--- a/keyboards/octagon/v1/rules.mk
+++ b/keyboards/duck/octagon/v1/rules.mk
diff --git a/keyboards/octagon/v1/v1.c b/keyboards/duck/octagon/v1/v1.c
index 258688229..258688229 100644
--- a/keyboards/octagon/v1/v1.c
+++ b/keyboards/duck/octagon/v1/v1.c
diff --git a/keyboards/duck/octagon/v1/v1.h b/keyboards/duck/octagon/v1/v1.h
new file mode 100644
index 000000000..d89188f22
--- /dev/null
+++ b/keyboards/duck/octagon/v1/v1.h
@@ -0,0 +1,52 @@
+/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef V1_H
+#define V1_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5P, \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4P, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3P, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K5O, K2N, K2P, \
+ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1P, \
+ K0A, K0B, K0C, K0G, K0J, K0K, K0L, K0M, K0N, K0P \
+) { \
+ { K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P }, \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, KC_NO, K4P }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, KC_NO, K3P }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, K2N, KC_NO, K2P }, \
+ { K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, KC_NO, K1M, K1N, KC_NO, K1P }, \
+ { K0A, K0B, K0C, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, K0K, K0L, KC_NO, K0M, K0N, KC_NO, K0P } \
+}
+
+#define LAYOUT_75_ansi( \
+ K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P, \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4P, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3P, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2N, K2P, \
+ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1P, \
+ K0A, K0B, K0C, K0G, K0J, K0K, K0L, K0M, K0N, K0P \
+) { \
+ { K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P }, \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, KC_NO, K4P }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, KC_NO, K3P }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, K2N, KC_NO, K2P }, \
+ { K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, KC_NO, K1M, K1N, KC_NO, K1P }, \
+ { K0A, K0B, K0C, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, K0K, K0L, KC_NO, K0M, K0N, KC_NO, K0P } \
+}
+#endif
diff --git a/keyboards/octagon/v2/config.h b/keyboards/duck/octagon/v2/config.h
index c916a30a1..c916a30a1 100644
--- a/keyboards/octagon/v2/config.h
+++ b/keyboards/duck/octagon/v2/config.h
diff --git a/keyboards/octagon/v2/indicator_leds.c b/keyboards/duck/octagon/v2/indicator_leds.c
index c24509f51..c24509f51 100644
--- a/keyboards/octagon/v2/indicator_leds.c
+++ b/keyboards/duck/octagon/v2/indicator_leds.c
diff --git a/keyboards/octagon/v2/indicator_leds.h b/keyboards/duck/octagon/v2/indicator_leds.h
index 9bb2c8ced..9bb2c8ced 100644
--- a/keyboards/octagon/v2/indicator_leds.h
+++ b/keyboards/duck/octagon/v2/indicator_leds.h
diff --git a/keyboards/duck/octagon/v2/info.json b/keyboards/duck/octagon/v2/info.json
new file mode 100644
index 000000000..11bde45a5
--- /dev/null
+++ b/keyboards/duck/octagon/v2/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "Octagon V2",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"PrtSc", "x":13, "y":0}, {"label":"Pause", "x":14, "y":0}, {"label":"Delete", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Home", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"Page Up", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"x":12.75, "y":3}, {"label":"Enter", "x":13.75, "y":3, "w":1.25}, {"label":"Page Down", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":1.25}, {"x":1.25, "y":4}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"End", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5}, {"label":"Fn", "x":11, "y":5}, {"label":"Ctrl", "x":12, "y":5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}]
+ },
+
+ "LAYOUT_75_ansi": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1, "w":2}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.5}, {"x":1.5, "y":2}, {"x":2.5, "y":2}, {"x":3.5, "y":2}, {"x":4.5, "y":2}, {"x":5.5, "y":2}, {"x":6.5, "y":2}, {"x":7.5, "y":2}, {"x":8.5, "y":2}, {"x":9.5, "y":2}, {"x":10.5, "y":2}, {"x":11.5, "y":2}, {"x":12.5, "y":2}, {"x":13.5, "y":2, "w":1.5}, {"x":15, "y":2}, {"x":0, "y":3, "w":1.75}, {"x":1.75, "y":3}, {"x":2.75, "y":3}, {"x":3.75, "y":3}, {"x":4.75, "y":3}, {"x":5.75, "y":3}, {"x":6.75, "y":3}, {"x":7.75, "y":3}, {"x":8.75, "y":3}, {"x":9.75, "y":3}, {"x":10.75, "y":3}, {"x":11.75, "y":3}, {"x":12.75, "y":3, "w":2.25}, {"x":15, "y":3}, {"x":0, "y":4, "w":2.25}, {"x":2.25, "y":4}, {"x":3.25, "y":4}, {"x":4.25, "y":4}, {"x":5.25, "y":4}, {"x":6.25, "y":4}, {"x":7.25, "y":4}, {"x":8.25, "y":4}, {"x":9.25, "y":4}, {"x":10.25, "y":4}, {"x":11.25, "y":4}, {"x":12.25, "y":4, "w":1.75}, {"x":14, "y":4}, {"x":15, "y":4}, {"x":0, "y":5, "w":1.25}, {"x":1.25, "y":5, "w":1.25}, {"x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"x":10, "y":5}, {"x":11, "y":5}, {"x":12, "y":5}, {"x":13, "y":5}, {"x":14, "y":5}, {"x":15, "y":5}]
+ }
+ }
+}
diff --git a/keyboards/octagon/v2/matrix.c b/keyboards/duck/octagon/v2/matrix.c
index a63a37640..a63a37640 100644
--- a/keyboards/octagon/v2/matrix.c
+++ b/keyboards/duck/octagon/v2/matrix.c
diff --git a/keyboards/octagon/v2/readme.md b/keyboards/duck/octagon/v2/readme.md
index 125f09f9c..125f09f9c 100644
--- a/keyboards/octagon/v2/readme.md
+++ b/keyboards/duck/octagon/v2/readme.md
diff --git a/keyboards/duck/octagon/v2/rules.mk b/keyboards/duck/octagon/v2/rules.mk
new file mode 100644
index 000000000..37f3938d9
--- /dev/null
+++ b/keyboards/duck/octagon/v2/rules.mk
@@ -0,0 +1,74 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+#OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= no # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE ?= yes # USB Nkey Rollover
+BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE ?= no # Unicode
+BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE ?= no # Audio output on port C6
+FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches
+RGBLIGHT_ENABLE = yes
+
+CUSTOM_MATRIX = yes
+SRC += indicator_leds.c \
+ matrix.c
+
+LAYOUTS = 75_ansi
diff --git a/keyboards/octagon/v2/v2.c b/keyboards/duck/octagon/v2/v2.c
index 52653b37e..52653b37e 100644
--- a/keyboards/octagon/v2/v2.c
+++ b/keyboards/duck/octagon/v2/v2.c
diff --git a/keyboards/duck/octagon/v2/v2.h b/keyboards/duck/octagon/v2/v2.h
new file mode 100644
index 000000000..1487b3640
--- /dev/null
+++ b/keyboards/duck/octagon/v2/v2.h
@@ -0,0 +1,52 @@
+/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef V2_H
+#define V2_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5Q, \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4O, K4P, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, K3P, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2O, K2P, \
+ K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1O, K1P, \
+ K0A, K0B, K0C, K0J, K0K, K0L, K0M, K0N, K0O, K0P \
+) { \
+ { K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, KC_NO, K5Q }, \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, KC_NO, K4O, K4P, KC_NO }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, KC_NO, K3O, K3P, KC_NO }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, KC_NO, K2O, K2P, KC_NO }, \
+ { K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, KC_NO, K1M, K1N, K1O, K1P, KC_NO }, \
+ { K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0J, KC_NO, K0K, K0L, K0M, K0N, K0O, K0P, KC_NO } \
+}
+
+#define LAYOUT_75_ansi( \
+ K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5Q, \
+ K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4O, K4P, \
+ K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, K3P, \
+ K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2O, K2P, \
+ K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1O, K1P, \
+ K0A, K0B, K0C, K0J, K0K, K0L, K0M, K0N, K0O, K0P \
+) { \
+ { K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, KC_NO, K5Q }, \
+ { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, KC_NO, K4O, K4P, KC_NO }, \
+ { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, KC_NO, K3O, K3P, KC_NO }, \
+ { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, KC_NO, K2O, K2P, KC_NO }, \
+ { K1A, KC_NO, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, KC_NO, K1M, K1N, K1O, K1P, KC_NO }, \
+ { K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0J, KC_NO, K0K, K0L, K0M, K0N, K0O, K0P, KC_NO } \
+}
+#endif
diff --git a/keyboards/duck/readme.md b/keyboards/duck/readme.md
new file mode 100644
index 000000000..caf7e156d
--- /dev/null
+++ b/keyboards/duck/readme.md
@@ -0,0 +1,16 @@
+# Duck Keyboards
+
+[Duck](http://duck0113.tistory.com/) is a popular Korean custom keyboard designer.
+Duck boards can only be bought new during a Group Buy and are commonly on a first come, first serve basis.
+
+**QMK is not the official firmware for Duck Keyboards.**
+
+For the official firmware, please use [OTD](http://kbdlab.co.kr/index.php?document_srl=100301&mid=board_sw).
+
+## QMK Powered Duck Boards
+Eagle V2
+Jetfire V1
+Lightsaver V3
+Octagon V1
+Octagon V2
+Viper V2 \ No newline at end of file
diff --git a/keyboards/dz60/config.h b/keyboards/dz60/config.h
index 8e1a5ae5f..e58eae085 100644
--- a/keyboards/dz60/config.h
+++ b/keyboards/dz60/config.h
@@ -41,9 +41,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN E2
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 16
diff --git a/keyboards/dz60/dz60.c b/keyboards/dz60/dz60.c
index b54ff0117..8295fb432 100644
--- a/keyboards/dz60/dz60.c
+++ b/keyboards/dz60/dz60.c
@@ -23,11 +23,9 @@ void led_init_ports(void) {
void led_set_kb(uint8_t usb_led) {
if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 2);
PORTB &= ~(1 << 2);
} else {
- DDRB &= ~(1 << 2);
- PORTB &= ~(1 << 2);
+ PORTB |= (1 << 2);
}
led_set_user(usb_led);
diff --git a/keyboards/dz60/dz60.h b/keyboards/dz60/dz60.h
index f755ce3c7..202bd1db4 100644
--- a/keyboards/dz60/dz60.h
+++ b/keyboards/dz60/dz60.h
@@ -7,159 +7,383 @@
// 标准配列
+/* Standard arrangement / LAYOUT
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │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 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │
+ * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬┴──┬───┼───┤
+ * │40 │41 │43 │44 │46 │48 │4a │4b │4c │4d │4e │
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───┴───┘
+*/
#define LAYOUT( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \
+ 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, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \
+ k40, k41, k43, k44, k46, k48, k4a, k4b, k4c, k4d, k4e \
) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
- { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
-}
-
-#define LAYOUT_hhkb( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- K401, K403, K406, K411, K413 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
- { KC_NO, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO } \
+ { 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, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \
+ { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \
}
+/* LAYOUT_true_hhkb
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │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 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │
+ * ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴┬─────┴───┤
+ * │▓▓▓▓▓│41 │43 │46 (6u) │4a │4b │▓▓▓▓▓▓▓▓▓│
+ * └─────┴───┴─────┴───────────────────────┴─────┴───┴─────────┘
+*/
#define LAYOUT_true_hhkb( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- K401, K403, K406, K410, K411 \
+ 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, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \
+ k41, k43, k46, k4a, k4b \
) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
- { KC_NO, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, KC_NO, KC_NO } \
+ { 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, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \
+ { KC_NO, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, KC_NO, KC_NO } \
}
+/* LAYOUT_60_hhkb
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │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 │
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
+ * │▓▓▓▓▓│41 │43 │46 (7u) │4b │4d │▓▓▓▓▓│
+ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+*/
#define LAYOUT_60_hhkb( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
- K401, K403, K406, K411, K413 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
- { KC_NO, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, KC_NO, K411, KC_NO, K413, KC_NO } \
-}
-
-#define LAYOUT_2_shifts( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
- K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \
+ 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, \
+ k41, k43, k46, k4b, k4d \
) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
- { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
+ { 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 }, \
+ { KC_NO, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, KC_NO, k4b, KC_NO, k4d, KC_NO } \
}
// 带方向配列
+/* Directional arrangement | LAYOUT_directional
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │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 │3c │3d │3e │
+ * ├────┬──┴─┬─┴──┬┴───┴───┼───┴┬──┴───┴───┼───┼───┼───┼───┼───┤
+ * │40 │41 │43 │44 │46 │48 │4a │4b │4c │4d │4e │
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───┴───┘
+*/
#define LAYOUT_directional( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K312, K313, K314, \
- K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \
+ 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, k3c, k3d, k3e, \
+ k40, k41, k43, k44, k46, k48, k4a, k4b, k4c, k4d, k4e \
) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, KC_NO, K312, K313, K314 }, \
- { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
+ { 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, k3c, k3d, k3e }, \
+ { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \
}
+/* LAYOUT_all
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │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 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3c │3d │3e │
+ * ├───┴┬──┴─┬─┴──┬┴───┴───┼───┴┬──┴───┴───┼───┼───┼───┼───┼───┤
+ * │40 │41 │43 │44 │46 │48 │4a │4b │4c │4d │4e │
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───┴───┘
+*/
#define LAYOUT_all( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
- K400, K401, K403, K404, K406, K408, K410, K411, K412, K413, K414 \
+ 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, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k43, k44, k46, k48, k4a, k4b, k4c, k4d, k4e \
) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
- { K400, K401, KC_NO, K403, K404, KC_NO, K406, KC_NO, K408, KC_NO, K410, K411, K412, K413, K414 } \
+ { 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, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e }, \
+ { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \
}
+/* LAYOUT_60_ansi
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │40 │41 │43 │46 │4a │4b │4d │4e │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+*/
#define LAYOUT_60_ansi( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
- K400, K401, K403, K406, K410, K411, K413, K414 \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
+ k40, k41, k43, k46, k4a, k4b, k4d, k4e \
) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \
- { K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413, K414 } \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \
+ { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
+ { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
+ { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \
+ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \
}
-#define LAYOUT_60_iso( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
- K400, K401, K403, K406, K410, K411, K413, K414 \
+/* LAYOUT_60_ansi_split
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
+ * │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │40 │41 │43 │44 │46 │48 │4a │4b │4d │4e │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+*/
+#define LAYOUT_60_ansi_split( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
+ k40, k41, k43, k44, k46, k48, k4a, k4b, k4d, k4e \
) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \
- { K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, KC_NO, K413, K414 } \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \
+ { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
+ { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
+ { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \
+ { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \
}
-#define LAYOUT_directional_625_space( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
- K400, K401, K403, K406, K410, K411, K412, K413, K414 \
+/* LAYOUT_60_iso
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2d │
+ * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │1e │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │40 │41 │43 │46 │4a │4b │4d │4e │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
+*/
+#define LAYOUT_60_iso( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k1e, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
+ k40, k41, k43, k46, k4a, k4b, k4d, k4e \
) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
- { K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414 } \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \
+ { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
+ { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \
+ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \
}
+/* LAYOUT_60_iso_5x1u
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2d │
+ * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │1e │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬┴──┬───┬───┤
+ * │40 │41 │43 │46 │4a │4b │4c │4d │4e │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+*/
#define LAYOUT_60_iso_5x1u( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
- K100, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K213, \
- K200, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
- K400, K401, K403, K406, K410, K411, K412, K413, K414 \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k1e, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
+ k40, k41, k43, k46, k4a, k4b, k4c, k4d, k4e \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \
+ { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
+ { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \
+ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, k4a, k4b, k4c, k4d, k4e } \
+}
+
+/* LAYOUT_60_iso_split
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2d │
+ * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │1e │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │
+ * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴───┼───┴┬────┬────┤
+ * │40 │41 │43 │44 │46 │48 │4a │4b │4d │4e │
+ * └────┴────┴────┴────────┴────┴──────────┴────┴────┴────┴────┘
+*/
+#define LAYOUT_60_iso_split( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k1e, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \
+ k40, k41, k43, k44, k46, k48, k4a, k4b, k4d, k4e \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \
+ { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
+ { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, KC_NO }, \
+ { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, KC_NO, k4d, k4e } \
+}
+
+/* LAYOUT_60_b_ansi (maximized DZ60 Plate B layout for ANSI)
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │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 │3c │3d │3e │
+ * ├────┬───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬───┼───┼───┤
+ * │40 │41 │43 │44 │46 │48 │4a │4b │4c │4d │4e │
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───┴───┘
+*/
+#define LAYOUT_60_b_ansi( \
+ 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, k3c, k3d, k3e, \
+ k40, k41, k43, k44, k46, k48, k4a, k4b, 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, KC_NO, k3c, k3d, k3e }, \
+ { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \
+}
+
+/* LAYOUT_60_b_iso (maximized DZ60 Plate B layout for ISO)
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │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 │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2d │
+ * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │1e │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬──┴────┤
+ * │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3c │3d │3e │
+ * ├────┼───┴┬──┴─┬─┴───┴──┬┴───┼───┴───┴──┬┴──┬┴──┬───┼───┼───┤
+ * │40 │41 │43 │44 │46 │48 │4a │4b │4c │4d │4e │
+ * └────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───┴───┘
+*/
+#define LAYOUT_60_b_iso( \
+ 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, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k1e, k2d, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3c, k3d, k3e, \
+ k40, k41, k43, k44, k46, k48, k4a, k4b, 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, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, KC_NO, k3c, k3d, k3e }, \
+ { k40, k41, KC_NO, k43, k44, KC_NO, k46, KC_NO, k48, KC_NO, k4a, k4b, k4c, k4d, k4e } \
+}
+
+/* LAYOUT_60_tsangan
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │ 0e │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │10 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │1d │1e │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │20 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │2d │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤
+ * │30 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3d │3e │
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤
+ * │40 │41 │43 │46 (7u) │4b │4d │4e │
+ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+*/
+#define LAYOUT_60_tsangan( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, \
+ k10, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3e, \
+ k40, k41, k43, k46, k4b, k4d, k4e \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, KC_NO, k0e }, \
+ { k10, KC_NO, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
+ { k20, KC_NO, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, KC_NO }, \
+ { k30, KC_NO, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, KC_NO, k3d, k3e }, \
+ { k40, k41, KC_NO, k43, KC_NO, KC_NO, k46, KC_NO, KC_NO, KC_NO, KC_NO, k4b, KC_NO, k4d, k4e } \
+}
+
+/* LAYOUT_60_tsangan_hhkb
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │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 (7u) │4b │4d │4e │
+ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+*/
+#define LAYOUT_60_tsangan_hhkb( \
+ 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, k4b, k4d, k4e \
) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, KC_NO, K014 }, \
- { K100, KC_NO, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
- { K200, KC_NO, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, KC_NO }, \
- { K400, K401, KC_NO, K403, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, K414 } \
+ { 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, KC_NO, k4b, KC_NO, k4d, k4e } \
}
#endif
diff --git a/keyboards/dz60/info.json b/keyboards/dz60/info.json
index 0cdacdeae..6a3023496 100644
--- a/keyboards/dz60/info.json
+++ b/keyboards/dz60/info.json
@@ -9,30 +9,26 @@
"key_count": 67,
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
},
- "LAYOUT_hhkb": {
- "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":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Ctrl", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Alt", "x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"x":10, "y":4, "w":1.5}, {"label":"Alt", "x":11.5, "y":4}]
- },
"LAYOUT_true_hhkb": {
"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":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Ctrl", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Alt", "x":1.5, "y":4}, {"x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":6}, {"x":10, "y":4, "w":1.5}, {"label":"Alt", "x":11.5, "y":4}]
},
- "LAYOUT_2_shifts": {
- "key_count": 68,
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
- },
"LAYOUT_directional": {
"key_count": 67,
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
},
"LAYOUT_all": {
- "key_count": 69,
- "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":"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}, {"x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
+ "key_count": 68,
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"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":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"label":"Shift", "x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.25}, {"x":6, "y":4, "w":1.25}, {"x":7.25, "y":4, "w":2.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
},
"LAYOUT_60_ansi": {
"key_count": 61,
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
},
+ "LAYOUT_60_ansi_split": {
+ "key_count": 61,
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":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_iso": {
"key_count": 62,
"layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
@@ -41,13 +37,29 @@
"key_count": 60,
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"label":"\\", "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":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
},
- "LAYOUT_directional_625_space": {
- "key_count": 65,
- "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":"K004", "x":4, "y":0}, {"label":"K005", "x":5, "y":0}, {"label":"K006", "x":6, "y":0}, {"label":"K007", "x":7, "y":0}, {"label":"K008", "x":8, "y":0}, {"label":"K009", "x":9, "y":0}, {"label":"K010", "x":10, "y":0}, {"label":"K011", "x":11, "y":0}, {"label":"K012", "x":12, "y":0}, {"label":"K013", "x":13, "y":0}, {"label":"K014", "x":14, "y":0}, {"label":"K100", "x":0, "y":1, "w":1.5}, {"label":"K102", "x":1.5, "y":1}, {"label":"K103", "x":2.5, "y":1}, {"label":"K104", "x":3.5, "y":1}, {"label":"K105", "x":4.5, "y":1}, {"label":"K106", "x":5.5, "y":1}, {"label":"K107", "x":6.5, "y":1}, {"label":"K108", "x":7.5, "y":1}, {"label":"K109", "x":8.5, "y":1}, {"label":"K110", "x":9.5, "y":1}, {"label":"K111", "x":10.5, "y":1}, {"label":"K112", "x":11.5, "y":1}, {"label":"K113", "x":12.5, "y":1}, {"label":"K114", "x":13.5, "y":1, "w":1.5}, {"label":"K200", "x":0, "y":2, "w":1.75}, {"label":"K202", "x":1.75, "y":2}, {"label":"K203", "x":2.75, "y":2}, {"label":"K204", "x":3.75, "y":2}, {"label":"K205", "x":4.75, "y":2}, {"label":"K206", "x":5.75, "y":2}, {"label":"K207", "x":6.75, "y":2}, {"label":"K208", "x":7.75, "y":2}, {"label":"K209", "x":8.75, "y":2}, {"label":"K210", "x":9.75, "y":2}, {"label":"K211", "x":10.75, "y":2}, {"label":"K212", "x":11.75, "y":2}, {"label":"K213", "x":12.75, "y":2, "w":2.25}, {"label":"K300", "x":0, "y":3, "w":2}, {"label":"K301", "x":2, "y":3}, {"label":"K302", "x":3, "y":3}, {"label":"K303", "x":4, "y":3}, {"label":"K304", "x":5, "y":3}, {"label":"K305", "x":6, "y":3}, {"label":"K306", "x":7, "y":3}, {"label":"K307", "x":8, "y":3}, {"label":"K308", "x":9, "y":3}, {"label":"K309", "x":10, "y":3}, {"label":"K310", "x":11, "y":3}, {"label":"K312", "x":12, "y":3}, {"label":"K313", "x":13, "y":3}, {"label":"K314", "x":14, "y":3}, {"label":"K400", "x":0, "y":4, "w":1.25}, {"label":"K401", "x":1.25, "y":4, "w":1.25}, {"label":"K403", "x":2.5, "y":4, "w":1.25}, {"label":"K406", "x":3.75, "y":4, "w":6.25}, {"label":"K410", "x":10, "y":4}, {"label":"K411", "x":11, "y":4}, {"label":"K412", "x":12, "y":4}, {"label":"K413", "x":13, "y":4}, {"label":"K414", "x":14, "y":4}]
- },
"LAYOUT_60_iso_5x1u": {
"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":"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":"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":"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":"Fn", "x":10, "y":4}, {"label":"←", "x":11, "y":4}, {"label":"↓", "x":12, "y":4}, {"label":"↑", "x":13, "y":4}, {"label":"→", "x":14, "y":4}]
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"|", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"~", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"/", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Fn", "x":10, "y":4}, {"label":"←", "x":11, "y":4}, {"label":"↓", "x":12, "y":4}, {"label":"↑", "x":13, "y":4}, {"label":"→", "x":14, "y":4}]
+ },
+ "LAYOUT_60_iso_split": {
+ "key_count": 64,
+ "layout": [{"label":"¬", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"£", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"CapsLock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"@", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":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_b_ansi": {
+ "key_count": 66,
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"x":13, "y":0}, {"label":"Back Space", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"\\", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":";", "x":10.75, "y":2}, {"label":"'", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":",", "x":9.25, "y":3}, {"label":".", "x":10.25, "y":3}, {"label":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"Up", "x":13, "y":3}, {"label":"Del", "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}, {"label":"Space", "x":3.75, "y":4, "w":2.25}, {"label":"Space", "x":6, "y":4, "w":1.25}, {"label":"Space", "x":7.25, "y":4, "w":2.75}, {"label":"Alt", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Left", "x":12, "y":4}, {"label":"Down", "x":13, "y":4}, {"label":"Right", "x":14, "y":4}]
+ },
+ "LAYOUT_60_b_iso": {
+ "key_count": 67,
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"x":13, "y":0}, {"label":"Back Space", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"[", "x":11.5, "y":1}, {"label":"]", "x":12.5, "y":1}, {"label":"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":"Shift", "x":11.25, "y":3, "w":1.75}, {"label":"Up", "x":13, "y":3}, {"label":"Del", "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}, {"label":"Space", "x":3.75, "y":4, "w":2.25}, {"label":"Space", "x":6, "y":4, "w":1.25}, {"label":"Space", "x":7.25, "y":4, "w":2.75}, {"label":"AltGr", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Left", "x":12, "y":4}, {"label":"Down", "x":13, "y":4}, {"label":"Right", "x":14, "y":4}]
+ },
+ "LAYOUT_60_tsangan": {
+ "keycount": 61,
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "key_count": 62,
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Win", "x":11, "y":4, "w":1.5}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
}
}
}
diff --git a/keyboards/dz60/keymaps/256k_HHKB/keymap.c b/keyboards/dz60/keymaps/256k_HHKB/keymap.c
index f426e3d1f..1448e4ddc 100644
--- a/keyboards/dz60/keymaps/256k_HHKB/keymap.c
+++ b/keyboards/dz60/keymaps/256k_HHKB/keymap.c
@@ -29,11 +29,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
- [_DEFAULT] = LAYOUT_hhkb(
+ [_DEFAULT] = LAYOUT_60_hhkb(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
KC_LGUI, KC_LALT, KC_SPC, MO(_ALTFN), MO(_LIGHTS)),
@@ -55,12 +55,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `---------------------------------------------------------------------------------------------------------------------'
*/
- [_ALTFN] = LAYOUT_hhkb(
+ [_ALTFN] = LAYOUT_60_hhkb(
MO(_MOUSEFN), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ______, KC_PSCR,
KC_CAPS, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_UP, KC_VOLD, KC_VOLU, KC_DEL,
______, ______, ______, ______, ______, ______, ______, KC_HOME, KC_END, KC_LEFT, KC_DOWN, KC_RIGHT, ______,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_MPRV, KC_MNXT, KC_MPLY, ______, ______,
+ ______, ______, ______, ______, ______, ______, ______, ______, KC_MPRV, KC_MNXT, KC_MPLY, ______, ______,
______, ______, ______, ______, ______),
@@ -85,12 +85,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
- [_MOUSEFN] = LAYOUT_hhkb(
+ [_MOUSEFN] = LAYOUT_60_hhkb(
______, KC_ACL0, KC_ACL1, KC_ACL2, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_MS_UP, ______, ______, ______,
______, ______, ______, ______, ______, ______, ______, ______, ______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, ______,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______),
@@ -116,11 +116,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_FN] = LAYOUT_hhkb(
+ [_FN] = LAYOUT_60_hhkb(
______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, ______,
KC_CAPS, ______, ______, ______, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, KC_DEL,
______, KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, ______,
- ______, ______, KC_MPRV, KC_MPLY, KC_MNXT, ______, ______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ______, ______,
+ ______, KC_MPRV, KC_MPLY, KC_MNXT, ______, ______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ______, ______,
______, ______, ______, ______, ______),
@@ -146,11 +146,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_LIGHTS] = LAYOUT_hhkb(
+ [_LIGHTS] = LAYOUT_60_hhkb(
RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, ______, ______, ______, ______, ______, ______,
RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, RGB_HUD, RGB_SAD, RGB_VAD, ______, ______, ______, ______, ______, ______, ______, ______, ______,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______),
};
diff --git a/keyboards/dz60/keymaps/60_ansi/keymap.c b/keyboards/dz60/keymaps/60_ansi/keymap.c
new file mode 100644
index 000000000..9a9e11ac9
--- /dev/null
+++ b/keyboards/dz60/keymaps/60_ansi/keymap.c
@@ -0,0 +1,18 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_60_ansi(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL),
+
+ LAYOUT_60_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_HOME, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_DEL, KC_END, KC_PGDN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/keyboards/dz60/keymaps/60_ansi/readme.md b/keyboards/dz60/keymaps/60_ansi/readme.md
new file mode 100644
index 000000000..edbc16c04
--- /dev/null
+++ b/keyboards/dz60/keymaps/60_ansi/readme.md
@@ -0,0 +1,9 @@
+![60_ansi DZ60 base layer](https://i.imgur.com/MqBLh3D.png)
+
+![60_ansi DZ60 fn layer](https://i.imgur.com/ml1djHi.png)
+
+# 60_ansi DZ60 Layout
+
+This is a basic keymap for the 60_ansi layout of the DZ60.
+The default layer is normal ANSI and the Fn layer is used for RGB
+and backlighting functions.
diff --git a/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/config.h b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/config.h
new file mode 100644
index 000000000..9560d51a6
--- /dev/null
+++ b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/config.h
@@ -0,0 +1 @@
+#define GRAVE_ESC_GUI_OVERRIDE # Always send Escape if GUI is pressed
diff --git a/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c
index 76804670c..0d3b65363 100644
--- a/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c
+++ b/keyboards/dz60/keymaps/60_ansi_arrow_fkeys/keymap.c
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
#define ______ KC_TRNS
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -20,11 +18,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------------'
*/
- LAYOUT_2_shifts(
- F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC,
+ LAYOUT_directional(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT
),
@@ -50,37 +48,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______
),
};
-
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
diff --git a/keyboards/dz60/keymaps/60_plus_arrows/keymap.c b/keyboards/dz60/keymaps/60_plus_arrows/keymap.c
index a4b2dc29e..f38cdb285 100644
--- a/keyboards/dz60/keymaps/60_plus_arrows/keymap.c
+++ b/keyboards/dz60/keymaps/60_plus_arrows/keymap.c
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
#define ______ KC_TRNS
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -20,11 +18,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------------'
*/
- LAYOUT_2_shifts(
+ LAYOUT_directional(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT
),
@@ -50,37 +48,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______
),
};
-
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
diff --git a/keyboards/dz60/keymaps/60_tsangan/keymap.c b/keyboards/dz60/keymaps/60_tsangan/keymap.c
new file mode 100644
index 000000000..dfbc51dd9
--- /dev/null
+++ b/keyboards/dz60/keymaps/60_tsangan/keymap.c
@@ -0,0 +1,32 @@
+#include QMK_KEYBOARD_H
+
+enum keyboard_layers {
+ _BL = 0, // Base Layer
+ _FL, // Function Layer
+ _CL // Control Layer
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_60_tsangan(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+ [_FL] = LAYOUT_60_tsangan(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, _______, _______,
+ _______, _______, _______, _______, _______, MO(_CL), _______
+ ),
+ [_CL] = LAYOUT_60_tsangan(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/config.h b/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/config.h
new file mode 100644
index 000000000..9560d51a6
--- /dev/null
+++ b/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/config.h
@@ -0,0 +1 @@
+#define GRAVE_ESC_GUI_OVERRIDE # Always send Escape if GUI is pressed
diff --git a/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/keymap.c b/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/keymap.c
index 778a5ac03..4c6552675 100644
--- a/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/keymap.c
+++ b/keyboards/dz60/keymaps/Ansi_plus_fn_arrows/keymap.c
@@ -1,11 +1,9 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT(
- F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC,
+ 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_NO, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
@@ -25,37 +23,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};
-
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
diff --git a/keyboards/dz60/keymaps/LEdiodes/config.h b/keyboards/dz60/keymaps/LEdiodes/config.h
index bb78d9bb6..4f991b9ca 100644
--- a/keyboards/dz60/keymaps/LEdiodes/config.h
+++ b/keyboards/dz60/keymaps/LEdiodes/config.h
@@ -41,9 +41,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN E2
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 16
diff --git a/keyboards/dz60/keymaps/boris_burger/README.md b/keyboards/dz60/keymaps/boris_burger/README.md
new file mode 100644
index 000000000..64062f823
--- /dev/null
+++ b/keyboards/dz60/keymaps/boris_burger/README.md
@@ -0,0 +1,52 @@
+### boris_burger's DZ60 layout
+
+This layout is for a DZ60 with a 2U left shift, 1U right shift and an arrow cluster in
+the bottom right.
+
+It is based off stephengrier's layout adding support for Home/End/PgUp/PgDn using Fn+arrows
+as used on macOS and Microsoft Surface. It has Insert instead of Fn near the arrow cluster
+and other smaller tweaks:
+- CapsLock is the only Fn key (CapsLock by itself is not available)
+- Del is available as Fn+Backspace
+- Ctrl+Del is available as Ctrl+Backspace (e.g. deleting word to the right of the cursor)
+- Shift+Del is available as Shift+Backspace (e.g. permanently deleting file or e-mail)
+- PgUp = Fn+Up
+- PgDn = Fn+Down
+- Home = Fn+Left
+- End = Fn+Right
+- Tilde = Shift+Esc
+- Backtick = Fn+Esc
+- Underglow toggle and mode selection are available as Fn+Q and Fn+W
+- Reset (bootloader mode) = Fn+B
+
+### 0 Qwerty
+```
+,-----------------------------------------------------------------------------------------.
+| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc |
+|-----------------------------------------------------------------------------------------+
+| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+|-----------------------------------------------------------------------------------------+
+| Fn | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+|-----------------------------------------------------------------------------------------+
+| Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | Ins |
+|-----------------------------------------------------------------------------------------+
+| Ctrl | Win | Alt | Space | Alt | Menu | L | D | R |
+`-----------------------------------------------------------------------------------------'
+```
+
+### 1 Fn Layer
+```
+FN Layer
+,-----------------------------------------------------------------------------------------.
+| ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL |
+|-----------------------------------------------------------------------------------------+
+| |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | |
+|-----------------------------------------------------------------------------------------+
+| | BL T| BL M| BL+ | BL- | | | | | | | | |
+|-----------------------------------------------------------------------------------------+
+| | | | | |RESET| | | | | | | PgUp| |
+|-----------------------------------------------------------------------------------------+
+| | | | | | | Home| PgDn| End |
+`-----------------------------------------------------------------------------------------'
+```
+
diff --git a/keyboards/dz60/keymaps/boris_burger/config.h b/keyboards/dz60/keymaps/boris_burger/config.h
new file mode 100644
index 000000000..9560d51a6
--- /dev/null
+++ b/keyboards/dz60/keymaps/boris_burger/config.h
@@ -0,0 +1 @@
+#define GRAVE_ESC_GUI_OVERRIDE # Always send Escape if GUI is pressed
diff --git a/keyboards/dz60/keymaps/boris_burger/keymap.c b/keyboards/dz60/keymaps/boris_burger/keymap.c
new file mode 100644
index 000000000..5dcadf34c
--- /dev/null
+++ b/keyboards/dz60/keymaps/boris_burger/keymap.c
@@ -0,0 +1,87 @@
+#include QMK_KEYBOARD_H
+
+/* Holds state of modifiers when Backspace was pressed.
+ * Used to ensure that the correct keycode is unregistered when Backspace is released.
+ */
+static uint8_t bspc_mods = 0;
+
+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 | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------+
+ * | Fn | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | Ins |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | Win | Alt | Space | Alt | Menu | L | D | R |
+ * `-----------------------------------------------------------------------------------------'
+ */
+ LAYOUT_directional(
+ KC_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , _______, KC_BSPC,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS,
+ MO(1) , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT ,
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP , KC_INS ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ /* FN Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL |
+ * |-----------------------------------------------------------------------------------------+
+ * | |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | BL T| BL M| BL+ | BL- | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | |RESET| | | | | | | PgUp| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | Home| PgDn| End |
+ * `-----------------------------------------------------------------------------------------'
+ */
+ LAYOUT_directional(
+ 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 ,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______,
+ _______, BL_TOGG, BL_STEP, BL_INC , BL_DEC , _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, RESET , _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+ ),
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case KC_BSPC: {
+ if (record->event.pressed) {
+ const uint8_t current_mods = get_mods();
+ const uint8_t shift = current_mods & (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT));
+ const uint8_t ctrl = current_mods & (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTL));
+ bspc_mods = current_mods;
+ if(shift || ctrl) {
+ add_key(KC_DEL);
+ add_mods(current_mods);
+ send_keyboard_report();
+ } else {
+ return true;
+ }
+ }
+ else {
+ if(bspc_mods & (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)|MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTL))) {
+ // if Shift or Ctrl was pressed with Backspace, than that was intepreted as Del, so we need
+ // to unregister the Del key
+ del_key(KC_DEL);
+ } else {
+ // Either Backspace was pressed without mods, or with a modifier other than Shift or Ctrl
+ // so it is simply taken as Backspace
+ del_key(KC_BSPC);
+ }
+ send_keyboard_report();
+ }
+ return false;
+ }
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/dz60/keymaps/crd_2u_lshift/keymap.c b/keyboards/dz60/keymaps/crd_2u_lshift/keymap.c
new file mode 100644
index 000000000..4d2ca279c
--- /dev/null
+++ b/keyboards/dz60/keymaps/crd_2u_lshift/keymap.c
@@ -0,0 +1,70 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,-----------------------------------------------------------------------------------------.
+ * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl/Esc| A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Home | U | End |
+ * |-----------------------------------------------------------------------------------------+
+ * | FN1 | Alt | Cmd | Space | Cmd | FN2 | L | D | R |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ LAYOUT_directional(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_HOME, KC_UP, KC_END,
+ MO(1), KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, MO(2), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ /* FN1 Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | Home | PgUp | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | L | D | U | R | End | PgDn| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | |PgUp | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | |Home |PgDn | End |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ LAYOUT_directional(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_END, KC_PGDOWN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDOWN, KC_END
+ ),
+
+ /* FN2 Layer (Media)
+ * ,-----------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | RESET |
+ * |-----------------------------------------------------------------------------------------+
+ * | |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| |Mute | Vol- | Vol+ | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | |Bri- |Bri+ | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | |Pl/Ps|Vol+ |Mute |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | |Prev |Vol- |Next |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ LAYOUT_directional(
+ KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,
+ _______, _______, _______, DEBUG, _______, _______, _______, _______, _______, _______, KC_SCROLLLOCK, KC_PAUSE, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_VOLU, KC_MUTE,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+};
diff --git a/keyboards/dz60/keymaps/crd_ansi/keymap.c b/keyboards/dz60/keymaps/crd_ansi/keymap.c
new file mode 100644
index 000000000..5d7b24d18
--- /dev/null
+++ b/keyboards/dz60/keymaps/crd_ansi/keymap.c
@@ -0,0 +1,30 @@
+#include QMK_KEYBOARD_H
+
+enum keyboard_layers {
+ _BL = 0, // Base Layer
+ _FL // Function Layer
+};
+
+// Custom #defined keycodes (shorter macros for readability)
+#define KC_CTES CTL_T(KC_ESC)
+#define KC_RSUP RSFT_T(KC_UP)
+#define KC_FNLT LT(_FL, KC_LEFT)
+#define KC_RADN RALT_T(KC_DOWN)
+#define KC_RCRT RCTL_T(KC_RIGHT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_60_ansi(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_FNLT, KC_RADN, KC_RCRT
+ ),
+ [_FL] = LAYOUT_60_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, RESET,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/dz60/keymaps/crd_tsangan/keymap.c b/keyboards/dz60/keymaps/crd_tsangan/keymap.c
new file mode 100644
index 000000000..320de07a1
--- /dev/null
+++ b/keyboards/dz60/keymaps/crd_tsangan/keymap.c
@@ -0,0 +1,30 @@
+#include QMK_KEYBOARD_H
+
+enum keyboard_layers {
+ _BL = 0, // Base Layer
+ _FL // Function Layer
+};
+
+// Custom #defined keycodes (shorter macros for readability)
+#define KC_CTES CTL_T(KC_ESC)
+#define KC_RSUP RSFT_T(KC_UP)
+#define KC_RGLT RGUI_T(KC_LEFT)
+#define KC_RADN RALT_T(KC_DOWN)
+#define KC_RCRT RCTL_T(KC_RIGHT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_60_tsangan_hhkb(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_ESC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP, MO(_FL),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGLT, KC_RADN, KC_RCRT
+ ),
+ [_FL] = LAYOUT_60_tsangan_hhkb(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET,
+ _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, KC_DEL,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/dz60/keymaps/dbroqua/keymap.c b/keyboards/dz60/keymaps/dbroqua/keymap.c
index c6c77210d..0b4deae51 100644
--- a/keyboards/dz60/keymaps/dbroqua/keymap.c
+++ b/keyboards/dz60/keymaps/dbroqua/keymap.c
@@ -64,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | |
* `-----------------------------------------------------------------'
*/
- [_SFX] = LAYOUT_hhkb(
+ [_SFX] = LAYOUT_true_hhkb(
______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
______, BL_TOGG,BL_STEP,BL_DEC, BL_INC, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
______, RGB_TOG,RGB_MOD,______, ______, ______, ______, ______, ______, ______, ______, ______, ______, \
diff --git a/keyboards/dz60/keymaps/default/keymap.c b/keyboards/dz60/keymaps/default/keymap.c
index 426b10989..1d375a3c6 100644
--- a/keyboards/dz60/keymaps/default/keymap.c
+++ b/keyboards/dz60/keymaps/default/keymap.c
@@ -1,11 +1,9 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT(
- F(0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC,
+ 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_NO, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
@@ -25,37 +23,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
};
-
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
diff --git a/keyboards/dz60/keymaps/doogle999/keymap.c b/keyboards/dz60/keymaps/doogle999/keymap.c
new file mode 100644
index 000000000..deea641f7
--- /dev/null
+++ b/keyboards/dz60/keymaps/doogle999/keymap.c
@@ -0,0 +1,74 @@
+#include QMK_KEYBOARD_H
+
+#include "doogle999.h"
+
+#define ______ KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Base layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------+
+ * | Fn | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | Shift | U | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | Cmd | Alt | Space | / | Fn | L | D | R |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ LAYOUT_directional(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, ______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_DELETE,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SLSH, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+/* Fn layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | ~ | F1 | F2 | F3 | F4 | F5 | F6 | f7 | F8 | F9 | F10 | F11 | F12 | Backspace |
+ * |-----------------------------------------------------------------------------------------+
+ * | Reset | NP1 | NP2 | NP3 | NP4 | NP5 | NP6 | NP7 | NP8 | NP9 | NP0 |VolD |VolU | Mute |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | BlD | BlI | BlT | Menu |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Cyc+| Cyc-| Val+| Val-| Hue+| Hue-| Sat+| Sat-| Tog | Shift | Pup | Ins |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | Cmd | Alt | Space |HwCal| |Home | Pdn | End |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ LAYOUT_directional(
+ 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_CALC,
+ RESET, 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_VOLD, KC_VOLU, KC_MUTE,
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, BL_DEC, BL_INC, BL_TOGG, KC_APP,
+ KC_LSFT, ______, RGB_MOD, RGB_RMOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_TOG, KC_RSFT, KC_PGUP, KC_INSERT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, TO(2), ______, KC_HOME, KC_PGDOWN, KC_END
+ ),
+
+ /* Hardware calculator layer
+ * ,-----------------------------------------------------------------------------------------.
+ * |EndCa| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Q | | E | | T | | | | | P | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | S | | | | | | | L | | | Calc |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | | | | C | | | | | . | Shift | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | / | | | | |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ LAYOUT_directional(
+ ENDCALC, KC_1, KC_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_E, ______, KC_T, ______, ______, ______, ______, KC_P, ______, ______, ______,
+ ______, ______, KC_S, ______, ______, ______, ______, ______, ______, KC_L, ______, ______, CALC,
+ KC_LSFT, ______, ______, ______, KC_C, ______, ______, ______, ______, ______, KC_DOT, KC_RSFT, ______, ______,
+ ______, ______, ______, ______, ______, ______, KC_SLSH, ______, ______, ______, ______
+ ),
+}; \ No newline at end of file
diff --git a/keyboards/dz60/keymaps/drewsky/Readme.md b/keyboards/dz60/keymaps/drewsky/Readme.md
new file mode 100755
index 000000000..115d9cf83
--- /dev/null
+++ b/keyboards/dz60/keymaps/drewsky/Readme.md
@@ -0,0 +1,11 @@
+# **DREWSKY'S DZ60 ANSI Layout**
+![Imgur](https://i.imgur.com/v4zVbl7.jpg)
+
+
+Layer 1 is default configuration, for the exception of the Space cadet shifts. Layer 2 is for WASD arrows and Media, which I have included both PREV and NEXT for Windows and macOS. Layer 3 is for RGB underglow. Legends in picture follow Layers. Modifier one is momentary, and the RGB layer is TT (TAP_TOGGLE)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dz60:drewsky
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/dz60/keymaps/drewsky/keymap.c b/keyboards/dz60/keymaps/drewsky/keymap.c
new file mode 100755
index 000000000..aba0d238f
--- /dev/null
+++ b/keyboards/dz60/keymaps/drewsky/keymap.c
@@ -0,0 +1,34 @@
+#include QMK_KEYBOARD_H
+
+// Helpful defines
+#define _L0 0
+#define _L1 1
+#define _L2 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_L0] = LAYOUT_60_ansi(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, TT(2), KC_RALT, MO(1), KC_RCTL),
+
+ [_L1] = LAYOUT_60_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGUP,
+ 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_PGDN,
+ KC_NO, KC_MRWD, KC_MFFD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_MSTP, KC_VOLD, KC_VOLU, KC_MPLY, KC__VOLDOWN, KC__VOLUP, KC_TRNS, KC_NO),
+
+ [_L2] = LAYOUT_60_ansi(
+ KC_ESC, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, RGB_HUD, RGB_HUI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, RGB_SAD, RGB_SAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, RGB_VAD, RGB_VAI, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RGB_SPD, RGB_SPI, KC_NO,
+ KC_NO, KC_NO, KC_NO, RGB_TOG, KC_TRNS, KC_NO, KC_NO, DEBUG)
+};
+
+
+
+
diff --git a/keyboards/dz60/keymaps/eric/keymap.c b/keyboards/dz60/keymaps/eric/keymap.c
index d2cabebe7..a384de480 100644
--- a/keyboards/dz60/keymaps/eric/keymap.c
+++ b/keyboards/dz60/keymaps/eric/keymap.c
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0
@@ -56,37 +54,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
};
-
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC)
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
diff --git a/keyboards/dz60/keymaps/f3d3/keymap.c b/keyboards/dz60/keymaps/f3d3/keymap.c
index 85bb05a1d..1e92aabc1 100644
--- a/keyboards/dz60/keymaps/f3d3/keymap.c
+++ b/keyboards/dz60/keymaps/f3d3/keymap.c
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0
@@ -18,7 +16,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------------'
*/
- LAYOUT_2_shifts(
+ LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
@@ -42,44 +40,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
- LAYOUT_2_shifts(
+ LAYOUT_all(
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL,
KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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, BL_TOGG, BL_DEC, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MSTP, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT),
};
-
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
diff --git a/keyboards/dz60/keymaps/frogger/keymap.c b/keyboards/dz60/keymaps/frogger/keymap.c
index 86a468791..75e805cd9 100644
--- a/keyboards/dz60/keymaps/frogger/keymap.c
+++ b/keyboards/dz60/keymaps/frogger/keymap.c
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
#define ______ KC_TRNS
#define LAYER_1 1
@@ -24,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------------'
*/
- LAYOUT_2_shifts(
+ LAYOUT_all(
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,
@@ -52,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_MPRV, KC_MPLY, KC_MNXT,
*/
- LAYOUT_2_shifts(
+ LAYOUT_all(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ______, KC_DEL,
______, KC_MPRV, KC_MPLY, KC_MNXT, ______, ______, ______, ______, KC_UP, ______, ______, ______, ______, ______,
@@ -78,7 +76,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------------'
*/
- LAYOUT_2_shifts(
+ 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, ______, RESET,
______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, ______, ______, ______, ______, ______,
diff --git a/keyboards/dz60/keymaps/hailbreno/keymap.c b/keyboards/dz60/keymaps/hailbreno/keymap.c
index cc718c393..edc22a5a2 100644
--- a/keyboards/dz60/keymaps/hailbreno/keymap.c
+++ b/keyboards/dz60/keymaps/hailbreno/keymap.c
@@ -44,7 +44,7 @@ enum keycodes {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------------'
- [LAYOUT] = LAYOUT_2_shifts(
+ [LAYOUT] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -67,7 +67,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | Alt | Gui | Backspace | Fn2 | Space | Alt | App | Left| Down|Right|
* `-----------------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT_2_shifts(
+[_QWERTY] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
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,
@@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | Alt | Gui | Backspace | Fn2 | Space | Alt | App | Left| Down|Right|
* `-----------------------------------------------------------------------------------------'
*/
-[_COLEMAK] = LAYOUT_2_shifts(
+[_COLEMAK] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
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_DEL,
LT(_FUNC,KC_CAPS), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT,
@@ -107,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | Alt | Gui | Backspace | Fn2 | Space | Alt | App | Left| Down|Right|
* `-----------------------------------------------------------------------------------------'
*/
-[_DVORAK] = LAYOUT_2_shifts(
+[_DVORAK] = LAYOUT_all(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV,
KC_TAB, KC_QUOTE, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_DEL,
LT(_FUNC,KC_CAPS), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT,
@@ -127,7 +127,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | Home| PgDn| End |
* `-----------------------------------------------------------------------------------------'
*/
-[_FUNC] = LAYOUT_2_shifts(
+[_FUNC] = LAYOUT_all(
_______, KC_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_PGUP, KC_UP, KC_PGDN, KC_CIRC, _______, _______, KC_BSPC,
_______, _______, _______, _______, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_TILD, _______,
@@ -147,7 +147,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------------'
*/
-[_FUNC2] = LAYOUT_2_shifts(
+[_FUNC2] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -167,7 +167,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------------'
*/
-[_RGB] = LAYOUT_2_shifts(
+[_RGB] = LAYOUT_all(
_______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, _______, _______, _______, _______, _______, _______,
_______, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -187,7 +187,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | |Qwerty|Colemk|Dvorak|
* `-----------------------------------------------------------------------------------------'
*/
-[_ADJUST] = LAYOUT_2_shifts(
+[_ADJUST] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/dz60/keymaps/iso_6u_space/keymap.c b/keyboards/dz60/keymaps/iso_6u_space/keymap.c
index 15ad72f3e..e0085b490 100644
--- a/keyboards/dz60/keymaps/iso_6u_space/keymap.c
+++ b/keyboards/dz60/keymaps/iso_6u_space/keymap.c
@@ -1,74 +1,44 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * _______ can be used in place of KC_TRNS (transparent) *
+ * XXXXXXX can be used in place of KC_NO (No Operation) *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* ISO 6u layout layer 0
-* ,-----------------------------------------------------------------------------------------.
-* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ß | ´ | BSPC |
-* |-----------------------------------------------------------------------------------------+
-* | Tab | Q | W | E | R | T | Z | U | I | O | P | P | Ü | * | |
-* |-------------------------------------------------------------------------------------| +
-* | Layer_1 | A | S | D | F | G | H | J | K | L | Ö | Ä | # |Enter |
-* |-----------------------------------------------------------------------------------------+
-* | Shift| < | Y | X | C | V | B | N | M | , | . | . | - | RShift |
-* |-----------------------------------------------------------------------------------------+
-* | LCtrl | LGUI | LAlt | Space | RAlt | RGUI | Layer_2 | RCtrl |
-* `-----------------------------------------------------------------------------------------'
-*/
- 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_NO, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT,KC_RGUI, KC_NO, MO(2), KC_RCTL),
+ /* ISO 6u layout layer 0 (UK Layout shown)
+ * ,-----------------------------------------------------------.
+ * |Esc|1 !|2 "|3 £|4 $|5 %|6 ^|7 &|8 *|9 (|0 )|- _|= +| Bksp |
+ * |-----------------------------------------------------------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P |[ {|] }|Enter|
+ * |------------------------------------------------------. |
+ * | Fn1 | A | S | D | F | G | H | J | K | L |; :|' @|# ~| |
+ * |-----------------------------------------------------------|
+ * |Sft |\ || Z | X | C | V | B | N | M |, <|. >|/ ?| Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl |GUI|Alt | Space |Alt |GUI|Fn2|Ctrl |
+ * `-----------------------------------------------------------'
+ */
+ [0] = LAYOUT_60_iso(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(2), KC_RCTL),
+
+
+ [1] = LAYOUT_60_iso(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LCTL, KC_LGUI, KC_LGUI, XXXXXXX, KC_RALT, KC_RGUI, _______, KC_RCTL),
+
+ [2] = LAYOUT_60_iso(
+ KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL,
+ XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX),
-
- 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_NO, KC_DEL,
- KC_NO, 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_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_LSFT, KC_NO, KC_NO, KC_NO, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_LCTL, KC_LGUI, KC_LGUI, KC_NO, KC_NO, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_NO, KC_RCTL),
-
- LAYOUT(
- KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, M(4), M(5), M(6), M(7), M(8), M(9), M(10), M(11), M(12), KC_NO, KC_DEL,
- KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_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_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_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
-};
-
-enum function_id {
- SHIFT_ESC,
};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
diff --git a/keyboards/dz60/keymaps/iso_7u_space/keymap.c b/keyboards/dz60/keymaps/iso_7u_space/keymap.c
index 2de244598..016fe9a6a 100644
--- a/keyboards/dz60/keymaps/iso_7u_space/keymap.c
+++ b/keyboards/dz60/keymaps/iso_7u_space/keymap.c
@@ -1,76 +1,47 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * _______ can be used in place of KC_TRNS (transparent) *
+ * XXXXXXX can be used in place of KC_NO (No Operation) *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* ISO 7u layout layer 0
-* ,-----------------------------------------------------------------------------------------.
-* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ß | ´ | BSPC |
-* |-----------------------------------------------------------------------------------------+
-* | Tab | Q | W | E | R | T | Z | U | I | O | P | P | Ü | * | |
-* |-------------------------------------------------------------------------------------| +
-* | Layer_1 | A | S | D | F | G | H | J | K | L | Ö | Ä | # |Enter |
-* |-----------------------------------------------------------------------------------------+
-* | Shift| < | Y | X | C | V | B | N | M | , | . | . | - | RShift |
-* |-----------------------------------------------------------------------------------------+
-* | LCtrl | LGUI | LAlt | Space | RAlt | Layer_2 | RCtrl |
-* `-----------------------------------------------------------------------------------------'
-*/
+ /* ISO 7u layout layer 0
+ * ,-----------------------------------------------------------.
+ * |Esc|1 !|2 "|3 £|4 $|5 %|6 ^|7 &|8 *|9 (|0 )|- _|= +| Bksp |
+ * |-----------------------------------------------------------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P |[ {|] }|Enter|
+ * |------------------------------------------------------. |
+ * | Fn1 | A | S | D | F | G | H | J | K | L |; :|' @|# ~| |
+ * |-----------------------------------------------------------|
+ * |Sft |\ || Z | X | C | V | B | N | M |, <|. >|/ ?| Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl |GUI|Alt | Space |Alt |Fn2|Ctrl |
+ * `-----------------------------------------------------------'
+ */
+ [0] = LAYOUT_60_iso(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ 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_BSLS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, XXXXXXX, KC_RALT, MO(2), KC_RCTL
+ ),
+
+ [1] = LAYOUT_60_iso(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_PGUP, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_PGDN, KC_LGUI, KC_LGUI, XXXXXXX, XXXXXXX, KC_RGUI, _______, KC_RCTL
+ ),
+
+ [2] = LAYOUT_60_iso(
+ KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL,
+ XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX
+ ),
- 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_NO, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
- KC_LCTL, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_NO, KC_RALT, KC_NO, MO(2), KC_RCTL),
-
-
- 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_NO, KC_DEL,
- KC_NO, 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_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, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_PGDOWN, KC_LGUI, KC_LGUI, KC_NO, KC_NO, KC_NO, KC_RALT, KC_RGUI, KC_NO, KC_NO, KC_RCTL),
-
- LAYOUT(
- KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_DEL,
- KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
- KC_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_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_LCTL, KC_LGUI, KC_LALT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
-};
-
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
diff --git a/keyboards/dz60/keymaps/iso_de_andys8/README.md b/keyboards/dz60/keymaps/iso_de_andys8/README.md
new file mode 100644
index 000000000..504726adf
--- /dev/null
+++ b/keyboards/dz60/keymaps/iso_de_andys8/README.md
@@ -0,0 +1,3 @@
+# ISO DE layout
+
+This layout is ISO-DE and similar to a standard 60 ISO layout. There are vim style arrow keys on the function layer. The bottom right is the expected default.
diff --git a/keyboards/dz60/keymaps/iso_de_andys8/keymap.c b/keyboards/dz60/keymaps/iso_de_andys8/keymap.c
new file mode 100644
index 000000000..3039914c6
--- /dev/null
+++ b/keyboards/dz60/keymaps/iso_de_andys8/keymap.c
@@ -0,0 +1,38 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* ISO 60 layout by andys8 (ISO German keyboard layout shown)
+ *
+ * This layout starts from a standard ISO 60% layout, and adds a function layer.
+ *
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 ! | 2 " | 3 § | 4 $ | 5 % | 6 & | 7 / | 8 ( | 9 ) | 0 = | ß ? | ´ ` | Backspace |
+ * |-----------------------------------------------------------------------------------------|
+ * | Tab | Q | W | E | R | T | Z | U | I | O | P | Ä | + * | Enter |
+ * |---------------------------------------------------------------------------------- |
+ * | Layer_1 | A | S | D | F | G | H | J | K | L | Ö | Ü | # ' | |
+ * |-----------------------------------------------------------------------------------------|
+ * | Shift | < > | Y | X | C | V | B | N | M | , ; | . : | - _ | Shift |
+ * |-----------------------------------------------------------------------------------------|
+ * | LCtl | LGUI | LAlt | Space | RAlt | RGUI | App | RCtl |
+ * `-----------------------------------------------------------------------------------------'
+ */
+ LAYOUT_60_iso(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ 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_BSLS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ ),
+
+
+ LAYOUT_60_iso(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PSCR, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_DEL, KC_NO, KC_NO,
+ KC_LSFT, BL_TOGG, KC_APP, KC_PAUS, KC_INS, KC_NO, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+
+};
diff --git a/keyboards/dz60/keymaps/iso_de_andys8/rules.mk b/keyboards/dz60/keymaps/iso_de_andys8/rules.mk
new file mode 100644
index 000000000..b5f45d7aa
--- /dev/null
+++ b/keyboards/dz60/keymaps/iso_de_andys8/rules.mk
@@ -0,0 +1,15 @@
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+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
+AUTO_SHIFT_ENABLE = no # If the time depressed is greater than or equal to the AUTO_SHIFT_TIMEOUT, then a shifted version of the key is emitted. If the time is less than the AUTO_SHIFT_TIMEOUT time, then the normal state is emitted
+TAP_DANCE_ENABLE = no
diff --git a/keyboards/dz60/keymaps/iso_split-spacebar/README.md b/keyboards/dz60/keymaps/iso_split-spacebar/README.md
new file mode 100644
index 000000000..7d96f2225
--- /dev/null
+++ b/keyboards/dz60/keymaps/iso_split-spacebar/README.md
@@ -0,0 +1,69 @@
+# iso layout with a split spacebar
+
+i needed to have an ISO layout
+and i wanted to have a split spacebar
+i couldn't find anything ready so i cobbled this together
+
+
+
+---- Layer 0 - BL
+this is basically the standard iso layout with the addition of the split spacebar
+menu key (KC_APP) is used to move to the next layer
+the key in between the two spacebars is the function key
+ *,-----------------------------------------------------------.
+ *| ' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp |
+ *|-----------------------------------------------------------|
+ *| Tab | q | w | e | r | t | y | u | i | o | p | [ | ] |enter|
+ *|------------------------------------------------------ |
+ *| Caps | a | s | d | f | g | h | j | k | l | ; | ' | # | |
+ *|-----------------------------------------------------------|
+ *|Shft| < | z | x | c | v | b | n | m | , | . | / | Shift |
+ *|-----------------------------------------------------------|
+ *|Ctrl|Gui |Alt | Space | FN | Space |Alt |Gui | NL |Ctrl |
+ *`-----------------------------------------------------------'
+
+---- Layer 1 - FL
+quite standard function layer
+arrow keys and mouse movement/buttons on the home row
+ *,-----------------------------------------------------------.
+ *|ESC|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| DEL |
+ *|-----------------------------------------------------------|
+ *| | | | | | | | | | |prt| | | |
+ *|------------------------------------------------------ |
+ *| |m l|m d|m u|m r| | | l | d | u | r | | | |
+ *|-----------------------------------------------------------|
+ *| | | | | |mb1|mb2| |hm |pgd|pgu|end| |
+ *|-----------------------------------------------------------|
+ *| | | | | | | | | | |
+ *`-----------------------------------------------------------'
+
+---- Layer 2 - NL
+numbers numbers numbers...
+first key (top left) to return to BL
+menu key (KC_APP) is used to move to the next layer
+ *,-----------------------------------------------------------.
+ *|BL | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | |
+ *|-----------------------------------------------------------|
+ *| | 4 | 5 | 6 | * | / | | 4 | 5 | 6 | * | / | ] | |
+ *|------------------------------------------------------ |
+ *| | 7 | 8 | 9 | + | - | | 1 | 2 | 3 | + | - | | |
+ *|-----------------------------------------------------------|
+ *| | | 0 | , | . | = | | | 0 | , | . | = | |
+ *|-----------------------------------------------------------|
+ *| | | | | | | | | RL | |
+ *`-----------------------------------------------------------'
+
+---- Layer 3 - BL
+all the fancy lights
+and useful reset button (top right)
+ *,-----------------------------------------------------------.
+ *|BL | | | | | | | | | | | | |Reset |
+ *|-----------------------------------------------------------|
+ *| |tog|mod|hui|hud| | |sai|sad|vai|vad| | | |
+ *|------------------------------------------------------ |
+ *| |sta|bre|rai|swi| | |sna|kni|gra|xms| | | |
+ *|-----------------------------------------------------------|
+ *| | |bd |bt |bi |bs | | | | | | | |
+ *|-----------------------------------------------------------|
+ *| | | | | | | | | BL | |
+ *`-----------------------------------------------------------'
diff --git a/keyboards/dz60/keymaps/iso_split-spacebar/keymap.c b/keyboards/dz60/keymaps/iso_split-spacebar/keymap.c
new file mode 100644
index 000000000..7c17a6f5f
--- /dev/null
+++ b/keyboards/dz60/keymaps/iso_split-spacebar/keymap.c
@@ -0,0 +1,193 @@
+// using as reference
+// https://docs.qmk.fm/#/keymap
+
+// thanks to atlacat, hailbreno, itsaferbie and weeheavy...
+
+// and special thanks to AGausmann and drashna for the layer-activated RGB underglow
+// https://www.reddit.com/r/olkb/comments/6t1vdu/update_layeractivated_rgb_underglow/
+// https://github.com/AGausmann/qmk_firmware/blob/agausmann-v3.x/keyboards/nyquist/keymaps/agausmann/keymap.c
+
+#include QMK_KEYBOARD_H
+
+
+// Helpful defines
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+/*
+* Each layer gets a name for readability.
+* 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, and you can also skip them entirely
+* and just use numbers.
+*
+*/
+#define BL 0 // Base Layer
+#define FL 1 // Function Layer
+#define NL 2 // Numpad Layer
+#define RL 3 // RGB Layer
+
+/*
+* Let's give an easier name to the RGB modes
+* and assign the ones we want to the different layer
+* these will then be used by the function below
+*
+*/
+#define RGB_STA RGB_M_P //rgb static
+#define RGB_BRE RGB_M_B //rgb breathe
+#define RGB_RAI RGB_M_R //rgb rainbow
+#define RGB_SWI RGB_M_SW //rgb swirl
+#define RGB_SNA RGB_M_SN //rgb snake
+#define RGB_KNI RGB_M_K //rgb knight
+#define RGB_GRA RGB_M_G //rgb gradient
+#define RGB_XMS RGB_M_X //rgb christmas
+//
+#define RGB_BL_MODE rgblight_mode_noeeprom(3) //rgb mode for BL layer
+#define RGB_BL_LIGHT rgblight_sethsv_noeeprom_turquoise() //rgb light for BL layer
+//
+#define RGB_FL_MODE rgblight_mode_noeeprom(1) //rgb mode for FL layer
+#define RGB_FL_LIGHT rgblight_sethsv_noeeprom_orange() //rgb light for FL layer
+//
+#define RGB_NL_MODE rgblight_mode_noeeprom(12) //rgb mode for NL layer
+#define RGB_NL_LIGHT rgblight_sethsv_noeeprom_turquoise() //rgb light for NL layer
+//
+#define RGB_RL_MODE rgblight_mode_noeeprom(22) //rgb mode for RL layer
+#define RGB_RL_LIGHT rgblight_sethsv_noeeprom_red() //rgb light for RL layer
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Keymap BL: Base Layer (Default Layer)
+ *
+ * ,-----------------------------------------------------------.
+ * | ' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Backsp |
+ * |-----------------------------------------------------------|
+ * | Tab | q | w | e | r | t | y | u | i | o | p | [ | ] |enter|
+ * |------------------------------------------------------ |
+ * | Caps | a | s | d | f | g | h | j | k | l | ; | ' | # | |
+ * |-----------------------------------------------------------|
+ * |Shft| < | z | x | c | v | b | n | m | , | . | / | Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl|Gui |Alt | Space | FN | Space |Alt |Gui | NL |Ctrl |
+ * `-----------------------------------------------------------'
+ */
+ [BL] = LAYOUT_60_iso_split(
+ // 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(FL), KC_SPC, KC_RALT, KC_RGUI, TO(NL), KC_RCTL),
+
+ /* Keymap FL: Function Layer
+ *
+ * ,-----------------------------------------------------------.
+ * |ESC|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| DEL |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | |prt| | | |
+ * |------------------------------------------------------ |
+ * | |m l|m d|m u|m r| | | l | d | u | r | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | |mb1|mb2| |hm |pgd|pgu|end| |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `-----------------------------------------------------------'
+ */
+ [FL] = LAYOUT_60_iso_split(
+ // 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, _______, _______,
+ _______, KC_MS_LEFT,KC_MS_DOWN,KC_MS_UP, KC_MS_RIGHT,_______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
+ _______, _______, _______, _______, _______, KC_MS_BTN1,KC_MS_BTN2,_______, KC_HOME, KC_PGDOWN, KC_PGUP, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ /* Keymap NL: Numpad Layer
+ *
+ * ,-----------------------------------------------------------.
+ * |BL | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | | | |
+ * |-----------------------------------------------------------|
+ * | | 4 | 5 | 6 | * | / | | 4 | 5 | 6 | * | / | ] | |
+ * |------------------------------------------------------ |
+ * | | 7 | 8 | 9 | + | - | | 1 | 2 | 3 | + | - | | |
+ * |-----------------------------------------------------------|
+ * | | | 0 | , | . | = | | | 0 | , | . | = | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | RL | |
+ * `-----------------------------------------------------------'
+ */
+ [NL] = LAYOUT_60_iso_split(
+ // 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ TG(NL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______,
+ _______, KC_4, KC_5, KC_6, KC_PAST, KC_PSLS, _______, KC_4, KC_5, KC_6, KC_PAST, KC_PSLS, _______,
+ _______, KC_7, KC_8, KC_9, KC_PPLS, KC_PMNS, _______, KC_1, KC_2, KC_3, KC_PPLS, KC_PMNS, _______, _______,
+ _______, KC_0, KC_COMM, KC_DOT, KC_EQL, _______, _______, _______, KC_0, KC_COMM, KC_DOT, KC_EQL, _______,
+ _______, _______, _______, _______, MO(FL), _______, _______, _______, TG(RL), _______),
+
+ /* Keymap RL: RGB Layer
+ *
+ * ,-----------------------------------------------------------.
+ * |BL | | | | | | | | | | | | |Reset |
+ * |-----------------------------------------------------------|
+ * | |tog|mod|hui|hud| | |sai|sad|vai|vad| | | |
+ * |------------------------------------------------------ |
+ * | |sta|bre|rai|swi| | |sna|kni|gra|xms| | | |
+ * |-----------------------------------------------------------|
+ * | | |bd |bt |bi |bs | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | BL | |
+ * `-----------------------------------------------------------'
+ */
+ [RL] = LAYOUT_60_iso_split(
+ // 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ TG(RL), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, _______, _______, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______,
+ _______, RGB_STA, RGB_BRE, RGB_RAI, RGB_SWI, _______, _______, RGB_SNA, RGB_KNI, RGB_GRA, RGB_XMS, _______, _______, _______,
+ _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, MO(FL), _______, _______, _______, TO(BL), _______),
+
+
+};
+
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+
+// layer-activated RGB underglow
+
+void matrix_scan_user(void) {
+
+ #ifdef RGBLIGHT_ENABLE
+
+ static uint8_t old_layer = 1;
+ uint8_t new_layer = biton32(layer_state);
+
+ if (old_layer != new_layer) {
+ switch (new_layer) {
+ case BL:
+ RGB_BL_MODE;
+ RGB_BL_LIGHT;
+ break;
+ case FL:
+ RGB_FL_MODE;
+ RGB_FL_LIGHT;
+ break;
+ case NL:
+ RGB_NL_MODE;
+ // RGB_NL_LIGHT;
+ break;
+ case RL:
+ RGB_RL_MODE;
+ // RGB_RL_LIGHT;
+ break;
+ }
+
+ old_layer = new_layer;
+ }
+
+ #endif //RGBLIGHT_ENABLE
+
+}
diff --git a/keyboards/dz60/keymaps/iso_uk/keymap.c b/keyboards/dz60/keymaps/iso_uk/keymap.c
index 1c15a59df..13e6e1859 100644
--- a/keyboards/dz60/keymaps/iso_uk/keymap.c
+++ b/keyboards/dz60/keymaps/iso_uk/keymap.c
@@ -18,8 +18,6 @@
#define MO_FN MO(1)
#define MO_FN MO(1)
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_60_iso(
@@ -50,37 +48,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
diff --git a/keyboards/dz60/keymaps/iso_vim_arrow/keymap.c b/keyboards/dz60/keymaps/iso_vim_arrow/keymap.c
index 9e85a89ee..4dad9e19f 100644
--- a/keyboards/dz60/keymaps/iso_vim_arrow/keymap.c
+++ b/keyboards/dz60/keymaps/iso_vim_arrow/keymap.c
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* ISO 5x1u layout (ISO German keyboard layout shown)
@@ -23,8 +21,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
LAYOUT_60_iso_5x1u(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT,
- 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_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,
+ 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_BSLS, KC_ENT,
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
@@ -32,44 +30,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT_60_iso_5x1u(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PSCR, KC_NO, KC_NO, KC_NO,
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_DEL, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, RESET, KC_NO, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PSCR, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_END, KC_DEL, KC_NO, KC_NO,
KC_LSFT, BL_TOGG, KC_APP, KC_PAUS, KC_INS, KC_NO, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, KC_NO, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_BSPC, KC_DEL, KC_HOME, KC_PGDN, KC_PGUP, KC_END
),
};
-
-enum function_id {
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(SHIFT_ESC),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- static uint8_t shift_esc_shift_mask;
- switch (id) {
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods()&MODS_CTRL_MASK;
- if (record->event.pressed) {
- if (shift_esc_shift_mask) {
- add_key(KC_GRV);
- send_keyboard_report();
- } else {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- } else {
- if (shift_esc_shift_mask) {
- del_key(KC_GRV);
- send_keyboard_report();
- } else {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
-}
diff --git a/keyboards/dz60/keymaps/itsaferbie/keymap.c b/keyboards/dz60/keymaps/itsaferbie/keymap.c
index ecc99cc75..de30e0538 100644
--- a/keyboards/dz60/keymaps/itsaferbie/keymap.c
+++ b/keyboards/dz60/keymaps/itsaferbie/keymap.c
@@ -9,25 +9,25 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_DEFAULT] = LAYOUT_hhkb(
+ [_DEFAULT] = LAYOUT_60_hhkb(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_LIGHTS)),
- [_FN] = LAYOUT_hhkb(
+ [_FN] = LAYOUT_60_hhkb(
______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
KC_CAPS, ______, ______, ______, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, RESET,
______, KC_VOLD, KC_VOLU, KC_MUTE, ______, ______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, ______,
- ______, ______, KC_MPRV, KC_MPLY, KC_MNXT, ______, ______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ______, ______,
+ ______, KC_MPRV, KC_MPLY, KC_MNXT, ______, ______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, ______, ______,
______, ______, ______, ______, ______),
- [_LIGHTS] = LAYOUT_hhkb(
+ [_LIGHTS] = LAYOUT_60_hhkb(
RGB_TOG, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, ______, ______, ______, ______, ______, ______,
RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
______, RGB_HUD, RGB_SAD, RGB_VAD, ______, ______, ______, ______, ______, ______, ______, ______, ______,
- ______, ______, ______, ______, BL_DEC, BL_TOGG, BL_INC, ______, ______, ______, ______, ______, ______, ______,
+ ______, ______, ______, BL_DEC, BL_TOGG, BL_INC, ______, ______, ______, ______, ______, ______, ______,
______, ______, ______, ______, ______),
};
diff --git a/keyboards/dz60/keymaps/jarred/keymap.c b/keyboards/dz60/keymaps/jarred/keymap.c
new file mode 100644
index 000000000..2ef679493
--- /dev/null
+++ b/keyboards/dz60/keymaps/jarred/keymap.c
@@ -0,0 +1,21 @@
+#include QMK_KEYBOARD_H
+
+#define _QW 0
+#define _NV 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QW] = 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, XXXXXXX, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS,
+ MO(_NV), KC_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, XXXXXXX,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,XXXXXXX,
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT,KC_RGUI, XXXXXXX,KC_APP, KC_RCTL),
+
+ [_NV] = 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 ,XXXXXXX,_______,
+ _______,RGB_TOG,RGB_MOD,_______,KC_DEL ,KC_BSPC,_______,KC_HOME,KC_UP ,KC_END ,KC_INS ,_______,_______,_______,
+ _______,RGB_HUI,RGB_HUD,KC_LSFT,KC_LCTL,KC_ENT ,_______,KC_LEFT,KC_DOWN,KC_RGHT,KC_DEL ,KC_DEL , _______,
+ _______,XXXXXXX,RGB_SAD,RGB_SAI,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,_______,_______,XXXXXXX,
+ _______,RGB_VAD,RGB_VAI, _______,_______,_______, _______,_______,XXXXXXX, RESET,_______)
+};
diff --git a/keyboards/dz60/keymaps/jkbone/keymap.c b/keyboards/dz60/keymaps/jkbone/keymap.c
index ecc391785..1efcbe38f 100644
--- a/keyboards/dz60/keymaps/jkbone/keymap.c
+++ b/keyboards/dz60/keymaps/jkbone/keymap.c
@@ -1,7 +1,6 @@
#include QMK_KEYBOARD_H
#define ____ KC_TRNS
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
#define FL_ESC LT(_FL, KC_ESC)
#define FL MO(_FL)
@@ -11,60 +10,56 @@ enum layers_idx {
_FL // Functions
};
+enum custom_keycodes {
+ RGB_VAZ = SAFE_RANGE,
+ RGB_OAZ,
+ RGB_WAN,
+ RGB_000
+};
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BL] = LAYOUT_60_iso_5x1u(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT,
- FL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ FL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS,KC_ENT,
KC_LSFT, KC_GRV, 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, FL, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
),
[_ML] = LAYOUT_60_iso_5x1u(
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
KC_LGUI, KC_LALT, KC_LCTL, ____, ____, ____, ____, ____, ____
),
[_FL] = LAYOUT_60_iso_5x1u(
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- ____, ____, DF(_BL), DF(_ML), ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
- ____, ____, ____, ____, ____, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, ____, ____, ____,
- ____, F(3), F(2), F(1), F(0), ____, ____, ____, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, ____,
+ ____, ____, DF(_BL), DF(_ML), ____, ____, ____, ____, ____, ____, ____, ____, ____,
+ ____, ____, ____, ____, ____, ____, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, ____, ____, ____, ____,
+ ____, RGB_000, RGB_WAN, RGB_OAZ, RGB_VAZ, ____, ____, ____, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, ____,
____, ____, ____, ____, ____, ____, ____, ____, ____
)
};
-enum function_id {
- RGB_VAZ,
- RGB_OAZ,
- RGB_WAN,
- RGB_000
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(RGB_VAZ),
- [1] = ACTION_FUNCTION(RGB_OAZ),
- [2] = ACTION_FUNCTION(RGB_WAN),
- [3] = ACTION_FUNCTION(RGB_000)
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch (id) {
- case RGB_VAZ:
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case RGB_VAZ:
rgblight_enable();
rgblight_setrgb(0, 204, 33);
break;
- case RGB_OAZ:
+ case RGB_OAZ:
rgblight_enable();
rgblight_setrgb(229, 65, 0);
break;
- case RGB_WAN:
+ case RGB_WAN:
rgblight_enable();
rgblight_setrgb(255, 255, 255);
break;
- case RGB_000:
+ case RGB_000:
rgblight_disable();
break;
+ }
}
-}
+ return true;
+};
diff --git a/keyboards/dz60/keymaps/krusli/keymap.c b/keyboards/dz60/keymaps/krusli/keymap.c
index 36e7b801a..0ad6f1b2b 100644
--- a/keyboards/dz60/keymaps/krusli/keymap.c
+++ b/keyboards/dz60/keymaps/krusli/keymap.c
@@ -1,6 +1,5 @@
#include QMK_KEYBOARD_H
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
#define _______ KC_TRNS
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
diff --git a/keyboards/dz60/keymaps/macos_arrow/keymap.c b/keyboards/dz60/keymaps/macos_arrow/keymap.c
index f4b03ddc9..81d61a59a 100644
--- a/keyboards/dz60/keymaps/macos_arrow/keymap.c
+++ b/keyboards/dz60/keymaps/macos_arrow/keymap.c
@@ -1,9 +1,11 @@
#include QMK_KEYBOARD_H
-#define ______ KC_TRNS
-#define _BL 0
-#define _FL 1
-#define _ML 2
+enum dz60_layers {
+ _BL, // Base layer
+ _FL, // Function layer
+ _ML, // Media layer
+ _NL // Numpad layer
+};
enum my_keycodes {
BR_UP = SAFE_RANGE,
@@ -12,45 +14,45 @@ enum my_keycodes {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* ,-----------------------------------------------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace |
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace |
* |-----------------------------------------------------------------------------------------+
* | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
* |-----------------------------------------------------------------------------------------+
- * | _FL | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * | Esc/_FL | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
* |-----------------------------------------------------------------------------------------+
- * | Shift | Z | X | C | V | B | N | M | , | . | / | _ML | Up |Shift|
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | | Up |Shift|
* |-----------------------------------------------------------------------------------------+
- * | Ctrl | Alt | Gui | Space |Gui/_ML| Alt | Left| Down|Right|
+ * | Ctrl | Alt | Gui | Space / _NL |Gui/_ML| Alt | Left| Down|Right|
* `-----------------------------------------------------------------------------------------'
*/
- [_BL] = LAYOUT_2_shifts(
- 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_NO, KC_BSPC,
+ [_BL] = LAYOUT_all(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
- MO(_FL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_ML), KC_UP, KC_RSFT,
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, LM(_ML, MOD_RGUI), KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT),
+ LT(_FL, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_A, KC_UP, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_NO, LT(_NL, KC_SPC), KC_NO, LM(_ML, MOD_RGUI), KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT),
/* ,-----------------------------------------------------------------------------------------.
- * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del |
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del |
* |-----------------------------------------------------------------------------------------+
- * | | | | | | | | | UP | | | | | |
+ * | | | | | | | |PgUp | | | | | | |
* |-----------------------------------------------------------------------------------------+
- * | | | | | | | | Left| Down|Right| | | |
+ * | | | | | | | Left| Down| Up |Right| | | |
* |-----------------------------------------------------------------------------------------+
- * | | | | | | | | | | | | | | |
+ * | | | | | | | |PgDwn| | | | | | |
* |-----------------------------------------------------------------------------------------+
* | | | | | | | | | |
* `-----------------------------------------------------------------------------------------'
*/
- [_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_DEL,
- ______, ______, ______, ______, ______, ______, ______, ______, KC_UP, ______, ______, ______, ______, ______,
- ______, ______, ______, ______, ______, ______, ______, KC_LEFT, KC_DOWN, KC_RIGHT, ______, ______, ______,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______),
+ [_FL] = LAYOUT_all(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______,
+ _______, KC_NO, _______, _______, _______, _______, _______, _______, KC_PGDN, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
/* ,-----------------------------------------------------------------------------------------.
- * |Eject| BR- | BR+ | F3 | F4 | | |PREV |PLAY |NEXT |MUTE | V- | V+ | |
+ * |Eject| BR- | BR+ | | | | |PREV |PLAY |NEXT |MUTE | V- | V+ | |
* |-----------------------------------------------------------------------------------------+
* | | | | | | | | | | | | | | Reset |
* |-----------------------------------------------------------------------------------------+
@@ -61,12 +63,31 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | |
* `-----------------------------------------------------------------------------------------'
*/
- [_ML] = LAYOUT(
- KC_MEDIA_EJECT, BR_DOWN, BR_UP, ______, ______, KC_F5, KC_F6, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, ______, ______,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, RESET,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
- ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______),
+ [_ML] = LAYOUT_all(
+ KC_MEDIA_EJECT, BR_DOWN, BR_UP, _______, _______, _______, _______, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_NO, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_NO, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ /* ,-----------------------------------------------------------------------------------------.
+ * | | | | | | | | | % | ( | ) | < | > | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | * | 0 | 1 | 2 | 3 | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | . | - | 4 | 5 | 6 | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | , | = | 7 | 8 | 9 | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------------'
+ */
+ [_NL] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_PERCENT, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_LEFT_ANGLE_BRACKET, KC_RIGHT_ANGLE_BRACKET, KC_NO, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_ASTERISK, KC_0, KC_1, KC_2, KC_3, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, KC_DOT, KC_MINS, KC_4, KC_5, KC_6, _______,
+ _______, KC_NO, _______, _______, _______, _______, _______, _______, KC_COMMA, KC_EQL, KC_7, KC_8, KC_9, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
diff --git a/keyboards/dz60/keymaps/macos_arrow/readme.md b/keyboards/dz60/keymaps/macos_arrow/readme.md
index bba8148ba..cb700b38f 100644
--- a/keyboards/dz60/keymaps/macos_arrow/readme.md
+++ b/keyboards/dz60/keymaps/macos_arrow/readme.md
@@ -15,21 +15,22 @@ My build used the following components:
```
,-----------------------------------------------------------------------------------------.
-| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace |
+| ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace |
|-----------------------------------------------------------------------------------------+
| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
|-----------------------------------------------------------------------------------------+
-| _FL | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+| _FL/Esc | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
|-----------------------------------------------------------------------------------------+
-| Shift | Z | X | C | V | B | N | M | , | . | / | _ML | Up |Shift|
+| Shift | Z | X | C | V | B | N | M | , | . | / | | Up |Shift|
|-----------------------------------------------------------------------------------------+
-| Ctrl | Alt | Cmd | Space |Cmd/_ML| Alt | Left| Down|Right|
+| Ctrl | Alt | Cmd | _NL / Space |Cmd/_ML| Alt | Left| Down|Right|
`-----------------------------------------------------------------------------------------'
```
-* The escape key use `KC_GESC` to get grave accent on any letter with ``Alt+Esc`` and `` ` `` alone with the ``Hyper+Esc``. The `~` is obtained with `Shift+Esc`. `GRAVE_ESC_GUI_OVERRIDE` is define so `Cmd+Alt+Esc` can still work.
-* The `Caps-Lock` (`Hyper`) key switch to the function layer (`_FL`).
-* The right `Cmd` key is used to switch to the media layer (`_ML`) when used with keys mapped on that layer (the top row). Any other keys just act as a `Cmd+` that key.
+* The escape key is moved to the capslock to get keep grave letter pristine.
+* The `Caps-Lock` (`Hyper`) key switch to the function layer (`_FL`) or escape when used alone.
+* The right `Cmd` key is used to switch to the media layer (`_ML`) when used with keys mapped on that layer.
+* The space key can be used to switch to the numpad layer (`_NL`) when used with one of the mapped key on that layer.
## Function Layer (_FL)
@@ -37,9 +38,9 @@ My build used the following components:
,-----------------------------------------------------------------------------------------.
| ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del |
|-----------------------------------------------------------------------------------------+
-| | | | | | | | | UP | | | | | |
+| | | | | | | |PgDwn| PgUp| | | | | |
|-----------------------------------------------------------------------------------------+
-| | | | | | | | Left| Down|Right| | | |
+| | | | | | | Left| Down| Up |Right| | | |
|-----------------------------------------------------------------------------------------+
| | | | | | | | | | | | | | |
|-----------------------------------------------------------------------------------------+
@@ -47,13 +48,13 @@ My build used the following components:
`-----------------------------------------------------------------------------------------'
```
-The function layer is activated by the `Caps-Lock` (`Hyper`) key to access `F` keys. In addition, the `IJKL` are mapped as cursor keys on that layer.
+The function layer is activated by the `Caps-Lock` (`Hyper`) key to access `F` keys. In addition, the `HJKL` are mapped as cursor keys on that layer.
## Media Layer (_ML)
```
,-----------------------------------------------------------------------------------------.
-| | BR- | BR+ | F3 | F4 | | |PREV |PLAY |NEXT |MUTE | V- | V+ | Eject |
+|Eject| BR- | BR+ | | | | |PREV |PLAY |NEXT |MUTE | V- | V+ | |
|-----------------------------------------------------------------------------------------+
| | | | | | | | | | | | | | Reset |
|-----------------------------------------------------------------------------------------+
@@ -67,4 +68,20 @@ The function layer is activated by the `Caps-Lock` (`Hyper`) key to access `F` k
The media layer is activated by the right `Cmd` (`FN`) key. It contains the typical macos media keys on the top row. Blank keys act as `Cmd+` that key on the base layer.
+## Numpad Layer (_NL)
+```
+,-----------------------------------------------------------------------------------------.
+| | | | | | | | | % | ( | ) | < | > | |
+|-----------------------------------------------------------------------------------------+
+| | | | | | | | * | 0 | 1 | 2 | 3 | | |
+|-----------------------------------------------------------------------------------------+
+| | | | | | | | . | - | 4 | 5 | 6 | |
+|-----------------------------------------------------------------------------------------+
+| | | | | | | | , | = | 7 | 8 | 9 | | |
+|-----------------------------------------------------------------------------------------+
+| | | | | | | | | |
+`-----------------------------------------------------------------------------------------'
+```
+
+The numpad layer is activated by the space bar, when hold. \ No newline at end of file
diff --git a/keyboards/dz60/keymaps/marianas/customLogic.c b/keyboards/dz60/keymaps/marianas/customLogic.c
new file mode 100644
index 000000000..b7dbcac95
--- /dev/null
+++ b/keyboards/dz60/keymaps/marianas/customLogic.c
@@ -0,0 +1,138 @@
+#include QMK_KEYBOARD_H
+#include "customLogic.h"
+#include "keymap.h"
+#include "keyDefinitions.h"
+#include "relativity.h"
+#include "timer.h"
+
+static int16_t fnTimer = 0;
+
+
+
+uint32_t layer_state_set_user(uint32_t state)
+{
+ switch (biton32(state))
+ {
+ case QWERTY:
+ rgblight_mode(9);
+ break;
+ case NAV_CLUSTER:
+ rgblight_mode(29);
+ break;
+ case GAMING:
+ rgblight_mode(26);
+ break;
+ case SQLMACROS:
+ rgblight_mode(1);
+ break;
+ case FN_LAYER:
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL+5);
+ break;
+ }
+ return state;
+}
+
+
+
+bool printSqlVerbs(uint16_t keycode, keyrecord_t *record)
+{
+ if (record->event.pressed)
+ {
+ switch (keycode)
+ {
+ case S_LFTJN:
+ SEND_STRING("LEFT JOIN");
+ activateRelativity();
+ return false;
+ case S_INRJN:
+ SEND_STRING("INNER JOIN ");
+ activateRelativity();
+ return false;
+ case S_SLCT:
+ SEND_STRING("SELECT "); return
+ false;
+ case S_FROM:
+ SEND_STRING("FROM "); return
+ false;
+ case S_DSNCT:
+ SEND_STRING("DISTINCT "); return
+ false;
+ case S_ORDER:
+ SEND_STRING("ORDER BY "); return
+ false;
+ case S_WHERE:
+ SEND_STRING("WHERE "); return
+ false;
+ case S_ALTER:
+ SEND_STRING("ALTER SESSION SET CURRENT_SCHEMA = SUPPLY;"); return false;
+ case S_ASTRK:
+ SEND_STRING("* "); return false;
+
+ }
+ }
+ return true;
+}
+
+
+bool isFn = false;
+bool didFn = false;
+
+
+bool updateLayerState(uint16_t keycode, keyrecord_t *record)
+{
+
+ if (record->event.pressed)
+ {
+ switch (keycode)
+ {
+ case FN_QT:
+ fnTimer = timer_read();
+ layer_on(FN_LAYER);
+ isFn = true;
+ return false;
+ }
+ if (isFn)
+ {
+ didFn = true;
+ return true;
+ }
+ }
+ else
+ {
+ switch(keycode)
+ {
+ case FN_QT:
+ layer_off(FN_LAYER);
+ if (!didFn)
+ {
+ #if fnTimeout
+ if (TIMER_DIFF_16(timer_read(), fnTimer) <= fnTimeout)
+ {
+ activateRelativity();
+ }
+ else
+ {
+ deactivateRelativity();
+ }
+ #else
+ activateRelativity();
+ #endif
+ }
+ didFn = false;
+ isFn = false;
+ return false;
+ }
+ }
+ return true;
+}
+
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+ return
+ storeShiftState(keycode, record) &&
+ printSqlVerbs(keycode, record) &&
+ updateLayerState(keycode, record) &&
+ handleSmartMacros(keycode, record);
+}
diff --git a/keyboards/dz60/keymaps/marianas/customLogic.h b/keyboards/dz60/keymaps/marianas/customLogic.h
new file mode 100644
index 000000000..f0e6ecdca
--- /dev/null
+++ b/keyboards/dz60/keymaps/marianas/customLogic.h
@@ -0,0 +1,10 @@
+#define fnTimeout 500
+
+
+uint32_t layer_state_set_user(uint32_t state);
+
+bool printSqlVerbs(uint16_t keycode, keyrecord_t *record);
+
+bool updateLayerState(uint16_t keycode, keyrecord_t *record);
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record);
diff --git a/keyboards/dz60/keymaps/marianas/keyDefinitions.h b/keyboards/dz60/keymaps/marianas/keyDefinitions.h
new file mode 100644
index 000000000..010ace769
--- /dev/null
+++ b/keyboards/dz60/keymaps/marianas/keyDefinitions.h
@@ -0,0 +1,124 @@
+
+//Control
+#define MO_FNLR MO(FN_LAYER)
+#define BACKSPC KC_BSPC
+#define ENTER_OR_SQL LT(SQLMACROS,KC_ENT)
+#define ESCAP KC_ESC
+#define PSCR KC_PSCREEN
+#define SCRL KC_SCROLLLOCK
+#define PAUS KC_PAUSE
+#define NSRT KC_INSERT
+#define HOME KC_HOME
+#define PGUP KC_PGUP
+#define PGDN KC_PGDN
+#define END_ KC_END
+#define DELT KC_DELETE
+#define UPUP KC_UP
+#define D_WN KC_DOWN
+#define LEFT KC_LEFT
+#define RGHT KC_RIGHT
+
+//KEYPAD
+#define KP_1 KC_KP_1
+#define KP_2 KC_KP_2
+#define KP_3 KC_KP_3
+#define KP_4 KC_KP_4
+#define KP_5 KC_KP_5
+#define KP_6 KC_KP_6
+#define KP_7 KC_KP_7
+#define KP_8 KC_KP_8
+#define KP_9 KC_KP_9
+#define KP_0 KC_KP_0
+#define NMLK KC_NUMLOCK
+#define STAR KC_KP_ASTERISK
+#define KSSH KC_KP_SLASH
+#define KMIN KC_KP_MINUS
+#define PLUS KC_KP_PLUS
+#define KNTR KC_KP_ENTER
+#define KDOT KC_KP_DOT
+
+//Modifiers
+#define CTLL KC_LCTL
+#define LEFTSHFT KC_LSPO
+#define WINL KC_LGUI
+#define ALTL KC_LALT
+#define CTLR KC_RCTL
+#define RIGHT_SHIFT__PAREN KC_RSPC
+#define WINR KC_RGUI
+#define ALTR KC_RALT
+#define APPR KC_APP
+
+
+//Punctuation
+#define CMMA KC_COMM
+#define PRRD KC_DOT
+#define SLSH KC_SLSH
+#define QUOT KC_QUOT
+#define COLN KC_SCLN
+#define LBRC KC_LBRC
+#define RBRC KC_RBRC
+#define EQUL KC_EQL
+#define MNUS KC_MINS
+#define BSLASH KC_BSLS
+
+//Layers
+#define QWRTY TO(QWERTY)
+#define NAVS TO(NAV_CLUSTER)
+#define GAME TO(GAMING)
+
+//Space
+#define ____ KC_TRNS
+#define _____ KC_TRNS
+#define ______ KC_TRNS
+#define _______ KC_TRNS
+#define ________ KC_TRNS
+#define ___________ KC_TRNS
+#define _________________ KC_TRNS
+#define SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACE KC_SPC
+#define KCNO KC_NO
+
+enum sql_macros {
+ S_LFTJN = SAFE_RANGE, // L
+ S_INRJN, // I
+ S_SLCT, // S
+ S_FROM, // F
+ S_DSNCT, // D
+ S_ORDER, // O
+ S_WHERE, // W
+ S_ALTER, // Esc
+ S_ASTRK, // *
+
+ TD_A,
+ TD_B,
+ TD_C, // Corp, Corporation, Company
+ TD_D, // Distribution, Dist, Distributor
+ TD_E,
+ TD_F,
+ TD_G, // GlobalLookup
+ TD_H,
+ TD_I, // Instance, Item
+ TD_J,
+ TD_K,
+ TD_L,
+ TD_M,
+ TD_N, // NadRate
+ TD_O,
+ TD_P, // Product, Person,
+ TD_Q, // Darden
+ TD_R,
+ TD_S, // Supplier, Step
+ TD_T, // Task, Type
+ TD_U,
+ TD_V,
+ TD_W, // Workflow,
+ TD_X,
+ TD_Y,
+ TD_Z,
+ TD_BSPC,
+ TD_ENT,
+ TD_ESC,
+
+ FN_QT
+};
+
+bool isShifted(void);
diff --git a/keyboards/dz60/keymaps/marianas/keymap.c b/keyboards/dz60/keymaps/marianas/keymap.c
new file mode 100644
index 000000000..f86074b9c
--- /dev/null
+++ b/keyboards/dz60/keymaps/marianas/keymap.c
@@ -0,0 +1,50 @@
+#include QMK_KEYBOARD_H
+#include "keymap.h"
+#include "relativity.h"
+#include "keyDefinitions.h"
+#include "customLogic.h"
+
+// planned change: store previous table names and abbreviations to allow scrolling for inner joins on table name+id and abbreviation+id.
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [QWERTY]=
+ LAYOUT_60_ansi(
+ ESCAP, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, MNUS, EQUL, BACKSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, LBRC, RBRC, BSLASH,
+ FN_QT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, COLN, QUOT, ENTER_OR_SQL,
+ LEFTSHFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, CMMA, PRRD, SLSH, RIGHT_SHIFT__PAREN,
+ CTLL, WINL, ALTL, SPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACE, ALTR, WINR, APPR, CTLR),
+
+ [NAV_CLUSTER]=
+ LAYOUT_60_ansi(
+ _____, PSCR, SCRL, PAUS, NSRT, HOME, PGUP, NMLK, KSSH, STAR, KMIN, ____, ____, ______,
+ ______, ____, ____, ____, DELT, END_, PGDN, KP_7, KP_8, KP_9, PLUS, ____, ____, _____,
+ _______, ____, ____, ____, ____, UPUP, UPUP, KP_4, KP_5, KP_6, PLUS, ____, ___________,
+ ________, ____, ____, ____, LEFT, D_WN, RGHT, KP_1, KP_2, KP_3, KNTR, _________________,
+ ____, ____, ____, /*-----------------*/KC_KP_0/*-----------------*/, KDOT, KNTR, ____, ____),
+
+ [GAMING]=
+ LAYOUT_60_ansi(
+ _____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ______,
+ ______, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, _____,
+ KCNO, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ___________,
+ ________, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, _________________,
+ ____, KCNO, ____, /*------------------*/_____/*------------------*/, ____, KCNO, ____, QWRTY),
+
+ [SQLMACROS]=
+ LAYOUT_60_ansi(
+ S_ALTER, ____, ____, ____, ____, ____, ____, ____, S_ASTRK, ____, ____, ____, ____, ___________,
+ ______, ____, S_WHERE, ____, ____, ____, ____, ____, S_INRJN, S_ORDER, ____, ____, ____, ______,
+ _______, KC_LBRC, S_SLCT, S_ASTRK ,S_FROM, ____, ____, ____, ____, S_LFTJN, ____, RBRC, ___________,
+ ________, RGB_VAI, RGB_VAD, ____, ____, ____, ____, ____, ____, ____, ____, _________________,
+ ____, ____, ____, /*------------------*/_____/*------------------*/, ____, ____, ____, ____),
+
+ [FN_LAYER]=
+ LAYOUT_60_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_CAPSLOCK, KC_MPRV, KC_MPLY, KC_MNXT, LWIN(KC_R), ____, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_BRK, ____,
+ ____, KC_VOLD, KC_MUTE, KC_VOLU, ____, ____, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, ____,
+ ____, RGB_HUI, RGB_SAI, RGB_SAD, ____, ____, KC_END, QWRTY, GAME, NAVS, ____, ____,
+ ____, ____, ____, _________________, ____, KC_HYPR, KC_MEH, RESET)
+};
diff --git a/keyboards/dz60/keymaps/marianas/keymap.h b/keyboards/dz60/keymaps/marianas/keymap.h
new file mode 100644
index 000000000..bb1ea68c7
--- /dev/null
+++ b/keyboards/dz60/keymaps/marianas/keymap.h
@@ -0,0 +1,15 @@
+#include QMK_KEYBOARD_H
+
+
+enum marianas_layers {
+ QWERTY,
+/*
+ COLEMAK,
+ DVORAK,
+*/
+ NAV_CLUSTER,
+ GAMING,
+ SQLMACROS,
+ FN_LAYER
+};
+
diff --git a/keyboards/dz60/keymaps/marianas/relativity.c b/keyboards/dz60/keymaps/marianas/relativity.c
new file mode 100644
index 000000000..96a5eb4e6
--- /dev/null
+++ b/keyboards/dz60/keymaps/marianas/relativity.c
@@ -0,0 +1,510 @@
+#include "relativity.h"
+#include "keymap.h"
+#include "keyDefinitions.h"
+
+
+uint16_t *macroTaps = 0;
+
+char *tableNameList = 0;
+
+uint8_t *charCount = 0;
+uint8_t countPointer = 0;
+
+bool relativityActive = false;
+
+
+bool sendAbbr = false;
+
+
+static int16_t relativityTimer = 0;
+
+
+bool tempOff = false;
+
+
+
+
+void initStringData()
+{
+ if (macroTaps == 0)
+ {
+ macroTaps = malloc(macroTapsLen*sizeof(uint16_t));
+ for(int i = 0; i < macroTapsLen; i++)
+ {
+ macroTaps[i] = 0;
+ }
+ }
+ if (tableNameList == 0)
+ {
+ tableNameList = malloc(tableNameListLen*sizeof(char));
+ for(int i = 0; i < tableNameListLen; i++)
+ {
+ tableNameList[i] = 0;
+ }
+ }
+ if (charCount == 0)
+ {
+ charCount = malloc(charCountLen*sizeof(uint8_t));
+ for (int i = 0; i < charCountLen; i++)
+ {
+ charCount[i] = 0;
+ }
+ }
+}
+
+void activateRelativity(void)
+{
+ initStringData();
+ rgblight_mode(RGBLIGHT_MODE_KNIGHT);
+ relativityTimer = timer_read();
+ relativityActive = true;
+}
+
+bool deactivateRelativity(void)
+{
+ rgblight_mode(9);
+ eraseKeyCodes();
+ eraseTableAbbreviation();
+ eraseCharCounts();
+ relativityActive = false;
+ tempOff = false;
+ return false;
+}
+
+bool containsCode(uint16_t kc)
+{
+ for (int i = 0; i < macroTapsLen && macroTaps[i] > 0; i++)
+ {
+ if (macroTaps[i] == kc) return true;
+ }
+ return false;
+}
+
+bool lastCodeIs(uint16_t kc)
+{
+ for (int i = 0; i < macroTapsLen-1 && macroTaps[i] > 0; i++)
+ {
+ if (macroTaps[i] == kc && macroTaps[i+1] == 0) return true;
+ }
+ return false;
+}
+
+bool last2CodeAre(uint16_t kc)
+{
+ for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++)
+ {
+ if (macroTaps[i] == kc && macroTaps[i+1] == kc && macroTaps[i+2] == 0) return true;
+ }
+ return false;
+}
+
+bool last2CodesAre(uint16_t kc, uint16_t kc2)
+{
+ for (int i = 0; i < macroTapsLen-2 && macroTaps[i] > 0; i++)
+ {
+ if (macroTaps[i] == kc && macroTaps[i+1] == kc2 && macroTaps[i+2] == 0) return true;
+ }
+ return false;
+}
+
+void addKeyCode(uint16_t kc)
+{
+ int i = 0;
+ while (i < macroTapsLen-2 && macroTaps[i] > 0) i++;
+ if (macroTaps[i] == 0)
+ {
+ macroTaps[i] = kc;
+ macroTaps[i+1] = 0;
+ }
+}
+
+void eraseKeyCodes(void)
+{
+ int i = 0;
+ while (i < macroTapsLen && macroTaps[i] > 0) macroTaps[i++] = 0;
+}
+
+void eraseCharCounts(void)
+{
+ while (countPointer > 0)
+ {
+ charCount[countPointer] = 0;
+ countPointer--;
+ }
+ charCount[countPointer] = 0;
+}
+
+void printTableAbbreviationLimited(void)
+{
+ if (tableNameList[0] == 0)
+ {
+ return;
+ }
+ int i = 0;
+ for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++)
+ {
+ if (tableNameList[i] >= 65 && tableNameList[i] <= 90)
+ {
+ send_char(tableNameList[i]+32);
+ }
+ else
+ {
+ send_char(tableNameList[i]);
+ }
+ }
+}
+
+void printTableAbbreviation(void)
+{
+ if (tableNameList[0] == 0)
+ {
+ return;
+ }
+ send_char(0x20);
+ int i = 0;
+ for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++)
+ {
+ if (tableNameList[i] >= 65 && tableNameList[i] <= 90)
+ {
+ send_char(tableNameList[i]+32);
+ }
+ else
+ {
+ send_char(tableNameList[i]);
+ }
+ }
+ send_char(0x20);
+}
+
+void eraseTableAbbreviation(void)
+{
+ for (int i = 0; i < tableNameListLen && tableNameList[i] > 0; i++)
+ {
+ tableNameList[i] = '\0';
+ }
+}
+
+void printString(char* str)
+{
+
+ if (str[0] != '\0')
+ {
+ int i = 0;
+ while (true)
+ {
+ if (str[i] == 0)
+ {
+ break;
+ }
+ send_char(str[i++]);
+ charCount[countPointer]++;
+ }
+ }
+}
+
+void printStringAndQueueChar(char* str)
+{
+ if (charCount[countPointer] > 0 && countPointer < charCountLen)
+ {
+ countPointer++;
+ }
+ sendAbbr = true;
+ if (str[0] != '\0')
+ {
+ printString(str);
+
+ for (int i = 0; i < tableNameListLen-1; i++)
+ {
+ if (tableNameList[i] == '\0')
+ {
+ tableNameList[i] = str[0];
+ tableNameList[i+1] = '\0';
+ break;
+ }
+ else if (i == tableNameListLen-2)
+ {
+ printTableAbbreviation();
+ break;
+ }
+ }
+ //for (i = 0; i < tableNameListLen && tableNameList[i] > 0; i++)
+ //{
+ // send_char(tableNameList[i]);
+ //}
+ //send_string_P("Darden");
+ //send_string_P(&myarray);
+ //send_string_P(str);
+ }
+}
+
+void ReplaceString(char *orig, char *repl)
+{
+ int i = 0;
+ while((orig[i] != 0x0 && repl[i] != 0x0) && orig[i] == repl[i])
+ i++;
+
+ if(orig[i] != 0x0)
+ {
+ int o = i;
+ while (orig[o++] != 0x0) {
+ charCount[countPointer]--;
+ register_code(KC_BSPC);
+ unregister_code(KC_BSPC);
+ }
+ }
+ printString(repl+i);
+}
+
+void deletePrev(void)
+{
+ if (countPointer == 0 && charCount[countPointer] == 0)
+ return;
+ for (int i = 0; i < charCount[countPointer]; i++)
+ {
+ register_code(KC_BSPC);
+ unregister_code(KC_BSPC);
+ }
+ charCount[countPointer] = 0;
+ int i = 1;
+ for (;i < tableNameListLen-1; i++)
+ {
+ if (tableNameList[i] == 0x0)
+ {
+ break;
+ }
+ }
+ tableNameList[i-1] = 0x0;
+ if (countPointer > 0)
+ {
+ countPointer--;
+ }
+}
+
+bool processSmartMacroTap(uint16_t kc)
+{
+ if (relativityTimer > 0 && TIMER_DIFF_16(timer_read(), relativityTimer) >= relTimeout)
+ {
+ deactivateRelativity();
+ return true;
+ }
+ relativityTimer = 0;
+ switch(kc)
+ {
+ case KC_C:
+ if (containsCode(KC_D))
+ {
+ printString("ribution");
+ printStringAndQueueChar("Center");
+ }
+ else if (last2CodeAre(KC_C))
+ {
+ ReplaceString("Corporation", "Contact");
+ }
+ else if(lastCodeIs(KC_C))
+ {
+ printString("oration");
+ }
+ else
+ {
+ printStringAndQueueChar("Corp");
+ }
+ break;
+ case KC_D:
+ if (last2CodeAre(KC_D))
+ {
+ ReplaceString("Distribution", "Distributor");
+ }
+ else if(lastCodeIs(KC_D))
+ {
+ printString("ribution");
+ }
+ else
+ {
+ printStringAndQueueChar("Dist");
+ }
+ break;
+ case KC_G:
+ printStringAndQueueChar("Global");
+ printStringAndQueueChar("Lookup");
+ break;
+ case KC_I:
+ if (containsCode(KC_W))
+ printStringAndQueueChar("Instance");
+ else
+ printStringAndQueueChar("Item");
+ break;
+ case KC_N:
+ printStringAndQueueChar("NadRate");
+ break;
+ case KC_P:
+ if (last2CodesAre(KC_D, KC_C))
+ {
+ ReplaceString("DistributionCenter", "DistCenter");
+ printStringAndQueueChar("Pricing");
+ }
+ else if (last2CodeAre(KC_P))
+ {
+ }
+ else if(lastCodeIs(KC_P))
+ {
+ ReplaceString("Product", "Person");
+ }
+ else
+ {
+ printStringAndQueueChar("Product");
+ }
+ break;
+ case KC_Q:
+ printStringAndQueueChar("Darden");
+ break;
+ case KC_S:
+ if (containsCode(KC_W))
+ if (containsCode(KC_S) || containsCode(KC_D))
+ printStringAndQueueChar("Step");
+ else
+ printStringAndQueueChar("Session");
+ else
+ printStringAndQueueChar("Supplier");
+ break;
+ case KC_T:
+ if (containsCode(KC_W))
+ printStringAndQueueChar("Task");
+ else
+ printStringAndQueueChar("Type");
+ break;
+ case KC_W:
+ printStringAndQueueChar("Workflow");
+ break;
+ }
+ addKeyCode(kc);
+ return false;
+}
+
+
+bool shifted = false;
+bool isShifted()
+{
+ return shifted;
+}
+
+void setShifted(bool val)
+{
+ shifted = val;
+}
+
+
+bool storeShiftState(uint16_t keycode, keyrecord_t *record)
+{
+
+ if (record->event.pressed)
+ {
+ switch (keycode)
+ {
+ case KC_LSPO:
+ case KC_RSPC:
+ shifted = true;
+ }
+ }
+ else
+ {
+ switch (keycode)
+ {
+
+ case KC_LSPO:
+ case KC_RSPC:
+ shifted = false;
+ return true;
+ }
+ }
+ return true;
+}
+
+bool handleSmartMacros(uint16_t keycode, keyrecord_t *record)
+{
+ if (relativityActive != true) return true;
+ if (record->event.pressed)
+ {
+ switch (keycode)
+ {
+ case KC_BSPC:
+ if (!isShifted()){
+ deletePrev();
+ }
+ else {
+ register_code(KC_BSPC);
+ unregister_code(KC_BSPC);
+ }
+ return false;
+ case KC_A:
+ case KC_B:
+ case KC_C:
+ case KC_D:
+ case KC_E:
+ case KC_F:
+ case KC_G:
+ case KC_H:
+ case KC_I:
+ case KC_J:
+ case KC_K:
+ case KC_L:
+ case KC_M:
+ case KC_N:
+ case KC_O:
+ case KC_P:
+ case KC_Q:
+ case KC_R:
+ case KC_S:
+ case KC_T:
+ case KC_U:
+ case KC_V:
+ case KC_W:
+ case KC_X:
+ case KC_Y:
+ case KC_Z:
+ return processSmartMacroTap(keycode);
+
+ case PRRD:
+ if (tempOff)
+ {
+ SEND_STRING("Id = ");
+ printTableAbbreviationLimited();
+ SEND_STRING(".Id");
+ return deactivateRelativity();
+ }
+ else
+ {
+ printTableAbbreviation();
+ SEND_STRING("ON ");
+ printTableAbbreviationLimited();
+ eraseKeyCodes();
+ eraseTableAbbreviation();
+ eraseCharCounts();
+ tempOff = true;
+ return true;
+ }
+
+
+ case KC_SPC:
+ printTableAbbreviation();
+ return deactivateRelativity();
+ case ENTER_OR_SQL:
+ if (tempOff)
+ {
+ SEND_STRING("Id = ");
+ printTableAbbreviationLimited();
+ SEND_STRING(".Id");
+ deactivateRelativity();
+ return true;
+ }
+ else
+ {
+ printTableAbbreviation();
+ deactivateRelativity();
+ return true;
+ }
+ case KC_ESC:
+ return deactivateRelativity();
+ }
+ }
+ return true;
+}
diff --git a/keyboards/dz60/keymaps/marianas/relativity.h b/keyboards/dz60/keymaps/marianas/relativity.h
new file mode 100644
index 000000000..c917b1a4d
--- /dev/null
+++ b/keyboards/dz60/keymaps/marianas/relativity.h
@@ -0,0 +1,32 @@
+#include QMK_KEYBOARD_H
+#define macroTapsLen 32
+#define tableNameListLen 32
+#define charCountLen 32
+
+#define relTimeout 1500
+
+
+void activateRelativity(void);
+bool deactivateRelativity(void);
+void initStringData(void);
+bool containsCode(uint16_t kc);
+bool lastCodeIs(uint16_t kc);
+bool last2CodeAre(uint16_t kc);
+bool last2CodesAre(uint16_t kc, uint16_t kc2);
+void addKeyCode(uint16_t kc);
+void eraseKeyCodes(void);
+void eraseCharCounts(void);
+void printTableAbbreviation(void);
+void eraseTableAbbreviation(void);
+void printString(char* str);
+void printStringAndQueueChar(char* str);
+void ReplaceString(char *orig, char *repl);
+void deletePrev(void);
+bool processSmartMacroTap(uint16_t kc);
+bool isShifted(void);
+void setShifted(bool);
+
+
+
+bool handleSmartMacros(uint16_t keycode, keyrecord_t *record);
+bool storeShiftState(uint16_t keycode, keyrecord_t *record);
diff --git a/keyboards/dz60/keymaps/marianas/rules.mk b/keyboards/dz60/keymaps/marianas/rules.mk
new file mode 100644
index 000000000..230d194ab
--- /dev/null
+++ b/keyboards/dz60/keymaps/marianas/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# comment out to disable the options.
+#
+
+
+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 = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE = no
+AUTO_SHIFT_ENABLE = no
+
+
+SRC += relativity.c
+SRC += customLogic.c
diff --git a/keyboards/dz60/keymaps/mechmerlin/config.h b/keyboards/dz60/keymaps/mechmerlin/config.h
new file mode 100644
index 000000000..92d4cfb50
--- /dev/null
+++ b/keyboards/dz60/keymaps/mechmerlin/config.h
@@ -0,0 +1,6 @@
+#pragma once
+
+// Turn off RGB when computer goes to sleep
+#ifdef RGBLIGHT_ENABLE
+#define RGBLIGHT_SLEEP
+#endif // RGBLIGHT_ENABLE
diff --git a/keyboards/dz60/keymaps/mechmerlin/keymap.c b/keyboards/dz60/keymaps/mechmerlin/keymap.c
new file mode 100644
index 000000000..1a8593ef1
--- /dev/null
+++ b/keyboards/dz60/keymaps/mechmerlin/keymap.c
@@ -0,0 +1,40 @@
+#include QMK_KEYBOARD_H
+
+enum keyboard_layers {
+ _BL = 0, // Base Layer
+ _FL, // Function Layer
+ _CL // Control Layer
+};
+
+// Custom #defined keycodes (shorter macros for readability)
+#define KC_CTCP LCTL_T(KC_CAPS)
+#define KC_RSSH RSFT_T(KC_SLSH)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_60_b_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CTCP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSSH, KC_UP, KC_DEL,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_FL] = LAYOUT_60_b_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_PGUP, MO(_CL),
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END),
+
+ [_CL] = LAYOUT_60_b_ansi(
+ RESET, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
+
+// Set underglow RGB leds to yellow
+// Find the list of available colors in quantum/rgblight_list.h
+void matrix_init_user(void) {
+ rgblight_sethsv_noeeprom_yellow();
+}
diff --git a/keyboards/dz60/keymaps/mechmerlin/readme.md b/keyboards/dz60/keymaps/mechmerlin/readme.md
new file mode 100644
index 000000000..76ff54de5
--- /dev/null
+++ b/keyboards/dz60/keymaps/mechmerlin/readme.md
@@ -0,0 +1,68 @@
+# MechMerlin's DZ60 Keymap
+
+The purpose of this keymap is to provide examples on how to do some common QMK features.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dz60:mechmerlin
+
+## Merlin's DZ60 Hardware Info
+---
+
+The DZ60 is a 60% pcb produced by KBDFans. It comes in two variants, USB Mini B and USB C. It supports many many layouts. It also supports both backlight and RGB underglow. The USB C variant does not have a hardware reset switch. USB C to C is not supported.
+
+Merlin's DZ60 uses
+- Layout B, in QMK this is LAYOUT_60_b_ansi.
+- USB C
+- 50g Zilents
+- Arrows are 78g Zilents
+- KPRepublic XD64 Case
+
+## Layers
+---
+
+Merlin's keymap has three different layers. To switch layers you can use the `MO(X)` keycode, where `X` is the layer you want to switch to.
+
+### _BL
+
+This is the base layer also known as layer 0. It is a standard QWERTY layout. It has the `_FL` layer switch key.
+
+### _FL
+
+This is the function layer also known as layer 1. It utiizes the following:
+- Function Keys
+- Navigation Keys
+- Audio keys such as Mute, Volume Down and Volume Up.
+- `_CL` layer switch key
+
+### _CL
+
+This is the control layer also known as layer 2. It utilizes the following:
+- RGB Controls
+- `RESET` key
+
+## Non Standard Keycodes
+---
+### RESET
+
+As long `BOOTMAGIC_ENABLE` is set to `yes` in `rules.mk`, the DZ60 can be put into bootloader mode by holding the `space` key and the `b` key while plugging in. However sometmes this doesn't work or is troublesome to do, might as well use the `RESET` keycode to accomplish this.
+
+### RSFT_T(KC_SLSH)
+
+Layout B is missing the `?` key and is instead replaced with a `right shift`. This keycode makes it so that the key can be tapped for `?` and held for `right shift`.
+
+### LCTL_T(KC_CAPS)
+
+`Caps Lock` is only ever used by tapping, why not use it as a `control` key when held? This keycode makes it so that the key can be tapped for `caps lock` and held for `control`.
+
+
+## RGB Lighting
+---
+
+### RGBLIGHT_SLEEP
+
+This is set in `mechmerlin/config.h` so that when the computer goes to sleep, the RGB lights will also go to sleep on the keyboard. They will turn back on when the computer wakes.
+
+### RGB Underglow Color: Yellow
+
+This is set in `mechmerlin/keymap.c` in the `matrix_init_user` function. The list of available colors can be found in [`quantum/rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/388df5359b913eaf1ce6fb0ef624e430ad010ea5/quantum/rgblight_list.h#L59-L121).
diff --git a/keyboards/dz60/keymaps/pevecyan/keymap.c b/keyboards/dz60/keymaps/pevecyan/keymap.c
new file mode 100644
index 000000000..897b6260b
--- /dev/null
+++ b/keyboards/dz60/keymaps/pevecyan/keymap.c
@@ -0,0 +1,41 @@
+
+#include QMK_KEYBOARD_H
+#include "keymap_slovenian.h"
+
+
+#define CARON LT(3, SI_CIRC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT( \
+ KC_GESC,SI_1, SI_2, SI_3, SI_4, SI_5, SI_6, SI_7, SI_8, SI_9, SI_0, SI_QOT, SI_PLUS,XXXXXXX,KC_BSPC, \
+ KC_TAB, SI_Q, SI_W, SI_E, SI_R, SI_T, SI_Z, SI_U, SI_I, SI_O, SI_P, SI_GRV, SI_TILD,CARON, \
+ MO(2), SI_A, SI_S, SI_D, SI_F, SI_G, SI_H, SI_J, SI_K, SI_L, KC_SCLN,KC_QUOT,KC_ENT, \
+ KC_LSFT,XXXXXXX,SI_Y, SI_X, SI_C, SI_V, SI_B, SI_N, SI_M, SI_COMM,SI_DOT, SI_MINS, KC_RSFT,XXXXXXX, \
+ KC_LCTL,KC_LGUI, KC_LALT,KC_SPC, KC_SPC, KC_SPC, KC_RALT,MO(3), XXXXXXX,MO(1), KC_F5 \
+ ),
+
+ [1] = LAYOUT( \
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_DEL, \
+ _______, RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,_______,_______,_______,_______,RESET, \
+ _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+ _______,_______,_______,_______,BL_DEC, BL_TOGG,BL_INC, BL_STEP,_______,_______,_______,_______, _______,_______, \
+ _______,_______, _______,_______, _______, _______, _______,_______,_______,_______,_______ \
+ ),
+
+ [2] = LAYOUT( \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+ _______, KC_BSPC,KC_UP, KC_DEL, _______,_______,_______,_______,_______,_______,_______,_______,KC_HOME, KC_END, \
+ _______, KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \
+ _______,_______, _______,_______, _______, _______, _______,_______,_______,_______,_______ \
+ ),
+
+ [3] = LAYOUT( \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+ _______, _______,_______,_______,_______,_______,SI_ZV, _______,_______,_______,_______,_______,_______,_______, \
+ _______, _______,SI_SV, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, \
+ _______,_______,_______,_______,SI_CV, _______,_______,_______,_______,_______,_______,_______, _______,_______, \
+ _______,_______, _______,_______, _______, _______, _______,_______,_______,_______,_______ \
+ ),
+};
diff --git a/keyboards/dz60/keymaps/stephengrier/README.md b/keyboards/dz60/keymaps/stephengrier/README.md
new file mode 100644
index 000000000..002a8f255
--- /dev/null
+++ b/keyboards/dz60/keymaps/stephengrier/README.md
@@ -0,0 +1,45 @@
+### stephengrier's DZ60 layout
+
+This layout is for a DZ60 with a 2U left shift, 1U right shift and an arrow
+cluster in the bottom right (i.e. the GK64 layout).
+
+Other features:
+
+* The capslock key is replaced with a second function key.
+* The Alt an Cmd keys are swapped to replicate the Mac layout.
+* Del is available as Fn+Backspace
+* Tilde is available as Shift+Esc
+* Backtick is available as Fn+Esc
+* Underglow toggle and mode selection are available as Fn+Q and Fn+W
+
+### 0 Qwerty
+```
+,-----------------------------------------------------------------------------------------.
+| Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc |
+|-----------------------------------------------------------------------------------------+
+| Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+|-----------------------------------------------------------------------------------------+
+| Fn | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+|-----------------------------------------------------------------------------------------+
+| Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | Fn |
+|-----------------------------------------------------------------------------------------+
+| Ctrl | Alt | Cmd | Space | Cmd | Alt | L | D | R |
+`-----------------------------------------------------------------------------------------'
+```
+
+### 1 Fn Layer
+```
+FN Layer
+,-----------------------------------------------------------------------------------------.
+| ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL |
+|-----------------------------------------------------------------------------------------+
+| |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | RESET |
+|-----------------------------------------------------------------------------------------+
+| | BL T| BL M| BL+ | BL- | | | | | | | | |
+|-----------------------------------------------------------------------------------------+
+| | | | | | | | | | | | | | |
+|-----------------------------------------------------------------------------------------+
+| | | | | | | | | |
+`-----------------------------------------------------------------------------------------'
+```
+
diff --git a/keyboards/dz60/keymaps/stephengrier/config.h b/keyboards/dz60/keymaps/stephengrier/config.h
new file mode 100644
index 000000000..9560d51a6
--- /dev/null
+++ b/keyboards/dz60/keymaps/stephengrier/config.h
@@ -0,0 +1 @@
+#define GRAVE_ESC_GUI_OVERRIDE # Always send Escape if GUI is pressed
diff --git a/keyboards/dz60/keymaps/stephengrier/keymap.c b/keyboards/dz60/keymaps/stephengrier/keymap.c
new file mode 100644
index 000000000..f6bbe7893
--- /dev/null
+++ b/keyboards/dz60/keymaps/stephengrier/keymap.c
@@ -0,0 +1,50 @@
+#include QMK_KEYBOARD_H
+
+#define ______ KC_TRNS
+
+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 | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------+
+ * | Fn | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | RSh | U | Fn |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | Alt | Cmd | Space | Cmd | Alt | L | D | R |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ LAYOUT_directional(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, ______, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ /* FN Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL |
+ * |-----------------------------------------------------------------------------------------+
+ * | |RBB T|RGB M| Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | RESET |
+ * |-----------------------------------------------------------------------------------------+
+ * | | BL T| BL M| BL+ | BL- | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+ LAYOUT_directional(
+ 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_DEL,
+ ______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, ______, ______, ______, ______, RESET,
+ ______, BL_TOGG, BL_STEP, BL_INC, BL_DEC, ______, ______, ______, ______, ______, ______, ______,
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______,
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______
+ ),
+};
diff --git a/keyboards/dz60/keymaps/thomasviaud/README.md b/keyboards/dz60/keymaps/thomasviaud/README.md
new file mode 100644
index 000000000..f5bf221a2
--- /dev/null
+++ b/keyboards/dz60/keymaps/thomasviaud/README.md
@@ -0,0 +1,4 @@
+## French ISO Layout
+
+Here is a very simple version of a French ISO Layout (handled by OS).
+Feel free to take this as base for your own layout.
diff --git a/keyboards/dz60/keymaps/thomasviaud/keymap.c b/keyboards/dz60/keymaps/thomasviaud/keymap.c
new file mode 100644
index 000000000..02fdb5a4a
--- /dev/null
+++ b/keyboards/dz60/keymaps/thomasviaud/keymap.c
@@ -0,0 +1,18 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_60_iso(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS , KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_RCTL),
+
+ LAYOUT_60_iso(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______,
+ _______, _______, _______, RESET, _______, _______, _______, _______),
+}; \ No newline at end of file
diff --git a/keyboards/dz60/keymaps/weeheavy/keymap.c b/keyboards/dz60/keymaps/weeheavy/keymap.c
index a98e3eeb2..cb9697e10 100644
--- a/keyboards/dz60/keymaps/weeheavy/keymap.c
+++ b/keyboards/dz60/keymaps/weeheavy/keymap.c
@@ -12,7 +12,7 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Base layer - ANSI QWERTY
-[L0] = LAYOUT_2_shifts(
+[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,
@@ -20,7 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(L1), KC_SPC, KC_RALT, MO(L2), KC_LEFT, KC_DOWN, KC_RIGHT),
// Utility layer - RGB and multimedia control
-[L1] = LAYOUT_2_shifts(
+[L1] = LAYOUT_all(
____, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, ____, ____,
____, RGB_TOG, RGB_MOD, RGB_M_K, RGB_M_R, ____, ____, KC_PSCR, ____, KC_PAUS, ____, ____, ____, ____,
____, RGB_HUI, RGB_HUD, ____, ____, ____, ____, KC_INS, KC_HOME, KC_PGUP, ____, ____, ____,
@@ -28,7 +28,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
____, RGB_VAI, RGB_VAD, ____, ____, ____, ____, ____, KC_MPRV, KC_VOLD, KC_MNXT),
// Setup layer - Reset an additional "b" button
-[L2] = LAYOUT_2_shifts(
+[L2] = LAYOUT_all(
RESET, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
KC_B, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, RESET,
____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____,
diff --git a/keyboards/dz60/keymaps/xtonhasvim/keymap.c b/keyboards/dz60/keymaps/xtonhasvim/keymap.c
index 8a7419214..34b724aaa 100644
--- a/keyboards/dz60/keymaps/xtonhasvim/keymap.c
+++ b/keyboards/dz60/keymaps/xtonhasvim/keymap.c
@@ -5,9 +5,13 @@ enum layers {
_QWERTY,
_FUN,
_MOVE,
- _MOUSE
+ _MOUSE,
+ _CMD
};
+extern uint8_t vim_cmd_layer(void) { return _CMD; }
+
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
@@ -15,21 +19,21 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,KC_SCLN), KC_QUOT, KC_ENT,
KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
- KC_LCTL, KC_LALT, KC_LGUI, VIM_START, TG(_MOUSE), KC_SPC, KC_RGUI, KC_RALT, X_____X, KC_RCTL, MO(_FUN)),
+ LSFT(KC_LALT), KC_LALT, KC_LGUI, VIM_START, TG(_MOUSE), KC_SPC, KC_RGUI, KC_RALT, X_____X, KC_RCTL, MO(_FUN)),
[_FUN] = LAYOUT(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, RESET,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______,
- TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY)),
[_MOVE] = LAYOUT(
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X, X_____X, X_____X,
X_____X, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, X_____X, X_____X, X_____X,
_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
- TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY)),
[_MOUSE] = LAYOUT(
@@ -37,21 +41,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
X_____X, X_____X, X_____X, KC_MS_UP, X_____X, X_____X, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, X_____X, X_____X, X_____X, X_____X,
X_____X, X_____X,KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, X_____X, X_____X, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, X_____X, X_____X, X_____X,
_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
- TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
-
- [_EDIT] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- TO(_QWERTY), _______, _______, VIM_START, _______, _______, _______, _______, _______, _______, _______),
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY)),
[_CMD] = LAYOUT(
X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X, X_____X, X_____X,
VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X, X_____X,
VIM_SHIFT, X_____X, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT,X_____X,
- TO(_QWERTY), _______, _______, TO(_QWERTY), X_____X, X_____X, _______, _______, _______, _______, _______),
+ _______, _______, _______, TO(_QWERTY), X_____X, X_____X, _______, _______, _______, _______, TO(_QWERTY)),
};
diff --git a/keyboards/dz60/keymaps/zvecr/keymap.c b/keyboards/dz60/keymaps/zvecr/keymap.c
new file mode 100644
index 000000000..9127fa0a7
--- /dev/null
+++ b/keyboards/dz60/keymaps/zvecr/keymap.c
@@ -0,0 +1,40 @@
+#include QMK_KEYBOARD_H
+
+/*
+* Each layer gets a name for readability.
+* 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, and you can also skip them entirely
+* and just use numbers.
+*
+*/
+#define BL 0 // Base Layer
+#define FL 1 // Function Layer
+#define ML 2 // Macro Layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [BL] = LAYOUT_60_ansi_split(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(FL), KC_SPC, KC_RALT, KC_RGUI, MO(ML), KC_RCTL),
+
+ [FL] = LAYOUT_60_ansi_split(
+ 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,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, _______,
+ _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, KC_DEL, KC_END, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+
+ [ML] = LAYOUT_60_ansi_split(
+ _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+};
diff --git a/keyboards/e6v2/le/info.json b/keyboards/e6v2/le/info.json
index 9016f413e..5a44eab18 100644
--- a/keyboards/e6v2/le/info.json
+++ b/keyboards/e6v2/le/info.json
@@ -8,9 +8,12 @@
"LAYOUT": {
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"x":0, "y":3}, {"x":1, "y":3}, {"label":"Z", "x":2, "y":3}, {"label":"X", "x":3, "y":3}, {"label":"C", "x":4, "y":3}, {"label":"V", "x":5, "y":3}, {"label":"B", "x":6, "y":3}, {"label":"N", "x":7, "y":3}, {"label":"M", "x":8, "y":3}, {"label":"<", "x":9, "y":3}, {"label":">", "x":10, "y":3}, {"label":"?", "x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.75}, {"label":"Ctrl", "x":1.75, "y":4, "w":1.25}, {"label":"Win", "x":3, "y":4, "w":1.25}, {"label":"Alt", "x":4.25, "y":4, "w":1.25}, {"x":5.5, "y":4, "w":2.75}, {"x":8.25, "y":4, "w":1.75}, {"x":10, "y":4}, {"label":"Alt", "x":11, "y":4}, {"label":"Win", "x":12, "y":4}, {"label":"Menu", "x":13, "y":4}, {"label":"Ctrl", "x":14, "y":4}]
},
-
"LAYOUT_60_ansi": {
"layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_hhkb": {
+ "key_count": 60,
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"1", "x":1, "y":0}, {"label":"2", "x":2, "y":0}, {"label":"3", "x":3, "y":0}, {"label":"4", "x":4, "y":0}, {"label":"5", "x":5, "y":0}, {"label":"6", "x":6, "y":0}, {"label":"7", "x":7, "y":0}, {"label":"8", "x":8, "y":0}, {"label":"9", "x":9, "y":0}, {"label":"0", "x":10, "y":0}, {"label":"-", "x":11, "y":0}, {"label":"=", "x":12, "y":0}, {"label":"\\", "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":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
}
}
-} \ No newline at end of file
+}
diff --git a/keyboards/e6v2/le/keymaps/johu/keymap.c b/keyboards/e6v2/le/keymaps/johu/keymap.c
new file mode 100644
index 000000000..691f0e73c
--- /dev/null
+++ b/keyboards/e6v2/le/keymaps/johu/keymap.c
@@ -0,0 +1,98 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FL 1
+#define _SL 2
+#define _CL 3
+
+// Tap dance defines
+#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
+#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Shift+Alt)
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+#define KC_SPFN LT(_SL, KC_SPC) // Tap for space, hold for function layer (aka SpaceFN)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Layer 0: Base layer (Default layer)
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ * |-----------------------------------------------------------------------------------------+
+ * |Tab/Hyper| Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl/Esc | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift/Ent | FN |
+ * |-----------------------------------------------------------------------------------------+
+ * |LGUI | LAlt | Space | RAlt |RGUI |
+ * `--------------------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_60_hhkb(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, MO(_FL),
+ KC_LGUI, KC_LALT, KC_SPFN, KC_RALT, KC_RGUI
+ ),
+
+/* Layer 1: FN Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | CL | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | | Psc | Slck| Paus| Up | | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Vol-| Vol+| Mute| | | * | / | Home| PgUp| Left|Right| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Prev| Play| Next| | | + | - | End |PgDn| Down| | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | Stop | CL |
+ * `--------------------------------------------------------------------'
+ */
+ [_FL] = LAYOUT_60_hhkb(
+ TG(_CL), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, _______, KC_DEL,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, _______,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ _______, _______, _______, KC_MSTP, MO(_CL)
+ ),
+
+/* Layer 2: Space FN Layer
+* ,-----------------------------------------------------------------------------------------.
+* | CL | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+* |-----------------------------------------------------------------------------------------+
+* | | | | | | | | PgUp| | PgDn| | | | Del |
+* |-----------------------------------------------------------------------------------------+
+* | | Vol-| Vol+| Mute| | | Left| Down| Up |Right| | | |
+* |-----------------------------------------------------------------------------------------+
+* | | Prev| Play| Next| | | Home| End | | | | | |
+* |-----------------------------------------------------------------------------------------+
+* | | | | | CL |
+* `--------------------------------------------------------------------'
+*/
+ [_SL] = LAYOUT_60_hhkb(
+ TG(_CL), KC_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_PGUP, _______, KC_PGDN, _______, _______, _______, KC_DEL,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_HOME, KC_END, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, MO(_CL)
+ ),
+
+/* Layer 3: Control Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | BL- | BL+ | BL | | | | | | | | | | RESET |
+ * |-----------------------------------------------------------------------------------------+
+ * | | RGBT| RGBM| | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | CAPS | Hue+| Hue-| Sat+| Sat-| Val+| Val-| | | | | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | |
+ * `--------------------------------------------------------------------'
+ */
+ [_CL] = LAYOUT_60_hhkb(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, BL_TOGG, BL_STEP, BL_DEC, BL_INC, _______, _______, _______, _______, _______, _______, _______, _______, RESET,
+ _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_CAPS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/e6v2/le/keymaps/johu/readme.md b/keyboards/e6v2/le/keymaps/johu/readme.md
new file mode 100644
index 000000000..605a14a1c
--- /dev/null
+++ b/keyboards/e6v2/le/keymaps/johu/readme.md
@@ -0,0 +1,40 @@
+# johu's E6-V2 Last Edition (LE) HHKB
+Make example for this keyboard (after setting up your build environment):
+```bash
+$ make e6v2/le:johu
+```
+
+Or to make and flash:
+```bash
+$ make e6v2/le:johu:dfu
+```
+
+See the [build environment setup] and the [make instructions] for more
+information. Brand new to QMK? Start with our [Complete Newbs Guide].
+
+## Layer 0: Base Layer
+* HHKB Qwerty layout plus some specials:
+ * The Space key sends `Space` when tapped, toggles to *Space FN Layer* when held
+ * [Grave Escape]
+ * The Ctrl key sends `Esc` when tapped, `Ctrl` when held
+ * The Tab key sends `Tab` when tapped, [Hyper] (`Super+Ctrl+Alt+Shift`) when held
+ * The right Shift key sends `Enter` when tapped, `Shift` when held
+
+## Layer 1: Function Layer
+* Default HHKB function layer includig the iconic diamond arrow cluster
+* Multimedia controls
+
+## Layer 2: Space FN Layer
+* VIM style arrow cluster
+* Multimedia controls
+
+## Layer 3: Control Layer
+* Reset button
+* RGB controls
+* Caps Lock
+
+[build environment setup]: https://docs.qmk.fm/#/getting_started_build_tools
+[make instructions]: https://docs.qmk.fm/#/getting_started_make_guide
+[Complete Newbs Guide]: https://docs.qmk.fm/#/newbs
+[Grave Escape]: https://beta.docs.qmk.fm/features/feature_grave_esc
+[Hyper]: http://brettterpstra.com/2012/12/08/a-useful-caps-lock-key
diff --git a/keyboards/e6v2/le/le.h b/keyboards/e6v2/le/le.h
index 380efd2a7..d52560dfb 100644
--- a/keyboards/e6v2/le/le.h
+++ b/keyboards/e6v2/le/le.h
@@ -33,4 +33,32 @@
{ K40, KC_NO, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, K4B, KC_NO, K4D, K4E }, \
}
+/* LAYOUT_60_hhkb
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0e │0d │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │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 │3c │3e │
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴──────┬┴───┴┬───┬─┴───┤
+ * │▓▓▓▓▓│42 │43 │47 (7u) │4b │4d │▓▓▓▓▓│
+ * └─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+*/
+#define LAYOUT_60_hhkb( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0D, \
+ 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, K3C, K3E, \
+ K42, K43, K47, K4B, K4D \
+)\
+{\
+ { 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, K3C, KC_NO, K3E }, \
+ { KC_NO, KC_NO, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, KC_NO, K4B, KC_NO, K4D, KC_NO }, \
+}
+
#endif
diff --git a/keyboards/e6v2/readme.md b/keyboards/e6v2/readme.md
index 9ebfac4a7..c09d1ccf1 100644
--- a/keyboards/e6v2/readme.md
+++ b/keyboards/e6v2/readme.md
@@ -17,4 +17,4 @@ The E6V2 has been available with either a bootmapper client or QMK powered PCB.
Please use the appropriate version when making your firmware. Flashing one in place of the other, can brick your PCB. Please be certain whether you have a OE or LE PCB.
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/eagle_viper/eagle_viper.c b/keyboards/eagle_viper/eagle_viper.c
deleted file mode 100644
index c2d44c4e7..000000000
--- a/keyboards/eagle_viper/eagle_viper.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "eagle_viper.h"
diff --git a/keyboards/eagle_viper/eagle_viper.h b/keyboards/eagle_viper/eagle_viper.h
deleted file mode 100644
index fc34e7dde..000000000
--- a/keyboards/eagle_viper/eagle_viper.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef EAGLE_VIPER_H
-#define EAGLE_VIPER_H
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_eagle_viper_v2
- #include "v2.h"
-#endif
-
-#endif
diff --git a/keyboards/eagle_viper/info.json b/keyboards/eagle_viper/info.json
deleted file mode 100644
index e6a12aef0..000000000
--- a/keyboards/eagle_viper/info.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "keyboard_name": "Eagle/Viper",
- "width": 15,
- "height": 5,
- "layouts": {
- "LAYOUT_all": {
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"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}, {"label":"Enter", "x":13.75, "y":2, "w":1.25}, {"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":"fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":5}, {"x":9, "y":4}, {"x":10, "y":4}, {"label":"Win", "x":11, "y":4, "w":1.5}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}, {"label":"|", "x":13.75, "y":5}]
- },
-
- "LAYOUT_eagle": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
- },
-
- "LAYOUT_eagle_splits": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":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_viper": {
- "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":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}]
- }
- }
-}
diff --git a/keyboards/eagle_viper/readme.md b/keyboards/eagle_viper/readme.md
deleted file mode 100644
index 48f4a4be3..000000000
--- a/keyboards/eagle_viper/readme.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# Duck Eagle/Viper
-
-Non official firmware for custom Korean keyboard with 60% key layout made by Duck.
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-
-Newest version is the [Eagle/Viper V2](http://duck0113.tistory.com/127)
-
-Make example for this keyboard (after setting up your build environment):
-
- make eagle_viper/v2:default
-
diff --git a/keyboards/eagle_viper/rules.mk b/keyboards/eagle_viper/rules.mk
deleted file mode 100644
index ad8bd5ca1..000000000
--- a/keyboards/eagle_viper/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-DEFAULT_FOLDER = eagle_viper/v2
-
-LAYOUTS = 60_ansi \ No newline at end of file
diff --git a/keyboards/eagle_viper/v2/keymaps/default/keymap.c b/keyboards/eagle_viper/v2/keymaps/default/keymap.c
deleted file mode 100644
index 2a6bda74f..000000000
--- a/keyboards/eagle_viper/v2/keymaps/default/keymap.c
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* layer 0: qwerty */
- [0] = LAYOUT_all(\
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO, 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_NO, KC_ENT,
- KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_NO, KC_RALT, KC_RGUI, KC_RCTL),
-
- [1] = LAYOUT_all(\
- KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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),
- };
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-};
diff --git a/keyboards/eagle_viper/v2/keymaps/profanum429/keymap.c b/keyboards/eagle_viper/v2/keymaps/profanum429/keymap.c
deleted file mode 100644
index d3be5e800..000000000
--- a/keyboards/eagle_viper/v2/keymaps/profanum429/keymap.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* layer 0: qwerty */
- [0] = LAYOUT_viper(\
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
- KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI),
-
- [1] = LAYOUT_viper(\
- 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_INS, KC_DEL,
- KC_CAPS, RGB_TOG, RGB_MOD, RGB_VAI, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_BSPC,
- KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, KC_ENT,
- 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) {
- return MACRO_NONE;
-};
-
-
-
diff --git a/keyboards/eagle_viper/v2/v2.h b/keyboards/eagle_viper/v2/v2.h
deleted file mode 100644
index ce8ca028f..000000000
--- a/keyboards/eagle_viper/v2/v2.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef V2_H
-#define V2_H
-
-#include "../eagle_viper.h"
-
-#define LAYOUT_all( \
- K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, \
- K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, \
- K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2O, \
- K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1O, \
- K0A, K0B, K0C, K0J, K0K, K0L, K0M, K0N, K0O \
-) { \
- { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, }, \
- { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, KC_NO, K3O, }, \
- { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, KC_NO, K2O, }, \
- { K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, KC_NO, K1M, K1N, K1O, }, \
- { K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0J, KC_NO, K0K, K0L, K0M, K0N, K0O } \
-}
-
-#define LAYOUT_60_ansi( \
- K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4O, \
- K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, \
- K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2O, \
- K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, \
- K0A, K0B, K0C, K0J, K0K, K0M, K0N, K0O \
-) { \
- { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, KC_NO, K4O, }, \
- { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, KC_NO, K3O, }, \
- { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, KC_NO, K2O, }, \
- { K1A, KC_NO, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, KC_NO, K1M, K1N, KC_NO, }, \
- { K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0J, KC_NO, K0K, KC_NO, K0M, K0N, K0O } \
-}
-
-#define LAYOUT_eagle_splits( \
- K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, \
- K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, \
- K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2O, \
- K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1O, \
- K0A, K0B, K0C, K0J, K0K, K0M, K0N, K0O \
-) { \
- { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, }, \
- { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, KC_NO, K3O, }, \
- { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, KC_NO, K2O, }, \
- { K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, KC_NO, K1M, K1N, K1O, }, \
- { K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0J, KC_NO, K0K, KC_NO, K0M, K0N, K0O } \
-}
-
-#define LAYOUT_viper( \
- K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, \
- K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, \
- K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2O, \
- K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1O, \
- K0B, K0C, K0J, K0M, K0N \
-) { \
- { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4O, }, \
- { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, KC_NO, K3O, }, \
- { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, KC_NO, K2O, }, \
- { K1A, KC_NO, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, KC_NO, K1M, K1N, K1O, }, \
- { KC_NO, K0B, K0C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0J, KC_NO, KC_NO, KC_NO, K0M, K0N, KC_NO } \
-}
-#endif
-
-#define LAYOUT_eagle LAYOUT_60_ansi
diff --git a/keyboards/eco/keymaps/default/rules.mk b/keyboards/eco/keymaps/default/rules.mk
index 7dab97942..099660232 100644
--- a/keyboards/eco/keymaps/default/rules.mk
+++ b/keyboards/eco/keymaps/default/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+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/eco/keymaps/hexwire/rules.mk b/keyboards/eco/keymaps/hexwire/rules.mk
index 7dab97942..099660232 100644
--- a/keyboards/eco/keymaps/hexwire/rules.mk
+++ b/keyboards/eco/keymaps/hexwire/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+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/eco/keymaps/that_canadian/rules.mk b/keyboards/eco/keymaps/that_canadian/rules.mk
index 7dab97942..099660232 100644
--- a/keyboards/eco/keymaps/that_canadian/rules.mk
+++ b/keyboards/eco/keymaps/that_canadian/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+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/eco/keymaps/xyverz/rules.mk b/keyboards/eco/keymaps/xyverz/rules.mk
index 9a3059e71..9e7b9c202 100644
--- a/keyboards/eco/keymaps/xyverz/rules.mk
+++ b/keyboards/eco/keymaps/xyverz/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+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/ep/40/40.c b/keyboards/ep/40/40.c
new file mode 100644
index 000000000..7c235f3ce
--- /dev/null
+++ b/keyboards/ep/40/40.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "40.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/ep/40/40.h b/keyboards/ep/40/40.h
new file mode 100644
index 000000000..30f3d15b4
--- /dev/null
+++ b/keyboards/ep/40/40.h
@@ -0,0 +1,44 @@
+/* Copyright 2018 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef EP40_H
+#define EP40_H
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define xxx KC_NO
+
+#define LAYOUT(\
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b,\
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1b,\
+ k20, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b,\
+ k30, k31, k32, k34, k36, 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, xxx, k1b},\
+ {k20, xxx, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b},\
+ {k30, k31, k32, xxx, k34, xxx, k36, xxx, k38, k39, k3a, k3b} \
+}
+
+#endif
diff --git a/keyboards/ep/40/config.h b/keyboards/ep/40/config.h
new file mode 100644
index 000000000..90630cd68
--- /dev/null
+++ b/keyboards/ep/40/config.h
@@ -0,0 +1,114 @@
+/*
+Copyright 2018 Elliot Powell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4040
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Elliot Powell
+#define PRODUCT ep40
+#define DESCRIPTION A simple 40% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { C7, C6, B6, B5 }
+#define MATRIX_COL_PINS { F6, F5, F4, F1, F0, D2, D3, D5, D4, D6, D7, B4 }
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/* 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
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+/*
+ * 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/ep/40/info.json b/keyboards/ep/40/info.json
new file mode 100644
index 000000000..1c57ac674
--- /dev/null
+++ b/keyboards/ep/40/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name":"ep40",
+ "url":null,
+ "maintainer":"e11i0t23",
+ "width":12,
+ "hight":4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1, "w":1.25}, {"x":1.25, "y":1}, {"x":2.25, "y":1}, {"x":3.25, "y":1}, {"x":4.25, "y":1}, {"x":5.25, "y":1}, {"x":6.25, "y":1}, {"x":7.25, "y":1}, {"x":8.25, "y":1}, {"x":9.25, "y":1}, {"x":10.25, "y":1, "w":1.75}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2, "w":1.25}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3, "w":2.25}, {"x":5.25, "y":3, "w":2.75}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/ep/40/keymaps/default/keymap.c b/keyboards/ep/40/keymaps/default/keymap.c
new file mode 100644
index 000000000..1ac66bc01
--- /dev/null
+++ b/keyboards/ep/40/keymaps/default/keymap.c
@@ -0,0 +1,71 @@
+/* Copyright 2018 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+static bool bsdel_mods = false;
+
+enum custom_keycodes {
+ M_BSDEL = SAFE_RANGE, // ensure these codes start after the highest keycode defined in Quantum
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT( /* Base */
+ KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, M_BSDEL,\
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT,\
+ LCTL_T(KC_LBRC), KC_LGUI, KC_LALT, KC_SPC, LT(1, KC_SPC), KC_RALT, MO(2), RCTL_T(KC_RBRC), KC_F5 \
+ ),
+
+ [1] = LAYOUT( /* Base */
+ 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_UP, KC_DOWN, KC_RIGHT, KC_TRNS,\
+ KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_TRNS,\
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+
+ [2] = LAYOUT( /* Base */
+ KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 ,\
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SCLN, KC_QUOT, KC_NUHS, KC_TRNS,\
+ KC_TRNS, KC_NUBS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLSH, KC_TRNS, KC_TRNS,\
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case M_BSDEL: {
+ uint8_t kc = KC_BSPC;
+
+ if (record->event.pressed) {
+ if (keyboard_report->mods) {
+ kc = KC_DEL;
+ }
+ register_code (kc);
+ bsdel_mods = keyboard_report->mods;
+ }
+ else {
+ if (bsdel_mods) {
+ kc = KC_DEL;
+ }
+ unregister_code (kc);
+ }
+
+ return false;
+ break;
+ }
+ }
+ return true;
+}
diff --git a/keyboards/ep/40/keymaps/default/readme.md b/keyboards/ep/40/keymaps/default/readme.md
new file mode 100644
index 000000000..242c0afb9
--- /dev/null
+++ b/keyboards/ep/40/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for ep40 \ No newline at end of file
diff --git a/keyboards/ep/40/readme.md b/keyboards/ep/40/readme.md
new file mode 100644
index 000000000..647842bad
--- /dev/null
+++ b/keyboards/ep/40/readme.md
@@ -0,0 +1,15 @@
+# ep40
+
+![ep40](https://i.imgur.com/Jl7w6I9.jpg)
+
+A simple 40% keyboard
+
+Keyboard Maintainer: [Elliot Powell](https://github.com/e11i0t23), [/u/e11i0t23 on reddit](https://reddit.com/u/e11i0t23)
+Hardware Supported: EP40 PCB
+Hardware Availability: None at the moment
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ep/40:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ep/40/rules.mk b/keyboards/ep/40/rules.mk
new file mode 100644
index 000000000..9ddf9717e
--- /dev/null
+++ b/keyboards/ep/40/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 = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/ep/96/96.c b/keyboards/ep/96/96.c
new file mode 100644
index 000000000..9fdd51977
--- /dev/null
+++ b/keyboards/ep/96/96.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "96.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/ep/96/96.h b/keyboards/ep/96/96.h
new file mode 100644
index 000000000..1887eb472
--- /dev/null
+++ b/keyboards/ep/96/96.h
@@ -0,0 +1,47 @@
+/* Copyright 2018 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef EP96_H
+#define EP96_H
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define xxxx KC_NO
+
+#define LAYOUT( \
+ K000, K001, K002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, k016, k017, k018, \
+ K100, K101, K102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, k114, k115, k116, k117, k118, \
+ K200, K202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, k215, k216, k217, \
+ K300, K302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k314, k315, k316, k317, k318, \
+ K400, K401, K402, k403, k404, k405, k406, k407, k408, k409, k410, k411, k413, k414, k415, k416, k417, \
+ K500, K501, K502, k506, k511, k512, k513, k514, k515, k516, k517, k518) \
+{ \
+ {K000, K001, K002, k003, k004, k005, k006, k007, k008, k009, k010, k011, k012, k013, k014, k015, k016, k017, k018}, \
+ {K100, K101, K102, k103, k104, k105, k106, k107, k108, k109, k110, k111, k112, xxxx, k114, k115, k116, k117, k118}, \
+ {K200, xxxx, K202, k203, k204, k205, k206, k207, k208, k209, k210, k211, k212, k213, xxxx, k215, k216, k217, xxxx}, \
+ {K300, xxxx, K302, k303, k304, k305, k306, k307, k308, k309, k310, k311, k312, k313, k314, k315, k316, k317, k318}, \
+ {K400, K401, K402, k403, k404, k405, k406, k407, k408, k409, k410, k411, xxxx, k413, k414, k415, k416, k417, xxxx}, \
+ {K500, K501, K502, xxxx, xxxx, xxxx, k506, xxxx, xxxx, xxxx, xxxx, k511, k512, k513, k514, k515, k516, k517, k518} \
+}
+
+#endif
diff --git a/keyboards/ep/96/config.h b/keyboards/ep/96/config.h
new file mode 100644
index 000000000..0c37e4c59
--- /dev/null
+++ b/keyboards/ep/96/config.h
@@ -0,0 +1,212 @@
+/*
+Copyright 2018 Elliot Powell
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x9696
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Elliot Powell
+#define PRODUCT ep96
+#define DESCRIPTION A simple 96 key keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 19
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B0, B1, B3, B2, B7, C6 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, D5, D4, D6, D7, B4, B5, B6, C7, F7, F6, F5, F4, F1, F0, E6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/ep/96/info.json b/keyboards/ep/96/info.json
new file mode 100644
index 000000000..4be41b24c
--- /dev/null
+++ b/keyboards/ep/96/info.json
@@ -0,0 +1,426 @@
+{
+ "keyboard_name": "ep96",
+ "maintainer": "e11i0t23",
+ "width": 19,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 100,
+ "layout": [{
+ "label": "Esc",
+ "x": 0,
+ "y": 0
+ }, {
+ "label": "F1",
+ "x": 1,
+ "y": 0
+ }, {
+ "label": "F2",
+ "x": 2,
+ "y": 0
+ }, {
+ "label": "F3",
+ "x": 3,
+ "y": 0
+ }, {
+ "label": "F4",
+ "x": 4,
+ "y": 0
+ }, {
+ "label": "F5",
+ "x": 5,
+ "y": 0
+ }, {
+ "label": "F6",
+ "x": 6,
+ "y": 0
+ }, {
+ "label": "F7",
+ "x": 7,
+ "y": 0
+ }, {
+ "label": "F8",
+ "x": 8,
+ "y": 0
+ }, {
+ "label": "F9",
+ "x": 9,
+ "y": 0
+ }, {
+ "label": "F10",
+ "x": 10,
+ "y": 0
+ }, {
+ "label": "F11",
+ "x": 11,
+ "y": 0
+ }, {
+ "label": "F12",
+ "x": 12,
+ "y": 0
+ }, {
+ "label": "Prt Sc",
+ "x": 13,
+ "y": 0
+ }, {
+ "label": "Delete",
+ "x": 14,
+ "y": 0
+ }, {
+ "label": "home",
+ "x": 15,
+ "y": 0
+ }, {
+ "label": "Menu",
+ "x": 16,
+ "y": 0
+ }, {
+ "label": "Pg Up",
+ "x": 17,
+ "y": 0
+ }, {
+ "label": "Pg Dn",
+ "x": 18,
+ "y": 0
+ }, {
+ "label": "~",
+ "x": 0,
+ "y": 1
+ }, {
+ "label": "!",
+ "x": 1,
+ "y": 1
+ }, {
+ "label": "@",
+ "x": 2,
+ "y": 1
+ }, {
+ "label": "#",
+ "x": 3,
+ "y": 1
+ }, {
+ "label": "$",
+ "x": 4,
+ "y": 1
+ }, {
+ "label": "%",
+ "x": 5,
+ "y": 1
+ }, {
+ "label": "^",
+ "x": 6,
+ "y": 1
+ }, {
+ "label": "&",
+ "x": 7,
+ "y": 1
+ }, {
+ "label": "*",
+ "x": 8,
+ "y": 1
+ }, {
+ "label": "(",
+ "x": 9,
+ "y": 1
+ }, {
+ "label": ")",
+ "x": 10,
+ "y": 1
+ }, {
+ "label": "_",
+ "x": 11,
+ "y": 1
+ }, {
+ "label": "+",
+ "x": 12,
+ "y": 1
+ }, {
+ "label": "Backspace",
+ "x": 13,
+ "y": 1,
+ "w": 2
+ }, {
+ "label": "Num Lock",
+ "x": 15,
+ "y": 1
+ }, {
+ "label": "/",
+ "x": 16,
+ "y": 1
+ }, {
+ "label": "*",
+ "x": 17,
+ "y": 1
+ }, {
+ "label": "-",
+ "x": 18,
+ "y": 1
+ }, {
+ "label": "Tab",
+ "x": 0,
+ "y": 2,
+ "w": 1.5
+ }, {
+ "label": "Q",
+ "x": 1.5,
+ "y": 2
+ }, {
+ "label": "W",
+ "x": 2.5,
+ "y": 2
+ }, {
+ "label": "E",
+ "x": 3.5,
+ "y": 2
+ }, {
+ "label": "R",
+ "x": 4.5,
+ "y": 2
+ }, {
+ "label": "T",
+ "x": 5.5,
+ "y": 2
+ }, {
+ "label": "Y",
+ "x": 6.5,
+ "y": 2
+ }, {
+ "label": "U",
+ "x": 7.5,
+ "y": 2
+ }, {
+ "label": "I",
+ "x": 8.5,
+ "y": 2
+ }, {
+ "label": "O",
+ "x": 9.5,
+ "y": 2
+ }, {
+ "label": "P",
+ "x": 10.5,
+ "y": 2
+ }, {
+ "label": "{",
+ "x": 11.5,
+ "y": 2
+ }, {
+ "label": "}",
+ "x": 12.5,
+ "y": 2
+ }, {
+ "label": "Enter",
+ "x": 13.75,
+ "y": 2,
+ "w": 1.25,
+ "h": 2
+ }, {
+ "label": "7",
+ "x": 15,
+ "y": 2
+ }, {
+ "label": "8",
+ "x": 16,
+ "y": 2
+ }, {
+ "label": "9",
+ "x": 17,
+ "y": 2
+ }, {
+ "label": "+",
+ "x": 18,
+ "y": 2,
+ "h": 2
+ }, {
+ "label": "Caps Lock",
+ "x": 0,
+ "y": 3,
+ "w": 1.75
+ }, {
+ "label": "A",
+ "x": 1.75,
+ "y": 3
+ }, {
+ "label": "S",
+ "x": 2.75,
+ "y": 3
+ }, {
+ "label": "D",
+ "x": 3.75,
+ "y": 3
+ }, {
+ "label": "F",
+ "x": 4.75,
+ "y": 3
+ }, {
+ "label": "G",
+ "x": 5.75,
+ "y": 3
+ }, {
+ "label": "H",
+ "x": 6.75,
+ "y": 3
+ }, {
+ "label": "J",
+ "x": 7.75,
+ "y": 3
+ }, {
+ "label": "K",
+ "x": 8.75,
+ "y": 3
+ }, {
+ "label": "L",
+ "x": 9.75,
+ "y": 3
+ }, {
+ "label": ":",
+ "x": 10.75,
+ "y": 3
+ }, {
+ "label": "\"",
+ "x": 11.75,
+ "y": 3
+ }, {
+ "label": "~",
+ "x": 12.75,
+ "y": 3
+ }, {
+ "label": "4",
+ "x": 15,
+ "y": 3
+ }, {
+ "label": "5",
+ "x": 16,
+ "y": 3
+ }, {
+ "label": "6",
+ "x": 17,
+ "y": 3
+ }, {
+ "label": "Shift",
+ "x": 0,
+ "y": 4,
+ "w": 1.25
+ }, {
+ "label": "|",
+ "x": 1.25,
+ "y": 4
+ }, {
+ "label": "Z",
+ "x": 2.25,
+ "y": 4
+ }, {
+ "label": "X",
+ "x": 3.25,
+ "y": 4
+ }, {
+ "label": "C",
+ "x": 4.25,
+ "y": 4
+ }, {
+ "label": "V",
+ "x": 5.25,
+ "y": 4
+ }, {
+ "label": "B",
+ "x": 6.25,
+ "y": 4
+ }, {
+ "label": "N",
+ "x": 7.25,
+ "y": 4
+ }, {
+ "label": "M",
+ "x": 8.25,
+ "y": 4
+ }, {
+ "label": "<",
+ "x": 9.25,
+ "y": 4
+ }, {
+ "label": ">",
+ "x": 10.25,
+ "y": 4
+ }, {
+ "label": "?",
+ "x": 11.25,
+ "y": 4
+ }, {
+ "label": "Shift",
+ "x": 12.25,
+ "y": 4,
+ "w": 1.75
+ }, {
+ "label": "\u2191",
+ "x": 14,
+ "y": 4
+ }, {
+ "label": "1",
+ "x": 15,
+ "y": 4
+ }, {
+ "label": "2",
+ "x": 16,
+ "y": 4
+ }, {
+ "label": "3",
+ "x": 17,
+ "y": 4
+ }, {
+ "label": "Enter",
+ "x": 18,
+ "y": 4,
+ "h": 2
+ }, {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 5,
+ "w": 1.25
+ }, {
+ "label": "Win",
+ "x": 1.25,
+ "y": 5,
+ "w": 1.25
+ }, {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 5,
+ "w": 1.25
+ }, {
+ "x": 3.75,
+ "y": 5,
+ "w": 6.25
+ }, {
+ "label": "Alt",
+ "x": 10,
+ "y": 5,
+ "w": 1.5
+ }, {
+ "label": "Crtl",
+ "x": 11.5,
+ "y": 5,
+ "w": 1.5
+ }, {
+ "label": "\u2190",
+ "x": 13,
+ "y": 5
+ }, {
+ "label": "\u2193",
+ "x": 14,
+ "y": 5
+ }, {
+ "label": "\u2192",
+ "x": 15,
+ "y": 5
+ }, {
+ "label": "0",
+ "x": 16,
+ "y": 5
+ }, {
+ "label": ".",
+ "x": 17,
+ "y": 5
+ }]
+ }
+ }
+}
diff --git a/keyboards/ep/96/keymaps/default/keymap.c b/keyboards/ep/96/keymaps/default/keymap.c
new file mode 100644
index 000000000..d51204153
--- /dev/null
+++ b/keyboards/ep/96/keymaps/default/keymap.c
@@ -0,0 +1,67 @@
+/* Copyright 2018 Elliot Powell
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// 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( /* Base */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_DEL, 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_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_P7, KC_P8, KC_P9, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT \
+ ),
+};
+
+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/ep/96/keymaps/default/readme.md b/keyboards/ep/96/keymaps/default/readme.md
new file mode 100644
index 000000000..81e87464f
--- /dev/null
+++ b/keyboards/ep/96/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for ep96 \ No newline at end of file
diff --git a/keyboards/ep/96/readme.md b/keyboards/ep/96/readme.md
new file mode 100644
index 000000000..404419b63
--- /dev/null
+++ b/keyboards/ep/96/readme.md
@@ -0,0 +1,15 @@
+# ep96
+
+![ep96](https://i.imgur.com/PZ2C7a8.jpg)
+
+A simple 96 key keyboard
+
+Keyboard Maintainer: Keyboard Maintainer: [Elliot Powell](https://github.com/e11i0t23), [/u/e11i0t23](https://reddit.com/u/e11i0t23)
+Hardware Supported: EP96 PCB
+Hardware Availability: Possible availability upon request
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ep/96:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ep/96/rules.mk b/keyboards/ep/96/rules.mk
new file mode 100644
index 000000000..407135de2
--- /dev/null
+++ b/keyboards/ep/96/rules.mk
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/ergo42/info.json b/keyboards/ergo42/info.json
index 6489e25a8..cac5a46a1 100644
--- a/keyboards/ergo42/info.json
+++ b/keyboards/ergo42/info.json
@@ -5,7 +5,7 @@
"width": 15,
"height": 4,
"layouts": {
- "LAYOUT_ortho_4x14": {
+ "LAYOUT": {
"key_count": 56,
"layout": [{"label":"L00", "x":0, "y":0}, {"label":"L01", "x":1, "y":0}, {"label":"L02", "x":2, "y":0}, {"label":"L03", "x":3, "y":0}, {"label":"L04", "x":4, "y":0}, {"label":"L05", "x":5, "y":0}, {"label":"L06", "x":6, "y":0}, {"label":"R00", "x":8, "y":0}, {"label":"R01", "x":9, "y":0}, {"label":"R02", "x":10, "y":0}, {"label":"R03", "x":11, "y":0}, {"label":"R04", "x":12, "y":0}, {"label":"R05", "x":13, "y":0}, {"label":"R06", "x":14, "y":0}, {"label":"L10", "x":0, "y":1}, {"label":"L11", "x":1, "y":1}, {"label":"L12", "x":2, "y":1}, {"label":"L13", "x":3, "y":1}, {"label":"L14", "x":4, "y":1}, {"label":"L15", "x":5, "y":1}, {"label":"L16", "x":6, "y":1}, {"label":"R10", "x":8, "y":1}, {"label":"R11", "x":9, "y":1}, {"label":"R12", "x":10, "y":1}, {"label":"R13", "x":11, "y":1}, {"label":"R14", "x":12, "y":1}, {"label":"R15", "x":13, "y":1}, {"label":"R16", "x":14, "y":1}, {"label":"L20", "x":0, "y":2}, {"label":"L21", "x":1, "y":2}, {"label":"L22", "x":2, "y":2}, {"label":"L23", "x":3, "y":2}, {"label":"L24", "x":4, "y":2}, {"label":"L25", "x":5, "y":2}, {"label":"L26", "x":6, "y":2}, {"label":"R20", "x":8, "y":2}, {"label":"R21", "x":9, "y":2}, {"label":"R22", "x":10, "y":2}, {"label":"R23", "x":11, "y":2}, {"label":"R24", "x":12, "y":2}, {"label":"R25", "x":13, "y":2}, {"label":"R26", "x":14, "y":2}, {"label":"L30", "x":0, "y":3}, {"label":"L31", "x":1, "y":3}, {"label":"L32", "x":2, "y":3}, {"label":"L33", "x":3, "y":3}, {"label":"L34", "x":4, "y":3}, {"label":"L35", "x":5, "y":3}, {"label":"L36", "x":6, "y":3}, {"label":"R30", "x":8, "y":3}, {"label":"R31", "x":9, "y":3}, {"label":"R32", "x":10, "y":3}, {"label":"R33", "x":11, "y":3}, {"label":"R34", "x":12, "y":3}, {"label":"R35", "x":13, "y":3}, {"label":"R36", "x":14, "y":3}]
}
diff --git a/keyboards/ergo42/keymaps/biacco-biacco/config.h b/keyboards/ergo42/keymaps/biacco-biacco/config.h
new file mode 100644
index 000000000..360d6a562
--- /dev/null
+++ b/keyboards/ergo42/keymaps/biacco-biacco/config.h
@@ -0,0 +1,33 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
diff --git a/keyboards/ergo42/keymaps/biacco-biacco/keymap.c b/keyboards/ergo42/keymaps/biacco-biacco/keymap.c
new file mode 100644
index 000000000..ee471b3a5
--- /dev/null
+++ b/keyboards/ergo42/keymaps/biacco-biacco/keymap.c
@@ -0,0 +1,161 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+#include "eeconfig.h"
+
+extern keymap_config_t keymap_config;
+
+#define BASE 0
+#define META 1
+#define SYMB 2
+#define GAME 3
+#define BIAC 4
+#define BMETA 5
+#define BSYMB 6
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* BASE
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
+ * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+
+[BASE] = LAYOUT( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \
+ KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \
+ KC_LCTRL, KC_LGUI, KC_APP, TG(BIAC),LT(SYMB, KC_ESC), RCTL_T(KC_SPC), SFT_T(KC_TAB), KC_BSPC, LT(META, KC_ENT), KC_DELT, KC_PSCR, TG(GAME), TG(SYMB), KC_JYEN \
+),
+
+/* META
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | 1 | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | F1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | | |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 |\/Sft |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset |=>GAME|=>SYMB| \ |
+ * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+
+[META] = LAYOUT( \
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, _______, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \
+ _______, KC_F1, XXXXXXX, KC_MHEN, KC_HENK, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, \
+ _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, SFT_T(KC_RO), \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______ \
+),
+
+/* SYMB
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | ! | " | # | $ | % | & | [ | | ] | ' | ( | ) | ~ | = | ~ |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | | | | | | ( | | ) | | | | | + | * |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | | | | | | { | | } | | | < | > | ? | \ |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
+ * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+
+[SYMB] = LAYOUT( \
+ S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL), \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_SCLN), S(KC_QUOT), \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_RO), \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+),
+
+/* GAME
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ |
+ * | | | | | | | | |Space | | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+[GAME] = LAYOUT( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \
+ KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \
+ KC_LCTRL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DELT, KC_PSCR, _______, _______, KC_JYEN \
+),
+
+/* BIAC
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | Tab | ; | , | . | P | Q | [ | | ] | Y | G | D | M | F | @ |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | A | O | E | I | U | ( | | ) | B | N | T | R | S | : |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | Z | X | C | V | W | { | | } | H | J | K | L | / |\/Sft |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |=>BIAC|ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc | | | \ |
+ * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+
+[BIAC] = LAYOUT( \
+ KC_TAB, KC_SCLN,KC_COMM, KC_DOT, KC_P, KC_Q, KC_RBRC, KC_BSLS, KC_Y, KC_G, KC_D, KC_M, KC_F, KC_LBRC, \
+ KC_LALT, KC_A, KC_O, KC_E, KC_I, KC_U, S(KC_8), S(KC_9), KC_B, KC_N, KC_T, KC_R, KC_S, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_W, S(KC_RBRC), S(KC_BSLS), KC_H, KC_J, KC_K, KC_L, KC_SLSH, SFT_T(KC_RO), \
+ KC_LCTRL, KC_LGUI, KC_APP, _______, LT(BSYMB, KC_ESC),RCTL_T(KC_SPC),SFT_T(KC_TAB), KC_BSPC, LT(BMETA, KC_ENT),KC_DELT, KC_PSCR, XXXXXXX, XXXXXXX, KC_JYEN \
+),
+
+/* META
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | 1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | |\/Sft |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App | |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset | | | \ |
+ * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+
+[BMETA] = 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_2, KC_3, KC_4, KC_5, KC_6, _______, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \
+ _______, KC_1, XXXXXXX, KC_MHEN, KC_HENK, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, SFT_T(KC_RO), \
+ _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______ \
+),
+
+/* SYMB
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | | | | | | [ | | ] | | | [ | ] | + | * |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | " | # | $ | % | & | ( | | ) | ' | ( | ) | | = | ~ |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | ! | | | | | { | | } | { | } | < | > | ? | \ |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App | |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc | | | \ |
+ * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+
+[BSYMB] = LAYOUT( \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, KC_RBRC, KC_BSLS, S(KC_SCLN), S(KC_QUOT), \
+ _______, S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL), \
+ _______, S(KC_1), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, S(KC_RBRC), S(KC_BSLS), S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_RO), \
+ _______, _______, _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+};
+
diff --git a/keyboards/ergo42/keymaps/biacco-macOS/config.h b/keyboards/ergo42/keymaps/biacco-macOS/config.h
index 5a6261c4f..360d6a562 100644
--- a/keyboards/ergo42/keymaps/biacco-macOS/config.h
+++ b/keyboards/ergo42/keymaps/biacco-macOS/config.h
@@ -18,10 +18,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_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -34,4 +31,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-#endif
diff --git a/keyboards/ergo42/keymaps/biacco-underglow/config.h b/keyboards/ergo42/keymaps/biacco-underglow/config.h
index bc80be306..efadfa814 100644
--- a/keyboards/ergo42/keymaps/biacco-underglow/config.h
+++ b/keyboards/ergo42/keymaps/biacco-underglow/config.h
@@ -18,10 +18,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_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -40,4 +37,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_SLEEP
-#endif
diff --git a/keyboards/ergo42/keymaps/biacco-underglow/rules.mk b/keyboards/ergo42/keymaps/biacco-underglow/rules.mk
index 75e9c6503..1e3cebb14 100644
--- a/keyboards/ergo42/keymaps/biacco-underglow/rules.mk
+++ b/keyboards/ergo42/keymaps/biacco-underglow/rules.mk
@@ -1,5 +1 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
RGBLIGHT_ENABLE = yes
diff --git a/keyboards/ergo42/keymaps/biacco-winjp/config.h b/keyboards/ergo42/keymaps/biacco-winjp/config.h
new file mode 100644
index 000000000..360d6a562
--- /dev/null
+++ b/keyboards/ergo42/keymaps/biacco-winjp/config.h
@@ -0,0 +1,33 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
diff --git a/keyboards/ergo42/keymaps/biacco-winjp/keymap.c b/keyboards/ergo42/keymaps/biacco-winjp/keymap.c
new file mode 100644
index 000000000..5dbca3bfc
--- /dev/null
+++ b/keyboards/ergo42/keymaps/biacco-winjp/keymap.c
@@ -0,0 +1,95 @@
+// WindowsでJIS配列として認識しているときに、US配列として使うためのキーマップ
+// hdbx から2行コピーさせて頂きました。
+
+#include QMK_KEYBOARD_H
+#include "keymap_jp.h" // qmk_firmware-master/quantum/keymap_extras/keymap_jp.h 日本語キーボード設定用
+// マクロが必要になったらコメントインすること
+// #include <sendstring_jis.h> // macro sendstring for jis keyboard マクロ文字列送信時に日本語キーボード設定での文字化け回避>
+
+extern keymap_config_t keymap_config;
+
+#define BASE 0
+#define META 1
+#define SYMB 2
+#define GAME 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* BASE
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
+ * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+ [BASE] = LAYOUT( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \
+ KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \
+ KC_LCTRL, KC_LGUI, KC_APP, KC_PSCR, LT(SYMB, KC_ESC), RCTL_T(KC_SPC), SFT_T(KC_TAB), KC_BSPC, LT(META, KC_ENT), KC_DELT, KC_PSCR, TG(GAME), TG(SYMB), KC_JYEN \
+ ),
+
+ /* META
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | 1 | 2 | 3 | 4 | 5 | 6 | [ | | ] | 7 | 8 | 9 | 0 | - | ^ |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | F1 | |Muhen | Henk | | ( | | ) | Left | Down | Up |Right | | |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 |\/Sft |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |Reset |=>GAME|=>SYMB| \ |
+ * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+ [META] = LAYOUT( \
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, _______, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \
+ _______, KC_F1, XXXXXXX, KC_MHEN, KC_HENK, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, \
+ _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, SFT_T(KC_RO), \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______ \
+ ),
+
+ /* SYMB
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | ! | " | # | $ | % | & | [ | | ] | ' | ( | ) | ~ | = | ~ |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | | | | | | ( | | ) | | | | | + | * |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | | | | | | { | | } | | | < | > | ? | \ |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ | |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
+ * | | | | |~SYMB |RCtrl |Shift | |Space |~META | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+ [SYMB] = LAYOUT( \
+ S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), _______, _______, S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL), \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_SCLN), S(KC_QUOT), \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_RO), \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+ /* GAME
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ |
+ * | | | | | | | | |Space | | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+ [GAME] = LAYOUT( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \
+ KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \
+ KC_LCTRL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DELT, KC_PSCR, _______, _______, KC_JYEN \
+ )
+
+};
+
diff --git a/keyboards/ergo42/keymaps/biacco/config.h b/keyboards/ergo42/keymaps/biacco/config.h
index 5a6261c4f..360d6a562 100644
--- a/keyboards/ergo42/keymaps/biacco/config.h
+++ b/keyboards/ergo42/keymaps/biacco/config.h
@@ -18,10 +18,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_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -34,4 +31,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-#endif
diff --git a/keyboards/ergo42/keymaps/default-illustrator/config.h b/keyboards/ergo42/keymaps/default-illustrator/config.h
index 5a6261c4f..360d6a562 100644
--- a/keyboards/ergo42/keymaps/default-illustrator/config.h
+++ b/keyboards/ergo42/keymaps/default-illustrator/config.h
@@ -18,10 +18,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_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -34,4 +31,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-#endif
diff --git a/keyboards/ergo42/keymaps/default-underglow/config.h b/keyboards/ergo42/keymaps/default-underglow/config.h
index bc80be306..efadfa814 100644
--- a/keyboards/ergo42/keymaps/default-underglow/config.h
+++ b/keyboards/ergo42/keymaps/default-underglow/config.h
@@ -18,10 +18,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_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -40,4 +37,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_SLEEP
-#endif
diff --git a/keyboards/ergo42/keymaps/default-underglow/keymap.c b/keyboards/ergo42/keymaps/default-underglow/keymap.c
index a4d812c5d..4d7242579 100644
--- a/keyboards/ergo42/keymaps/default-underglow/keymap.c
+++ b/keyboards/ergo42/keymaps/default-underglow/keymap.c
@@ -32,14 +32,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | RGB | LSft | Z | X | C | V | B | | N | M | , | . | / | UP | RSft |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | META | LCtrl| ` | \ | LAlt | LGUI |Space | |Space | ' | - | = | LEFT | DOWN | RIGHT|
+ * | LGUI | LCtrl| ` | \ | LAlt | META |Space | |Space | ' | - | = | LEFT | DOWN | RIGHT|
* `------------------------------------------------' `------------------------------------------------'
*/
[BASE] = LAYOUT( \
- KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_BSPC, \
- KC_DELT, KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RBRC, KC_ENT, \
- MO(RGB), 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, \
- MO(META), KC_LCTL, KC_GRV, KC_BSLS, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_QUOT, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT \
+ KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_BSPC, \
+ KC_DELT, KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RBRC, KC_ENT, \
+ MO(RGB), 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_LGUI, KC_LCTL, KC_GRV, KC_BSLS, KC_LALT, MO(META), KC_SPC, KC_SPC, KC_QUOT, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT \
),
/* META
@@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | RGB | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 | F12 |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | META | LCtrl| ` | \ | LAlt | LGUI |Space | |Space | ' | - | = | | | |
+ * | LGUI | LCtrl| ` | \ | LAlt | META |Space | |Space | ' | - | = | | | |
* `------------------------------------------------' `------------------------------------------------'
*/
[META] = LAYOUT( \
@@ -68,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | RGB | | | | | | { | | } | | | | | UP | Sft |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | META | LCtrl| ` | \ | LAlt | LGUI |Space | |Space | ' | - | = | LEFT | DOWN | RIGHT|
+ * | LGUI | LCtrl| ` | \ | LAlt | META |Space | |Space | ' | - | = | LEFT | DOWN | RIGHT|
* `------------------------------------------------' `------------------------------------------------'
*/
[SYMB] = LAYOUT( \
diff --git a/keyboards/ergo42/keymaps/default/config.h b/keyboards/ergo42/keymaps/default/config.h
index 5a6261c4f..360d6a562 100644
--- a/keyboards/ergo42/keymaps/default/config.h
+++ b/keyboards/ergo42/keymaps/default/config.h
@@ -18,10 +18,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_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -34,4 +31,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-#endif
diff --git a/keyboards/ergo42/keymaps/default/keymap.c b/keyboards/ergo42/keymaps/default/keymap.c
index ced239c84..6c4cc1a62 100644
--- a/keyboards/ergo42/keymaps/default/keymap.c
+++ b/keyboards/ergo42/keymaps/default/keymap.c
@@ -21,14 +21,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | SYMB | LSft | Z | X | C | V | B | | N | M | , | . | / | UP | RSft |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | META | LCtrl| ` | \ | LAlt | LGUI |Space | |Space | ' | - | = | LEFT | DOWN | RIGHT|
+ * | LGUI | LCtrl| ` | \ | LAlt | META |Space | |Space | ' | - | = | LEFT | DOWN | RIGHT|
* `------------------------------------------------' `------------------------------------------------'
*/
[BASE] = LAYOUT( \
- KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_BSPC, \
- KC_DELT, KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RBRC, KC_ENT, \
- MO(SYMB), 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, \
- MO(META), KC_LCTL, KC_GRV, KC_BSLS, KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_QUOT, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT \
+ KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_BSPC, \
+ KC_DELT, KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RBRC, KC_ENT, \
+ MO(SYMB), 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_LGUI, KC_LCTL, KC_GRV, KC_BSLS, KC_LALT, MO(META), KC_SPC, KC_SPC, KC_QUOT, KC_MINS, KC_EQL, KC_LEFT, KC_DOWN, KC_RGHT \
),
/* META
@@ -39,7 +39,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | SYMB | F2 | F3 | F4 | F5 | F6 | { | | } | F7 | F8 | F9 | F10 | F11 | F12 |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | META | LCtrl| ` | \ | LAlt | LGUI |Space | |Space | ' | - | = | | | |
+ * | LGUI | LCtrl| ` | \ | LAlt | META |Space | |Space | ' | - | = | | | |
* `------------------------------------------------' `------------------------------------------------'
*/
[META] = LAYOUT( \
@@ -57,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
* | SYMB | | | | | | { | | } | | | | | UP | Sft |
* |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | META | LCtrl| ` | \ | LAlt | LGUI |Space | |Space | ' | - | = | LEFT | DOWN | RIGHT|
+ * | LGUI | LCtrl| ` | \ | LAlt | META |Space | |Space | ' | - | = | LEFT | DOWN | RIGHT|
* `------------------------------------------------' `------------------------------------------------'
*/
[SYMB] = LAYOUT( \
diff --git a/keyboards/ergo42/keymaps/default/rules.mk b/keyboards/ergo42/keymaps/default/rules.mk
deleted file mode 100644
index 457a3d01d..000000000
--- a/keyboards/ergo42/keymaps/default/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/ergo42/keymaps/hdbx/config.h b/keyboards/ergo42/keymaps/hdbx/config.h
index 6bddef1ea..4f0704ae1 100644
--- a/keyboards/ergo42/keymaps/hdbx/config.h
+++ b/keyboards/ergo42/keymaps/hdbx/config.h
@@ -18,10 +18,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_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -44,4 +41,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
-#endif
diff --git a/keyboards/ergo42/keymaps/hdbx/rules.mk b/keyboards/ergo42/keymaps/hdbx/rules.mk
deleted file mode 100644
index 1e5761278..000000000
--- a/keyboards/ergo42/keymaps/hdbx/rules.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-RGBLIGHT_ENABLE = yes
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/ergo42/keymaps/ichi-t/config.h b/keyboards/ergo42/keymaps/ichi-t/config.h
index 5a6261c4f..360d6a562 100644
--- a/keyboards/ergo42/keymaps/ichi-t/config.h
+++ b/keyboards/ergo42/keymaps/ichi-t/config.h
@@ -18,10 +18,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_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -34,4 +31,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
// #define EE_HANDS
-#endif
diff --git a/keyboards/ergo42/keymaps/koba/config.h b/keyboards/ergo42/keymaps/koba/config.h
new file mode 100644
index 000000000..360d6a562
--- /dev/null
+++ b/keyboards/ergo42/keymaps/koba/config.h
@@ -0,0 +1,33 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
diff --git a/keyboards/ergo42/keymaps/koba/keymap.c b/keyboards/ergo42/keymaps/koba/keymap.c
new file mode 100644
index 000000000..f05f78b9e
--- /dev/null
+++ b/keyboards/ergo42/keymaps/koba/keymap.c
@@ -0,0 +1,128 @@
+/* Copyright 2018 Daisuke Kobayashi
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "keymap_jp.h"
+
+enum {
+ _WIN,
+ _MACOS,
+ _LOWER,
+ _RAISE,
+ _FUNC
+};
+
+#define KC_KNA KC_LANG1
+#define KC_EISU KC_LANG2
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define FN MO(_FUNC)
+#define WIN DF(_WIN)
+#define MACOS DF(_MACOS)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* WIN
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | Esc | Tab | Q | W | E | R | T | | Y | U | I | O | P | @ ` | Bksp |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Del | Ctrl | A | S | D | F | G | | H | J | K | L | ; + | ; * |Enter |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | H/Z |Shift | Z | X | C | V | B | | N | M | , < | . > | / ? | Up |Shift |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Fn | Ctrl | Win | Alt | Mhen |LOWER |Space | |Space |RAISE | Henk | Menu | Left | Down |Right |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+ [_WIN] = LAYOUT( \
+ KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, KC_BSPC, \
+ KC_DELT, KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_COLN, KC_ENT, \
+ KC_ZKHK, 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, \
+ FN, KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, LOWER, KC_SPC, KC_SPC, RAISE, KC_HENK, KC_APP, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+ /* MACOS
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | Esc | Tab | Q | W | E | R | T | | Y | U | I | O | P | @ ` | Bksp |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Del | Ctrl | A | S | D | F | G | | H | J | K | L | ; + | ; * |Enter |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Caps |Shift | Z | X | C | V | B | | N | M | , < | . > | / ? | Up |Shift |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Fn | Ctrl | Opt | Cmd | Eisu |LOWER |Space | |Space |RAISE | Kana | Cmd | Left | Down |Right |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+ [_MACOS] = LAYOUT( \
+ KC_ESC, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_AT, KC_BSPC, \
+ KC_DELT, KC_RCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, JP_COLN, KC_ENT, \
+ KC_CAPS, 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, \
+ FN, KC_LCTL, KC_LALT, KC_LGUI, KC_EISU, LOWER, KC_SPC, KC_SPC, RAISE, KC_KNA, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+ /* LOWER
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | | ! | " | # | $ | % | | & | ' | ( | ) | | = | |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | | | XXXX | XXXX | XXXX | { | ( | | ) | } | XXXX | ~ | | | _ | |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | | | XXXX | XXXX | XXXX | XXXX | XXXX | | XXXX | XXXX | XXXX | XXXX | XXXX | PgUp | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | Home | PgDn | End |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT( \
+ _______, _______, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), JP_EQL, _______, \
+ _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, JP_LCBR, JP_LPRN, JP_RPRN, JP_RCBR, XXXXXXX, JP_TILD, JP_PIPE, JP_UNDS, _______, \
+ _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGUP, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+ /* RAISE
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | | | F11 | F12 | XXXX | [ | ( | | ) | ] | XXXX | ^ | \ | \ | |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT( \
+ _______, _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, _______, \
+ _______, _______, KC_F11, KC_F12, XXXXXXX, JP_LBRC, JP_LPRN, JP_RPRN, JP_RBRC, XXXXXXX, JP_CIRC, KC_JYEN, KC_RO, _______, \
+ _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+ /* FUNC
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * |Reset | | XXXX | XXXX | XXXX | XXXX | XXXX | |PrtSc |SLock |Pause | XXXX | XXXX | XXXX | |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | | | XXXX | XXXX | XXXX | XXXX | >Win | | Ins | XXXX | XXXX | XXXX | XXXX | XXXX | |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | | | XXXX | XXXX | XXXX | XXXX | >Mac | | XXXX | XXXX | XXXX | XXXX | XXXX | Vol+ | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | Vol- | Play |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+ [_FUNC] = LAYOUT( \
+ RESET, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSCR, KC_SLCK, KC_PAUS, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
+ _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, WIN, KC_INS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
+ _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MACOS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_VOLD, KC_MPLY \
+ )
+};
+
diff --git a/keyboards/ergo42/keymaps/koba/readme.md b/keyboards/ergo42/keymaps/koba/readme.md
new file mode 100644
index 000000000..1fe054390
--- /dev/null
+++ b/keyboards/ergo42/keymaps/koba/readme.md
@@ -0,0 +1,57 @@
+# Keymap for Ergo42
+
+## About
+
+This keymap is for Ergo42.
+
+- JIS layout.
+- Independent Windows layout/MacOS layout layers.
+- Bottom row keys arranged like a standard keyboard.
+- Arrow keys are designed in the inverted-T.
+
+## Layout
+
+![keyboard-layout](https://user-images.githubusercontent.com/1042121/45888288-aa35ed00-bdf8-11e8-8741-71fe9a0fadc6.png)
+
+## Windows mode/MacOS mode
+
+|mode |key |
+|------------|------------|
+|Windows mode|Function + g|
+|MacOS mode |Function + b|
+
+When switching mode, the following keys switches.
+
+|Windows |MacOS |
+|---------------|------------|
+|Alt |Command(GUI)|
+|Windows(GUI) |Option(Alt) |
+|Menu(App) |Command(GUI)|
+|Muhenkan |Eisu |
+|Henkan |Kana |
+|Hankaku/Zenkaku|Caps |
+
+## Layers
+
+|No.|Name |Description |
+|---|--------|---------------------------|
+| 4 |Function|Mode switch, Media |
+| 3 |Raise |Number, Function |
+| 2 |Lower |Symbol, Home/End, PgUp/PgDn|
+| 1 |MacOS |MacOS layout |
+| 0 |Windows |Windows layout |
+
+When power is turn on, No.0 Windows layer becomes enabled.
+
+## Windows/MacOS layers
+
+Standard layers for Windows mode/MacOS mode.
+
+## Raise/Lower layers
+
+Layer enabled during pressing Raise or Lower key.
+
+## Function layer
+
+Layer enabled during pressing Function key.
+
diff --git a/keyboards/ergo42/keymaps/koba/readme_ja.md b/keyboards/ergo42/keymaps/koba/readme_ja.md
new file mode 100644
index 000000000..e1dbda821
--- /dev/null
+++ b/keyboards/ergo42/keymaps/koba/readme_ja.md
@@ -0,0 +1,62 @@
+# Keymap for Ergo42
+
+## 概要
+
+Ergo42 用キーマップです。
+
+- JIS 配列
+- 独立した Windows 配列/MacOS 配列レイヤー
+- 普通のキーボード配列に似せた最下段キー
+- 逆 T 字 (凸型) 配列の矢印キー
+
+## レイアウト
+
+![keyboard-layout](https://user-images.githubusercontent.com/1042121/45888288-aa35ed00-bdf8-11e8-8741-71fe9a0fadc6.png)
+
+## Windows モード/MacOS モード
+
+|モード |キー |
+|--------------|------------|
+|Windows モード|Function + g|
+|MacOS モード |Function + b|
+
+モードを切り替えることで下記のキーが切り替わります。
+
+|Windows |MacOS |
+|------------|------------|
+|Alt |Command(GUI)|
+|Windows(GUI)|Option(Alt) |
+|Menu(App) |Command(GUI)|
+|無変換 |英数 |
+|変換 |かな |
+|半角/全角 |Caps |
+
+## レイヤー
+
+|No.|名称 |内容 |
+|---|--------|--------------------------|
+| 4 |Function|モード切替, メディア |
+| 3 |Raise |数字, ファンクションキー |
+| 2 |Lower |記号, Home/End, PgUp/PgDn |
+| 1 |MacOS |MacOS 配列 |
+| 0 |Windows |Windows 配列 |
+
+電源 ON により No.0 の Windows レイヤーが有効になります。
+
+## Windows/MacOS レイヤー
+
+Windows モード/MacOS モードの標準レイヤー。
+
+## Raise/Lower レイヤー
+
+Raise キーまたは Lower キーを押している間だけ有効になるレイヤー。
+
+普通のキーボードの最上段キー (数字/記号) に加えて、標準レイヤーに入らなかった記号キーが3つ (`[{`, `]}`, `\_`) 入っています。
+括弧キー `[{`, `]}` は `(`, `)` を加えて、左右対称に配置しました。
+
+## Function レイヤー
+
+Function キーを押している間だけ有効になるレイヤー。
+
+Windows モード/MacOS モードの切り替え、メディア系の操作、標準レイヤーに入らなかった機能キーのレイヤーです。
+
diff --git a/keyboards/ergo42/keymaps/yshrsmz/config.h b/keyboards/ergo42/keymaps/yshrsmz/config.h
new file mode 100644
index 000000000..1892ef652
--- /dev/null
+++ b/keyboards/ergo42/keymaps/yshrsmz/config.h
@@ -0,0 +1,36 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+/* auto shift config */
+#define AUTO_SHIFT_TIMEOUT 150
+
diff --git a/keyboards/ergo42/keymaps/yshrsmz/keymap.c b/keyboards/ergo42/keymaps/yshrsmz/keymap.c
new file mode 100644
index 000000000..a4a83a2e1
--- /dev/null
+++ b/keyboards/ergo42/keymaps/yshrsmz/keymap.c
@@ -0,0 +1,166 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _BASE 0
+#define _META 1
+#define _SYMB 2
+#define _GAME 3
+
+
+enum custom_keycodes {
+ BASE = SAFE_RANGE,
+ META,
+ SYMB,
+ GAME,
+ EISU,
+ KANA
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* BASE
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | = | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | - |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | ( | | ) | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | EISU | Ctrl | Alt | GUI | ESC/ |Del |Back | |Enter |Space | META | GUI |=>GAME|=>SYMB| KANA |
+ * | | | | | SYMB | |Space | | | | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+
+[_BASE] = LAYOUT( \
+ KC_EQL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LPRN, KC_RPRN, 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_LCBR, KC_RCBR, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS, \
+ EISU, KC_LCTRL, KC_LALT, KC_LGUI, LT(_SYMB, KC_ESC),KC_DEL, KC_BSPC, KC_ENT, KC_SPC, META, KC_LGUI, TG(_GAME), TG(_SYMB), KANA \
+),
+
+/* META
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | | | Left | Down | Up |Right | PgUp | |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | Home | End |Alt+← |Alt+→ | PgDn | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |Reset | | | |
+ * | | | | | | | | | | | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+
+[_META] = 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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PGUP, _______, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_HOME, KC_END, LALT(KC_LEFT), LALT(KC_RGHT), KC_PGDN, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______ \
+),
+
+/* SYMB
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | - |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | | | Left | Down | Up |Right | PgUp | |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | Home | End |Alt+← |Alt+→ | PgDn | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |Reset | | | |
+ * | | | | | | | | | | | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+
+[_SYMB] = LAYOUT( \
+ KC_TILD, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), _______, _______, S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), _______, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PGUP, _______, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_HOME, KC_END, LALT(KC_LEFT), LALT(KC_RGHT), KC_PGDN, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______ \
+),
+
+/* GAME
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | @ |
+ * |------+------+------+------+------+------+------| |-------------+------+------+------+------+------|
+ * | Alt | A | S | D | F | G | ( | | ) | H | J | K | L | ; | : |
+ * |------+------+------+------+------+------+------| |------|------+------+------+------+------+------|
+ * | Sft | Z | X | C | V | B | { | | } | N | M | , | . | / |\/Sft |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab | |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ |
+ * | | | | | | | | |Space | | | | | | |
+ * `------------------------------------------------' `------------------------------------------------'
+ */
+[_GAME] = LAYOUT( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_RBRC, KC_BSLS, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \
+ KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, S(KC_8), S(KC_9), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, S(KC_RBRC), S(KC_BSLS), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \
+ KC_LCTRL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DELT, KC_PSCR, _______, _______, KC_JYEN \
+)
+
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case BASE:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_BASE);
+ }
+ return false;
+ break;
+ case META:
+ if (record->event.pressed) {
+ layer_on(_META);
+ update_tri_layer(_META, _SYMB, _GAME);
+ } else {
+ layer_off(_META);
+ update_tri_layer(_META, _SYMB, _GAME);
+ }
+ return false;
+ break;
+ case SYMB:
+ if (record->event.pressed) {
+ layer_on(_SYMB);
+ update_tri_layer(_META, _SYMB, _GAME);
+ } else {
+ layer_off(_SYMB);
+ update_tri_layer(_META, _SYMB, _GAME);
+ }
+ return false;
+ break;
+ case GAME:
+ if (record->event.pressed) {
+ layer_on(_GAME);
+ } else {
+ layer_off(_GAME);
+ }
+ return false;
+ break;
+ case EISU:
+ if (record->event.pressed) {
+ register_code(KC_LANG2);
+ } else {
+ unregister_code(KC_LANG2);
+ }
+ return false;
+ break;
+ case KANA:
+ if (record->event.pressed) {
+ register_code(KC_LANG1);
+ } else {
+ unregister_code(KC_LANG1);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/ergo42/keymaps/yshrsmz/rules.mk b/keyboards/ergo42/keymaps/yshrsmz/rules.mk
new file mode 100644
index 000000000..a779882fa
--- /dev/null
+++ b/keyboards/ergo42/keymaps/yshrsmz/rules.mk
@@ -0,0 +1,4 @@
+RGBLIGHT_ENABLE = no
+BACKLIGHT_ENABLE = no
+
+AUTO_SHIFT_ENABLE = yes
diff --git a/keyboards/ergo42/rev1/config.h b/keyboards/ergo42/rev1/config.h
index 1a674a858..a7edb4097 100644
--- a/keyboards/ergo42/rev1/config.h
+++ b/keyboards/ergo42/rev1/config.h
@@ -66,10 +66,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
diff --git a/keyboards/ergo42/rules.mk b/keyboards/ergo42/rules.mk
index 252411cab..cdc9da908 100644
--- a/keyboards/ergo42/rules.mk
+++ b/keyboards/ergo42/rules.mk
@@ -67,7 +67,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = yes
USE_I2C = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/ergodash/ergodash.h b/keyboards/ergodash/ergodash.h
index 9900a1def..bf2bac581 100644
--- a/keyboards/ergodash/ergodash.h
+++ b/keyboards/ergodash/ergodash.h
@@ -43,4 +43,22 @@
)
#endif // #ifdef KEYBOARD_ergodash_rev2
+#ifdef KEYBOARD_ergodash_mini
+ #include "mini.h"
+
+ // Used to create a keymap using only KC_ prefixed keys
+ #define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36 \
+ ) \
+ LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##L06, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, KC_##R06, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##L16, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, KC_##R16, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##L26, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, KC_##R26, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L36, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, KC_##R36 \
+ )
+#endif // #ifdef KEYBOARD_ergodash_mini
+
#endif
diff --git a/keyboards/ergodash/mini/config.h b/keyboards/ergodash/mini/config.h
new file mode 100644
index 000000000..11cff145e
--- /dev/null
+++ b/keyboards/ergodash/mini/config.h
@@ -0,0 +1,95 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0100
+#define MANUFACTURER Omkbd
+#define PRODUCT ErgoDashmini
+#define DESCRIPTION Power
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 7
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2 }
+// #define MATRIX_COL_PINS { 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 tapping term */
+#define TAPPING_TERM 120
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+#define C6_AUDIO
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(STARTUP_SOUND)
+ #define GOODBYE_SONG SONG(GOODBYE_SOUND)
+#endif
+
+/* number of backlight levels */
+#ifdef BACKLIGHT_ENABLE
+ #define BACKLIGHT_PIN B6
+ #define BACKLIGHT_LEVELS 7
+// #define BACKLIGHT_BREATHING
+// #define BREATHING_PERIOD 4
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 20 // Number of LEDs
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/ergodash/mini/info.json b/keyboards/ergodash/mini/info.json
new file mode 100644
index 000000000..538e0b872
--- /dev/null
+++ b/keyboards/ergodash/mini/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "ErgoDash mini",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 56,
+ "layout": [{"label":"L00", "x":0, "y":1.375}, {"label":"L01", "x":1, "y":1.375}, {"label":"L02", "x":2, "y":1.125}, {"label":"L03", "x":3, "y":1}, {"label":"L04", "x":4, "y":1.125}, {"label":"L05", "x":5, "y":1.25}, {"label":"L06", "x":6, "y":1.75}, {"label":"R00", "x":11, "y":1.75}, {"label":"R01", "x":12, "y":1.25}, {"label":"R02", "x":13, "y":1.125}, {"label":"R03", "x":14, "y":1}, {"label":"R04", "x":15, "y":1.125}, {"label":"R05", "x":16, "y":1.375}, {"label":"R06", "x":17, "y":1.375}, {"label":"L10", "x":0, "y":2.375}, {"label":"L11", "x":1, "y":2.375}, {"label":"L12", "x":2, "y":2.125}, {"label":"L13", "x":3, "y":2}, {"label":"L14", "x":4, "y":2.125}, {"label":"L15", "x":5, "y":2.25}, {"label":"L16", "x":6, "y":2.75}, {"label":"R10", "x":11, "y":2.75}, {"label":"R11", "x":12, "y":2.25}, {"label":"R12", "x":13, "y":2.125}, {"label":"R13", "x":14, "y":2}, {"label":"R14", "x":15, "y":2.125}, {"label":"R15", "x":16, "y":2.375}, {"label":"R16", "x":17, "y":2.375}, {"label":"L20", "x":0, "y":3.375}, {"label":"L21", "x":1, "y":3.375}, {"label":"L22", "x":2, "y":3.125}, {"label":"L23", "x":3, "y":3}, {"label":"L24", "x":4, "y":3.125}, {"label":"L25", "x":5, "y":3.25}, {"label":"L26", "x":6.5, "y":4.25}, {"label":"R20", "x":10.5, "y":4.25}, {"label":"R21", "x":12, "y":3.25}, {"label":"R22", "x":13, "y":3.125}, {"label":"R23", "x":14, "y":3}, {"label":"R24", "x":15, "y":3.125}, {"label":"R25", "x":16, "y":3.375}, {"label":"R26", "x":17, "y":3.375}, {"label":"L30", "x":0, "y":4.375}, {"label":"L31", "x":1, "y":4.375}, {"label":"L32", "x":2, "y":4.125}, {"label":"L33", "x":3, "y":4}, {"label":"L34", "x":5.5, "y":5.25}, {"label":"L35", "x":6.5, "y":5.25}, {"label":"L36", "x":7.5, "y":4.25, "h":2}, {"label":"R30", "x":9.5, "y":4.25, "h":2}, {"label":"R31", "x":10.5, "y":5.25}, {"label":"R32", "x":11.5, "y":5.25}, {"label":"R33", "x":14, "y":4}, {"label":"R34", "x":15, "y":4.125}, {"label":"R35", "x":16, "y":4.375}, {"label":"R36", "x":17, "y":4.375}]
+ }
+ }
+}
diff --git a/keyboards/ergodash/mini/keymaps/default/config.h b/keyboards/ergodash/mini/keymaps/default/config.h
new file mode 100644
index 000000000..a5a722fb2
--- /dev/null
+++ b/keyboards/ergodash/mini/keymaps/default/config.h
@@ -0,0 +1,39 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 20
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+#define RGBLIGHT_VAL_STEP 17
diff --git a/keyboards/ergodash/mini/keymaps/default/keymap.c b/keyboards/ergodash/mini/keymaps/default/keymap.c
new file mode 100644
index 000000000..ecf1f723f
--- /dev/null
+++ b/keyboards/ergodash/mini/keymaps/default/keymap.c
@@ -0,0 +1,129 @@
+#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,
+ RAISE,
+ ADJUST,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define EISU LALT(KC_GRV)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | [ | | ] | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | Space| | Enter| N | M | , | . | / | Shift|
+ * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+ * | Ctrl | GUI | ALt | EISU |||||||| Lower| Space|Delete|||||||| Bksp | Enter| Raise|||||||| Left | Down | Up | Right|
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ */
+ [_QWERTY] = LAYOUT( \
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, KC_EQL , KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, \
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LBRC, KC_RBRC, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC , KC_ENT , KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, EISU, LOWER, KC_SPC , KC_DEL, KC_BSPC,KC_ENT , RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Lower
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ * | ` | ! | @ | # | $ | % | _ | | + | ^ | & | * | ( | ) | | |
+ * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+ * | ~ | 1 | 2 | 3 | 4 | 5 | { | | } | Left | Down | Up | Right| : | " |
+ * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+ * | Shift| 6 | 7 | 8 | 9 | 0 | Space| | Enter| N | M | < | > | ? | Shift|
+ * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+ * | Ctrl | GUI | ALt | EISU |||||||| Lower| Space|Delete|||||||| Bksp | Enter| Raise|||||||| Home |PageDn|PageUp| End |
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ */
+ [_LOWER] = LAYOUT(
+ KC_GRV , KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_UNDS, KC_PLUS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
+ KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LCBR, KC_RCBR, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_COLN, KC_DQT , \
+ KC_LSFT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SPC , KC_ENT , KC_N, KC_M, KC_LT, KC_GT, KC_QUES, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, EISU, LOWER, KC_SPC , KC_DEL, KC_BSPC,KC_ENT , RAISE, KC_HOME, KC_PGDN, KC_PGUP, KC_END \
+ ),
+
+ /* Raise
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ * | ` | ! | @ | # | $ | % | _ | | + | ^ | & | * | ( | ) | | |
+ * |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
+ * | ~ | F1 | F2 | F3 | F4 | F5 | { | | } | Left | Down | Up | Right| : | " |
+ * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+ * | Shift| F6 | F7 | F8 | F9 | F10 | Space| | Enter| N | M | < | > | ? | Shift|
+ * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+ * | Ctrl | F11 | F12 | EISU |||||||| Lower| Space|Delete|||||||| Bksp | Enter| Raise|||||||| Home |PageDn|PageUp| End |
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ */
+ [_RAISE] = LAYOUT(
+ KC_GRV , KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_UNDS, KC_PLUS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LCBR, KC_RCBR, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, KC_COLN, KC_DQT , \
+ KC_LSFT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_SPC , KC_ENT , KC_N, KC_M, KC_LT, KC_GT, KC_QUES, KC_RSFT, \
+ KC_LCTL, KC_F11 , KC_F12, EISU, LOWER, KC_SPC , KC_DEL, KC_BSPC,KC_ENT , RAISE, KC_HOME, KC_PGDN, KC_PGUP, KC_END \
+ ),
+
+ /* Adjust
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ * | | Reset|RGB ON| MODE| HUE-| HUE+| | | | SAT-| SAT+| VAL-| VAL+| | |
+ * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
+ * | | | | |||||||| | | |||||||| | | |||||||| | | | |
+ * ,----------------------------------------------------------------------------------------------------------------------.
+ */
+ [_ADJUST] = LAYOUT(
+ _______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI,_______, _______, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, \
+ _______, _______, BL_TOGG, BL_BRTG, BL_INC , BL_DEC ,_______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______,_______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______,_______,_______, _______,_______, _______, _______, _______, _______, _______ \
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/ergodash/mini/keymaps/default/rules.mk b/keyboards/ergodash/mini/keymaps/default/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/ergodash/mini/keymaps/default/rules.mk
diff --git a/keyboards/ergodash/mini/mini.c b/keyboards/ergodash/mini/mini.c
new file mode 100644
index 000000000..89b821297
--- /dev/null
+++ b/keyboards/ergodash/mini/mini.c
@@ -0,0 +1,13 @@
+#include "ergodash.h"
+
+#ifdef AUDIO_ENABLE
+ float tone_startup[][2] = SONG(STARTUP_SOUND);
+ 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
diff --git a/keyboards/ergodash/mini/mini.h b/keyboards/ergodash/mini/mini.h
new file mode 100644
index 000000000..74e574170
--- /dev/null
+++ b/keyboards/ergodash/mini/mini.h
@@ -0,0 +1,60 @@
+#ifndef MINI_H
+#define MINI_H
+
+#include "ergodash.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+#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 \
+ ) \
+ { \
+ { 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 }, \
+ { 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 }, \
+ }
+#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 \
+ ) \
+ { \
+ { 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 }, \
+ { 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 }, \
+ }
+#endif
+
+#endif
diff --git a/keyboards/ergodash/mini/readme.md b/keyboards/ergodash/mini/readme.md
new file mode 100644
index 000000000..f830f3f1d
--- /dev/null
+++ b/keyboards/ergodash/mini/readme.md
@@ -0,0 +1,18 @@
+# ErgoDash mini
+
+![ErgoDash mini](https://github.com/omkbd/picture/blob/master/Ergodashmini.jpg)
+
+Keyboard Maintainer: [omkbd](https://github.com/omkbd) [@omkbd](https://twitter.com/omkbd)
+Hardware Supported: ErgoDash mini PCB, Pro Micro ATmega32u4
+Hardware Availability: Order your own [yourself](https://github.com/omkbd/ErgoDash)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ergodash/mini: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.
+
+# Layout
+![layout](https://github.com/omkbd/picture/blob/master/ergodashmini-layout.png)
+![PCB](https://github.com/omkbd/picture/blob/master/Ergodashmini_PCB.jpg)
diff --git a/keyboards/ergodash/mini/rules.mk b/keyboards/ergodash/mini/rules.mk
new file mode 100644
index 000000000..b6c9a2580
--- /dev/null
+++ b/keyboards/ergodash/mini/rules.mk
@@ -0,0 +1,2 @@
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/ergodash/readme.md b/keyboards/ergodash/readme.md
index d0d1dcb56..7fa76344f 100644
--- a/keyboards/ergodash/readme.md
+++ b/keyboards/ergodash/readme.md
@@ -1,6 +1,6 @@
# ErgoDash
-![ErgoDash](https://github.com/omkbd/picture/blob/master/IMG_20180630_1702141.jpg)
+![ErgoDash](https://github.com/omkbd/picture/blob/master/Ergodash.jpg)
Keyboard Maintainer: [omkbd](https://github.com/omkbd) [@omkbd](https://twitter.com/omkbd)
Hardware Supported: ErgoDash PCB, Pro Micro ATmega32u4
@@ -15,4 +15,4 @@ See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools)
# Layout
![layout](https://github.com/omkbd/picture/blob/master/ergodash-layout.png)
-![PCB](https://github.com/omkbd/picture/blob/master/IMG_20180630_2022231.jpg)
+![PCB](https://github.com/omkbd/picture/blob/master/Ergodash_PCB.jpg)
diff --git a/keyboards/ergodash/rev1/config.h b/keyboards/ergodash/rev1/config.h
index 09dd6604e..d3f3314ee 100644
--- a/keyboards/ergodash/rev1/config.h
+++ b/keyboards/ergodash/rev1/config.h
@@ -63,10 +63,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 24 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
diff --git a/keyboards/ergodash/rev2/config.h b/keyboards/ergodash/rev2/config.h
index d0b396cd4..5f9c68991 100644
--- a/keyboards/ergodash/rev2/config.h
+++ b/keyboards/ergodash/rev2/config.h
@@ -45,6 +45,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
+#define C6_AUDIO
+
/* number of backlight levels */
#ifdef BACKLIGHT_ENABLE
#define BACKLIGHT_PIN B6
@@ -68,10 +70,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 24 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
diff --git a/keyboards/ergodash/rev2/keymaps/default/keymap.c b/keyboards/ergodash/rev2/keymaps/default/keymap.c
index dc1f6eedd..418089e1b 100644
--- a/keyboards/ergodash/rev2/keymaps/default/keymap.c
+++ b/keyboards/ergodash/rev2/keymaps/default/keymap.c
@@ -19,29 +19,29 @@ enum custom_keycodes {
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
-#define KC_JPN LALT(KC_GRV)
+#define EISU LALT(KC_GRV)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,----------------------------------------------------------------------------------------------------------------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 | Caps |
+ * | ESC | 1 | 2 | 3 | 4 | 5 | [ | | ] | 6 | 7 | 8 | 9 | 0 |Pscree|
* |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
* | ` | Q | W | E | R | T | - | | = | Y | U | I | O | P | \ |
* |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
* | Tab | A | S | D | F | G | Del | | Bksp | H | J | K | L | ; | " |
* |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | JPN | | Enter| N | M | , | . | / | Shift|
+ * | Shift| Z | X | C | V | B | Space| | Enter| N | M | , | . | / | Shift|
* |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
- * | Ctrl | GUI | ALt |Adjust|||||||| Lower| Space| |||||||| | Enter| Raise|||||||| Left | Down | Up | Right|
+ * | Ctrl | GUI | ALt | EISU |||||||| Lower| Space| |||||||| | Enter| Raise|||||||| Left | Down | Up | Right|
* ,----------------------------------------------------------------------------------------------------------------------.
*/
[_QWERTY] = LAYOUT( \
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC, KC_RBRC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_CAPS, \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LBRC, KC_RBRC, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PSCR, \
KC_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, KC_EQL , KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, \
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_DEL , KC_BSPC, 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_JPN , KC_ENT , KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
- KC_LCTL, KC_LGUI, KC_LALT, ADJUST, LOWER, KC_SPC ,_______, _______,KC_ENT , RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC , KC_ENT , KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, EISU, LOWER, KC_SPC ,_______, _______,KC_ENT , RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Lower
@@ -52,17 +52,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
* | Tab | 1 | 2 | 3 | 4 | 5 | Del | | Bksp | H | J | K | L | : | " |
* |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
- * | Shift| 6 | 7 | 8 | 9 | 0 | JPN | | Enter| N | M | < | > | ? | Shift|
+ * | Shift| 6 | 7 | 8 | 9 | 0 | Space| | Enter| N | M | < | > | ? | Shift|
* |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
- * | Ctrl | GUI | ALt |Adjust|||||||| Lower| Space| |||||||| | Enter| Raise|||||||| Home |PageDn|PageUp| End |
+ * | Ctrl | GUI | ALt | EISU |||||||| Lower| Space| |||||||| | Enter| Raise|||||||| Home |PageDn|PageUp| End |
* ,----------------------------------------------------------------------------------------------------------------------.
*/
[_LOWER] = LAYOUT(
KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LCBR, KC_RCBR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, \
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_UNDS, KC_PLUS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL , KC_BSPC, KC_H, KC_J, KC_K, KC_L, KC_COLN, KC_DQT , \
- KC_LSFT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_JPN , KC_ENT , KC_N, KC_M, KC_LT, KC_GT, KC_QUES, KC_RSFT, \
- KC_LCTL, KC_LGUI, KC_LALT, ADJUST, LOWER, KC_SPC ,_______, _______,KC_ENT , RAISE, KC_HOME, KC_PGDN, KC_PGUP, KC_END \
+ KC_LSFT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SPC , KC_ENT , KC_N, KC_M, KC_LT, KC_GT, KC_QUES, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, EISU, LOWER, KC_SPC ,_______, _______,KC_ENT , RAISE, KC_HOME, KC_PGDN, KC_PGUP, KC_END \
),
/* Raise
@@ -73,17 +73,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+--------------------+------+------+------+------+------+------+------|
* | Tab | 1 | 2 | 3 | 4 | 5 | Del | | Bksp | H | J | K | L | : | " |
* |------+------+------+------+------+------+---------------------------+------+------+------+------+------+------+------|
- * | Shift| 6 | 7 | 8 | 9 | 0 | JPN | | Enter| N | M | < | > | ? | Shift|
+ * | Shift| 6 | 7 | 8 | 9 | 0 | Space| | Enter| N | M | < | > | ? | Shift|
* |-------------+------+------+------+------+------+------+------+------+------+------+------+------+------+-------------|
- * | Ctrl | GUI | ALt |Adjust|||||||| Lower| Space| |||||||| | Enter| Raise|||||||| Home |PageDn|PageUp| End |
+ * | Ctrl | GUI | ALt | EISU |||||||| Lower| Space| |||||||| | Enter| Raise|||||||| Home |PageDn|PageUp| End |
* ,----------------------------------------------------------------------------------------------------------------------.
*/
[_RAISE] = LAYOUT(
KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_LCBR, KC_RCBR, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, \
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_UNDS, KC_PLUS, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_DEL , KC_BSPC, KC_H, KC_J, KC_K, KC_L, KC_COLN, KC_DQT , \
- KC_LSFT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_JPN , KC_ENT , KC_N, KC_M, KC_LT, KC_GT, KC_QUES, KC_RSFT, \
- KC_LCTL, KC_LGUI, KC_LALT, ADJUST, LOWER, KC_SPC ,_______, _______,KC_ENT , RAISE, KC_HOME, KC_PGDN, KC_PGUP, KC_END \
+ KC_LSFT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SPC , KC_ENT , KC_N, KC_M, KC_LT, KC_GT, KC_QUES, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, EISU, LOWER, KC_SPC ,_______, _______,KC_ENT , RAISE, KC_HOME, KC_PGDN, KC_PGUP, KC_END \
),
/* Adjust
diff --git a/keyboards/ergodash/rev2/rules.mk b/keyboards/ergodash/rev2/rules.mk
index bd518d8f2..b6c9a2580 100644
--- a/keyboards/ergodash/rev2/rules.mk
+++ b/keyboards/ergodash/rev2/rules.mk
@@ -1 +1,2 @@
-BACKLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = no
+RGBLIGHT_ENABLE = no
diff --git a/keyboards/ergodash/rules.mk b/keyboards/ergodash/rules.mk
index fc06d60e2..e25346dac 100644
--- a/keyboards/ergodash/rules.mk
+++ b/keyboards/ergodash/rules.mk
@@ -64,7 +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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = yes
USE_I2C = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/ergodone/config.h b/keyboards/ergodone/config.h
index 1feff26aa..2c764d782 100644
--- a/keyboards/ergodone/config.h
+++ b/keyboards/ergodone/config.h
@@ -53,8 +53,6 @@
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
-#define PREVENT_STUCK_MODIFIERS
-
#define USB_MAX_POWER_CONSUMPTION 500
/* NKRO */
diff --git a/keyboards/ergodone/keymaps/eozaki/keymap.c b/keyboards/ergodone/keymaps/eozaki/keymap.c
new file mode 100644
index 000000000..a6d17b61c
--- /dev/null
+++ b/keyboards/ergodone/keymaps/eozaki/keymap.c
@@ -0,0 +1,223 @@
+#include QMK_KEYBOARD_H
+#include "debug.h"
+#include "action_layer.h"
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | ~ | | ' | 6 | 7 | 8 | 9 | 0 | = |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | Q | W | E | R | T | ~ | | " | Y | U | I | O | P | - |
+ * |--------+------+------+------+------+------| ` | | |------+------+------+------+------+--------|
+ * | Ctrl | A | S | D | F | G |------| |------| H | J | K | L | ; | \ |
+ * |--------+------+------+------+------+------| { | | } |------+------+------+------+------+--------|
+ * | LAlt | Z | X | C | V | B | [ | | ] | N | M | , | . | / | LShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | LT-1 | F4 | F5 | F6 | F11 | | Left | Down | Up | Right| RAlt |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | L1 | Prev | | Vol+ | L2 |
+ * ,------|------|------| |------+--------+------.
+ * | | | Play | | Vol- | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | Next | | Mute | | |
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, LSFT(KC_GRV),
+ KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_GRV,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC,
+ LT(SYMB, KC_F2), KC_F4, KC_F5, KC_F6, KC_F11,
+ TG(SYMB), KC_MPRV,
+ KC_MPLY,
+ KC_SPC,KC_BSPC,KC_MNXT,
+ // right hand
+ KC_QUOT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL,
+ LSFT(KC_QUOT), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),KC_BSLS,
+ KC_RBRC, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_LSFT,
+ KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,KC_RALT,
+ KC_VOLU, TG(MDIA),
+ KC_VOLD,
+ KC_MUTE,KC_TAB, KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | EPRM | | | | | | | . | 0 | = | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |Animat| | |Toggle|Solid |
+ * ,------|------|------| |------+------+------.
+ * |Bright|Bright| | | |Hue- |Hue+ |
+ * |ness- |ness+ |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = LAYOUT_ergodox(
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ RGB_MOD,KC_TRNS,
+ KC_TRNS,
+ RGB_VAD,RGB_VAI,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ RGB_TOG, RGB_SLD,
+ KC_TRNS,
+ KC_TRNS, RGB_HUD, RGB_HUI
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = LAYOUT_ergodox(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ 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.
+ case EPRM:
+ if (record->event.pressed) {
+ eeconfig_init();
+ }
+ return false;
+ break;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // TODO: Make this relevant to the ErgoDox EZ.
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ default:
+ // none
+ break;
+ }
+
+};
diff --git a/keyboards/ergodone/keymaps/eozaki/readme.md b/keyboards/ergodone/keymaps/eozaki/readme.md
new file mode 100644
index 000000000..bfde2b2c8
--- /dev/null
+++ b/keyboards/ergodone/keymaps/eozaki/readme.md
@@ -0,0 +1,13 @@
+# ErgoDox EZ Based Configuration
+
+## Changelog
+
+* Aug 2018:
+ * New custom L0 layout.
+* Dec 2016:
+ * Added LED keys
+ * Refreshed layout graphic, comes from http://configure.ergodox-ez.com now.
+* Sep 22, 2016:
+ * Created a new key in layer 1 (bottom-corner key) that resets the EEPROM.
+* Feb 2, 2016 (V1.1):
+ * Made the right-hand quote key double as Cmd/Win on hold. So you get ' when you tap it, " when you tap it with Shift, and Cmd or Win when you hold it. You can then use it as a modifier, or just press and hold it for a moment (and then let go) to send a single Cmd or Win keystroke (handy for opening the Start menu on Windows).
diff --git a/keyboards/ergodone/keymaps/erovia/config.h b/keyboards/ergodone/keymaps/erovia/config.h
new file mode 100644
index 000000000..60c6ad4a1
--- /dev/null
+++ b/keyboards/ergodone/keymaps/erovia/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define DISABLE_SPACE_CADET_ROLLOVER
diff --git a/keyboards/ergodone/keymaps/erovia/keymap.c b/keyboards/ergodone/keymaps/erovia/keymap.c
new file mode 100644
index 000000000..627805afb
--- /dev/null
+++ b/keyboards/ergodone/keymaps/erovia/keymap.c
@@ -0,0 +1,233 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+#include "bootmagic.h"
+
+#define QWERTY 0 // qwerty layer
+#define COLEMAK 1 // colemak layer
+#define FN 2 // function layer
+
+enum custom_keycodes {
+ QWRTY = SAFE_RANGE, // can always be here
+ CLMK,
+ VRSN,
+ FNCTN
+};
+
+/* false: Caps Lock LED is off
+ true: Caps Lock LED is on */
+bool CAPS_LED = false;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Qwerty layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | Copy | | Paste| 6 | 7 | 8 | 9 | 0 | Sleep |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | Mute | | { | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | [ |------+------+------+------+------+--------|
+ * | Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
+ * |--------+------+------+------+------+------| Fn1 | | } |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | V | B | | | ] | N | M | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |LCtrl | LGui | LAlt | Left | Right| | Down | Up | - | = | RCtrl |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | Caps | LGui | | Ins | Del |
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[QWERTY] = LAYOUT_ergodox( // layer 0 : qwerty
+ // left hand
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_COPY,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MUTE,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_FN1,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LEFT, KC_RGHT,
+ KC_CAPS, KC_LGUI,
+ KC_HOME,
+ KC_SPC, KC_BSPC, KC_END,
+ // right hand
+ KC_PASTE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SLEP,
+ KC_LBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOTE,
+ KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ KC_DOWN, KC_UP, KC_MINS, KC_EQL, KC_RCTL,
+ KC_INS, KC_DEL,
+ KC_PGUP,
+ KC_PGDN, KC_TAB, KC_ENT
+),
+/* Keymap 1: Colemak layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | Copy | | Paste| 6 | 7 | 8 | 9 | 0 | Sleep |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | F | P | B | Mute | | { | J | L | U | Y | ; | \ |
+ * |--------+------+------+------+------+------| | | [ |------+------+------+------+------+--------|
+ * | Esc | A | R | S | T | G |------| |------| M | N | E | I | O | ' |
+ * |--------+------+------+------+------+------| Fn1 | | } |------+------+------+------+------+--------|
+ * | LShift | Z | X | C | D | V | | | ] | K | H | , | . | / | RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |LCtrl | LGui | LAlt | Left | Right| | Down | Up | - | = | RCtrl |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | Caps | LGui | | Ins | Del |
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+[COLEMAK] = LAYOUT_ergodox( // layer 1 : colemak
+ // left hand
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_COPY,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_MUTE,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_G,
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_FN1,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LEFT, KC_RGHT,
+ KC_CAPS, KC_LGUI,
+ KC_HOME,
+ KC_SPC, KC_BSPC, KC_END,
+ // right hand
+ KC_PASTE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_SLEP,
+ KC_LBRC, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
+ KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOTE,
+ KC_RBRC, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ KC_DOWN, KC_UP, KC_MINS, KC_EQL, KC_RCTL,
+ KC_INS, KC_DEL,
+ KC_PGUP,
+ KC_PGDN, KC_TAB, KC_ENT
+),
+/* Keymap 2: Function Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | | | Prev | Play | Next | | | | | | | | | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | |VolDn | VolUp|------| |------| |QWRTY | CLMK | | | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | | | | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | | | | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | | |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// Functions
+[FN] = LAYOUT_ergodox(
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, QWRTY, CLMK, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS
+),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(FN) // FN1 - Momentary Layer 1
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case QWRTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(QWERTY);
+ }
+ return false;
+ break;
+ case CLMK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(COLEMAK);
+ }
+ return false;
+ break;
+ case KC_CAPS:
+ if (record->event.pressed) {
+ // Turn LED1 On/Off for Caps Lock
+ if (CAPS_LED) {
+ ergodox_right_led_1_off();
+ CAPS_LED = false;
+ } else {
+ ergodox_right_led_1_on();
+ CAPS_LED = true;
+ }
+ }
+ return true;
+ break;
+ }
+ return true;
+};
+
+// Set LED according to the default layer
+void default_layer_led_set(void) {
+ switch (biton32(eeconfig_read_default_layer())) {
+ case COLEMAK:
+ // LED2 for COLEMAK
+ ergodox_right_led_2_on();
+ break;
+ case QWERTY:
+ // LED3 for QWERTY
+ ergodox_right_led_3_on();
+ break;
+ };
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+ default_layer_led_set();
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ ergodox_led_all_off();
+ switch (biton32(state)) {
+ case FN:
+ // Red led on Pro Micro for Fn layer
+ ergodox_board_led_on();
+ break;
+ };
+
+ if (CAPS_LED) {
+ ergodox_right_led_1_on();
+ }
+
+ default_layer_led_set();
+
+ return state;
+};
+
+void suspend_power_down_user(void) {
+ ergodox_led_all_off();
+};
+
+void suspend_wakeup_init_user(void) {
+ default_layer_led_set();
+};
diff --git a/keyboards/ergodone/keymaps/erovia/readme.md b/keyboards/ergodone/keymaps/erovia/readme.md
new file mode 100644
index 000000000..160c87598
--- /dev/null
+++ b/keyboards/ergodone/keymaps/erovia/readme.md
@@ -0,0 +1,76 @@
+# Erovia's ErdoDone Keymap
+
+My personal ErgoDone keymap based on the *default* keymap.
+
+**Features**
+
+* Qwerty and Colemak Mod-DH support
+* Space Cadet Shift
+* LED indicator for: active layout, CapsLock, Function layer
+
+## QWERTY (Normal) Layer
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | Copy | | Paste| 6 | 7 | 8 | 9 | 0 | Sleep |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| Tab | Q | W | E | R | T | Mute | | { | Y | U | I | O | P | \ |
+|--------+------+------+------+------+------| | | [ |------+------+------+------+------+--------|
+| Esc | A | S | D | F | G |------| |------| H | J | K | L | ; | ' |
+|--------+------+------+------+------+------| Fn1 | | } |------+------+------+------+------+--------|
+| LShift | Z | X | C | V | B | | | ] | N | M | , | . | / | RShift |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ |LCtrl | LGui | LAlt | Left | Right| | Down | Up | - | = | RCtrl |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | Caps | LGui | | Ins | Del |
+ ,------|------|------| |------+--------+------.
+ | | | Home | | PgUp | | |
+ | Space|Backsp|------| |------| Tab |Enter |
+ | |ace | End | | PgDn | | |
+ `--------------------' `----------------------'
+```
+
+## Colemak Layer
+Switch from `Fn1` layer.
+```
+,--------------------------------------------------. ,--------------------------------------------------.
+| ` | 1 | 2 | 3 | 4 | 5 | Copy | | Paste| 6 | 7 | 8 | 9 | 0 | Sleep |
+|--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+| Tab | Q | W | F | P | B | Mute | | { | J | L | U | Y | ; | \ |
+|--------+------+------+------+------+------| | | [ |------+------+------+------+------+--------|
+| Esc | A | R | S | T | G |------| |------| M | N | E | I | O | ' |
+|--------+------+------+------+------+------| Fn1 | | } |------+------+------+------+------+--------|
+| LShift | Z | X | C | D | V | | | ] | K | H | , | . | / | RShift |
+`--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ |LCtrl | LGui | LAlt | Left | Right| | Down | Up | - | = | RCtrl |
+ `----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | Caps | LGui | | Ins | Del |
+ ,------|------|------| |------+--------+------.
+ | | | Home | | PgUp | | |
+ | Space|Backsp|------| |------| Tab |Enter |
+ | |ace | End | | PgDn | | |
+ `--------------------' `----------------------'
+```
+
+## Function Layer
+```
+,---------------------------------------------------. ,--------------------------------------------------.
+|Version | F1 | F2 | F3 | F4 | F5 | F11 | | F12 | F6 | F7 | F8 | F9 | F10 | |
+|---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+| | | | Prev | Play | Next | | | | | | | | | |
+|---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | | | |VolDn | VolUp|------| |------| |QWRTY | CLMK | | | |
+|---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+| | | | | | | | | | | | | | | |
+`---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ | | | | | | | | | | | |
+ `-----------------------------------' `----------------------------------'
+ ,-------------. ,-------------.
+ | | | | | |
+ ,------|------|------| |------+------+------.
+ | | | | | | | |
+ | | |------| |------| | |
+ | | | | | | | |
+ `--------------------' `--------------------'
+```
diff --git a/keyboards/ergodone/keymaps/erovia/rules.mk b/keyboards/ergodone/keymaps/erovia/rules.mk
new file mode 100644
index 000000000..f7b7da719
--- /dev/null
+++ b/keyboards/ergodone/keymaps/erovia/rules.mk
@@ -0,0 +1 @@
+COMMAND_ENABLE = no # Commands for debug and configuration
diff --git a/keyboards/ergodox_ez/config.h b/keyboards/ergodox_ez/config.h
index 07a9b5497..ee768853a 100644
--- a/keyboards/ergodox_ez/config.h
+++ b/keyboards/ergodox_ez/config.h
@@ -85,19 +85,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBW 1
-/* "debounce" is measured in keyboard scans. Some users reported
- * needing values as high as 15, which was at the time around 50ms.
+/*
+ * The debounce filtering reports a key/switch change directly,
+ * without any extra delay. After that the debounce logic will filter
+ * all further changes, until the key/switch reports the same state for
+ * the given count of scans.
+ * So a perfect switch will get a short debounce period and
+ * a bad key will get a much longer debounce period.
+ * The result is an adaptive debouncing period for each switch.
+ *
* If you don't define it here, the matrix code will default to
* 5, which is now closer to 10ms, but still plenty according to
* manufacturer specs.
- *
- * Default is quite high, because of reports with some production
- * runs seeming to need it. This may change when configuration for
- * this is more directly exposed.
*/
-#define DEBOUNCE 15
-
-#define PREVENT_STUCK_MODIFIERS
+#define DEBOUNCE 10
#define USB_MAX_POWER_CONSUMPTION 500
diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox_ez/ergodox_ez.c
index 61f910711..3b2c94350 100644
--- a/keyboards/ergodox_ez/ergodox_ez.c
+++ b/keyboards/ergodox_ez/ergodox_ez.c
@@ -269,6 +269,7 @@ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
};
+__attribute__ ((weak))
const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
/*{row | col << 4}
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/bocaj.h b/keyboards/ergodox_ez/keymaps/bocaj/bocaj.h
deleted file mode 100644
index 2c41c01aa..000000000
--- a/keyboards/ergodox_ez/keymaps/bocaj/bocaj.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-Copyright 2018 Jacob Jerrell <jacob.jerrell@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 "quantum.h"
-
-// Layers
-enum layers {
- _SWRKMN = 0,
- _HWRKMN,
- _LOWER,
- _RAISE,
- _ADJUST,
- _DIABLO
-};
-
-
-
-enum custom_keycodes {
- KC_EPRM = SAFE_RANGE,
- KC_SWRK,
- KC_HWRK,
- KC_VRSN,
- JJ_COPY,
- JJ_PASTE,
- JJ_ARRW,
- MC_LOCK,
- KC_DIABLO_CLEAR,
- KC_NMPD
-// UC_FLIP
-};
-
-// Space Cadet Hyper/Meh and [/]
-#define HYP_LBK ALL_T(KC_LBRACKET)
-#define MEH_RBK MEH_T(KC_RBRACKET)
-
-#define KC_LWSP LT(_LOWER, KC_SPACE)
-#define KC_RSEN LT(_RAISE, KC_ENTER)
-#define KC_ADJS TT(_ADJUST)
-
-#define XXXXXXX KC_NO
-#define _______ KC_TRNS
-
-#ifdef TAP_DANCE_ENABLE
-enum {
- TD_D3_1 = 0,
- TD_D3_2,
- TD_D3_3,
- TD_D3_4
-};
-#endif // TAP_DANCE_ENABLE
-
-// Custom Keycodes for Diablo 3 layer
-// But since TD() doesn't work when tap dance is disabled
-// We use custom codes here, so we can substitute the right stuff
-#ifdef TAP_DANCE_ENABLE
-#define KC_D3_1 TD(TD_D3_1)
-#define KC_D3_2 TD(TD_D3_2)
-#define KC_D3_3 TD(TD_D3_3)
-#define KC_D3_4 TD(TD_D3_4)
-#else // TAP_DANCE_ENABLE
-#define KC_D3_1 KC_1
-#define KC_D3_2 KC_2
-#define KC_D3_3 KC_3
-#define KC_D3_4 KC_4
-#endif // TAP_DANCE_ENABLE
-
-//define diablo macro timer variables
-extern uint16_t diablo_timer[4];
-extern uint8_t diablo_times[];
-extern uint8_t diablo_key_time[4];
-
-
-void run_diablo_macro_check(void);
-
-
-#define LAYOUT_ergodox_pretty_wrapper(...) LAYOUT_ergodox_pretty(__VA_ARGS__)
-
-/* Pretty Layout
-.---------------------------------------------. .---------------------------------------------.
-| 1 | 2 | 3 | 4 | 5 | 6 | 7 | ! 8 | 9 | 10 | 11 | 12 | 13 | 14 |
-!-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
-| 15 | 16 | 17 | 18 | 19 | 20 | 21 | ! 22 | 23 | 24 | 25 | 26 | 27 | 28 |
-!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
-| 29 | 30 | 31 | 32 | 33 | 34 |-------! !-------! 35 | 36 | 37 | 38 | 39 | 40 |
-!-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
-| 41 | 42 | 43 | 44 | 45 | 46 | 47 | ! 48 | 49 | 50 | 51 | 52 | 53 | 54 |
-'-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
- | 55 | 56 | 57 | 58 | 59 | .---------------. .---------------. ! 60 | 61 | 62 | 63 | 64 |
- '------------------------------' | 65 | 66 | ! 67 | 68 | '------------------------------'
- .-------+-------+-------! !-------+-------+-------.
- ! ! | 69 | ! 70 | ! !
- ! ! !-------! !-------! ! !
- | 71 | 72 | 73 | ! 74 | 75 | 76 |
- '-----------------------' '-----------------------'
-*/
-
-#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 ______________________SPECIAL_LEFT_______________________ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC
-#define ______________________SPECIAL_RIGHT______________________ KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN
-
-#define _______________________FUNC_LEFT_________________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
-#define _______________________FUNC_RIGHT________________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
-
-#define _________________________________________________________ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
-#define XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
-
-#define _______________________SWORKMAN_L1_______________________ KC_Q, KC_W, KC_E, KC_R, KC_T
-#define _______________________SWORKMAN_L2_______________________ KC_A, SFT_T(KC_S), GUI_T(KC_D), ALT_T(KC_F), KC_G
-#define _______________________SWORKMAN_L3_______________________ CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B
-
-#define _______________________SWORKMAN_R1_______________________ KC_Y, KC_U, KC_I, KC_O, KC_P
-#define _______________________SWORKMAN_R2_______________________ KC_H, ALT_T(KC_J), GUI_T(KC_K), SFT_T(KC_L), KC_SCLN
-#define _______________________SWORKMAN_R3_______________________ KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
-
-// Hardware Driven Workman
-#define _______________________HWORKMAN_L1_______________________ KC_Q, KC_D, KC_R, KC_W, KC_B
-#define _______________________HWORKMAN_L2_______________________ KC_A, SFT_T(KC_S), GUI_T(KC_H), ALT_T(KC_T), KC_G
-#define _______________________HWORKMAN_L3_______________________ CTL_T(KC_Z), KC_X, KC_M, KC_C, KC_V
-
-#define _______________________HWORKMAN_R1_______________________ KC_J, KC_F, KC_U, KC_P, KC_SCLN
-#define _______________________HWORKMAN_R2_______________________ KC_Y, ALT_T(KC_N), GUI_T(KC_E), SFT_T(KC_O), KC_I
-#define _______________________HWORKMAN_R3_______________________ KC_K, KC_L, KC_COMM, KC_DOT, CTL_T(KC_SLASH)
-
-#define ___________________ERGODOX_BOTTOM_LEFT___________________ TT(_DIABLO), TT(_ADJUST), XXXXXXX, KC_UP, KC_LEFT
-#define ___________________ERGODOX_BOTTOM_RIGHT__________________ KC_RIGHT, KC_DOWN, TT(_RAISE), TT(_LOWER), TT(_ADJUST)
-
-// LEFT | RIGHT
-#define ______________________ERGODOX_THUMBS_____________________ KC_APP,KC_HOME, KC_PGUP,KC_ESC, \
- KC_END, KC_PGDOWN, \
- KC_LWSP,KC_BSPACE,JJ_COPY, JJ_PASTE,KC_TAB,KC_RSEN
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/config.h b/keyboards/ergodox_ez/keymaps/bocaj/config.h
deleted file mode 100644
index 59605bc25..000000000
--- a/keyboards/ergodox_ez/keymaps/bocaj/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef USERSPACE_CONFIG_H
- #define USERSPACE_CONFIG_H
-
- #ifndef QMK_KEYS_PER_SCAN
- #define QMK_KEYS_PER_SCAN 4
- #endif // QMK KEYS PER SCAN
-
- // this makes it possible to do rolling combos (zx) with keys that
- // convert to other keys on hold (z becomes ctrl when you hold it,
- // and when this option isn't enabled, z rapidly followed by x
- // actually sends Ctrl-x. That's bad.)
- #define IGNORE_MOD_TAP_INTERRUPT
- #define PERMISSIVE_HOLD
- #undef PREVENT_STUCK_MODIFIERS
-
- // Disable action_get_macro and fn_actions, since we don't use these
- // and it saves on space in the firmware.
- #define NO_ACTION_MACRO
- #define NO_ACTION_FUNCTION
-
-#endif // !USERSPACE_CONFIG_H
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/keymap.c b/keyboards/ergodox_ez/keymaps/bocaj/keymap.c
deleted file mode 100644
index 07117f116..000000000
--- a/keyboards/ergodox_ez/keymaps/bocaj/keymap.c
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
-Copyright 2018 Jacob Jerrell <jacob.jerrell@gmail.com>
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#include QMK_KEYBOARD_H
-#include "bocaj.h"
-
-#ifdef UNICODEMAP_ENABLE
-#include "bocaj_unicode.h"
-#endif // UNICODEMAP_ENABLE
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Software Workman / QWERTY - http://www.keyboard-layout-editor.com/#/gists/b6c016a22a9d31381a276a603a42fe5f
- .---------------------------------------------. .---------------------------------------------.
- | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
- !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
- | DEL | Q | W | E | R | T | ( | ! ) | Y | U | I | O | P | \ |
- !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
- | ADJST | A | S | D | F | G |-------! !-------! H | J | K | L | ; | ' |
- !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
- | SHIFT | Z | X | C | V | B | { | ! } | N | M | , | . | / | SHIFT |
- '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
- | GAME | NUM | VRS | UP | LFT | .---------------. .---------------. ! RGT | DWN | RSE | LWR | ADJ |
- '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
- .-------+-------+-------! !-------+-------+-------.
- ! SPACE ! | END | ! PGDN | ! ENTER !
- ! / ! BSPCE !-------! !-------! TAB ! / !
- | LOWER | | COPY | ! PASTE | | RAISE |
- '-----------------------' '-----------------------'
-*/
- [_SWRKMN] = LAYOUT_ergodox_pretty_wrapper(
- KC_ESC, ______________________NUMBER_LEFT________________________, JJ_ARRW, KC_MINUS, ______________________NUMBER_RIGHT_______________________, KC_EQUAL,
- KC_DEL, _______________________SWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________SWORKMAN_R1_______________________, KC_BSLS,
- KC_ADJS,_______________________SWORKMAN_L2_______________________, _______________________SWORKMAN_R2_______________________, KC_QUOTE,
- KC_LSFT,_______________________SWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________SWORKMAN_R3_______________________, KC_RSFT,
- ___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
- ______________________ERGODOX_THUMBS_____________________
- ),
-/* Hardware Workman - http://www.keyboard-layout-editor.com/#/gists/7a07cb982ec3597ba3e3d947554225f1
- .---------------------------------------------. .---------------------------------------------.
- | ESC | 1 | 2 | 3 | 4 | 5 | -> | ! - | 6 | 7 | 8 | 9 | 0 | = |
- !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
- | DEL | Q | D | R | W | B | ( | ! ) | J | F | U | P | ; | \ |
- !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
- | ADJST | A | S | H | T | G |-------! !-------! Y | N | E | O | I | ' |
- !-------+-----+-----+-----x-----x-----! HYP ! ! MEH !-----x-----x-----+-----+-----+-------!
- | SHIFT | Z | X | M | C | V | { | ! } | K | L | , | . | / | SHIFT |
- '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
- | GAME | NUM | VRS | UP | LFT | .---------------. .---------------. ! RGT | DWN | RSE | LWR | ADJ |
- '------------------------------' | APP | HOME | ! PGUP | ESC | '------------------------------'
- .-------+-------+-------! !-------+-------+-------.
- ! SPACE ! | END | ! PGDN | ! ENTER !
- ! / ! BSPCE !-------! !-------! TAB ! / !
- | LOWER | | COPY | ! PASTE | | RAISE |
- '-----------------------' '-----------------------'
-*/
- [_HWRKMN] = LAYOUT_ergodox_pretty_wrapper(
- KC_ESC, ______________________NUMBER_LEFT________________________, JJ_ARRW, KC_MINUS, ______________________NUMBER_RIGHT_______________________, KC_EQUAL,
- KC_DEL, _______________________HWORKMAN_L1_______________________, KC_LPRN, KC_RPRN, _______________________HWORKMAN_R1_______________________, KC_BSLS,
- KC_ADJS,_______________________HWORKMAN_L2_______________________, _______________________HWORKMAN_R2_______________________, KC_QUOTE,
- KC_LSFT,_______________________HWORKMAN_L3_______________________, HYP_LBK, MEH_RBK, _______________________HWORKMAN_R3_______________________, KC_RSFT,
- ___________________ERGODOX_BOTTOM_LEFT___________________, ___________________ERGODOX_BOTTOM_RIGHT__________________,
- ______________________ERGODOX_THUMBS_____________________
- ),
-/* Lower - http://www.keyboard-layout-editor.com/#/gists/f1d745a88d1c48ab55e095efd9e7a43a
- .---------------------------------------------. .---------------------------------------------.
- | | F1 | F2 | F3 | F4 | F5 | | ! | F6 | F7 | F8 | F9 | F10 | |
- !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
- | ` | 1 | 2 | 3 | 4 | 5 | | ! | 6 | 7 | 8 | 9 | 0 | |
- !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
- | | | | | | |-------! !-------! | | | | | |
- !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
- | | | | | | | | ! | | | | | | |
- '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
- | | | | | | .---------------. .---------------. ! | | | | |
- '------------------------------' | | | ! | | '------------------------------'
- .-------+-------+-------! !-------+-------+-------.
- ! ! | | ! | ! !
- ! ! !-------! !-------! ! !
- | | | | ! | | |
- '-----------------------' '-----------------------'
-*/
- [_LOWER] = LAYOUT_ergodox_pretty_wrapper(
- _______,_______________________FUNC_LEFT_________________________, _______, _______, _______________________FUNC_RIGHT________________________, _______,
- KC_GRV ,______________________NUMBER_LEFT________________________, _______, _______, ______________________NUMBER_RIGHT_______________________, _______,
- _______,_________________________________________________________, _________________________________________________________, _______,
- _______,_________________________________________________________, _______, _______, _________________________________________________________, _______,
- _________________________________________________________, _________________________________________________________,
- ______________________ERGODOX_THUMBS_____________________
- ),
-/* Raise - http://www.keyboard-layout-editor.com/#/gists/e0f591ec2ce9f24675a02d15c7048b25
- .---------------------------------------------. .---------------------------------------------.
- | | F1 | F2 | F3 | F4 | F5 | | ! _ | F6 | F7 | F8 | F9 | F10 | |
- !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
- | ~ | ! | @ | # | $ | % | | ! | ^ | & | * | ( | ) | |
- !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
- | | | | | | |-------! !-------! | | | | | |
- !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
- | | | | | | | | ! | | | | | | |
- '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
- | | | | | | .---------------. .---------------. ! | | | | |
- '------------------------------' | | | ! | | '------------------------------'
- .-------+-------+-------! !-------+-------+-------.
- ! ! | | ! | ! !
- ! ! !-------! !-------! ! !
- | | | | ! | | |
- '-----------------------' '-----------------------'
-*/
- [_RAISE] = LAYOUT_ergodox_pretty_wrapper(
- _______,_______________________FUNC_LEFT_________________________, _______, KC_UNDS, _______________________FUNC_RIGHT________________________, _______,
- KC_TILD,______________________SPECIAL_LEFT_______________________, _______, _______, ______________________SPECIAL_RIGHT______________________, _______,
- _______,_________________________________________________________, _________________________________________________________, _______,
- _______,_________________________________________________________, _______, _______, _________________________________________________________, _______,
- _________________________________________________________, _________________________________________________________,
- ______________________ERGODOX_THUMBS_____________________
- ),
- /* Adjust - http://www.keyboard-layout-editor.com/#/gists/dedeae17b35a5d5f745a42aaea78f007
- .---------------------------------------------. .---------------------------------------------.
- | | | | | | | EPRM | ! EPRM | | | | | | |
- !-------+-----+-----+-----+-----+-------------! !-------+-----+-----+-----+-----+-----+-------!
- | | | | | | | | ! | | 7 | 8 | 9 | * | |
- !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
- | | 🔇 | 🔉 | 🔊 | LCK | |-------! !-------! | 4 | 5 | 6 | + | SWRKM |
- !-------+-----+-----+-----x-----x-----! ! ! !-----x-----x-----+-----+-----+-------!
- | | | | | | | | ! | | 1 | 2 | 3 | - | HWRKM |
- '-------+-----+-----+-----+-----+-------------' '-------------+-----+-----+-----+-----+-------'
- | | | | | | .---------------. .---------------. ! 0 | . | , | = | |
- '------------------------------' | | | ! | | '------------------------------'
- .-------+-------+-------! !-------+-------+-------.
- ! ! | | ! | ! !
- ! ! !-------! !-------! ! !
- | | | | ! | | |
- '-----------------------' '-----------------------'
-*/
- [_ADJUST] = LAYOUT_ergodox_pretty_wrapper(
- XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, KC_EPRM, KC_EPRM, XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX,
- XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, KC_PAST, XXXXXXX,
- _______,KC__MUTE, KC__VOLDOWN, KC__VOLUP, MC_LOCK, XXXXXXX, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, KC_SWRK,
- XXXXXXX,XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, KC_PMNS, KC_HWRK,
- XXXXXXX,_______,XXXXXXX,XXXXXXX,XXXXXXX, KC_KP_0, KC_PDOT, KC_COMM, KC_PEQL, _______,
- ______________________ERGODOX_THUMBS_____________________
- ),
-// Diablo - http://www.keyboard-layout-editor.com/#/gists/28476e4237e77d4835ac8a9d7e5f9b2c
- [_DIABLO] = LAYOUT_ergodox_pretty_wrapper(
- KC_ESC , KC_V , KC_D ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- KC_TAB , KC_S , KC_I , KC_F , KC_T , KC_J ,XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, XXXXXXX, XXXXXXX,
- KC_Q , KC_1 , KC_2 , KC_3 , KC_4 , KC_M , XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, XXXXXXX, XXXXXXX,
- KC_LSFT,KC_D3_1 ,KC_D3_2 ,KC_D3_3 ,KC_D3_4 ,XXXXXXX ,XXXXXXX, XXXXXXX, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, XXXXXXX, XXXXXXX,
- _______,ALT_T(KC_Z) ,KC_G ,KC_Y ,XXXXXXX , KC_KP_0, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX,XXXXXXX,
- XXXXXXX, XXXXXXX,
- KC_BTN1,KC_BTN2,KC_DIABLO_CLEAR, XXXXXXX,XXXXXXX,XXXXXXX
- )
-};
-
-// Defines actions for my custom keycodes
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- // KC_COPY and KC_PASTE have problems with different hardware/software mappings
- // e.g. If the mappings conflict, KC_COPY will send Cmd+M which minimizes the
- // window and is very annoying. JJ_COPY and JJ_PASTE fix this by sending the
- // raw character rather than the KC_* code
- case JJ_COPY:
- if (!record->event.pressed) {
- SEND_STRING(SS_LGUI("c"));
- }
- return false;
- break;
- case JJ_PASTE:
- if (!record->event.pressed) {
- SEND_STRING(SS_LGUI("v"));
- }
- return false;
- break;
- case JJ_ARRW:
- if (!record->event.pressed) {
- SEND_STRING("->");
- }
- return false;
- break;
- case KC_SWRK:
- if (!record->event.pressed) {
- set_single_persistent_default_layer(_SWRKMN);
- layer_move(_SWRKMN);
- ergodox_blink_all_leds();
- ergodox_blink_all_leds();
- }
- return false;
- break;
- case KC_HWRK:
- if (!record->event.pressed) {
- set_single_persistent_default_layer(_HWRKMN);
- layer_move(_HWRKMN);
- ergodox_blink_all_leds();
- ergodox_blink_all_leds();
- }
- return false;
- break;
- case KC_EPRM:
- if (!record->event.pressed) {
- ergodox_blink_all_leds();
- eeconfig_init();
- }
- return false;
- break;
- case MC_LOCK:
- if (!record->event.pressed) {
- layer_move(_HWRKMN);
- SEND_STRING(SS_LCTRL(SS_LGUI("q")));
- }
- return false;
- break;
- case KC_DIABLO_CLEAR:
-#ifdef TAP_DANCE_ENABLE
- if (record->event.pressed) {
- uint8_t dtime;
- for (dtime = 0; dtime < 4; dtime++) {
- diablo_key_time[dtime] = diablo_times[0];
- }
- }
-#endif // TAP_DANCE_ENABLE
- return false;
- break;
- }
- return true;
-}
-
-void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); };
-
-// Diablo III Fun stuff
-//define diablo macro timer variables
-uint16_t diablo_timer[4];
-uint8_t diablo_times[] = { 0, 1, 3, 5, 10, 30 };
-uint8_t diablo_key_time[4];
-
-// has the correct number of seconds elapsed (as defined by diablo_times)
-bool check_dtimer(uint8_t dtimer) { return (timer_elapsed(diablo_timer[dtimer]) < (diablo_key_time[dtimer] * 1000)) ? false : true; };
-
-// Cycle through the times for the macro, starting at 0, for disabled.
-// Max of six values, so don't exceed
-void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data, uint8_t diablo_key) {
- if (state->count >= 7) {
- diablo_key_time[diablo_key] = diablo_times[0];
- reset_tap_dance(state);
- } else {
- diablo_key_time[diablo_key] = diablo_times[state->count - 1];
- }
-}
-
-// Would rather have one function for all of this, but no idea how to do that...
-void diablo_tapdance1(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 0); }
-void diablo_tapdance2(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 1); }
-void diablo_tapdance3(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 2); }
-void diablo_tapdance4(qk_tap_dance_state_t *state, void *user_data) { diablo_tapdance_master(state, user_data, 3); }
-
-//Tap Dance Definitions
-qk_tap_dance_action_t tap_dance_actions[] = {
- // tap once to disable, and more to enable timed micros
- [TD_D3_1] = ACTION_TAP_DANCE_FN(diablo_tapdance1),
- [TD_D3_2] = ACTION_TAP_DANCE_FN(diablo_tapdance2),
- [TD_D3_3] = ACTION_TAP_DANCE_FN(diablo_tapdance3),
- [TD_D3_4] = ACTION_TAP_DANCE_FN(diablo_tapdance4),
-};
-
-// Sends the key press to system, but only if on the Diablo layer
-void send_diablo_keystroke(uint8_t diablo_key) {
- if (biton32(layer_state) == _DIABLO) {
- switch (diablo_key) {
- case 0:
- tap(KC_1); break;
- case 1:
- tap(KC_2); break;
- case 2:
- tap(KC_3); break;
- case 3:
- tap(KC_4); break;
- }
- }
-}
-
-// Checks each of the 4 timers/keys to see if enough time has elapsed
-// Runs the "send string" command if enough time has passed, and resets the timer.
-void run_diablo_macro_check(void) {
- uint8_t dtime;
- for (dtime = 0; dtime < 4; dtime++) {
- if (check_dtimer(dtime) && diablo_key_time[dtime]) {
- diablo_timer[dtime] = timer_read();
- send_diablo_keystroke(dtime);
- }
- }
-}
-
-void matrix_scan_user(void) {
- uint8_t layer = biton32(layer_state);
- ergodox_board_led_off();
- ergodox_right_led_1_off();
- ergodox_right_led_2_off();
- ergodox_right_led_3_off();
- switch (layer) {
- /*
- Lights are treated as binary here for easy identification.
- LED1 = 4; LED2 = 2; LED1 = 1
- This allows for up to 8 identified layers (default layers being no lights on)
- Which is way more than I should ever need
- */
- case _LOWER:
- ergodox_right_led_3_on();
- ergodox_right_led_3_set(10); // Default brightness is deadly in a dark room
- break;
- case _RAISE:
- ergodox_right_led_2_on();
- ergodox_right_led_2_set(10);
- break;
- case _ADJUST:
- ergodox_right_led_2_on();
- ergodox_right_led_2_set(10);
- ergodox_right_led_3_on();
- ergodox_right_led_3_set(10);
- break;
- case _DIABLO:
- ergodox_right_led_1_on();
- ergodox_right_led_1_set(10);
- break;
- default:
- // none
- break;
- }
- #ifdef TAP_DANCE_ENABLE
- run_diablo_macro_check();
- #endif
-};
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/readme.md b/keyboards/ergodox_ez/keymaps/bocaj/readme.md
deleted file mode 100644
index 9d5aa6050..000000000
--- a/keyboards/ergodox_ez/keymaps/bocaj/readme.md
+++ /dev/null
@@ -1,48 +0,0 @@
-# Ergodox EZ Layout by JacobJerrell
-
-My personal Ergodox EZ layout.
-
-## Summary
-
-Contains two base layers because I carry my keyboard between different machines and occassionally use the machines without this keyboard. A side-effect to using it in this manner (with a non-QWERTY layout) is that software/hardware mappings conflict so this allows a quick (2-buttons) to get the keyboard to a compatible layer
-
-## Layers
-
-| Layer | Purpose |
-| ----- | ------- |
-| 0 | [Hardware Workman](#hardware-workman) - For OS mapped to QWERTY |
-| 1 | [Software Workman](#software-workman) - For OS mapped to Workman |
-| 2 | [Lower](#lower) |
-| 3 | [Raise](#raise) |
-| 4 | [Adjust](#adjust) |
-| 5 | [Diablo III](#diablo-iii) |
-
-### Hardware Workman
-
-For easy plug and play into QWERTY machines
-![Hardware Workman](https://imgur.com/HHMIOEf.png)
-
-### Software Workman
-
-To switch to when I was previously using the laptop keyboard with software mapped to Workman. Or so other people can take the Ergodox for a spin.
-![Software Workman](https://imgur.com/WnSci7o.png)
-
-### Lower
-
-Reveals F1-12 keys and brings numkeys down.
-![Lowered](https://imgur.com/mGfjwcn.png)
-
-### Raise
-
-Reveals F1-F12 keys and gives shifted numkeys.
-![Raised](https://imgur.com/NC96Jus.png)
-
-### Adjust
-
-Numpad, Wipe EEPROM, OSX Volume Control, OSX Lockscreen, and Default Layer Switching.
-![Adjusted](https://imgur.com/aQtOxZU.png)
-
-### Diablo III
-
-Arranged to make playing on a laptop much more enjoyable. Credit for the D1-4 macros (as well as much of the ideas in this layout goes to Drashna)
-![Diablo III](https://imgur.com/5eQcDOQ.png)
diff --git a/keyboards/ergodox_ez/keymaps/bocaj/rules.mk b/keyboards/ergodox_ez/keymaps/bocaj/rules.mk
deleted file mode 100644
index b667841a1..000000000
--- a/keyboards/ergodox_ez/keymaps/bocaj/rules.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-AUTO_SHIFT_ENABLE = no
-COMMAND_ENABLE = no
-SWAP_HANDS_ENABLE = no
-TAP_DANCE_ENABLE = yes
-EXTRAKEY_ENABLE = no
diff --git a/keyboards/ergodox_ez/keymaps/default/keymap.c b/keyboards/ergodox_ez/keymaps/default/keymap.c
index e400ffcd3..5834fa43a 100644
--- a/keyboards/ergodox_ez/keymaps/default/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/default/keymap.c
@@ -1,6 +1,4 @@
#include QMK_KEYBOARD_H
-#include "debug.h"
-#include "action_layer.h"
#include "version.h"
#define BASE 0 // default layer
@@ -8,8 +6,7 @@
#define MDIA 2 // media keys
enum custom_keycodes {
- PLACEHOLDER = SAFE_RANGE, // can always be here
- EPRM,
+ EPRM = SAFE_RANGE,
VRSN,
RGB_SLD
};
@@ -36,28 +33,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | |ace | End | | PgDn | | |
* `--------------------' `----------------------'
*/
-// If it accepts an argument (i.e, is a function), it doesn't need KC_.
-// Otherwise, it needs KC_*
-[BASE] = LAYOUT_ergodox( // layer 0 : default
- // left hand
- KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
- KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
- KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
- KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
- LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
- ALT_T(KC_APP), KC_LGUI,
- KC_HOME,
- KC_SPC,KC_BSPC,KC_END,
- // right hand
- KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
- MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
- KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, KC_FN1,
- KC_LALT, CTL_T(KC_ESC),
- KC_PGUP,
- KC_PGDN,KC_TAB, KC_ENT
- ),
+[BASE] = LAYOUT_ergodox(
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ LT(SYMB,KC_GRV), KC_QUOT, LALT(KC_LSFT), KC_LEFT, KC_RGHT,
+ ALT_T(KC_APP), KC_LGUI,
+ KC_HOME,
+ KC_SPC, KC_BSPC, KC_END,
+ // right hand
+ KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), GUI_T(KC_QUOT),
+ MEH_T(KC_NO), KC_N, KC_M, KC_COMM, KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, KC_FN1,
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN, KC_TAB, KC_ENT
+),
/* Keymap 1: Symbol Layer
*
* ,---------------------------------------------------. ,--------------------------------------------------.
@@ -79,26 +74,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | |
* `--------------------' `--------------------'
*/
-// SYMBOLS
[SYMB] = LAYOUT_ergodox(
- // left hand
- VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
- KC_TRNS,KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
- KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
- KC_TRNS,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
- EPRM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
- RGB_MOD,KC_TRNS,
- KC_TRNS,
- RGB_VAD,RGB_VAI,KC_TRNS,
- // right hand
- KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
- KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
- KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
- KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
- RGB_TOG, RGB_SLD,
- KC_TRNS,
- KC_TRNS, RGB_HUD, RGB_HUI
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_TRNS,
+ KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV,
+ KC_TRNS, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS,
+ EPRM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ RGB_MOD, KC_TRNS,
+ KC_TRNS,
+ RGB_VAD, RGB_VAI, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS, KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ RGB_TOG, RGB_SLD,
+ KC_TRNS,
+ KC_TRNS, RGB_HUD, RGB_HUI
),
/* Keymap 2: Media and mouse keys
*
@@ -121,25 +115,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | |
* `--------------------' `--------------------'
*/
-// MEDIA AND MOUSE
[MDIA] = LAYOUT_ergodox(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS,
- // right hand
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
- KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS,
- KC_TRNS,
- KC_TRNS, KC_TRNS, KC_WBAK
+ // left hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
),
};
@@ -147,47 +141,21 @@ const uint16_t PROGMEM fn_actions[] = {
[1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- 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.
- case EPRM:
- if (record->event.pressed) {
+ if (record->event.pressed) {
+ switch (keycode) {
+ case EPRM:
eeconfig_init();
- }
- return false;
- break;
- case VRSN:
- if (record->event.pressed) {
+ return false;
+ case VRSN:
SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
- }
- return false;
- break;
- case RGB_SLD:
- if (record->event.pressed) {
- #ifdef RGBLIGHT_ENABLE
- rgblight_mode(1);
- #endif
- }
- return false;
- break;
+ return false;
+ #ifdef RGBLIGHT_ENABLE
+ case RGB_SLD:
+ rgblight_mode(1);
+ return false;
+ #endif
+ }
}
return true;
}
@@ -199,11 +167,6 @@ void matrix_init_user(void) {
#endif
};
-// Runs constantly in the background, in a loop.
-void matrix_scan_user(void) {
-
-};
-
// Runs whenever there is a layer state change.
uint32_t layer_state_set_user(uint32_t state) {
ergodox_board_led_off();
@@ -266,7 +229,7 @@ uint32_t layer_state_set_user(uint32_t state) {
ergodox_right_led_2_on();
ergodox_right_led_3_on();
#ifdef RGBLIGHT_COLOR_LAYER_7
- rgblight_setrgb(RGBLIGHT_COLOR_LAYER_6);
+ rgblight_setrgb(RGBLIGHT_COLOR_LAYER_7);
#endif
break;
default:
diff --git a/keyboards/ergodox_ez/keymaps/default_glow/keymap.c b/keyboards/ergodox_ez/keymaps/default_glow/keymap.c
new file mode 100644
index 000000000..526c36402
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/default_glow/keymap.c
@@ -0,0 +1 @@
+// Placeholder. See ../default/keymap.c for details
diff --git a/keyboards/ergodox_ez/keymaps/default_glow/rules.mk b/keyboards/ergodox_ez/keymaps/default_glow/rules.mk
new file mode 100644
index 000000000..360c3c51b
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/default_glow/rules.mk
@@ -0,0 +1,4 @@
+RGBLIGHT_ENABLE = no
+RGB_MATRIX_ENABLE = yes # enable later
+
+SRC += ../default/keymap.c
diff --git a/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c b/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
index 94d035c6b..dd5ee2897 100644
--- a/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
+++ b/keyboards/ergodox_ez/keymaps/dvorak_42_key/keymap.c
@@ -230,7 +230,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, SHELL_EXPAND_OE_TRANPATTERN,
RCTL(KC_L), RCTL(KC_W), KC_HOME, KC_UP, KC_END, KC_TRNS, SHELL_EXPAND_OE_LOGPATTERN,
LALT(KC_B), KC_LEFT, KC_DOWN, KC_RIGHT, LALT(KC_F), RCTL(KC_W),
- RCTL(KC_C), RCTL(KC_U), LALT(KC_DOT), RCTL(KC_R), MEH(KC_V), RCTL(KC_K), SHELL_DUMPTLOG,
+ RCTL(KC_C), RCTL(KC_U), LALT(KC_DOT), RCTL(KC_R), KC_BTN2, RCTL(KC_K), SHELL_DUMPTLOG,
// bottom row (match functionality of base layer)
KC_BSPC, RCTL(KC_W), KC_DELETE, LALT(KC_D), RCTL(KC_U),
// thumb cluster
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore b/keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore
new file mode 100644
index 000000000..504afef81
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/.gitignore
@@ -0,0 +1,2 @@
+node_modules/
+package-lock.json
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
new file mode 100644
index 000000000..e188d95d5
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/config.h
@@ -0,0 +1,88 @@
+/*
+ Set any config.h overrides for your specific keymap here.
+ See config.h options at https://docs.qmk.fm/#/config_options?id=the-configh-file
+*/
+#pragma once
+
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 200
+
+#undef DEBOUNCE
+#define DEBOUNCE 10
+
+#undef IGNORE_MOD_TAP_INTERRUPT
+
+#undef FORCE_NKRO
+#define FORCE_NKRO
+
+#undef TAPPING_TOGGLE
+#define TAPPING_TOGGLE 5
+
+#define LEADER_TIMEOUT 1000
+#define IGNORE_MOD_TAP_INTERRUPT
+#define PERMISSIVE_HOLD
+#define QMK_KEYS_PER_SCAN 4
+#define DANCING_TERM 175
+
+#define ONESHOT_TAP_TOGGLE 5
+#define ONESHOT_TIMEOUT 5000
+
+#define COMBO_COUNT 4
+#define COMBO_TERM 200
+
+
+#undef RGBLIGHT_HUE_STEP
+#define RGBLIGHT_HUE_STEP 24
+
+#undef RGBLIGHT_SAT_STEP
+#define RGBLIGHT_SAT_STEP 24
+
+#undef RGBLIGHT_VAL_STEP
+#define RGBLIGHT_VAL_STEP 24
+
+#undef RGBLIGHT_BRI_STEP
+#define RGBLIGHT_BRI_STEP 24
+
+#undef RGBLIGHT_LIMIT_VAL
+#define RGBLIGHT_LIMIT_VAL 255
+
+
+#undef MOUSEKEY_INTERVAL
+#define MOUSEKEY_INTERVAL 10
+
+#undef MOUSEKEY_DELAY
+#define MOUSEKEY_DELAY 15
+
+#undef MOUSEKEY_MAX_SPEED
+#define MOUSEKEY_MAX_SPEED 20
+
+#undef MOUSEKEY_TIME_TO_MAX
+#define MOUSEKEY_TIME_TO_MAX 200
+
+#undef MOUSEKEY_WHEEL_MAX_SPEED
+#define MOUSEKEY_WHEEL_MAX_SPEED 20
+
+#undef MOUSEKEY_WHEEL_TIME_TO_MAX
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 200
+
+
+// #undef NO_DEBUG
+// #define NO_DEBUG
+
+// #undef NO_PRINT
+// #define NO_PRINT
+
+// #define RETRO_TAPPING
+// #define TAPPING_FORCE_HOLD
+
+// #define AUTO_SHIFT_TIMEOUT 150
+// #define NO_AUTO_SHIFT_SPECIAL
+// #define NO_AUTO_SHIFT_NUMERIC
+// #define NO_AUTO_SHIFT_ALPHA
+
+// #define EXTRA_LONG_COMBOS
+// #define EXTRA_EXTRA_LONG_COMBOS
+// #define COMBO_ALLOW_ACTION_KEYS
+
+// #define RGBLIGHT_SLEEP
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js b/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
new file mode 100644
index 000000000..23f19d18a
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/gulpfile.js
@@ -0,0 +1,19 @@
+let gulp = require('gulp');
+let run = require('gulp-run-command').default;
+
+
+gulp.task('clean', run('rm -rf ../../../../.build'));
+
+gulp.task('build', ['clean'], run('make -C ../../../../ ergodox_ez:hacker_dvorak', {
+ ignoreErrors: true
+}));
+
+gulp.task('watch', ['build'], () => {
+ gulp.watch([
+ 'keymap.c',
+ 'config.h',
+ 'rules.mk',
+ ], ['build']);
+});
+
+gulp.task('default', ['watch']);
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c
new file mode 100644
index 000000000..65878a67c
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/hacker_dvorak.c
@@ -0,0 +1,353 @@
+// Keyboard keymap:
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [DVORAK] = LAYOUT_ergodox(
+
+ // HACKER DVORAK left hand
+
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // ESCAPE | | | | | | START RECORDING //
+ // | | | | | | //
+ KC_ESC, TD(GRV_TILD), TD(AT_DLR), TD(LCBR_LABK), TD(LPRN_LBRC), TD(EXLM_QUES), DYN_REC_START1, //
+ // | ~ | $ | < | [ | ? | //
+ // | TAP DANCE: ` | TAP DANCE: @ TAP DANCE: { | TAP DANCE: ( | TAP DANCE: ! | DYNAMIC MARCO 1 //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // TAB | MOD TAP: ALT+SHIFT | MOD TAP: CTRL+ALT | MOD TAP: CTRL+SHIFT | P | Y | //
+ // | | | | | | //
+ KC_TAB, TD(NONE_LEAD), TD(QUOT_DQUO), TD(DOT_COMM), ALL_T(KC_P), MEH_T(KC_Y), DYN_MACRO_PLAY1, //
+ // | LEAD | " | , | | | //
+ // | TAP DANCE: NONE | TAP DANCE: ' | TAP DANCE: . | MOD TAP: HYPER | MOD TAP: MEH | //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------| PLAY DYNAMIC MACRO 1 //
+ // | MOD TAP: ALT | MOD TAP: CTRL | LAYER TAP: SHIFT | LAYER TAP: ARROW KEYS | MOD TAP: GUI | //
+ // | | | | Ü | | //
+ TD(EQL_PLUS), ALT_T(KC_A), CTL_T(KC_O), SFT_T(KC_E), LT(ARROWS, KC_U), LGUI_T(KC_I), //-----------------------//
+ // + | Á | Ó | É | Ú | Í | //
+ // TAP DANCE: = | TAP DANCE: A | TAP DANCE: O | TAP DANCE: E | TAP DANCE: U | TAP DANCE: I | //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------| META //
+ // STOP RECORDING | MOD TAP: GUI+SHIFT+ALT | Q | J | K | X | //
+ // | | | | | | //
+ DYN_REC_STOP, TD(SCLN_COLN), SGUI_T(KC_Q), LT(MEDIA_FN, KC_J), LT(NUMPAD, KC_K), LCAG_T(KC_X), KC_LGUI, //
+ // | : | | | | | //
+ // DYNAMIC MACRO | TAP DANCE: ; | MOD TAP: SHIFT+GUI | LAYER TAP: MEDIA/F-KEYS | LAYER TAP: ATM NUMPAD | MOD TAP: CTL+ALT+GUI | //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // LAYERS SWITCHER | APPLICATION MENU | | | //
+ // | | | | SCROLL //
+ TG(LAYERS), KC_APP, KC_NLCK, KC_SLCK, KC_CAPS, //
+ // | | | | NUM //
+ // LAYER TOGGLE | | | | TAP DANCE: CAPS //
+ //------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+
+ // HACKER DVORAK left thumb
+
+ //------------------------+------------------------//
+ // MOUSE WHEEL LEFT | MOUSE WHEEL RIGHT //
+ // | //
+ KC_WH_L, KC_WH_R, //
+ // | //
+ // | //
+ //-------------------------+-------------------------+------------------------//
+ // | | HOME //
+ // | | //
+ /* SPACE | BACKSPACE */ KC_HOME, //
+ // | | //
+ // | | //
+ KC_SPC, KC_BSPC, //-----------------------//
+ // | | END //
+ // | | //
+ /* | */ KC_END, //
+ // | | //
+ // | | //
+ //-------------------------+-------------------------+------------------------//
+
+ // HACKER DVORAK right hand
+
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // | | | | | | //
+ // | | | | | | //
+ DYN_REC_START2, TD(APMR_PIPE), TD(RPRN_RBRC), TD(RCBR_RABK), TD(HASH_PERC), TD(ASTR_CIRC), XXXXXXX, //
+ // | | | | | | //
+ // | | | | | | //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // | | | | | | //
+ // | | | | | | //
+ DYN_MACRO_PLAY2, MEH_T(KC_F), ALL_T(KC_G), C_S_T(KC_C), LCA_T(KC_R), LAS_T(KC_L), TD(SLSH_BSLS), //
+ // | | | | | | //
+ // | | | | | | //
+ // |-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // | | | | | | //
+ // | | | | | | //
+ /*-----------------------*/ LGUI_T(KC_D), LT(MOUSE, KC_H), SFT_T(KC_T), CTL_T(KC_N), ALT_T(KC_S), TD(MINS_UNDS), //
+ // | | | | | | //
+ // | | | | | | //
+ // |-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // | | | | | | //
+ // | | | | | | //
+ KC_LGUI, LCAG_T(KC_B), LT(HYPER, KC_M), LT(MEDIA_FN, KC_W), SGUI_T(KC_V), LGAS_T(KC_Z), COMPOSE, //
+ // | | | | | | //
+ // | | | | | | ⎄ //
+ //------------------------+-------------------------+-------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+ // | | | | //
+ // | | | | //
+ KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_SYSREQ, //
+ // | | | | //
+ // | | | | //
+ //------------------------+-------------------------+-------------------------+-------------------------+------------------------//
+
+ // HACKER DVORAK right thumb
+
+ //------------------------+------------------------//
+ // | //
+ // | //
+ KC_WH_U, KC_WH_D, //
+ // | //
+ // | //
+ //------------------------+-------------------------+------------------------//
+ // | | //
+ // | | //
+ KC_PGUP, // | //
+ // | | //
+ // | | //
+ //------------------------| | //
+ // | | //
+ // | | //
+ KC_PGDN, KC_DEL, KC_ENT //
+ // | | //
+ // | | //
+ //------------------------+-------------------------+------------------------//
+
+ ),
+
+ [PLOVER] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, XXXXXXX, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_BTN3, GUI_T(KC_NO),
+ KC_ESC, KC_MS_BTN4, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN5, PV_NUM,
+ KC_TAB, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR,
+ KC_CLCK, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR,
+ XXXXXXX, TG(LAYERS), PV_NUM, PV_NUM, PV_NUM,
+
+ // left thumb
+ KC_SPACE, KC_BSPACE,
+ KC_HOME,
+ PV_A, PV_O, KC_END,
+
+ // right hand
+ KC_MS_ACCEL2, KC_MS_ACCEL1, KC_MS_ACCEL0, KC_UP, KC_APPLICATION, XXXXXXX, KC_MS_WH_UP,
+ PV_NUM, KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_MS_WH_DOWN,
+ PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
+ PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
+ PV_NUM, PV_NUM, PV_NUM, PV_NUM, XXXXXXX,
+
+ // right thumb
+ KC_DELETE, KC_ENTER,
+ KC_PGUP,
+ KC_PGDOWN, PV_E, PV_U
+ ),
+
+ [GAMING] = LAYOUT_ergodox(
+ // left hand
+ KC_ESCAPE, GUI_T(KC_MINS), KC_I, KC_O, KC_P, ALGR_T(KC_EQL), KC_T,
+ KC_TAB, KC_LALT, KC_Q, KC_W, KC_E, ALL_T(KC_R), KC_G,
+ LT(MOUSE, KC_GRV), KC_LCTRL, KC_A, KC_S, KC_D, MEH_T(KC_F),
+ KC_BSLS, KC_LSHIFT, KC_Z, KC_X, KC_C, SCMD_T(KC_V), KC_M,
+ XXXXXXX, TG(LAYERS), KC_COMM, KC_DOT, KC_LBRC,
+
+ // left thumb
+ MO(MEDIA_FN), KC_NLCK,
+ KC_SCLN,
+ KC_SPACE, KC_ENTER, KC_BSPACE,
+
+ // right hand
+ KC_QUOT, KC_Y, KC_K, KC_U, KC_KP_7, KC_KP_8, KC_KP_9,
+ KC_MS_WH_UP, KC_H, KC_J, KC_L, KC_KP_4, KC_KP_2, KC_KP_6,
+ KC_B, KC_MS_UP, KC_N, KC_KP_1, KC_KP_5, KC_KP_3,
+ KC_MS_WH_DOWN, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_UP, KC_KP_0, KC_SLASH,
+ KC_RBRC, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX,
+
+ // right thumb
+ KC_MS_BTN5, MO(HYPER),
+ KC_MS_BTN4,
+ KC_MS_BTN3, KC_MS_BTN2, KC_MS_BTN1
+ ),
+
+ [ARROWS] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, SCMD_T(KC_NO), MEH_T(KC_NO), ALL_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, KC_LCTRL, KC_LSHIFT, XXXXXXX, _______, XXXXXXX,
+ XXXXXXX, KC_RALT, KC_LALT, GUI_T(KC_NO), XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ KC_HOME,
+ KC_SPACE, KC_BSPACE, KC_END,
+
+ // right hand
+ LGUI(KC_X), XXXXXXX, LCTL(KC_X), KC_MS_WH_UP, XXXXXXX, XXXXXXX, XXXXXXX,
+ LGUI(KC_C), XXXXXXX, LCTL(KC_C), KC_UP, SCTL(KC_C), LCTL(KC_Z), LGUI(KC_Z),
+ KC_MS_WH_LEFT, KC_LEFT, KC_DOWN, KC_RIGHT, KC_MS_WH_RIGHT, KC_APPLICATION,
+ LGUI(KC_V), XXXXXXX, LCTL(KC_V), KC_MS_WH_DOWN, SCTL(KC_V), LCTL(KC_Y), SGUI(KC_Z),
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_SLCK,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ KC_PGUP,
+ KC_PGDOWN, KC_DELETE, KC_ENTER
+ ),
+
+ [MOUSE] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_MS_WH_UP, LCTL(KC_X), XXXXXXX, LGUI(KC_X),
+ LGUI(KC_Z), LCTL(KC_Z), SCTL(KC_C), KC_MS_UP, LCTL(KC_C), KC_MS_BTN4, LGUI(KC_C),
+ KC_MS_BTN3, KC_MS_WH_LEFT, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_RIGHT,
+ LGUI(KC_Z), LCTL(KC_Y), SCTL(KC_V), KC_MS_WH_DOWN, LCTL(KC_V), KC_MS_BTN5, LGUI(KC_V),
+ KC_SLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ KC_MS_BTN1, KC_MS_BTN2, XXXXXXX,
+
+ // right hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, ALL_T(KC_NO), MEH_T(KC_NO), SCMD_T(KC_NO), XXXXXXX,
+ XXXXXXX, _______, KC_MS_ACCEL1, KC_LSHIFT, KC_LCTRL, KC_MS_ACCEL2,
+ XXXXXXX, XXXXXXX, XXXXXXX, GUI_T(KC_NO), KC_LALT, KC_RALT, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_MS_ACCEL0
+ ),
+
+ [NUMPAD] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, GUI_T(KC_NO), XXXXXXX, ALL_T(KC_NO), XXXXXXX, XXXXXXX,
+ _______, KC_LCTRL, KC_LSHIFT, _______, MEH_T(KC_NO), XXXXXXX,
+ XXXXXXX, KC_RALT, KC_LALT, XXXXXXX, SCMD_T(KC_NO), XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ KC_HOME,
+ KC_SPACE, KC_BSPACE, KC_END,
+
+ // right hand
+ KC_X, KC_A, KC_B, KC_C, KC_D, KC_E, KC_F,
+ KC_O, KC_I, KC_1, KC_2, KC_3, KC_SLSH, KC_PERC,
+ KC_M, KC_4, KC_5, KC_6, KC_PLUS, KC_MINS,
+ KC_L, KC_J, KC_7, KC_8, KC_9, KC_ASTR, KC_CIRC,
+ KC_DOT, KC_0, KC_COMM, KC_UNDS, KC_BSLS,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ KC_PGUP,
+ KC_PGDOWN, KC_DELETE, KC_ENTER
+ ),
+
+ [LAYERS] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, TO(DVORAK), TO(PLOVER), TO(GAMING), XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+ [MEDIA_FN] = LAYOUT_ergodox(
+ // left hand
+ KC_VOLD, KC_MUTE, RGB_TOG, XXXXXXX, KC_MAIL, KC_FIND, KC_WWW_REFRESH,
+ KC_MPRV, KC_F9, KC_F7, KC_F5, KC_F3, KC_F1, KC_WWW_HOME,
+ KC_PAUS, KC_F19, KC_F17, KC_F15, KC_F13, KC_F11,
+ RGB_HUD, XXXXXXX, XXXXXXX, _______, KC_F23, KC_F21, KC_WWW_BACK,
+ RGB_VAD, KC_CLCK, KC_PSCREEN, XXXXXXX, MO(FIRMWARE),
+
+ // left thumb
+ _______, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_MEDIA_EJECT,
+
+ // right hand
+ KC_WWW_FAVORITES, KC_MYCM, KC_CALC, XXXXXXX, RGB_MOD, RGB_M_P, KC_VOLU,
+ KC_WWW_SEARCH, KC_F2, KC_F4, KC_F6, KC_F8, KC_F10, KC_MNXT,
+ KC_F12, KC_F14, KC_F16, KC_F18, KC_F20, KC_MPLY,
+ KC_WWW_FORWARD, KC_F22, KC_F24, _______, XXXXXXX, XXXXXXX, RGB_HUI,
+ KC_PWR, XXXXXXX, KC_SLEP, KC_WAKE, RGB_VAI,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ RGB_GREEN, XXXXXXX, XXXXXXX
+ ),
+
+ [HYPER] = LAYOUT_ergodox(
+ // left hand
+ XXXXXXX, HYPR(KC_F1), HYPR(KC_F2), HYPR(KC_F3), HYPR(KC_F4), HYPR(KC_F5), XXXXXXX,
+ XXXXXXX, HYPR(KC_F6), HYPR(KC_F7), HYPR(KC_F8), HYPR(KC_F9), HYPR(KC_F10), XXXXXXX,
+ XXXXXXX, HYPR(KC_F11), HYPR(KC_F12), HYPR(KC_F13), HYPR(KC_F14), HYPR(KC_F15),
+ XXXXXXX, HYPR(KC_F16), HYPR(KC_F17), HYPR(KC_F18), HYPR(KC_F19), HYPR(KC_F20), XXXXXXX,
+ XXXXXXX, HYPR(KC_F21), HYPR(KC_F22), HYPR(KC_F23), HYPR(KC_F24),
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right thumb
+ XXXXXXX, _______,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+ [FIRMWARE] = LAYOUT_ergodox(
+
+ // left hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+
+ // left thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ RESET, XXXXXXX, XXXXXXX,
+
+ // right hand
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // right thumb
+ XXXXXXX, XXXXXXX,
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, EEP_RST
+ )
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c
new file mode 100644
index 000000000..e5eba1820
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/aliases_definitions.c
@@ -0,0 +1,5 @@
+// Keycode aliases
+#define SCTL(kc) LSFT(LCTL(kc)) // Modifier keys: SHIFT+CTRL+kc combination.
+#define LGAS_T(kc) MT(MOD_LGUI | MOD_LALT | MOD_LSFT, kc) // Mod tap: kc when tapped, GUI+ALT+SHIFT when held.
+#define LAS_T(kc) MT(MOD_LALT | MOD_LSFT, kc) // Mod tap: kc when tapped, ALT+SHIFT whin held.
+#define COMPOSE KC_RALT // Compose key (used to input characters like á, ñ, ü).
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c
new file mode 100644
index 000000000..368062172
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keycodes/custom_keycodes.c
@@ -0,0 +1,8 @@
+// Define custom user keycodes:
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // Can always be here.
+ RGB_GREEN, // To set default RGB layer as green once.
+ MY_CUSTOM_MACRO, // Custom macro example.
+ MY_OTHER_MACRO, // Custom macro example.
+ DYNAMIC_MACRO_RANGE // Should always be the last.
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
new file mode 100644
index 000000000..af06d2bd8
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/keymap.c
@@ -0,0 +1,19 @@
+#include QMK_KEYBOARD_H // Includes the QMK-verse.
+#include "keymap_plover.h" // Includes the Plover keymap for easier readability.
+
+
+// TODO: No eeprom changes unless needed, custom rgb settings for animations.
+#include "keycodes/aliases_definitions.c"
+#include "layers/layers_definitions.c"
+#include "tap_dance/tap_dance_setup.c"
+#include "tap_dance/tap_dances.c"
+#include "user/matrix_scan_user.c"
+#include "tap_dance/mod_tap_layer_dances/none_lead.c"
+#include "tap_dance/tap_dance_actions.c"
+#include "keycodes/custom_keycodes.c"
+#include "dynamic_macro.h" // Includes dynamic macro definitions, needed *after* the custom keycodes.
+#include "hacker_dvorak.c"
+#include "user/eeconfig_init_user.c"
+#include "user/process_record_user.c"
+#include "plover/plover_mode.c"
+#include "user/layer_set_state_user.c"
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c
new file mode 100644
index 000000000..f190e4f6f
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/layers/layers_definitions.c
@@ -0,0 +1,12 @@
+enum layers { // Hacker Dvorak keyboard layers:
+ DVORAK = 0, // * Dvorak base layer.
+ PLOVER = 1, // * Steno layer for use with Plover.
+ GAMING = 2, // * Gaming layer intended for general purpose playing.
+ ARROWS = 3, // * Arrows movement keys and edition shortcuts.
+ MOUSE = 4, // * Mouse movement keys and edition shortcuts.
+ NUMPAD = 5, // * ATM style numpad with symbols and letters that should suffice to input any numeric literal.
+ LAYERS = 6, // * Layer switcher used to change between DVORAK, PLOVER and GAMING layers.
+ MEDIA_FN = 7, // * Media, RGB and function keys from F1 to F24 in symmetric fashion.
+ HYPER = 8, // * Hot keys layer (uses hyper + F1 .. F24) suitable for global shortcut tasks.
+ FIRMWARE = 9 // * Layer with firmware related functionality, like the reset and EEPROM keys.
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c
new file mode 100644
index 000000000..8d5fa00a7
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_dictionary.c
@@ -0,0 +1,14 @@
+LEADER_DICTIONARY() {
+ leading = false;
+ leader_end();
+
+ SEQ_ONE_KEY(TD(APMR_PIPE)) {
+ register_code(KC_LCTL);
+ register_code(KC_LSFT);
+ register_code(KC_U);
+
+ unregister_code(KC_U);
+ unregister_code(KC_LSFT);
+ unregister_code(KC_LCTL);
+ }
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c
new file mode 100644
index 000000000..1e89c4bfc
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/leader/leader_setup.c
@@ -0,0 +1,14 @@
+LEADER_EXTERNS();
+
+void qk_leader_start(void) {
+ if (!leading) {
+ 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;
+ }
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json b/keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json
new file mode 100644
index 000000000..116911e46
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "hacker_dvorak",
+ "version": "1.0.0",
+ "description": "Inspired by the [*Programmer Dvorak*](https://www.kaufmann.no/roland/dvorak) keyboard layout, cherry picked ideas from other layouts in the [EZ Repository](https://configure.ergodox-ez.com/search?q=dvorak&legacy=true), a character distribution [heatmap vizualizer](https://run.plnkr.co/plunks/5EEO8nJ2wRzYAfT3), my own subjective use cases and lots of trial and error.",
+ "main": "gulpfile.js",
+ "scripts": {
+ "test": "test"
+ },
+ "author": "SalchiPapa",
+ "license": "GPL-2.0",
+ "dependencies": {
+ "gulp": "^3.9.1",
+ "gulp-run-command": "0.0.9"
+ }
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c
new file mode 100644
index 000000000..b38826490
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/plover/plover_mode.c
@@ -0,0 +1,20 @@
+// TODO: improve feedback
+void plover_toggle(void) {
+ // Press "PHROLG"
+ register_code(PV_LP);
+ register_code(PV_LH);
+ register_code(PV_LR);
+ register_code(PV_O);
+ register_code(PV_RL);
+ register_code(PV_RG);
+
+ // Release "PHROLG"
+ unregister_code(PV_LP);
+ unregister_code(PV_LH);
+ unregister_code(PV_LR);
+ unregister_code(PV_O);
+ unregister_code(PV_RL);
+ unregister_code(PV_RG);
+}
+
+bool PLOVER_MODE = false;
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md b/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
new file mode 100644
index 000000000..8089a6d55
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/readme.md
@@ -0,0 +1,62 @@
+# [Ergodox EZ Hacker Dvorak Layout](https://configure.ergodox-ez.com/layouts/Wadz/latest/0)
+
+Inspired by the [*Programmer Dvorak*](https://www.kaufmann.no/roland/dvorak) keyboard layout, cherry picked ideas from other layouts in the [EZ Repository](https://configure.ergodox-ez.com/search?q=dvorak&legacy=true), a character distribution [heatmap vizualizer](https://run.plnkr.co/plunks/5EEO8nJ2wRzYAfT3), my own subjective use cases and lots of trial and error.
+
+## Setup
+
+Configure your OS keyboard layout to US, or the keymap will be incorrect.
+
+## Limitations
+
+I plan to use [QMK](https://docs.qmk.fm) in the future, in order to overcome some limitations of the Ergodox EZ [graphical configurator](https://configure.ergodox-ez.com/layouts/default/latest/0)), however I will defer that, until more progress is made to the new [configurator](https://medium.com/the-ergo/the-configurator-is-out-of-beta-e107aec80cae).
+
+## Layers
+
+1. Dvorak
+ * US Dvorak layout.
+ * All symbols (including shifted symbols).
+ * All modifier are dual keys positioned near the home row.
+2. Querty
+ * Used to overcome the limitation pointed above, when your OS layout is set to Dvorak instead of US, this way you can use
+ Standard Dvorak (available by default on all the main operating systems) on other normal keybdoards and Hacker Dvorak on
+ the Ergodox EZ Shine at the same time, without changing back and forth tho OS layout.
+3. Gaming
+ * Still in development.
+ * Left side is mainly "normal" Qwerty.
+ * Right side is mainly for movement, either using the mouse, the arrow keys, the number pad or the `H`, `J`, `K`, `L` as direction keys.
+4. Arrows
+ * Arrow keys navigation.
+ * All modifier keys.
+ * Common text edititng shortcuts (doesn't work for MacOS).
+5. Mouse
+ * Mouse navigation.
+ * All modifier keys.
+ * Common text edititng shortcuts (doesn't work for MacOS).
+6. Numpad
+ * ATM style numpad.
+ * All modifier keys.
+ * Letters from `A` to `F` for hexadecimal numbers (`B` is also used for binary numeric literals in most programming
+ languages, ie. `0b11001`).
+ * `X` for hexadecimal numeric literals in most programming languages, ie. `0xbeef`.
+ * `O` for octal numeric literals in most programming languages, ie `0o123`.
+ * `J` for complex numeric literals in Python, ie. `3j`.
+ * `I` and `M` for complex Julia numeric literals, ie. `3im`.
+ * Common symbols for mathematical operations.
+7. Hyper Fn
+ * Useful for custom global shortcuts.
+8. Media Fn
+ * Media keys.
+ * Function keys.
+ * EZ Shine keys.
+9. Meh Fn
+ * Useful for custom application shortcuts.
+10. Meh Fn +
+ * Useful for custom standard shortcuts.
+
+## To Do
+
+Add images.
+
+***
+
+Please comment below if you have any ideas or suggestions. If you have used this layout or used it as a base, I'd love to hear about your experience!
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk b/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
new file mode 100644
index 000000000..51a9ff0d4
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/rules.mk
@@ -0,0 +1,40 @@
+# Set any rules.mk overrides for your specific keymap here.
+# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file
+
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+TAP_DANCE_ENABLE = yes
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700b).
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450b).
+RGBLIGHT_ENABLE = yes
+LEADER_ENABLE = yes
+
+UNICODE_ENABLE = no
+COMMAND_ENABLE = no # Commands for debug and configuration
+SWAP_HANDS_ENABLE = no # Allow swapping hands of keyboard.
+
+
+# This are by default off:
+# COMBO_ENABLE = no
+# UCIS_ENABLE = no # For Unicode.
+# UNICODEMAP_ENABLE = no
+# SLEEP_LED_ENABLE = no # Turn off leds when computer is sleeping.
+# KEY_LOCK_ENABLE = no # (+1730b)
+# CONSOLE_ENABLE = no # Console for debug(+400b)
+# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000b)
+# API_SYSEX_ENABLE = no
+# MIDI_ENABLE = no
+# BLUETOOTH_ENABLE = no
+# AUDIO_ENABLE = no
+# FAUXCLICKY_ENABLE = no
+# VARIABLE_TRACE = no
+# BACKLIGHT_ENABLE = no
+# RGB_MATRIX_ENABLE = no
+
+# POINTING_DEVICE_ENABLE = no
+
+# AUTO_SHIFT_ENABLE = no
+# AUTO_SHIFT_MODIFIERS = no
+
+# This don't need argument?
+# CUSTOM_MATRIX # Custom matrix file for the ErgoDox EZ
+# SPLIT_KEYBOARD
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c
new file mode 100644
index 000000000..6debc1ce4
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/mod_tap_layer_dances/none_lead.c
@@ -0,0 +1,40 @@
+//instanalize an instance of 'tap' for the None - Lead tap dance.
+static tap none_lead_state = {
+ .is_press_action = true,
+ .state = 0
+};
+
+void none_lead_finished(qk_tap_dance_state_t *state, void *user_data) {
+ none_lead_state.state = current_dance(state);
+ switch (none_lead_state.state) {
+ case SINGLE_TAP:
+ register_code(KC_NO);
+ break;
+
+ case SINGLE_HOLD:
+ register_code(KC_LALT);
+ register_code(KC_LSFT);
+ break;
+
+ case DOUBLE_TAP:
+ qk_leader_start();
+ break;
+ }
+}
+
+void none_lead_reset(qk_tap_dance_state_t *state, void *user_data) {
+ switch (none_lead_state.state) {
+ case SINGLE_TAP:
+ unregister_code(KC_NO);
+ break;
+
+ case SINGLE_HOLD:
+ unregister_code(KC_LALT);
+ unregister_code(KC_LSFT);
+ break;
+
+ case DOUBLE_TAP:
+ break;
+ }
+ none_lead_state.state = 0;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c
new file mode 100644
index 000000000..550e1f7c8
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_actions.c
@@ -0,0 +1,20 @@
+// Register the double tap dances:
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [EQL_PLUS] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS),
+ [MINS_UNDS] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS),
+ [SLSH_BSLS] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_BSLS),
+ [GRV_TILD] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD),
+ [QUOT_DQUO] = ACTION_TAP_DANCE_DOUBLE(KC_QUOT, KC_DQUO),
+ [SCLN_COLN] = ACTION_TAP_DANCE_DOUBLE(KC_SCLN, KC_COLN),
+ [ASTR_CIRC] = ACTION_TAP_DANCE_DOUBLE(KC_ASTR, KC_CIRC),
+ [APMR_PIPE] = ACTION_TAP_DANCE_DOUBLE(KC_AMPR, KC_PIPE),
+ [EXLM_QUES] = ACTION_TAP_DANCE_DOUBLE(KC_EXLM, KC_QUES),
+ [HASH_PERC] = ACTION_TAP_DANCE_DOUBLE(KC_HASH, KC_PERC),
+ [AT_DLR] = ACTION_TAP_DANCE_DOUBLE(KC_AT, KC_DLR),
+ [LPRN_LBRC] = ACTION_TAP_DANCE_DOUBLE(KC_LPRN, KC_LBRC),
+ [RPRN_RBRC] = ACTION_TAP_DANCE_DOUBLE(KC_RPRN, KC_RBRC),
+ [LCBR_LABK] = ACTION_TAP_DANCE_DOUBLE(KC_LCBR, KC_LABK),
+ [RCBR_RABK] = ACTION_TAP_DANCE_DOUBLE(KC_RCBR, KC_RABK),
+ [DOT_COMM] = ACTION_TAP_DANCE_DOUBLE(KC_DOT, KC_COMM),
+ [NONE_LEAD] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(NULL, none_lead_finished, none_lead_reset, DANCING_TERM)
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c
new file mode 100644
index 000000000..340ccca13
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dance_setup.c
@@ -0,0 +1,75 @@
+typedef struct {
+ bool is_press_action;
+ int state;
+} tap;
+
+enum {
+ SINGLE_TAP = 1,
+ SINGLE_HOLD = 2,
+ DOUBLE_TAP = 3,
+ DOUBLE_HOLD = 4,
+ DOUBLE_SINGLE_TAP = 5, // Send two single taps.
+ TRIPLE_TAP = 6,
+ TRIPLE_HOLD = 7,
+ TRIPLE_SINGLE_TAP = 8 // Send three single taps.
+};
+
+/* Return an integer that corresponds to what kind of tap dance should be executed.
+ *
+ * How to figure out tap dance state: interrupted and pressed.
+ *
+ * Interrupted: If the state of a dance dance is "interrupted", that means that another key has been hit
+ * under the tapping term. This is typically indicitive that you are trying to "tap" the key.
+ *
+ * Pressed: Whether or not the key is still being pressed. If this value is true, that means the tapping term
+ * has ended, but the key is still being pressed down. This generally means the key is being "held".
+ *
+ * One thing that is currenlty not possible with qmk software in regards to tap dance is to mimic the "permissive hold"
+ * feature. In general, advanced tap dances do not work well if they are used with commonly typed letters.
+ * For example "A". Tap dances are best used on non-letter keys that are not hit while typing letters.
+ *
+ * Good places to put an advanced tap dance:
+ * z,q,x,j,k,v,b, any function key, home/end, comma, semi-colon
+ *
+ * Criteria for "good placement" of a tap dance key:
+ * Not a key that is hit frequently in a sentence
+ * Not a key that is used frequently to double tap, for example 'tab' is often double tapped in a terminal, or
+ * in a web form. So 'tab' would be a poor choice for a tap dance.
+ * Letters used in common words as a double. For example 'p' in 'pepper'. If a tap dance function existed on the
+ * letter 'p', the word 'pepper' would be quite frustating to type.
+ *
+ * For the third point, there does exist the 'DOUBLE_SINGLE_TAP', however this is not fully tested
+ *
+ */
+int current_dance(qk_tap_dance_state_t *state) {
+ int current_state = 0;
+ if (state->count == 1) {
+ if (state->interrupted || !state->pressed) {
+ current_state = SINGLE_TAP;
+ } else {
+ current_state = SINGLE_HOLD; //key has not been interrupted, but they key is still held. Means you want to send a 'HOLD'.
+ }
+ } else if (state->count == 2) {
+ /*
+ * DOUBLE_SINGLE_TAP is to distinguish between typing "pepper", and actually wanting a double tap
+ * action when hitting 'pp'. Suggested use case for this return value is when you want to send two
+ * keystrokes of the key, and not the 'double tap' action/macro.
+ */
+ if (state->interrupted) {
+ current_state = DOUBLE_SINGLE_TAP;
+ } else if (state->pressed) {
+ current_state = DOUBLE_HOLD;
+ } else {
+ current_state = DOUBLE_TAP;
+ }
+ } else if (state->count == 3) {
+ if (state->interrupted) {
+ current_state = TRIPLE_SINGLE_TAP;
+ } else if (state->pressed) {
+ current_state = TRIPLE_HOLD;
+ } else {
+ current_state = TRIPLE_TAP;
+ }
+ }
+ return current_state;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c
new file mode 100644
index 000000000..3d4469872
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/tap_dance/tap_dances.c
@@ -0,0 +1,74 @@
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ // Single tap | Single hold | Double tap | Double hold | Triple tap | Triple hold //
+// Mod tap dances: // | | | | | //
+enum tap_dances { //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ EQL_PLUS = 0, // = | + | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ MINS_UNDS = 1, // - | _ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ SLSH_BSLS = 2, // / | \ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ GRV_TILD = 3, // ` | ~ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ QUOT_DQUO = 4, // ' | " | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ SCLN_COLN = 5, // ; | : | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ ASTR_CIRC = 6, // * | ^ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ APMR_PIPE = 7, // & | | | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ EXLM_QUES = 8, // ! | ? | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ HASH_PERC = 9, // # | % | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ AT_DLR = 10, // @ | $ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ LPRN_LBRC = 11, // ( | [ | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ RPRN_RBRC = 12, // ) | ] | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ LCBR_LABK = 13, // { | < | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ RCBR_RABK = 14, // } | > | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ DOT_COMM = 15, // . | , | | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+ // | | | | | //
+ NONE_LEAD = 16, // NONE | ALT+SHIFT | LEAD | | | //
+ // | | | | | //
+ //--------------------------------------------------------------------------------------------//
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c
new file mode 100644
index 000000000..41b7b6694
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/eeconfig_init_user.c
@@ -0,0 +1,3 @@
+// void eeconfig_init_user(void) {
+//
+// };
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c
new file mode 100644
index 000000000..e2eeed6fa
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/layer_set_state_user.c
@@ -0,0 +1,121 @@
+
+uint32_t layer_state_set_user(uint32_t state) {
+ uint8_t layer = biton32(state);
+
+ switch (layer) {
+ case DVORAK:
+ rgblight_sethsv_noeeprom_green();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case PLOVER:
+ rgblight_sethsv_noeeprom_red();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_BREATHING + 3);
+
+ if (!(PLOVER_MODE)) {
+ plover_toggle();
+ PLOVER_MODE = true;
+ }
+
+ break;
+
+ case GAMING:
+ rgblight_sethsv_noeeprom_red();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case ARROWS:
+ rgblight_sethsv_noeeprom_blue();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case MOUSE:
+ rgblight_sethsv_noeeprom_blue();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case NUMPAD:
+ rgblight_sethsv_noeeprom_blue();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case LAYERS:
+ rgblight_sethsv_noeeprom_cyan();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case MEDIA_FN:
+ rgblight_sethsv_noeeprom_yellow();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case HYPER:
+ rgblight_sethsv_noeeprom_magenta();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ case FIRMWARE:
+ rgblight_sethsv_noeeprom_magenta();
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_KNIGHT + 2);
+
+ if (PLOVER_MODE) {
+ plover_toggle();
+ PLOVER_MODE = false;
+ }
+
+ break;
+
+ default:
+ break;
+ }
+
+ return state;
+}
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c
new file mode 100644
index 000000000..3b78079cc
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/matrix_scan_user.c
@@ -0,0 +1,12 @@
+#include "../leader/leader_setup.c"
+
+bool MATRIX_SCANNED = false;
+
+void matrix_scan_user(void) {
+ if (!(MATRIX_SCANNED)) {
+ rgblight_sethsv_noeeprom_green();
+ MATRIX_SCANNED = true;
+ }
+
+ #include "../leader/leader_dictionary.c"
+};
diff --git a/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c
new file mode 100644
index 000000000..764463582
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/hacker_dvorak/user/process_record_user.c
@@ -0,0 +1,75 @@
+// TODO: Improve this currently there is no feedback if activated by other means.
+bool CAPS_LOCK = false;
+bool NUM_LOCK = false;
+bool SCROLL_LOCK = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+
+ switch (keycode) {
+ case KC_CLCK:
+ if (record->event.pressed) {
+ if (!(CAPS_LOCK)) {
+ ergodox_right_led_1_on();
+ CAPS_LOCK = true;
+ } else {
+ ergodox_right_led_1_off();
+ CAPS_LOCK = false;
+ }
+ }
+
+ return true;
+
+ case KC_NLCK:
+ if (record->event.pressed) {
+ if (!(NUM_LOCK)) {
+ ergodox_right_led_2_on();
+ NUM_LOCK = true;
+ } else {
+ ergodox_right_led_2_off();
+ NUM_LOCK = false;
+ }
+ }
+
+ return true;
+
+ case KC_SLCK:
+ if (record->event.pressed) {
+ if (!(SCROLL_LOCK)) {
+ ergodox_right_led_3_on();
+ SCROLL_LOCK = true;
+ } else {
+ ergodox_right_led_3_off();
+ SCROLL_LOCK = false;
+ }
+ }
+
+ return true;
+
+ case KC_MS_WH_UP ... KC_MS_WH_RIGHT:
+ if (record->event.pressed) {
+ if (SCROLL_LOCK) {
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ case MY_CUSTOM_MACRO:
+ if (record->event.pressed) {
+ SEND_STRING("QMK is the best thing ever!"); // this is our macro!
+ return false;
+ }
+
+ case MY_OTHER_MACRO:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTRL("ac")); // selects all and copies
+ return false;
+ }
+
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/ergodox_ez/keymaps/heartrobotninja/rules.mk b/keyboards/ergodox_ez/keymaps/heartrobotninja/rules.mk
index 38112a906..db5e5d155 100644
--- a/keyboards/ergodox_ez/keymaps/heartrobotninja/rules.mk
+++ b/keyboards/ergodox_ez/keymaps/heartrobotninja/rules.mk
@@ -13,6 +13,7 @@ AUTOLOG_ENABLE = no
RGBLIGHT_ENABLE = yes
RGBLIGHT_ANIMATION = yes
EXTRAKEY_ENABLE = yes
+LEADER_ENABLE = yes
OPT_DEFS += -DUSER_PRINT
@@ -31,4 +32,4 @@ OPT_DEFS += -DKEYMAP_VERSION=\"$(KEYMAP_VERSION)\\\#$(KEYMAP_BRANCH)\"
ifndef QUANTUM_DIR
include ../../../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/ergodox_ez/keymaps/lukaus/config.h b/keyboards/ergodox_ez/keymaps/lukaus/config.h
new file mode 100644
index 000000000..2b9344537
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/lukaus/config.h
@@ -0,0 +1,16 @@
+#pragma once
+#define CONFIG_USER_H
+
+#define TAPPING_TERM 200
+
+#ifdef RGBLIGHT_ENABLE
+#undef RGBLIGHT_SAT_STEP
+#define RGBLIGHT_SAT_STEP 12
+#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 7
+#define RGBLIGHT_EFFECT_SNAKE_LENGTH 7
+#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
+#endif // RGBLIGHT_ENABLE
+
+#define FORCE_NKRO
+
+#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))
diff --git a/keyboards/ergodox_ez/keymaps/lukaus/keymap.c b/keyboards/ergodox_ez/keymaps/lukaus/keymap.c
new file mode 100644
index 000000000..40156b3ff
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/lukaus/keymap.c
@@ -0,0 +1,843 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+#include "keymap_german.h"
+
+#include "keymap_nordic.h"
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+
+ // Programmer's Dvorak "macros" :
+ // To be paired with get_mods to enable both
+ // Shift functionality and Programmer's Dvorak
+
+ DVP_ESC, // Grave escape basically i think
+ DVP_AMPR,
+ DVP_LBRACKET,
+ DVP_LCBR,
+ DVP_RCBR,
+ DVP_LPRN,
+ DVP_AT,
+
+ DVP_EQUAL,
+ DVP_ASTERISK,
+ DVP_RPRN,
+ DVP_PLUS,
+ DVP_RBRACKET,
+ DVP_EXLM,
+ DVP_HASH,
+
+ RU_2,
+ RU_3,
+ RU_4,
+ RU_6,
+ RU_7,
+ RU_DOT,
+
+ SHFT_COMMA,
+ SHFT_DOT,
+
+ RGB_SLD,
+ RGB_FF0000,
+ RGB_008000,
+ RGB_0000FF,
+ RGB_FFFFFF,
+ RGB_800080
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // Programmer's Dvorak layer
+ [0] = LAYOUT_ergodox(
+ DVP_ESC, DVP_AMPR, DVP_LBRACKET, DVP_LCBR, DVP_RCBR, DVP_LPRN, DVP_AT,
+ KC_TAB, KC_SCOLON, KC_COMMA, KC_DOT, KC_P, KC_Y, MO(4),
+ MO(3), KC_A, KC_O, KC_E, KC_U, KC_I,
+ KC_LSHIFT, KC_QUOTE, KC_Q, KC_J, KC_K, KC_X, KC_HYPR,
+ KC_LCTL, KC_LALT, KC_LGUI, LCTL(KC_C), LCTL(KC_V),
+
+ KC_MS_BTN3, TO(1), KC_HOME, KC_SPACE, MO(4), KC_END,
+
+ DVP_EQUAL, DVP_ASTERISK, DVP_RPRN, DVP_PLUS, DVP_RBRACKET, DVP_EXLM, DVP_HASH,
+ TT(4), KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLASH,
+ KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS,
+ KC_MEH, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(3),
+ KC_DELETE, KC_BSLASH, KC_RGUI, KC_RCTL, LCTL(KC_F),
+
+ KC_F17, KC_F18, KC_PGUP, KC_PGDOWN, KC_ENTER, KC_BSPACE
+ ),
+ // Gaming QWERTY layer
+ [1] = LAYOUT_ergodox(
+ KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F14,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_F23,
+ MO(3), KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_F24,
+ KC_LCTL, KC_F8, KC_LALT, KC_F14, KC_F13,
+
+ KC_HOME, TO(0), KC_F15, KC_SPACE, KC_LCTL, KC_LALT,
+
+ KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL,
+ KC_F24, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLASH,
+ KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE,
+ KC_F17, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RSHIFT,
+ KC_DELETE, KC_F19, KC_LGUI, KC_F21, KC_F22,
+
+ KC_F17, KC_F18, KC_PGUP, KC_PGDOWN, KC_ENTER, KC_BSPACE
+ ),
+ [2] = LAYOUT_ergodox(
+ KC_ESCAPE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_C,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TO(0),
+ MO(3), KC_1, KC_2, KC_3, KC_4, KC_5,
+ KC_LSHIFT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_NO,
+ KC_LCTL, KC_F8, KC_LALT, KC_I, KC_S,
+
+ KC_MS_BTN3, TO(1), KC_HOME, KC_SPACE, KC_LSHIFT, KC_END,
+
+ KC_NO, KC_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS, KC_NO, KC_NO,
+ TO(0), KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_PLUS, KC_NO, KC_NO,
+ KC_KP_4, KC_KP_5, KC_KP_6, KC_EQUAL, KC_NO, KC_NO,
+ KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_ENTER, KC_NO, KC_NO,
+ KC_KP_0, KC_KP_DOT, KC_NO, KC_NO, KC_NO,
+
+ TO(0), KC_F18, KC_PGUP, KC_PGDOWN, KC_ENTER, KC_BSPACE
+ ),
+ // Function Layer
+ [3] = LAYOUT_ergodox(
+ KC_DLR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRANSPARENT,
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_MEDIA_PREV_TRACK,KC_MEDIA_PLAY_PAUSE,KC_MEDIA_NEXT_TRACK,KC_NO, TT(4),
+ KC_TRANSPARENT, KC_TRANSPARENT, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_AUDIO_MUTE, KC_TRANSPARENT,
+ KC_LSHIFT, LALT(KC_Z), KC_TRANSPARENT, KC_TRANSPARENT, KC_F12, KC_TRANSPARENT, ALL_T(KC_NO),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_CAPSLOCK, LSFT(KC_F12),
+
+ KC_PSCREEN, KC_PGUP, KC_PGDOWN, KC_SPACE, KC_LSHIFT, KC_INSERT,
+
+ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_NO, KC_HOME, KC_TRANSPARENT, KC_PSCREEN, KC_SLCK, KC_TRANSPARENT, KC_TRANSPARENT,
+ KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_TRANSPARENT, KC_TRANSPARENT,
+ MEH_T(KC_NO), KC_CALCULATOR, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_TRANSPARENT, KC_RSHIFT,
+ KC_DELETE, KC_INSERT, KC_TRANSPARENT, KC_F19, KC_RCTL,
+
+ TO(2),KC_TRANSPARENT,KC_TRANSPARENT,LALT(KC_F10),KC_ENTER,KC_BSPACE
+ ),
+ // Keypad, Lighting, and Mouse emulation layer
+ ///*
+ [4] = LAYOUT_ergodox(
+ KC_ESCAPE, KC_NO, KC_NO, KC_MS_BTN3, KC_NO, KC_NO, KC_NO,
+ KC_TAB, KC_NO, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_WH_UP, TO(0),
+ KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN,
+ KC_LSHIFT, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, TO(5),
+ KC_LCTL, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,
+
+ KC_MS_BTN3, TO(1), KC_HOME, KC_SPACE, KC_LSHIFT, KC_END,
+
+ KC_NO, KC_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_CALCULATOR, KC_NO, RGB_VAI,
+ TO(0), KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_MINUS, KC_NO, RGB_VAD,
+ KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, KC_NO, RGB_HUI,
+ KC_NO, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, RGB_SLD, RGB_HUD,
+ KC_KP_0, KC_KP_DOT, KC_KP_ENTER, RGB_MOD, RGB_TOG,
+
+ KC_F17, KC_F18, KC_PGUP, KC_PGDOWN, KC_ENTER, KC_BSPACE
+ )
+ //*/
+ /*
+ // Keypad, Lighting, and Mouse emulation layer
+ [4] = KEYMAP(
+ KC_ESCAPE, KC_NO, KC_NO, KC_MS_BTN3, KC_NO, KC_NO, KC_NO,
+ KC_TAB, KC_NO, KC_MS_BTN2, KC_MS_UP, KC_MS_BTN1, KC_MS_WH_UP, TO(0),
+ KC_NO, KC_NO, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_WH_DOWN,
+ KC_LSHIFT, KC_NO, KC_NO, KC_UP, KC_NO, KC_NO, TO(5),
+ KC_LCTL, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,
+
+ KC_MS_BTN3, TO(1), KC_HOME, KC_SPACE, KC_LSHIFT, KC_END,
+
+ KC_NO, KC_I, KC_NUMLOCK, KC_KP_SLASH, KC_KP_ASTERISK, KC_CALCULATOR, RGB_VAI,
+ TO(0), KC_G, KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_MINUS, RGB_VAD,
+ SHFT_COMMA, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_PLUS, RGB_HUI,
+ KC_NO, SHFT_DOT, KC_KP_1, KC_KP_2, KC_KP_3, KC_EQUAL, RGB_HUD,
+ KC_NO, KC_KP_0, KC_KP_DOT, KC_KP_ENTER, RGB_TOG,
+
+ KC_F17, KC_F18, KC_PGUP, KC_PGDOWN, KC_ENTER, KC_BSPACE
+ )
+ */
+
+};
+
+void led_set_keymap(uint8_t usb_led) {
+
+}
+
+void matrix_init_user (void) {
+
+}
+
+
+bool left_shift_down = false;
+bool right_shift_down = false;
+
+bool numlock = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ switch (keycode) {
+ case KC_LSHIFT:
+ if (record->event.pressed)
+ {
+ left_shift_down = true;
+ return true;
+ }
+ else
+ {
+ left_shift_down = false;
+ return true;
+ }
+ break;
+ case KC_RSHIFT:
+
+ if (record->event.pressed)
+ {
+ right_shift_down = true;
+ return true;
+ }
+ else
+ {
+ right_shift_down = false;
+ return true;
+ }
+ break;
+ case KC_NUMLOCK:
+
+ if (record->event.pressed)
+ {
+ numlock = !numlock;
+ }
+ break;
+
+ case DVP_ESC:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ SEND_STRING("~");
+ return false;
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING(SS_DOWN(X_ESCAPE));
+ else
+ SEND_STRING(SS_UP(X_ESCAPE));
+ return false;
+ }
+ break;
+
+ case DVP_AMPR:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ SEND_STRING("%");
+
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("&");
+ }
+ return false;
+
+ break;
+
+ case SHFT_DOT:
+ if(record->event.pressed)
+ SEND_STRING(">");
+ break;
+
+ case SHFT_COMMA:
+ if(record->event.pressed)
+ SEND_STRING("<");
+ break;
+
+ case DVP_LBRACKET:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_7);
+ unregister_code(KC_7);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("[");
+ }
+ return false;
+
+ return false;
+ break;
+
+ case DVP_LCBR:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_5);
+ unregister_code(KC_5);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("{");
+ }
+ return false;
+ break;
+
+ case DVP_RCBR:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_3);
+ unregister_code(KC_3);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("}");
+ }
+ return false;
+ break;
+
+ case DVP_LPRN:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_1);
+ unregister_code(KC_1);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("(");
+ }
+ return false;
+ break;
+
+ case DVP_AT:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_LSHIFT);
+ register_code(KC_6);
+ unregister_code(KC_6);
+ unregister_code(KC_LSHIFT);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("@");
+ }
+ return false;
+ break;
+
+
+ case DVP_EQUAL:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_9);
+ unregister_code(KC_9);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("=");
+ }
+ return false;
+ break;
+
+ case DVP_ASTERISK:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_0);
+ unregister_code(KC_0);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("*");
+ }
+ return false;
+ break;
+
+ case DVP_RPRN:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_2);
+ unregister_code(KC_2);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING(")");
+ }
+ return false;
+ break;
+
+ case DVP_PLUS:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_4);
+ unregister_code(KC_4);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("+");
+ }
+ return false;
+ break;
+
+ case DVP_RBRACKET:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_6);
+ unregister_code(KC_6);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("]");
+ }
+ return false;
+ break;
+
+ case DVP_EXLM:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_8);
+ unregister_code(KC_8);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("!");
+ }
+ return false;
+ break;
+
+ case DVP_HASH:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_GRAVE);
+ unregister_code(KC_GRAVE);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("#");
+ }
+ return false;
+ break;
+
+ // Russian
+ case RU_2:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_GRAVE);
+ unregister_code(KC_GRAVE);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("#");
+ }
+ return false;
+ break;
+case RU_3:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_GRAVE);
+ unregister_code(KC_GRAVE);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("#");
+ }
+ return false;
+ break;
+case RU_4:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_GRAVE);
+ unregister_code(KC_GRAVE);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("#");
+ }
+ return false;
+ break;
+case RU_6:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_GRAVE);
+ unregister_code(KC_GRAVE);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("#");
+ }
+ return false;
+ break;
+case RU_7:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_GRAVE);
+ unregister_code(KC_GRAVE);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("#");
+ }
+ return false;
+ break;
+
+ case RU_DOT:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_GRAVE);
+ unregister_code(KC_GRAVE);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("#");
+ }
+ return false;
+ break;
+
+
+ case RGB_SLD:
+ if (record->event.pressed) {
+ rgblight_mode(1);
+ }
+ return false;
+ break;
+
+ case RGB_FF0000:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0xff,0x00,0x00);
+ #endif
+ }
+ return false;
+ break;
+
+ case RGB_008000:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0x00,0x80,0x00);
+ #endif
+ }
+ return false;
+ break;
+
+ case RGB_0000FF:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0x00,0x00,0xff);
+ #endif
+ }
+ return false;
+ break;
+
+ case RGB_FFFFFF:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0xff,0xff,0xff);
+ #endif
+ }
+ return false;
+ break;
+
+ case RGB_800080:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_enable();
+ rgblight_mode(1);
+ rgblight_setrgb(0x80,0x00,0x80);
+ #endif
+ }
+ return false;
+ break;
+
+ }
+ return true;
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+
+ uint8_t layer = biton32(state);
+
+ // ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ case 0:
+ break;
+ case 1:
+ ergodox_right_led_1_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ break;
+ case 4:
+ ergodox_right_led_1_on();
+ ergodox_right_led_3_on();
+ break;
+ default:
+ break;
+ }
+ return state;
+
+};
diff --git a/keyboards/ergodox_ez/keymaps/lukaus/readme.md b/keyboards/ergodox_ez/keymaps/lukaus/readme.md
new file mode 100644
index 000000000..af091bb1b
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/lukaus/readme.md
@@ -0,0 +1,3 @@
+# Lukaus' keymap
+
+Programmer's Dvorak as default layer with Qwerty gaming layer and two function layers
diff --git a/keyboards/ergodox_ez/keymaps/lukaus/rules.mk b/keyboards/ergodox_ez/keymaps/lukaus/rules.mk
new file mode 100644
index 000000000..fe05f599b
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/lukaus/rules.mk
@@ -0,0 +1 @@
+#UNICODE_ENABLE = yes
diff --git a/keyboards/ergodox_ez/keymaps/rgb_layer/config.h b/keyboards/ergodox_ez/keymaps/rgb_layer/config.h
new file mode 100644
index 000000000..59302b800
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rgb_layer/config.h
@@ -0,0 +1,24 @@
+#ifndef KEYMAP_CONFIG_H
+#define KEYMAP_CONFIG_H
+
+
+ #define RGBLIGHT_SLEEP
+
+
+#ifndef QMK_KEYS_PER_SCAN
+#define QMK_KEYS_PER_SCAN 4
+#endif // !QMK_KEYS_PER_SCAN
+
+#define IGNORE_MOD_TAP_INTERRUPT
+#undef PERMISSIVE_HOLD
+#undef PREVENT_STUCK_MODIFIERS
+
+
+#define FORCE_NKRO
+
+#ifndef TAPPING_TOGGLE
+#define TAPPING_TOGGLE 1
+#endif
+
+#endif // !USERSPACE_CONFIG_H
+
diff --git a/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c b/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c
new file mode 100644
index 000000000..384d7d094
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/rgb_layer/keymap.c
@@ -0,0 +1,271 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ RGB_SLD,
+ RGB_LYR
+};
+
+typedef union {
+ uint32_t raw;
+ struct {
+ bool rgb_layer_change :1;
+ };
+} user_config_t;
+
+user_config_t user_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | = | 1 | 2 | 3 | 4 | 5 | LEFT | | RIGHT| 6 | 7 | 8 | 9 | 0 | - |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Del | Q | W | E | R | T | L1 | | L1 | Y | U | I | O | P | \ |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | BkSp | A | S | D | F | G |------| |------| H | J | K | L |; / L2|' / Cmd |
+ * |--------+------+------+------+------+------| Hyper| | Meh |------+------+------+------+------+--------|
+ * | LShift |Z/Ctrl| X | C | V | B | | | | N | M | , | . |//Ctrl| RShift |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * |Grv/L1| '" |AltShf| Left | Right| | Up | Down | [ | ] | ~L1 |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | App | LGui | | Alt |Ctrl/Esc|
+ * ,------|------|------| |------+--------+------.
+ * | | | Home | | PgUp | | |
+ * | Space|Backsp|------| |------| Tab |Enter |
+ * | |ace | End | | PgDn | | |
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_.
+// Otherwise, it needs KC_*
+[BASE] = LAYOUT_ergodox( // layer 0 : default
+ // left hand
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT,
+ KC_DELT, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, ALL_T(KC_NO),
+ LT(SYMB,KC_GRV),KC_QUOT, LALT(KC_LSFT), KC_LEFT,KC_RGHT,
+ ALT_T(KC_APP), KC_LGUI,
+ KC_HOME,
+ KC_SPC,KC_BSPC,KC_END,
+ // right hand
+ KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN),GUI_T(KC_QUOT),
+ MEH_T(KC_NO),KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT,
+ KC_UP, KC_DOWN,KC_LBRC,KC_RBRC, TT(SYMB),
+ KC_LALT, CTL_T(KC_ESC),
+ KC_PGUP,
+ KC_PGDN,KC_TAB, KC_ENT
+ ),
+/* Keymap 1: Symbol Layer
+ *
+ * ,---------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |---------+------+------+------+------+------+------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | |
+ * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | EPRM | | | | | | | . | 0 | = | |
+ * `-----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * |Animat| LYR | |Toggle|Solid |
+ * ,------|------|------| |------+------+------.
+ * |Bright|Bright| | | |Hue- |Hue+ |
+ * |ness- |ness+ |------| |------| | |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = LAYOUT_ergodox(
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ RESET, KC_EXLM,KC_AT, KC_LCBR,KC_RCBR,KC_PIPE,KC_TRNS,
+ KC_TRNS,KC_HASH,KC_DLR, KC_LPRN,KC_RPRN,KC_GRV,
+ EPRM,KC_PERC,KC_CIRC,KC_LBRC,KC_RBRC,KC_TILD,KC_TRNS,
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,
+ RGB_MOD,RGB_LYR,
+ KC_TRNS,
+ RGB_VAD,RGB_VAI,KC_TRNS,
+ // right hand
+ KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ KC_TRNS, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, KC_TRNS,
+ KC_TRNS, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, KC_TRNS,
+ KC_TRNS,KC_DOT, KC_0, KC_EQL, KC_TRNS,
+ RGB_TOG, RGB_SLD,
+ KC_TRNS,
+ KC_TRNS, RGB_HUD, RGB_HUI
+),
+/* Keymap 2: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | | MsUp | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | |MsLeft|MsDown|MsRght| |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | |Brwser|
+ * | | |------| |------| |Back |
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = LAYOUT_ergodox(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_BTN2,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS,
+ // right hand
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_WBAK
+),
+};
+
+void eeconfig_init_user(void) {
+ rgblight_enable();
+ rgblight_sethsv_cyan();
+ rgblight_mode(1);
+ user_config.rgb_layer_change = true;
+ eeconfig_update_user(user_config.raw);
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // dynamically generate these.
+ case EPRM:
+ if (record->event.pressed) {
+ eeconfig_init();
+ }
+ return false;
+ break;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ break;
+ case RGB_LYR: // This allows me to use underglow as layer indication, or as normal
+ if (record->event.pressed) {
+ user_config.rgb_layer_change ^= 1; // Toggles the status
+ eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM
+ if (user_config.rgb_layer_change) { // if layer state indication is enabled,
+ layer_state_set(layer_state); // then immediately update the layer color
+ }
+ }
+ return false; break;
+ case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference)
+ if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
+ if (user_config.rgb_layer_change) { // only if this is enabled
+ user_config.rgb_layer_change = false; // disable it, and
+ eeconfig_update_user(user_config.raw); // write the setings to EEPROM
+ }
+ }
+ return true; break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ // Call the keymap level matrix init.
+
+ // Read the user config from EEPROM
+ user_config.raw = eeconfig_read_user();
+
+ // Set default layer, if enabled
+ if (user_config.rgb_layer_change) {
+ rgblight_enable_noeeprom();
+ rgblight_sethsv_noeeprom_cyan();
+ rgblight_mode_noeeprom(1);
+ }
+}
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (biton32(state)) {
+ case SYMB:
+ ergodox_right_led_1_on();
+ if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_red(); rgblight_mode_noeeprom(1); }
+ break;
+ case MDIA:
+ ergodox_right_led_2_on();
+ if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_green(); rgblight_mode_noeeprom(1); }
+ break;
+ case 3:
+ ergodox_right_led_3_on();
+ if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_blue(); rgblight_mode_noeeprom(1); }
+ break;
+ case 4:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_orange(); rgblight_mode_noeeprom(1); }
+ break;
+ case 5:
+ ergodox_right_led_1_on();
+ ergodox_right_led_3_on();
+ if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_yellow(); rgblight_mode_noeeprom(1); }
+ break;
+ case 6:
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_pink(); rgblight_mode_noeeprom(1); }
+ break;
+ case 7:
+ ergodox_right_led_1_on();
+ ergodox_right_led_2_on();
+ ergodox_right_led_3_on();
+ if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_white(); rgblight_mode_noeeprom(1); }
+ break;
+ default: // for any other layers, or the default layer
+ if (user_config.rgb_layer_change) { rgblight_sethsv_noeeprom_cyan(); rgblight_mode_noeeprom(1); }
+ break;
+ }
+ return state;
+}
+
diff --git a/keyboards/ergodox_ez/keymaps/skug/config.h b/keyboards/ergodox_ez/keymaps/skug/config.h
new file mode 100644
index 000000000..abf1c635f
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/skug/config.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#define FORCE_NKRO
+
+#undef LSPO_KEY
+#undef RSPC_KEY
+#define LSPO_KEY KC_8 // Nordic Left SpaceCadet
+#define RSPC_KEY KC_9 // Nordic Right SpaceCadet
diff --git a/keyboards/ergodox_ez/keymaps/skug/keymap.c b/keyboards/ergodox_ez/keymaps/skug/keymap.c
new file mode 100644
index 000000000..b3696f3a9
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/skug/keymap.c
@@ -0,0 +1,273 @@
+/* Copyright 2018 Andreas Lindhé, Christoffer Holmberg
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+
+
+
+#include QMK_KEYBOARD_H
+#include "version.h"
+#include "keymap_swedish.h"
+
+#define BASE 0 // default layer
+#define SYMB 1 // symbols
+#define MDIA 2 // media keys
+#define ARRW 3 // arrow + soon mouse
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EPRM,
+ VRSN,
+ RGB_SLD
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Keymap 0: Basic layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | ½ | ! | " | # | # | % | Ins | | L1 | & | / | ( | ) | = | ? |
+ * | § | 1 | 2 @ | 3 £ | 4 $ | 5 | | | | 6 | 7 { | 8 [ | 9 ] | 0 } | + \ |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | Tab | Q | W | E | R | T | L2 | | L2 | Y | U | I | O | P | Å |
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | L4 | A | S | D | F | G |------| |------| H | J | K | L |Ö / L3| Ä/L2 |
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| Back | |Forwd |------+------+------+------+------+--------|
+ * | LShift/| Z | X | C | V | B | | | | N | M | ; | : | _ | RShift/|
+ * | ( | | | | | | | | | | | , | . | - | ) |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | '/ | ` |Alt | Left | Right| | Spc | Bksp | AltGr| * | ~/ |
+ * | Ctrl | ' | | | | | | | | | Ctrl |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,---------------.
+ * | <>| | End | | Home | ^ |
+ * ,------|------|------| |------+--------+------.
+ * | Left | Right| PgDn | | PgUp | Up | Down |
+ * |------|------|------| |------|--------|------|
+ * | Ctrl/| Alt/ | | | | Alt/ | Ctrl/|
+ * | Enter| Esc | Lgui | | Lgui | Esc | Enter|
+ * `--------------------' `----------------------'
+ */
+// If it accepts an argument (i.e, is a function), it doesn't need KC_
+// Otherwise, it needs KC_*
+[BASE] = LAYOUT_ergodox_80( // layer 0 : default
+ // left hand
+ NO_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB),
+ MO(ARRW), KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSPO, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_WBAK,
+ CTL_T(NO_APOS), NO_ACUT, KC_LALT, KC_BSPC, KC_SPC,
+ NO_LESS, KC_END,
+ KC_LEFT, KC_RIGHT, KC_PGDN,
+ CTL_T(KC_ENT), ALT_T(KC_ESC), KC_LGUI,
+
+ // right hand
+ TO(ARRW), KC_6, KC_7, KC_8, KC_9, KC_0, NO_PLUS,
+ TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AA,
+ KC_H, KC_J, KC_K, KC_L, LT(MDIA, NO_OSLH), LT(SYMB, NO_AE),
+ KC_WFWD, KC_N, KC_M, KC_COMM, KC_DOT, NO_MINS, KC_RSPC,
+ KC_SPC, KC_BSPC, KC_ALGR, NO_ASTR, CTL_T(NO_TILD),
+ KC_HOME, NO_CIRC,
+ KC_PGUP, KC_UP, KC_DOWN,
+ KC_LGUI, ALT_T(KC_ESC), CTL_T(KC_ENT)
+),
+/* Keymap: Symbol Layer
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * |Version | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | ! | @ | { | } | | | | | | Up | 7 | 8 | 9 | * | F12 |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | # | $ | ( | ) | ` |------| |------| Down | 4 | 5 | 6 | + | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | - | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | | | | | . | 0 | = | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * |------|------|------| |------|------|------|
+ * | | | | | | | |
+ * `--------------------' `--------------------'
+ */
+// SYMBOLS
+[SYMB] = LAYOUT_ergodox_80(
+ // left hand
+ VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______,
+ _______,KC_EXLM,NO_AT, NO_LCBR,NO_RCBR,NO_PIPE,_______,
+ _______,KC_HASH,NO_DLR, NO_LPRN,NO_RPRN,NO_GRV,
+ _______,KC_PERC,NO_CIRC,NO_LBRC,NO_RBRC,NO_TILD,_______,
+ EPRM,_______,_______,_______,_______,
+ _______,_______,
+ _______,_______,_______,
+ _______,_______,_______,
+ // right hand
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, KC_UP, KC_7, KC_8, KC_9, NO_ASTR, KC_F12,
+ KC_DOWN, KC_4, KC_5, KC_6, NO_PLUS, _______,
+ _______, NO_AMPR, KC_1, KC_2, KC_3, NO_MINS, _______,
+ _______,KC_DOT, KC_0, NO_EQL, _______,
+ _______, _______,
+ _______, _______, _______,
+ _______, _______, _______
+),
+
+/* Keymap: Media and mouse keys
+ *
+ * ,--------------------------------------------------. ,--------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------|
+ * | | | MsUp | | | | | | | | | | | | |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | |MsLeft|MsDown|MsRght| | |------| |------| | | | | | Play |
+ * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------|
+ * | | | | | | | | | | | | Prev | Next | | |
+ * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------'
+ * | | | | Lclk | Rclk | |VolUp |VolDn | Mute | | |
+ * `----------------------------------' `----------------------------------'
+ * ,-------------. ,-------------.
+ * | | | | | |
+ * ,------|------|------| |------+------+------.
+ * | | | | | | | |
+ * | |------|------| |------|------|------|
+ * | | | | | | |BrBck |
+ * `--------------------' `--------------------'
+ */
+// MEDIA AND MOUSE
+[MDIA] = LAYOUT_ergodox_80(
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_MS_U, _______, _______, _______, _______,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_BTN1, KC_BTN2,
+ _______, _______,
+ _______, _______, _______,
+ _______, _______, _______,
+ // right hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, KC_MPLY,
+ _______, _______, _______, KC_MPRV, KC_MNXT, _______, _______,
+ KC_VOLU, KC_VOLD, KC_MUTE, _______, _______,
+ _______, _______,
+ _______, _______, _______,
+ _______, _______, KC_WBAK
+),
+ // Keymap: Ducky Style arrows
+[ARRW] = LAYOUT_ergodox_80(
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_UP , _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_DEL, _______,
+ _______, _______,
+ _______, _______, _______,
+ _______, _______, _______,
+ // right hand
+ TO(BASE), _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
+ _______, _______,
+ _______, _______, _______,
+ _______, _______, _______
+),
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [1] = ACTION_LAYER_TAP_TOGGLE(SYMB) // FN1 - Momentary Layer 1 (Symbols)
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ 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.
+ case EPRM:
+ if (record->event.pressed) {
+ eeconfig_init();
+ }
+ return false;
+ break;
+ case VRSN:
+ if (record->event.pressed) {
+ SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION);
+ }
+ return false;
+ break;
+ case RGB_SLD:
+ if (record->event.pressed) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ #endif
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+
+};
+
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+
+ uint8_t layer = biton32(layer_state);
+
+ ergodox_board_led_off();
+ ergodox_right_led_1_off();
+ ergodox_right_led_2_off();
+ ergodox_right_led_3_off();
+ switch (layer) {
+ // Binary: lsb at bottom
+ case 1:
+ ergodox_right_led_3_on();
+ break;
+ case 2:
+ ergodox_right_led_2_on();
+ break;
+ case 3:
+ ergodox_board_led_on();
+ default:
+ // none
+ break;
+ }
+};
diff --git a/keyboards/ergodox_ez/keymaps/skug/readme.md b/keyboards/ergodox_ez/keymaps/skug/readme.md
new file mode 100644
index 000000000..5c155619c
--- /dev/null
+++ b/keyboards/ergodox_ez/keymaps/skug/readme.md
@@ -0,0 +1,4 @@
+# Nordic Qwerty layout for ErgoDox EZ, based on Andreas Lindhe's version
+
+*NOTE:* it might still be desirable to set the software layout to sv_SE in your
+OS.
diff --git a/keyboards/ergodox_ez/keymaps/vim/vim.h b/keyboards/ergodox_ez/keymaps/vim/vim.h
index e9b682fd3..7565c6e3e 100644
--- a/keyboards/ergodox_ez/keymaps/vim/vim.h
+++ b/keyboards/ergodox_ez/keymaps/vim/vim.h
@@ -9,7 +9,6 @@
#define PRESS(keycode) register_code16(keycode)
#define RELEASE(keycode) unregister_code16(keycode)
-#define PREVENT_STUCK_MODIFIERS
uint16_t VIM_QUEUE = KC_NO;
diff --git a/keyboards/ergodox_ez/matrix.c b/keyboards/ergodox_ez/matrix.c
index 2e95c83b6..22837d312 100644
--- a/keyboards/ergodox_ez/matrix.c
+++ b/keyboards/ergodox_ez/matrix.c
@@ -57,6 +57,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* matrix state(1:on, 0:off) */
static matrix_row_t matrix[MATRIX_ROWS];
+/*
+ * matrix state(1:on, 0:off)
+ * contains the raw values without debounce filtering of the last read cycle.
+ */
+static matrix_row_t raw_matrix[MATRIX_ROWS];
// Debouncing: store for each key the number of scans until it's eligible to
// change. When scanning the matrix, ignore any changes in keys that have
@@ -118,6 +123,7 @@ void matrix_init(void)
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
+ raw_matrix[i] = 0;
for (uint8_t j=0; j < MATRIX_COLS; ++j) {
debounce_matrix[i * MATRIX_COLS + j] = 0;
}
@@ -151,26 +157,30 @@ void matrix_power_up(void) {
// Returns a matrix_row_t whose bits are set if the corresponding key should be
// eligible to change in this scan.
-matrix_row_t debounce_mask(uint8_t row) {
+matrix_row_t debounce_mask(matrix_row_t rawcols, uint8_t row) {
matrix_row_t result = 0;
- for (uint8_t j=0; j < MATRIX_COLS; ++j) {
- if (debounce_matrix[row * MATRIX_COLS + j]) {
- --debounce_matrix[row * MATRIX_COLS + j];
+ matrix_row_t change = rawcols ^ raw_matrix[row];
+ raw_matrix[row] = rawcols;
+ for (uint8_t i = 0; i < MATRIX_COLS; ++i) {
+ if (debounce_matrix[row * MATRIX_COLS + i]) {
+ --debounce_matrix[row * MATRIX_COLS + i];
} else {
- result |= (1 << j);
+ result |= (1 << i);
}
- }
- return result;
-}
-
-// Report changed keys in the given row. Resets the debounce countdowns
-// corresponding to each set bit in 'change' to DEBOUNCE.
-void debounce_report(matrix_row_t change, uint8_t row) {
- for (uint8_t i = 0; i < MATRIX_COLS; ++i) {
if (change & (1 << i)) {
debounce_matrix[row * MATRIX_COLS + i] = DEBOUNCE;
}
}
+ return result;
+}
+
+matrix_row_t debounce_read_cols(uint8_t row) {
+ // Read the row without debouncing filtering and store it for later usage.
+ matrix_row_t cols = read_cols(row);
+ // Get the Debounce mask.
+ matrix_row_t mask = debounce_mask(cols, row);
+ // debounce the row and return the result.
+ return (cols & mask) | (matrix[row] & ~mask);;
}
uint8_t matrix_scan(void)
@@ -214,15 +224,12 @@ uint8_t matrix_scan(void)
select_row(i + MATRIX_ROWS_PER_SIDE);
// we don't need a 30us delay anymore, because selecting a
// left-hand row requires more than 30us for i2c.
- matrix_row_t mask = debounce_mask(i);
- matrix_row_t cols = (read_cols(i) & mask) | (matrix[i] & ~mask);
- debounce_report(cols ^ matrix[i], i);
- matrix[i] = cols;
+
+ // grab cols from left hand
+ matrix[i] = debounce_read_cols(i);
// grab cols from right hand
- mask = debounce_mask(i + MATRIX_ROWS_PER_SIDE);
- cols = (read_cols(i + MATRIX_ROWS_PER_SIDE) & mask) | (matrix[i + MATRIX_ROWS_PER_SIDE] & ~mask);
- debounce_report(cols ^ matrix[i + MATRIX_ROWS_PER_SIDE], i + MATRIX_ROWS_PER_SIDE);
- matrix[i + MATRIX_ROWS_PER_SIDE] = cols;
+ matrix[i + MATRIX_ROWS_PER_SIDE] = debounce_read_cols(i + MATRIX_ROWS_PER_SIDE);
+
unselect_rows();
}
@@ -379,7 +386,7 @@ static void select_row(uint8_t row)
break;
case 11:
DDRD |= (1<<2);
- PORTD &= ~(1<<3);
+ PORTD &= ~(1<<2);
break;
case 12:
DDRD |= (1<<3);
@@ -392,4 +399,3 @@ static void select_row(uint8_t row)
}
}
}
-
diff --git a/keyboards/ergodox_ez/rules.mk b/keyboards/ergodox_ez/rules.mk
index dfbdba10d..446ba3e21 100644
--- a/keyboards/ergodox_ez/rules.mk
+++ b/keyboards/ergodox_ez/rules.mk
@@ -15,8 +15,7 @@
#----------------------------------------------------------------------------
# # project specific files
-SRC = matrix.c \
- i2c_master.c
+SRC += matrix.c
# MCU name
MCU = atmega32u4
@@ -83,6 +82,11 @@ SWAP_HANDS_ENABLE= yes # Allow swapping hands of keyboard
SLEEP_LED_ENABLE = no
API_SYSEX_ENABLE = no
RGBLIGHT_ENABLE = yes
-RGB_MATRIX_ENABLE = no // enable later
+RGB_MATRIX_ENABLE = no # enable later
+
+ifeq ($(strip $(RGB_MATRIX_ENABLE)), no)
+ SRC += i2c_master.c
+endif
+
LAYOUTS = ergodox
diff --git a/keyboards/ergodox_infinity/keymaps/gordon/config.h b/keyboards/ergodox_infinity/keymaps/gordon/config.h
index 88d495b12..772ce0bac 100644
--- a/keyboards/ergodox_infinity/keymaps/gordon/config.h
+++ b/keyboards/ergodox_infinity/keymaps/gordon/config.h
@@ -15,8 +15,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#define PREVENT_STUCK_MODIFIERS
-
#undef IGNORE_MOD_TAP_INTERRUPT
#define IGNORE_MOD_TAP_INTERRUPT
diff --git a/keyboards/ergodox_infinity/keymaps/input_club/keymap.c b/keyboards/ergodox_infinity/keymaps/input_club/keymap.c
index e77319d2c..45ad1f51f 100644
--- a/keyboards/ergodox_infinity/keymaps/input_club/keymap.c
+++ b/keyboards/ergodox_infinity/keymaps/input_club/keymap.c
@@ -93,7 +93,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | |
* +-----+-----+-----+
*/
- KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TRNS,
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
@@ -120,7 +120,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | |
* +-----+-----+-----+
*/
- KC_TRNS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
+ KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_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/ergodox_infinity/keymaps/narze/config.h b/keyboards/ergodox_infinity/keymaps/narze/config.h
index 8174edd35..551327a12 100644
--- a/keyboards/ergodox_infinity/keymaps/narze/config.h
+++ b/keyboards/ergodox_infinity/keymaps/narze/config.h
@@ -13,7 +13,6 @@
#define IGNORE_MOD_TAP_INTERRUPT
#define PERMISSIVE_HOLD
-#define PREVENT_STUCK_MODIFIERS
#undef MOUSEKEY_DELAY
#define MOUSEKEY_DELAY 100
diff --git a/keyboards/ergodox_infinity/keymaps/narze/rules.mk b/keyboards/ergodox_infinity/keymaps/narze/rules.mk
index 7d2e00d0e..bd89bb9d9 100644
--- a/keyboards/ergodox_infinity/keymaps/narze/rules.mk
+++ b/keyboards/ergodox_infinity/keymaps/narze/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+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/ergodox_infinity/keymaps/not-quite-neo/rules.mk b/keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk
index 75624bb8c..74505bd69 100644
--- a/keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk
+++ b/keyboards/ergodox_infinity/keymaps/not-quite-neo/rules.mk
@@ -1,2 +1,3 @@
BACKLIGHT_ENABLE = yes
-UNICODE_ENABLE = yes \ No newline at end of file
+UNICODE_ENABLE = yes
+LEADER_ENABLE = yes
diff --git a/keyboards/ergodox_infinity/matrix.c b/keyboards/ergodox_infinity/matrix.c
index 3baa07f58..3a0a17928 100644
--- a/keyboards/ergodox_infinity/matrix.c
+++ b/keyboards/ergodox_infinity/matrix.c
@@ -44,14 +44,14 @@ static uint16_t debouncing_time = 0;
void matrix_init(void)
{
- /* Column(sense) */
+ /* Row(sense) */
palSetPadMode(GPIOD, 1, PAL_MODE_INPUT_PULLDOWN);
palSetPadMode(GPIOD, 4, PAL_MODE_INPUT_PULLDOWN);
palSetPadMode(GPIOD, 5, PAL_MODE_INPUT_PULLDOWN);
palSetPadMode(GPIOD, 6, PAL_MODE_INPUT_PULLDOWN);
palSetPadMode(GPIOD, 7, PAL_MODE_INPUT_PULLDOWN);
- /* Row(strobe) */
+ /* Column(strobe) */
palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOB, 3, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOB, 18, PAL_MODE_OUTPUT_PUSHPULL);
diff --git a/keyboards/ergoinu/config.h b/keyboards/ergoinu/config.h
new file mode 100644
index 000000000..de72635b1
--- /dev/null
+++ b/keyboards/ergoinu/config.h
@@ -0,0 +1,114 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Takuya Urakawa<twitter:@hsgw>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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"
+#include <serial_config.h>
+
+/* USB Device descriptor parameter
+ VID & PID are lisenced from microchip sublisence program, Don't use other project! */
+#define VENDOR_ID 0x04D8
+#define PRODUCT_ID 0xEE60
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Dm9Records
+#define PRODUCT ergoinu
+#define DESCRIPTION An (Not Portable But Small) Ergonomic split keyboard
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 100
+
+#define USE_SERIAL
+
+/* Select hand configuration */
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_ROW_PINS { F6, F7, B1, B3, B2 }
+
+// wiring of each half
+#define MATRIX_COLS 7
+#define MATRIX_COL_PINS { B4, E6, D7, C6, D4, F5, F4 }
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN B6
+
+#define RGBLED_NUM 7
+
+#ifndef IOS_DEVICE_ENABLE
+ #if RGBLED_NUM <= 7
+ #define RGBLIGHT_LIMIT_VAL 255
+ #define RGBLIGHT_VAL_STEP 17
+ #endif
+#else
+ #define RGBLIGHT_LIMIT_VAL 90
+ #define RGBLIGHT_VAL_STEP 4
+#endif
+
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
+ #define USB_MAX_POWER_CONSUMPTION 500
+#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/ergoinu/ergoinu.c b/keyboards/ergoinu/ergoinu.c
new file mode 100644
index 000000000..b43ab17c8
--- /dev/null
+++ b/keyboards/ergoinu/ergoinu.c
@@ -0,0 +1,5 @@
+#include "ergoinu.h"
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+};
diff --git a/keyboards/ergoinu/ergoinu.h b/keyboards/ergoinu/ergoinu.h
new file mode 100644
index 000000000..43249a844
--- /dev/null
+++ b/keyboards/ergoinu/ergoinu.h
@@ -0,0 +1,44 @@
+/*
+Copyright 2018 Takuya Urakawa<twitter:@hsgw>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#ifdef RGBLIGHT_ENABLE
+#include "ws2812.h"
+#endif
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L07, L08, L09, L10, L11, L12, L13, R07, R08, R09, R10, R11, R12, R13, \
+ L14, L15, L16, L17, L18, L19, R14, R15, R16, R17, R18, R19, R20, \
+ L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, R27,\
+ L26, L27, L28, L29, L30, R28, R29, R30, R31, R32 \
+ ) { \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L07, L08, L09, L10, L11, L12, L13 }, \
+ { L14, KC_NO, L15, L16, L17, L18, L19 }, \
+ { L20, KC_NO, L21, L22, L23, L24, L25 }, \
+ { KC_NO, KC_NO, L26, L27, L28, L29, L30}, \
+ { R06, R05, R04, R03, R02, R01, R00 }, \
+ { R13, R12, R11, R10, R09, R08, R07 }, \
+ { R20, R19, R18, R17, R16, R15, R14 }, \
+ { R27, R26, R25, R24, R23, R22, R21 }, \
+ { KC_NO, KC_NO, R32, R31, R30, R29, R28 } \
+ }
+
diff --git a/keyboards/ergoinu/info.json b/keyboards/ergoinu/info.json
new file mode 100644
index 000000000..81f53fd25
--- /dev/null
+++ b/keyboards/ergoinu/info.json
@@ -0,0 +1,87 @@
+{
+ "keyboard_name": "Ergoinu",
+ "url": "",
+ "maintainer": "hsgw",
+ "width": 18,
+ "height": 5.4,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 64,
+ "layout": [
+ { "x": 0, "y": 0.6, "label": "ESC" },
+ { "x": 1, "y": 0.4, "label": "1" },
+ { "x": 2, "y": 0.4, "label": "2" },
+ { "x": 3, "y": 0.25, "label": "3" },
+ { "x": 4, "y": 0, "label": "4" },
+ { "x": 5, "y": 0.25, "label": "5" },
+ { "x": 6, "y": 0.4, "label": "6" },
+
+ { "x": 11, "y": 0.4, "label": "7" },
+ { "x": 12, "y": 0.25, "label": "8" },
+ { "x": 13, "y": 0, "label": "9" },
+ { "x": 14, "y": 0.25, "label": "0" },
+ { "x": 15, "y": 0.4, "label": "MINUS" },
+ { "x": 16, "y": 0.4, "label": "EQUAL" },
+ { "x": 17, "y": 0.6, "label": "BACKSLASH" },
+
+ { "x": 0, "y": 1.6, "label": "DELETE" },
+ { "x": 1, "y": 1.4, "label": "TAB" },
+ { "x": 2, "y": 1.4, "label": "Q" },
+ { "x": 3, "y": 1.25, "label": "W" },
+ { "x": 4, "y": 1, "label": "E" },
+ { "x": 5, "y": 1.25, "label": "R" },
+ { "x": 6, "y": 1.4, "label": "T" },
+
+ { "x": 11, "y": 1.4, "label": "Y" },
+ { "x": 12, "y": 1.25, "label": "U" },
+ { "x": 13, "y": 1, "label": "I" },
+ { "x": 14, "y": 1.25, "label": "O" },
+ { "x": 15, "y": 1.4, "label": "P" },
+ { "x": 16, "y": 1.4, "label": "LBRACKET" },
+ { "x": 17, "y": 1.6, "label": "RBRACKET" },
+
+ { "x": 0.25, "y": 2.6, "w": 1.75, "label": "LCTRL" },
+ { "x": 2, "y": 2.4, "label": "A" },
+ { "x": 3, "y": 2.25, "label": "S" },
+ { "x": 4, "y": 2, "label": "D" },
+ { "x": 5, "y": 2.25, "label": "F" },
+ { "x": 6, "y": 2.4, "label": "G" },
+
+ { "x": 11, "y": 2.4, "label": "H" },
+ { "x": 12, "y": 2.25, "label": "J" },
+ { "x": 13, "y": 2, "label": "K" },
+ { "x": 14, "y": 2.25, "label": "L" },
+ { "x": 15, "y": 2.4, "label": "SEMICOLON" },
+ { "x": 16, "y": 2.4, "label": "QUOTE" },
+ { "x": 17, "y": 2.6, "label": "GRAVE" },
+
+ { "x": 0.25, "y": 3.6, "w": 1.75, "label": "LSHIFT" },
+ { "x": 2, "y": 3.4, "label": "Z" },
+ { "x": 3, "y": 3.25, "label": "X" },
+ { "x": 4, "y": 3, "label": "C" },
+ { "x": 5, "y": 3.25, "label": "V" },
+ { "x": 6, "y": 3.4, "label": "B" },
+
+ { "x": 11, "y": 3.4, "label": "N" },
+ { "x": 12, "y": 3.25, "label": "M" },
+ { "x": 13, "y": 3, "label": "COMMA" },
+ { "x": 14, "y": 3.25, "label": "DOT" },
+ { "x": 15, "y": 3.4, "label": "SLASH" },
+ { "x": 16, "y": 3.4, "label": "RSHIFT" },
+ { "x": 17, "y": 3.6, "label": "RSHIFT" },
+
+ { "x": 3, "y": 4.25, "label": "MO(META)" },
+ { "x": 4, "y": 4, "label": "LALT" },
+ { "x": 5, "y": 4.25, "label": "LGUI" },
+ { "x": 6, "y": 4.4, "label": "ENT" },
+ { "x": 7, "y": 4.4, "w": 1.5, "label": "SPACE" },
+
+ { "x": 9.5, "y": 4.4, "w": 1.5, "label": "ENTER" },
+ { "x": 11, "y": 4.4, "label": "BACKSPACE" },
+ { "x": 12, "y": 4.25, "label": "RGUI" },
+ { "x": 13, "y": 4, "label": "RALT" },
+ { "x": 14, "y": 4.25, "label": "MO(META)" }
+ ]
+ }
+ }
+}
diff --git a/keyboards/ergoinu/keymaps/default/config.h b/keyboards/ergoinu/keymaps/default/config.h
new file mode 100644
index 000000000..bb266f25e
--- /dev/null
+++ b/keyboards/ergoinu/keymaps/default/config.h
@@ -0,0 +1,24 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Takuya Urakawa <Twitter:@hsgw>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/ergoinu/keymaps/default/keymap.c b/keyboards/ergoinu/keymaps/default/keymap.c
new file mode 100644
index 000000000..7f1be4796
--- /dev/null
+++ b/keyboards/ergoinu/keymaps/default/keymap.c
@@ -0,0 +1,101 @@
+#include QMK_KEYBOARD_H
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+#define JA_CLON KC_QUOT // : and +
+#define JA_AT KC_LBRC // @ and `
+#define JA_HAT KC_EQL // ^ and ~
+#define JA_ENUN KC_RO // \ and _ (EN mark and UNder score)
+#define JA_ENVL KC_JYEN // \ and | (EN mark and Vertical Line)
+#define JA_LBRC KC_RBRC // [ and {
+#define JA_RBRC KC_BSLS // ] and }
+
+enum LAYER_NO {
+ BASE = 0,
+ META,
+ CONF
+};
+
+enum CUSTOM_KEYCODES {
+ RGB_RST = SAFE_RANGE,
+ RGB_TYPE,
+};
+
+// Fillers to make layering more clear
+#define ______ KC_TRNS
+#define XXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [BASE] = LAYOUT( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, \
+ KC_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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_GRV, \
+ 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, \
+ MO(META),KC_LALT, KC_LGUI, KC_ENT, KC_SPC, KC_ENT, KC_BSPC, KC_RGUI, KC_RALT, MO(META) \
+ ),
+
+ [META] = LAYOUT( \
+ MO(CONF),KC_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_SLCK, KC_PSCR, KC_HOME, KC_END, \
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_PAUS, KC_PGUP, KC_UP, KC_PGDN, \
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_LEFT, KC_DOWN, KC_RGHT, \
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______ \
+ ),
+ [CONF] = LAYOUT( \
+ ______, RGB_TYPE,RGB_MOD, RGB_VAI, RGB_HUI, RGB_HUI, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, \
+ RGB_RST, RGB_TOG, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_HUD, 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, XXXXXX, XXXXXX, XXXXXX, XXXXXX \
+ )
+};
+
+bool enableLEDTypeAnime = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case RGB_RST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ }
+ #endif
+ break;
+ case RGB_MOD:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ enableLEDTypeAnime = false;
+ rgblight_step();
+ }
+ #endif
+ return false;
+ case RGB_TYPE:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ rgblight_enable_noeeprom();
+ rgblight_mode_noeeprom(1);
+ enableLEDTypeAnime = !enableLEDTypeAnime;
+ }
+ #endif
+ return false;
+ default:
+ break;
+ }
+ #ifdef RGBLIGHT_ENABLE
+ if(enableLEDTypeAnime) {
+ rgblight_mode_noeeprom(1);
+ uint16_t hue = (rgblight_config.hue + 5) % 360;
+ rgblight_sethsv_noeeprom(hue, rgblight_config.sat, rgblight_config.val);
+ }
+ #endif
+
+ return true;
+}
+
+void matrix_init_user(void) {
+}
diff --git a/keyboards/ergoinu/keymaps/default/rules.mk b/keyboards/ergoinu/keymaps/default/rules.mk
new file mode 100644
index 000000000..92dde90ff
--- /dev/null
+++ b/keyboards/ergoinu/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
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# ergoinu configs
+DISABLE_PROMICRO_LEDs = yes
+
+# Uncomment these for debugging
+# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
+# $(info -- OPT_DEFS=$(OPT_DEFS))
+# $(info )
diff --git a/keyboards/ergoinu/keymaps/default_jis/config.h b/keyboards/ergoinu/keymaps/default_jis/config.h
new file mode 100644
index 000000000..bb266f25e
--- /dev/null
+++ b/keyboards/ergoinu/keymaps/default_jis/config.h
@@ -0,0 +1,24 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Takuya Urakawa <Twitter:@hsgw>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/ergoinu/keymaps/default_jis/keymap.c b/keyboards/ergoinu/keymaps/default_jis/keymap.c
new file mode 100644
index 000000000..3a1a88f47
--- /dev/null
+++ b/keyboards/ergoinu/keymaps/default_jis/keymap.c
@@ -0,0 +1,101 @@
+#include QMK_KEYBOARD_H
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+#define JA_CLON KC_QUOT // : and +
+#define JA_AT KC_LBRC // @ and `
+#define JA_HAT KC_EQL // ^ and ~
+#define JA_ENUN KC_RO // \ and _ (EN mark and UNder score)
+#define JA_ENVL KC_JYEN // \ and | (EN mark and Vertical Line)
+#define JA_LBRC KC_RBRC // [ and {
+#define JA_RBRC KC_BSLS // ] and }
+
+enum LAYER_NO {
+ BASE = 0,
+ META,
+ CONF
+};
+
+enum CUSTOM_KEYCODES {
+ RGB_RST = SAFE_RANGE,
+ RGB_TYPE,
+};
+
+// Fillers to make layering more clear
+#define ______ KC_TRNS
+#define XXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [BASE] = LAYOUT( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, JA_HAT, KC_JYEN, \
+ KC_DEL, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JA_AT, JA_LBRC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, JA_CLON, JA_RBRC, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, \
+ MO(META),KC_LALT, KC_ZKHK, KC_BSPC, KC_SPC, KC_ENT, KC_BSPC, KC_MHEN, KC_KANA, MO(META) \
+ ),
+
+
+ [META] = LAYOUT( \
+ MO(CONF),KC_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_UP, ______, ______, ______, ______, ______, ______, KC_SLCK, KC_PSCR, KC_HOME, KC_END, \
+ ______, KC_LEFT, KC_DOWN, KC_RGHT, ______, ______, ______, ______, ______, KC_PAUS, KC_PGUP, KC_UP, KC_PGDN, \
+ ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, KC_LEFT, KC_DOWN, KC_RGHT, \
+ ______, ______, KC_RGUI, KC_DEL, KC_ENT, ______, KC_DEL, KC_HENK, KC_LGUI, ______ \
+ ),
+ [CONF] = LAYOUT( \
+ ______, RGB_TYPE,RGB_MOD, RGB_VAI, RGB_HUI, RGB_HUI, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, XXXXXX, \
+ RGB_RST, RGB_TOG, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_HUD, 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, XXXXXX, XXXXXX, XXXXXX, XXXXXX \
+ )
+};
+
+bool enableLEDTypeAnime = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case RGB_RST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ }
+ #endif
+ break;
+ case RGB_MOD:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ enableLEDTypeAnime = false;
+ rgblight_step();
+ }
+ #endif
+ return false;
+ case RGB_TYPE:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ rgblight_enable_noeeprom();
+ rgblight_mode_noeeprom(1);
+ enableLEDTypeAnime = !enableLEDTypeAnime;
+ }
+ #endif
+ return false;
+ default:
+ break;
+ }
+ #ifdef RGBLIGHT_ENABLE
+ if(enableLEDTypeAnime) {
+ rgblight_mode_noeeprom(1);
+ uint16_t hue = (rgblight_config.hue + 5) % 360;
+ rgblight_sethsv_noeeprom(hue, rgblight_config.sat, rgblight_config.val);
+ }
+ #endif
+ return true;
+}
+
+void matrix_init_user(void) {
+}
diff --git a/keyboards/ergoinu/keymaps/default_jis/rules.mk b/keyboards/ergoinu/keymaps/default_jis/rules.mk
new file mode 100644
index 000000000..92dde90ff
--- /dev/null
+++ b/keyboards/ergoinu/keymaps/default_jis/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
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# ergoinu configs
+DISABLE_PROMICRO_LEDs = yes
+
+# Uncomment these for debugging
+# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
+# $(info -- OPT_DEFS=$(OPT_DEFS))
+# $(info )
diff --git a/keyboards/ergoinu/matrix.c b/keyboards/ergoinu/matrix.c
new file mode 100644
index 000000000..92c95e335
--- /dev/null
+++ b/keyboards/ergoinu/matrix.c
@@ -0,0 +1,303 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <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 "serial.h"
+
+// from pro_micro.h
+#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0)
+
+#ifndef DISABLE_PROMICRO_LEDs
+ #define TXLED0 PORTD |= (1<<5)
+ #define TXLED1 PORTD &= ~(1<<5)
+ #define RXLED0 PORTB |= (1<<0)
+ #define RXLED1 PORTB &= ~(1<<0)
+#else
+ #define TXLED0
+ #define TXLED1
+ #define RXLED0
+ #define RXLED1
+#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;
+
+ #ifdef DISABLE_PROMICRO_LEDs
+ PORTD |= (1<<5);
+ PORTB |= (1<<0);
+ #endif
+
+ // 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;
+}
+
+int serial_transaction(void) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+ int ret=serial_update_buffers();
+ if (ret ) {
+ if(ret==2)RXLED1;
+ return 1;
+ }
+RXLED0;
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[slaveOffset+i] = serial_slave_buffer[i];
+ }
+ return 0;
+}
+
+uint8_t matrix_scan(void) {
+ if (is_master) {
+ matrix_master_scan();
+ }else{
+ matrix_slave_scan();
+
+// if(serial_slave_DATA_CORRUPT()){
+// TXLED0;
+ int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[offset+i] = serial_master_buffer[i];
+ }
+
+// }else{
+// TXLED1;
+// }
+
+ matrix_scan_quantum();
+ }
+ return 1;
+}
+
+
+uint8_t matrix_master_scan(void) {
+
+ int ret = _matrix_scan();
+
+ int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ serial_master_buffer[i] = matrix[offset+i];
+ }
+
+ if( serial_transaction() ) {
+ // 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;
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ serial_slave_buffer[i] = matrix[offset+i];
+ }
+}
+
+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/ergoinu/readme.md b/keyboards/ergoinu/readme.md
new file mode 100644
index 000000000..a0d1c18a2
--- /dev/null
+++ b/keyboards/ergoinu/readme.md
@@ -0,0 +1,21 @@
+ErgoInu
+===
+
+![ergoinu](https://i.imgur.com/4CCM8Vl.jpg)
+
+An (Not Portable But Small) Ergonomic Split Keyboard.
+
+Keyboard Maintainer: [hsgw](https://github.com/hsgw/) [twitter](https://twitter.com/hsgw)
+Hardware Supported: Pro Micro
+Hardware Availability & Repository: [https://github.com/hsgw/ergoinu](https://github.com/hsgw/ergoinu)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ergoinu:default
+
+ (or)
+
+ make ergoinu:default_jis
+
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/ergoinu/rules.mk b/keyboards/ergoinu/rules.mk
new file mode 100644
index 000000000..de4bcad52
--- /dev/null
+++ b/keyboards/ergoinu/rules.mk
@@ -0,0 +1,84 @@
+SRC += matrix.c serial.c split_util.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 # i2c is not supported
+# 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 = ergoinu
+
+# ergoinu configs
+DISABLE_PROMICRO_LEDs = yes
+
+ifneq ($(strip $(ERGOINU)),)
+ ifeq ($(findstring promicroled, $(ERGOINU)), promicroled)
+ DISABLE_PROMICRO_LEDs = no
+ endif
+endif
+
+ifeq ($(strip $(DISABLE_PROMICRO_LEDs)), yes)
+ OPT_DEFS += -DDISABLE_PROMICRO_LEDs
+endif
diff --git a/keyboards/ergoinu/serial.c b/keyboards/ergoinu/serial.c
new file mode 100644
index 000000000..591941587
--- /dev/null
+++ b/keyboards/ergoinu/serial.c
@@ -0,0 +1,295 @@
+/*
+ * WARNING: be careful changing this code, it is very timing dependent
+ */
+
+#ifndef F_CPU
+#define F_CPU 16000000
+#endif
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <stdbool.h>
+#include "serial.h"
+
+#ifdef USE_SERIAL
+
+#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
+
+// Serial pulse period in microseconds.
+#define SELECT_SERIAL_SPEED 1
+#if SELECT_SERIAL_SPEED == 0
+ // Very High speed
+ #define SERIAL_DELAY 4 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 1
+ // High speed
+ #define SERIAL_DELAY 6 // micro sec
+ #define READ_WRITE_START_ADJUST 23 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 2
+ // Middle speed
+ #define SERIAL_DELAY 12 // micro sec
+ #define READ_WRITE_START_ADJUST 25 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 3
+ // Low speed
+ #define SERIAL_DELAY 24 // micro sec
+ #define READ_WRITE_START_ADJUST 25 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 4
+ // Very Low speed
+ #define SERIAL_DELAY 50 // micro sec
+ #define READ_WRITE_START_ADJUST 25 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#else
+#error Illegal Serial Speed
+#endif
+
+
+#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2)
+#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2)
+
+#define SLAVE_INT_WIDTH 1
+#define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY
+
+uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
+uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
+
+#define SLAVE_DATA_CORRUPT (1<<0)
+volatile uint8_t status = 0;
+
+inline static
+void serial_delay(void) {
+ _delay_us(SERIAL_DELAY);
+}
+
+inline static
+void serial_delay_half1(void) {
+ _delay_us(SERIAL_DELAY_HALF1);
+}
+
+inline static
+void serial_delay_half2(void) {
+ _delay_us(SERIAL_DELAY_HALF2);
+}
+
+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) {
+ SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
+ SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+inline static
+uint8_t serial_read_pin(void) {
+ return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
+}
+
+inline static
+void serial_low(void) {
+ SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
+}
+
+inline static
+void serial_high(void) {
+ SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+void serial_master_init(void) {
+ serial_output();
+ serial_high();
+}
+
+void serial_slave_init(void) {
+ serial_input_with_pullup();
+
+#if SERIAL_PIN_MASK == _BV(PD0)
+ // Enable INT0
+ EIMSK |= _BV(INT0);
+ // Trigger on falling edge of INT0
+ EICRA &= ~(_BV(ISC00) | _BV(ISC01));
+#elif SERIAL_PIN_MASK == _BV(PD2)
+ // Enable INT2
+ EIMSK |= _BV(INT2);
+ // Trigger on falling edge of INT2
+ EICRA &= ~(_BV(ISC20) | _BV(ISC21));
+#else
+ #error unknown SERIAL_PIN_MASK value
+#endif
+}
+
+// Used by the sender to synchronize timing with the reciver.
+static
+void sync_recv(void) {
+ for (int i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
+ }
+ // This shouldn't hang if the slave disconnects because the
+ // serial line will float to high if the slave does disconnect.
+ while (!serial_read_pin());
+}
+
+// Used by the reciver to send a synchronization signal to the sender.
+static
+void sync_send(void) {
+ serial_low();
+ serial_delay();
+ serial_high();
+}
+
+// Reads a byte from the serial line
+static
+uint8_t serial_read_byte(void) {
+ uint8_t byte = 0;
+ _delay_sub_us(READ_WRITE_START_ADJUST);
+ for ( uint8_t i = 0; i < 8; ++i) {
+ serial_delay_half1(); // read the middle of pulses
+ byte = (byte << 1) | serial_read_pin();
+ _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
+ serial_delay_half2();
+ }
+ return byte;
+}
+
+// Sends a byte with MSB ordering
+static
+void serial_write_byte(uint8_t data) {
+ uint8_t b = 1<<7;
+ while( b ) {
+ if(data & b) {
+ serial_high();
+ } else {
+ serial_low();
+ }
+ b >>= 1;
+ serial_delay();
+ }
+ serial_low(); // sync_send() / senc_recv() need raise edge
+}
+
+// interrupt handle to be used by the slave device
+ISR(SERIAL_PIN_INTERRUPT) {
+ serial_output();
+
+ // slave send phase
+ uint8_t checksum = 0;
+ for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
+ sync_send();
+ serial_write_byte(serial_slave_buffer[i]);
+ checksum += serial_slave_buffer[i];
+ }
+ sync_send();
+ serial_write_byte(checksum);
+
+ // slave switch to input
+ sync_send(); //0
+ serial_delay_half1(); //1
+ serial_low(); //2
+ serial_input_with_pullup(); //2
+ serial_delay_half1(); //3
+
+ // slave recive phase
+ uint8_t checksum_computed = 0;
+ for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
+ sync_recv();
+ serial_master_buffer[i] = serial_read_byte();
+ checksum_computed += serial_master_buffer[i];
+ }
+ sync_recv();
+ uint8_t checksum_received = serial_read_byte();
+
+ if ( checksum_computed != checksum_received ) {
+ status |= SLAVE_DATA_CORRUPT;
+ } else {
+ status &= ~SLAVE_DATA_CORRUPT;
+ }
+
+ sync_recv(); //weit master output to high
+}
+
+inline
+bool serial_slave_DATA_CORRUPT(void) {
+ return status & SLAVE_DATA_CORRUPT;
+}
+
+// Copies the serial_slave_buffer to the master and sends the
+// serial_master_buffer to the slave.
+//
+// Returns:
+// 0 => no error
+// 1 => slave did not respond
+// 2 => checksum error
+int serial_update_buffers(void) {
+ // this code is very time dependent, so we need to disable interrupts
+ cli();
+
+ // signal to the slave that we want to start a transaction
+ serial_output();
+ serial_low();
+ _delay_us(SLAVE_INT_WIDTH);
+
+ // wait for the slaves response
+ serial_input_with_pullup();
+ _delay_us(SLAVE_INT_RESPONSE_TIME);
+
+ // check if the slave is present
+ if (serial_read_pin()) {
+ // slave failed to pull the line low, assume not present
+ serial_output();
+ serial_high();
+ sei();
+ return 1;
+ }
+
+ // master recive phase
+ // if the slave is present syncronize with it
+
+ uint8_t checksum_computed = 0;
+ // receive data from the slave
+ for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
+ sync_recv();
+ serial_slave_buffer[i] = serial_read_byte();
+ checksum_computed += serial_slave_buffer[i];
+ }
+ sync_recv();
+ uint8_t checksum_received = serial_read_byte();
+
+ if (checksum_computed != checksum_received) {
+ serial_output();
+ serial_high();
+ sei();
+ return 2;
+ }
+
+ // master switch to output
+ sync_recv(); //0
+ serial_delay(); //1
+ serial_low(); //3
+ serial_output(); // 3
+ serial_delay_half1(); //4
+
+ // master send phase
+ uint8_t checksum = 0;
+
+ for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
+ sync_send();
+ serial_write_byte(serial_master_buffer[i]);
+ checksum += serial_master_buffer[i];
+ }
+ sync_send();
+ serial_write_byte(checksum);
+
+ // always, release the line when not in use
+ sync_send();
+
+ sei();
+ return 0;
+}
+
+#endif
diff --git a/keyboards/ergoinu/serial.h b/keyboards/ergoinu/serial.h
new file mode 100644
index 000000000..67cf06ac6
--- /dev/null
+++ b/keyboards/ergoinu/serial.h
@@ -0,0 +1,24 @@
+#pragma once
+
+#include <stdbool.h>
+
+// ////////////////////////////////////////////
+// Need Soft Serial defines in serial_config.h
+// ////////////////////////////////////////////
+// ex.
+// #define SERIAL_PIN_DDR DDRD
+// #define SERIAL_PIN_PORT PORTD
+// #define SERIAL_PIN_INPUT PIND
+// #define SERIAL_PIN_MASK _BV(PD?) ?=0,2
+// #define SERIAL_PIN_INTERRUPT INT?_vect ?=0,2
+// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+// #define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+// Buffers for master - slave communication
+extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
+extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+
+void serial_master_init(void);
+void serial_slave_init(void);
+int serial_update_buffers(void);
+bool serial_slave_data_corrupt(void);
diff --git a/keyboards/ergoinu/serial_config.h b/keyboards/ergoinu/serial_config.h
new file mode 100644
index 000000000..a16db684c
--- /dev/null
+++ b/keyboards/ergoinu/serial_config.h
@@ -0,0 +1,11 @@
+#pragma once
+
+/* Soft Serial defines */
+#define SERIAL_PIN_DDR DDRD
+#define SERIAL_PIN_PORT PORTD
+#define SERIAL_PIN_INPUT PIND
+#define SERIAL_PIN_MASK _BV(PD2)
+#define SERIAL_PIN_INTERRUPT INT2_vect
+
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
diff --git a/keyboards/ergoinu/split_util.c b/keyboards/ergoinu/split_util.c
new file mode 100644
index 000000000..0cbc2c69c
--- /dev/null
+++ b/keyboards/ergoinu/split_util.c
@@ -0,0 +1,56 @@
+#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"
+
+#include "serial.h"
+
+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) {
+ serial_master_init();
+}
+
+static void keyboard_slave_setup(void) {
+ serial_slave_init();
+}
+
+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/ergoinu/split_util.h b/keyboards/ergoinu/split_util.h
new file mode 100644
index 000000000..11cfd5455
--- /dev/null
+++ b/keyboards/ergoinu/split_util.h
@@ -0,0 +1,12 @@
+#pragma once
+
+#include <stdbool.h>
+#include "eeconfig.h"
+
+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);
diff --git a/keyboards/ergotravel/config.h b/keyboards/ergotravel/config.h
index beda546a0..213080181 100644
--- a/keyboards/ergotravel/config.h
+++ b/keyboards/ergotravel/config.h
@@ -15,76 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef REV1_CONFIG_H
-#define REV1_CONFIG_H
+#pragma once
-#include QMK_KEYBOARD_CONFIG_H
+#include "config_common.h"
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xCEEB
-#define PRODUCT_ID 0x1256
-#define DEVICE_VER 0x0100
-#define MANUFACTURER JPConstantineau.com
-#define PRODUCT ErgoTravel Keyboard
-#define DESCRIPTION Split 45 percent ergonomic keyboard
-
-/* key matrix size */
-// Rows are doubled-up
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 7
-
-// wiring of each half
-#define MATRIX_ROW_PINS { C6, D7, E6, B4 }
-#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6 }
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-// #define BACKLIGHT_LEVELS 3
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-#define BACKLIGHT_PIN B5
-#define BACKLIGHT_LEVELS 5
-
-/* ws2812 RGB LED */
-#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
-#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
-
-/*
- * 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
-
-#endif
diff --git a/keyboards/ergotravel/ergotravel.h b/keyboards/ergotravel/ergotravel.h
index 10bc4e2bb..7201db788 100644
--- a/keyboards/ergotravel/ergotravel.h
+++ b/keyboards/ergotravel/ergotravel.h
@@ -1,5 +1,4 @@
-#ifndef ERGOTRAVEL_H
-#define ERGOTRAVEL_H
+#pragma once
#ifdef KEYBOARD_ergotravel_rev1
#include "rev1.h"
@@ -21,4 +20,3 @@
KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \
)
-#endif \ No newline at end of file
diff --git a/keyboards/ergotravel/i2c.h b/keyboards/ergotravel/i2c.h
deleted file mode 100644
index 43e596988..000000000
--- a/keyboards/ergotravel/i2c.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef I2C_H
-#define I2C_H
-
-#include <stdint.h>
-
-#ifndef F_CPU
-#define F_CPU 16000000UL
-#endif
-
-#define I2C_READ 1
-#define I2C_WRITE 0
-
-#define I2C_ACK 1
-#define I2C_NACK 0
-
-#define SLAVE_BUFFER_SIZE 0x10
-
-// i2c SCL clock frequency
-#define SCL_CLOCK 100000L
-
-extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-void i2c_master_init(void);
-uint8_t i2c_master_start(uint8_t address);
-void i2c_master_stop(void);
-uint8_t i2c_master_write(uint8_t data);
-uint8_t i2c_master_read(int);
-void i2c_reset_state(void);
-void i2c_slave_init(uint8_t address);
-
-
-static inline unsigned char i2c_start_read(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_READ);
-}
-
-static inline unsigned char i2c_start_write(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_WRITE);
-}
-
-// from SSD1306 scrips
-extern unsigned char i2c_rep_start(unsigned char addr);
-extern void i2c_start_wait(unsigned char addr);
-extern unsigned char i2c_readAck(void);
-extern unsigned char i2c_readNak(void);
-extern unsigned char i2c_read(unsigned char ack);
-
-#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
-
-#endif
diff --git a/keyboards/ergotravel/keymaps/ckofy/config.h b/keyboards/ergotravel/keymaps/ckofy/config.h
index caae080d7..7c99c093c 100644
--- a/keyboards/ergotravel/keymaps/ckofy/config.h
+++ b/keyboards/ergotravel/keymaps/ckofy/config.h
@@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -33,9 +30,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TAPPING_TOGGLE 2
-// required if modifiers are defined in layers besided the default one.
-#define PREVENT_STUCK_MODIFIERS
-
#undef RGBLED_NUM
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 12
@@ -43,4 +37,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-#endif
diff --git a/keyboards/ergotravel/keymaps/ckofy/keymap.c b/keyboards/ergotravel/keymaps/ckofy/keymap.c
index cc2c33cca..7b3b333a5 100644
--- a/keyboards/ergotravel/keymaps/ckofy/keymap.c
+++ b/keyboards/ergotravel/keymaps/ckofy/keymap.c
@@ -1,4 +1,4 @@
-#include QMK_KEYBOARD_H
+#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
@@ -100,7 +100,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, , , , , , , ,COMM, P1 , P2 , P3 ,PLUS, ,
//|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
- , , , , , , , P0 ,NLCK, , ,
+ , , , , , , , P0 ,NLCK, , ,
//`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
),
@@ -112,7 +112,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
,UDO ,CUT ,CPY ,PST ,XXXX, , ,XXXX,XXXX,COMM,DOT ,SLSH, ,
//|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
- , , , , , , , , , , ,
+ , , , , , , , , , , ,
//`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
),
@@ -124,7 +124,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
, GRV,TILD,XXXX,EQL ,PLUS, , ,UNDS,MINS,COMM,DOT ,SLSH,ENT ,
//|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
- , , , , , , , , , , ,
+ , , , , , , , , , , ,
//`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
),
@@ -139,7 +139,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----+----. .----+----+----+----+----+----+----|
, , , , , , , , ,VOLD,VOLU,MUTE
//`----+----+----+--+-+----/----/ \----\----+----+----+----+----'
- )
+ )
};
@@ -148,9 +148,9 @@ const uint16_t PROGMEM fn_actions[] = {
,[F_ALT] = ACTION_MODS_ONESHOT (MOD_LALT)
,[F_CTRL] = ACTION_MODS_ONESHOT (MOD_LCTL)
,[F_NUMPAD] = ACTION_LAYER_TAP_TOGGLE(_NUMPAD)
-// ,[F_LOWER] = ACTION_LAYER_TAP_TOGGLE(LOWER) // FN1 - Momentary Layer 1 (Lower)
+// ,[F_LOWER] = ACTION_LAYER_TAP_TOGGLE(LOWER) // FN1 - Momentary Layer 1 (Lower)
// ,[F_RAISE] = ACTION_LAYER_TAP_TOGGLE(RAISE) // FN2 - Momentary Layer 2 (Raise)
-};
+};
diff --git a/keyboards/ergotravel/keymaps/ckofy/rules.mk b/keyboards/ergotravel/keymaps/ckofy/rules.mk
index 457a3d01d..e69de29bb 100644
--- a/keyboards/ergotravel/keymaps/ckofy/rules.mk
+++ b/keyboards/ergotravel/keymaps/ckofy/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/ergotravel/keymaps/default/config.h b/keyboards/ergotravel/keymaps/default/config.h
index abb8cfa8e..eeca26ce1 100644
--- a/keyboards/ergotravel/keymaps/default/config.h
+++ b/keyboards/ergotravel/keymaps/default/config.h
@@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -38,4 +35,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-#endif
+
diff --git a/keyboards/ergotravel/keymaps/default/rules.mk b/keyboards/ergotravel/keymaps/default/rules.mk
index 457a3d01d..e69de29bb 100644
--- a/keyboards/ergotravel/keymaps/default/rules.mk
+++ b/keyboards/ergotravel/keymaps/default/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/ergotravel/keymaps/ian/config.h b/keyboards/ergotravel/keymaps/ian/config.h
index b2e8ca9b5..dea5b121e 100644
--- a/keyboards/ergotravel/keymaps/ian/config.h
+++ b/keyboards/ergotravel/keymaps/ian/config.h
@@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -38,4 +35,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-#endif
+
diff --git a/keyboards/ergotravel/keymaps/ian/rules.mk b/keyboards/ergotravel/keymaps/ian/rules.mk
index 457a3d01d..e69de29bb 100644
--- a/keyboards/ergotravel/keymaps/ian/rules.mk
+++ b/keyboards/ergotravel/keymaps/ian/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/ergotravel/keymaps/jpconstantineau/config.h b/keyboards/ergotravel/keymaps/jpconstantineau/config.h
index abb8cfa8e..eeca26ce1 100644
--- a/keyboards/ergotravel/keymaps/jpconstantineau/config.h
+++ b/keyboards/ergotravel/keymaps/jpconstantineau/config.h
@@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -38,4 +35,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-#endif
+
diff --git a/keyboards/ergotravel/keymaps/jpconstantineau/rules.mk b/keyboards/ergotravel/keymaps/jpconstantineau/rules.mk
index 457a3d01d..e69de29bb 100644
--- a/keyboards/ergotravel/keymaps/jpconstantineau/rules.mk
+++ b/keyboards/ergotravel/keymaps/jpconstantineau/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/ergotravel/keymaps/viet/config.h b/keyboards/ergotravel/keymaps/viet/config.h
index 24e95b2b9..1c6c400b4 100644
--- a/keyboards/ergotravel/keymaps/viet/config.h
+++ b/keyboards/ergotravel/keymaps/viet/config.h
@@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -39,4 +36,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_VAL_STEP 20
#define RGBLIGHT_LIMIT_VAL 220
-#endif
diff --git a/keyboards/ergotravel/keymaps/viet/rules.mk b/keyboards/ergotravel/keymaps/viet/rules.mk
index da4752731..24963d46b 100644
--- a/keyboards/ergotravel/keymaps/viet/rules.mk
+++ b/keyboards/ergotravel/keymaps/viet/rules.mk
@@ -2,6 +2,3 @@ RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = no
UNICODE_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/ergotravel/keymaps/yanfali/config.h b/keyboards/ergotravel/keymaps/yanfali/config.h
new file mode 100644
index 000000000..eeca26ce1
--- /dev/null
+++ b/keyboards/ergotravel/keymaps/yanfali/config.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2017 Pierre Constantineau <jpconstantineau@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+
diff --git a/keyboards/ergotravel/keymaps/yanfali/keymap.c b/keyboards/ergotravel/keymaps/yanfali/keymap.c
new file mode 100644
index 000000000..399dc9998
--- /dev/null
+++ b/keyboards/ergotravel/keymaps/yanfali/keymap.c
@@ -0,0 +1,108 @@
+#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,
+ RAISE,
+ ADJUST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //,---------------------+--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------+--------.
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINUS,
+ //|---------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ MT(MOD_LCTL, KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_LCBR, KC_RCBR, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ //|---------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ //|---------------------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ ADJUST, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ //`---------------------+--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------+--------'
+ ),
+
+ [_LOWER] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------+--------.
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_Y, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_CAPS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, RAISE, _______, _______, _______, _______
+ //`--------+--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------+--------'
+ ),
+
+
+ [_RAISE] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------+--------.
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, KC_Q, KC_W, KC_E, KC_R, KC_T, _______, _______, KC_Y, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, RAISE, _______, _______, _______, _______
+ //`--------+--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------+--------'
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------+--------.
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RESET,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, RAISE, _______, _______, _______, _______
+ //`--------+--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------+--------'
+ )
+
+};
+
+
+
+
+
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/ergotravel/keymaps/yanfali/rules.mk b/keyboards/ergotravel/keymaps/yanfali/rules.mk
new file mode 100644
index 000000000..0613ea866
--- /dev/null
+++ b/keyboards/ergotravel/keymaps/yanfali/rules.mk
@@ -0,0 +1 @@
+BOOTLOADER = qmk-dfu
diff --git a/keyboards/ergotravel/matrix.c b/keyboards/ergotravel/matrix.c
deleted file mode 100644
index 4061924dc..000000000
--- a/keyboards/ergotravel/matrix.c
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
-Copyright 2018 Pierre Constantineau
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "split_util.h"
-#include "pro_micro.h"
-#include "config.h"
-#include "timer.h"
-#include "backlight.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else // USE_SERIAL
-# include "serial.h"
-#endif
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-
-#if (DEBOUNCING_DELAY > 0)
- static uint16_t debouncing_time;
- static bool debouncing = false;
-#endif
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#else
-# error "Currently only supports 8 COLS"
-#endif
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-#define ERROR_DISCONNECT_COUNT 5
-
-#define SERIAL_LED_ADDR 0x00
-
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
-
-static uint8_t error_count = 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];
-
-#if (DIODE_DIRECTION == COL2ROW)
- static void init_cols(void);
- static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
- static void unselect_rows(void);
- static void select_row(uint8_t row);
- static void unselect_row(uint8_t row);
-#elif (DIODE_DIRECTION == ROW2COL)
- static void init_rows(void);
- static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
- static void unselect_cols(void);
- static void unselect_col(uint8_t col);
- static void select_col(uint8_t col);
-#endif
-
-
-__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;
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-
-}
-
-uint8_t _matrix_scan(void)
-{
- int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
-#if (DIODE_DIRECTION == COL2ROW)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
-
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- PORTD ^= (1 << 2);
- }
-
-# else
- read_cols_on_row(matrix+offset, current_row);
-# endif
-
- }
-
-#elif (DIODE_DIRECTION == ROW2COL)
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_rows_on_col(matrix+offset, current_col);
-# endif
-
- }
-#endif
-
-# if (DEBOUNCING_DELAY > 0)
- if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- matrix[i+offset] = matrix_debouncing[i+offset];
- }
- debouncing = false;
- }
-# endif
-
- return 1;
-}
-
-#ifdef USE_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;
-
-#ifdef BACKLIGHT_ENABLE
- // Write backlight level for slave to read
- err = i2c_master_write(get_backlight_level());
-#else
- // Write zero, so our byte index is the same
- err = i2c_master_write(0x00);
-#endif
- 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(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
-
- if (serial_update_buffers()) {
- return 1;
- }
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_slave_buffer[i];
- }
-
-#ifdef BACKLIGHT_ENABLE
- // Write backlight level for slave to read
- serial_master_buffer[SERIAL_LED_ADDR] = get_backlight_level();
-#endif
- return 0;
-}
-#endif
-
-uint8_t matrix_scan(void)
-{
- uint8_t ret = _matrix_scan();
-
-#ifdef USE_I2C
- if( i2c_transaction() ) {
-#else // USE_SERIAL
- if( serial_transaction() ) {
-#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_I2C
-#ifdef BACKLIGHT_ENABLE
- // Read backlight level sent from master and update level on slave
- backlight_set(i2c_slave_buffer[0]);
-#endif
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- i2c_slave_buffer[i+1] = matrix[offset+i];
- }
-#else // USE_SERIAL
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_slave_buffer[i] = matrix[offset+i];
- }
-
-#ifdef BACKLIGHT_ENABLE
- // Read backlight level sent from master and update level on slave
- backlight_set(serial_master_buffer[SERIAL_LED_ADDR]);
-#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;
-}
-
-#if (DIODE_DIRECTION == COL2ROW)
-
-static void init_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin = col_pins[col_index];
- uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-static void select_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#elif (DIODE_DIRECTION == ROW2COL)
-
-static void init_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
- {
-
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[row_index];
-
- // Check row pin state
- if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
- {
- // Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-static void select_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#endif
diff --git a/keyboards/ergotravel/rev1/config.h b/keyboards/ergotravel/rev1/config.h
index beda546a0..e6d557361 100644
--- a/keyboards/ergotravel/rev1/config.h
+++ b/keyboards/ergotravel/rev1/config.h
@@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef REV1_CONFIG_H
-#define REV1_CONFIG_H
-
-#include QMK_KEYBOARD_CONFIG_H
+#pragma once
/* USB Device descriptor parameter */
#define VENDOR_ID 0xCEEB
@@ -59,15 +56,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
#define BACKLIGHT_PIN B5
#define BACKLIGHT_LEVELS 5
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
@@ -86,5 +84,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/ergotravel/rules.mk b/keyboards/ergotravel/rules.mk
index fceb56edf..55155b5a3 100644
--- a/keyboards/ergotravel/rules.mk
+++ b/keyboards/ergotravel/rules.mk
@@ -1,7 +1,3 @@
-SRC += matrix.c \
- i2c.c \
- split_util.c \
- serial.c
# MCU name
#MCU = at90usb1287
@@ -41,7 +37,7 @@ F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
-# different sizes, comment this out, and the correct address will be loaded
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina
@@ -63,12 +59,10 @@ 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 this with audio at the same time.
-SUBPROJECT_rev1 = yes
-USE_I2C = yes # I2C is used between the sides
+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
-CUSTOM_MATRIX = yes
+SPLIT_KEYBOARD = yes
DEFAULT_FOLDER = ergotravel/rev1
diff --git a/keyboards/ergotravel/serial.c b/keyboards/ergotravel/serial.c
deleted file mode 100644
index 74bcbb6bf..000000000
--- a/keyboards/ergotravel/serial.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * WARNING: be careful changing this code, it is very timing dependent
- */
-
-#ifndef F_CPU
-#define F_CPU 16000000
-#endif
-
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <stdbool.h>
-#include "serial.h"
-
-#ifndef USE_I2C
-
-// Serial pulse period in microseconds. Its probably a bad idea to lower this
-// value.
-#define SERIAL_DELAY 24
-
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
-
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
-
-inline static
-void serial_delay(void) {
- _delay_us(SERIAL_DELAY);
-}
-
-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(void) {
- SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-inline static
-uint8_t serial_read_pin(void) {
- return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
-}
-
-inline static
-void serial_low(void) {
- SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
-}
-
-inline static
-void serial_high(void) {
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-void serial_master_init(void) {
- serial_output();
- serial_high();
-}
-
-void serial_slave_init(void) {
- serial_input();
-
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
-}
-
-// Used by the master to synchronize timing with the slave.
-static
-void sync_recv(void) {
- serial_input();
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
- while (!serial_read_pin());
- serial_delay();
-}
-
-// Used by the slave to send a synchronization signal to the master.
-static
-void sync_send(void) {
- serial_output();
-
- serial_low();
- serial_delay();
-
- serial_high();
-}
-
-// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
- serial_input();
- for ( uint8_t i = 0; i < 8; ++i) {
- byte = (byte << 1) | serial_read_pin();
- serial_delay();
- _delay_us(1);
- }
-
- return byte;
-}
-
-// Sends a byte with MSB ordering
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 8;
- serial_output();
- while( b-- ) {
- if(data & (1 << b)) {
- serial_high();
- } else {
- serial_low();
- }
- serial_delay();
- }
-}
-
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- sync_send();
-
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_slave_buffer[i]);
- sync_send();
- checksum += serial_slave_buffer[i];
- }
- serial_write_byte(checksum);
- sync_send();
-
- // wait for the sync to finish sending
- serial_delay();
-
- // read the middle of pulses
- _delay_us(SERIAL_DELAY/2);
-
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_master_buffer[i] = serial_read_byte();
- sync_send();
- checksum_computed += serial_master_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_send();
-
- serial_input(); // end transaction
-
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
- } else {
- status &= ~SLAVE_DATA_CORRUPT;
- }
-}
-
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
-}
-
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
-//
-// Returns:
-// 0 => no error
-// 1 => slave did not respond
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
- cli();
-
- // signal to the slave that we want to start a transaction
- serial_output();
- serial_low();
- _delay_us(1);
-
- // wait for the slaves response
- serial_input();
- serial_high();
- _delay_us(SERIAL_DELAY);
-
- // check if the slave is present
- if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
- sei();
- return 1;
- }
-
- // if the slave is present syncronize with it
- sync_recv();
-
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_slave_buffer[i] = serial_read_byte();
- sync_recv();
- checksum_computed += serial_slave_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_recv();
-
- if (checksum_computed != checksum_received) {
- sei();
- return 1;
- }
-
- uint8_t checksum = 0;
- // send data to the slave
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_master_buffer[i]);
- sync_recv();
- checksum += serial_master_buffer[i];
- }
- serial_write_byte(checksum);
- sync_recv();
-
- // always, release the line when not in use
- serial_output();
- serial_high();
-
- sei();
- return 0;
-}
-
-#endif
diff --git a/keyboards/ergotravel/serial.h b/keyboards/ergotravel/serial.h
deleted file mode 100644
index 15fe4db7b..000000000
--- a/keyboards/ergotravel/serial.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef MY_SERIAL_H
-#define MY_SERIAL_H
-
-#include "config.h"
-#include <stdbool.h>
-
-/* TODO: some defines for interrupt setup */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
-
-// Buffers for master - slave communication
-extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
-extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
-
-void serial_master_init(void);
-void serial_slave_init(void);
-int serial_update_buffers(void);
-bool serial_slave_data_corrupt(void);
-
-#endif
diff --git a/keyboards/ergotravel/split_util.c b/keyboards/ergotravel/split_util.c
deleted file mode 100644
index 346cbc908..000000000
--- a/keyboards/ergotravel/split_util.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/power.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/eeprom.h>
-#include "split_util.h"
-#include "matrix.h"
-#include "keyboard.h"
-#include "config.h"
-#include "timer.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else
-# include "serial.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_I2C
- i2c_master_init();
-#ifdef SSD1306OLED
- matrix_master_OLED_init ();
-#endif
-#else
- serial_master_init();
-#endif
-}
-
-static void keyboard_slave_setup(void) {
- timer_init();
-#ifdef USE_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();
-}
-
-void keyboard_slave_loop(void) {
- matrix_init();
-
- while (1) {
- matrix_slave_scan();
- }
-}
-
-// this code runs before the usb and keyboard is initialized
-void matrix_setup(void) {
- split_keyboard_setup();
-
- if (!has_usb()) {
- keyboard_slave_loop();
- }
-}
diff --git a/keyboards/espectro/config.h b/keyboards/espectro/config.h
new file mode 100755
index 000000000..294091d58
--- /dev/null
+++ b/keyboards/espectro/config.h
@@ -0,0 +1,70 @@
+/* Copyright 2018 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0xCA96
+#define DEVICE_VER 0x0001
+#define MANUFACTURER MECHKEYS
+#define PRODUCT Espectro
+#define DESCRIPTION 96% keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 13
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B7, B3, E6, F0, D5, D4, D6, C7 }
+#define MATRIX_COL_PINS { C6, F1, F4, F5, F6, F7, D7, B4, B5, D0, D1, D2, D3}
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B6
+#define BACKLIGHT_LEVELS 5
+
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+#define RGBLED_NUM 18
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 10
+#define RGBLIGHT_VAL_STEP 10
+
+#define RGBLIGHT_ANIMATIONS
+
+#endif
+
diff --git a/keyboards/espectro/espectro.c b/keyboards/espectro/espectro.c
new file mode 100755
index 000000000..13030cdd4
--- /dev/null
+++ b/keyboards/espectro/espectro.c
@@ -0,0 +1,76 @@
+/* Copyright 2018 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include QMK_KEYBOARD_H
+#include "quantum.h"
+
+
+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_NUM_LOCK)) {
+ DDRB |= (1 << 0); PORTB &= ~(1 << 0);
+ } else {
+ DDRB &= ~(1 << 0); PORTB &= ~(1 << 0);
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 2); PORTB &= ~(1 << 2);
+ } else {
+ DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ DDRB |= (1 << 1); PORTB &= ~(1 << 1);
+ } else {
+ DDRB &= ~(1 << 1); PORTB &= ~(1 << 1);
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
+
diff --git a/keyboards/espectro/espectro.h b/keyboards/espectro/espectro.h
new file mode 100755
index 000000000..ff58f9d97
--- /dev/null
+++ b/keyboards/espectro/espectro.h
@@ -0,0 +1,144 @@
+/* Copyright 2018 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#pragma once
+
+#include "quantum.h"
+
+
+/*
+ * Placement of every possible switch defined below.
+ * x2 means the diode allows two possible positions for the switch
+ *
+ * Layout:
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │K00 │K01 │K02 │K03 │K04 │K60 │K61 │K62 │K63 │K05 │K06 │K07 │K08 │K72 │K09 │K0A │K0B │K0C │K7C │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │K10 │K11 │K12 │K13 │K14 │K64 │K65 │K66 │K67 │K15 │K16 │K17 │K18 │K70 │K71 │K19 │K1A │K1B │K1C │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │x2 │ │ │ │ │
+ * ├─────┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴─────┼─────┼─────┼─────┼─────┤ ┌────────┐
+ * │K20 │K21 │K22 │K23 │K24 │K68 │K69 │K6A │K6B │K25 │K26 │K27 │K28 │K73 │K29 │K2A │K2B │K2C │ │K38 │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├────────┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴────────┼─────┼─────┼─────┼─────┤ ┌───┴─┐ │
+ * │K30 │K31 │K32 │K33 │K34 │K6C │K75 │K76 │K77 │K35 │K36 │K37 │K38 │K39 │K3A │K3B │K3C │ │K73 │ │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───────┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──────┬─────┼─────┼─────┼─────┼─────┤ └─────┴──────┘
+ * │K40x2 │K41 │K42 │K43 │K44 │K78 │K79 │K7A │K7B │K45 │K46 │K47 │K48 │K74 │K49 │K4A │K4B │K4C │
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├───────┼─────┴─┬───┴───┬─┴─────┴─────┴─────┴─────┴─────┴───┬─┴───┬─┴───┬─┴───┬─────┼─────┼─────┼─────┼─────┼─────┤
+ * │K50 │K51 │K52 │K59 │K55 │K56 │K57 │K58 │K53 │K54 │K5A │K5B │K5C │
+ * │x2 │x2 │ │x3 │x3 │x2 │x2 │x2 │x2 │ │x2 │ │ │
+ * └───────┴───────┴───────┴───────────────────────────────────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ *
+ * Variants:
+ * - 2u Backspace: Delete K70 Use K71
+ * - 2u Num +: Delete K3C Use K2C
+ * - 2u Num Enter: Delete K5C Use K4C
+ * - ANSI Left Shift: Delete K41 Use K40
+ *
+ * ANSI Backslash and ISO Hash are the same position
+ * ANSI Enter and ISO Enter are the same position
+ * For two 1.5u modifiers on the right of the Spacebar, delete K56 and use K55 and K57
+ *
+ * Matrix:
+ * { 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, K5B, K5C }, \
+ * { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C }, \
+ * { K70, K71, K72, K73, K74, K75, K76, K77, K78, K79, K7A, K7B, K7C } \
+ */
+
+
+/* LAYOUT_all (Identical to LAYOUT_split_shift_and_bs)
+ * Every matrix position
+ * ,---------------------------------------------------------------------------.
+ * | 00| 01| 02| 03| 04| 60| 61| 62| 63| 05| 06| 07| 08| 72| 09| 0A| 0B| 0C| 7C|
+ * |---------------------------------------------------------------------------|
+ * | 10| 11| 12| 13| 14| 64| 65| 66| 67| 15| 16| 17| 18| 70| 71| 19| 1A| 1B| 1C|
+ * |---------------------------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 68| 69| 6A| 6B| 25| 26| 27| 28| 73| 29| 2A| 2B| 2C|
+ * |---------------------------------------------------------------------------|
+ * | 30 | 31| 32| 33| 34| 6C| 75| 76| 77| 35| 36| 37| 38| 39| 3A| 3B| 3C|
+ * |---------------------------------------------------------------------------|
+ * | 40 | 41| 42| 43| 44| 78| 79| 7A| 7B| 45| 46| 47| 48| 74| 49| 4A| 4B| 4C|
+ * |---------------------------------------------------------------------------|
+ * | 50 | 51 | 52 | 59 | 55| 56| 57| 58| 53| 54| 5A| 5B| 5C|
+ * `---------------------------------------------------------------------------'
+*/
+
+
+//Arrow keys and 1.75u right shift
+#define LAYOUT_default( \
+ K00, K01, K02, K03, K04, K60, K61, K62, K63, K05, K06, K07, K08, K72, K09, K0A, K0B, K0C, K7C, \
+ K10, K11, K12, K13, K14, K64, K65, K66, K67, K15, K16, K17, K18, K71, K19, K1A, K1B, K1C, \
+ K20, K21, K22, K23, K24, K68, K69, K6A, K6B, K25, K26, K27, K28, K73, K29, K2A, K2B, K2C, \
+ K30, K31, K32, K33, K34, K6C, K75, K76, K77, K35, K36, K37, K38, K39, K3A, K3B, \
+ K40, K42, K43, K44, K78, K79, K7A, K7B, K45, K46, K47, K48, K74, K49, K4A, K4B, K4C, \
+ K50, K51, K52, K59, K55, K56, K57, K58, K53, K54, K5A, K5B \
+) { \
+ { 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, KC_NO }, \
+ { K40, KC_NO, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, KC_NO }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77, K78, K79, K7A, K7B, K7C } \
+}
+
+// Split numpad (enter, 0), split shifts (right, left), split backspace
+// This layout contains every possible keycode placement
+#define LAYOUT_split_shift_and_bs( \
+ K00, K01, K02, K03, K04, K60, K61, K62, K63, K05, K06, K07, K08, K72, K09, K0A, K0B, K0C, K7C, \
+ K10, K11, K12, K13, K14, K64, K65, K66, K67, K15, K16, K17, K18, K70, K71, K19, K1A, K1B, K1C, \
+ K20, K21, K22, K23, K24, K68, K69, K6A, K6B, K25, K26, K27, K28, K73, K29, K2A, K2B, K2C, \
+ K30, K31, K32, K33, K34, K6C, K75, K76, K77, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
+ K40, K41, K42, K43, K44, K78, K79, K7A, K7B, K45, K46, K47, K48, K74, K49, K4A, K4B, K4C, \
+ K50, K51, K52, K59, K55, K56, K57, K58, K53, K54, K5A, K5B, K5C \
+) { \
+ { 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, K5B, K5C }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C }, \
+ { K71, K71, K72, K73, K74, K75, K76, K77, K78, K79, K7A, K7B, K7C }, \
+}
+
+// ISO Layout
+#define LAYOUT_iso( \
+ K00, K01, K02, K03, K04, K60, K61, K62, K63, K05, K06, K07, K08, K72, K09, K0A, K0B, K0C, K7C, \
+ K10, K11, K12, K13, K14, K64, K65, K66, K67, K15, K16, K17, K18, K71, K19, K1A, K1B, K1C, \
+ K20, K21, K22, K23, K24, K68, K69, K6A, K6B, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K31, K32, K33, K34, K6C, K75, K76, K77, K35, K36, K37, K73, K38, K39, K3A, K3B, \
+ K40, K41, K42, K43, K44, K78, K79, K7A, K7B, K45, K46, K47, K48, K74, K49, K4A, K4B, K4C, \
+ K50, K51, K52, K59, K55, K56, K57, K58, K53, K54, K5A, K5B \
+) { \
+ { 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, KC_NO }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, KC_NO }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77, K78, K79, K7A, K7B, K7C } \
+}
diff --git a/keyboards/espectro/info.json b/keyboards/espectro/info.json
new file mode 100644
index 000000000..7a8c9bc0a
--- /dev/null
+++ b/keyboards/espectro/info.json
@@ -0,0 +1,347 @@
+{
+ "keyboard_name": "Espectro",
+ "keyboard_folder": "espectro",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 19,
+ "height": 6,
+ "layouts": {
+ "LAYOUT_default": {
+ "key_count": 100,
+ "layout": [
+ {"label":"ESC", "x":0, "y":0},
+ {"label":"F1", "x":1, "y":0},
+ {"label":"F2", "x":2, "y":0},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0},
+ {"label":"F5", "x":5, "y":0},
+ {"label":"F6", "x":6, "y":0},
+ {"label":"F7", "x":7, "y":0},
+ {"label":"F8", "x":8, "y":0},
+ {"label":"F9", "x":9, "y":0},
+ {"label":"F10", "x":10, "y":0},
+ {"label":"F11", "x":11, "y":0},
+ {"label":"F12", "x":12, "y":0},
+ {"label":"PRINT SCREEN", "x":13, "y":0},
+ {"label":"HOME", "x":14, "y":0},
+ {"label":"END", "x":15, "y":0},
+ {"label":"PAGE UP", "x":16, "y":0},
+ {"label":"PAGE DOWN", "x":17, "y":0},
+ {"label":"DELETE", "x":18, "y":0},
+
+ {"label":"GRAVE", "x":0, "y":1},
+ {"label":"1", "x":1, "y":1},
+ {"label":"2", "x":2, "y":1},
+ {"label":"3", "x":3, "y":1},
+ {"label":"4", "x":4, "y":1},
+ {"label":"5", "x":5, "y":1},
+ {"label":"6", "x":6, "y":1},
+ {"label":"7", "x":7, "y":1},
+ {"label":"8", "x":8, "y":1},
+ {"label":"9", "x":9, "y":1},
+ {"label":"0", "x":10, "y":1},
+ {"label":"MINUS", "x":11, "y":1},
+ {"label":"EQUAL", "x":12, "y":1},
+ {"label":"BACKSPACE", "x":13, "y":1, "w":2},
+ {"label":"NUM LOCK", "x":15, "y":1},
+ {"label":"KEYPAD /", "x":16, "y":1},
+ {"label":"KEYPAD *", "x":17, "y":1},
+ {"label":"KEYPAD -", "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":"LBRACKET", "x":11.5, "y":2},
+ {"label":"RBRACKET", "x":12.5, "y":2},
+ {"label":"BACKSLASH", "x":13.5, "y":2, "w":1.5},
+ {"label":"KEYPAD 7", "x":15, "y":2},
+ {"label":"KEYPAD 8", "x":16, "y":2},
+ {"label":"KEYPAD 9", "x":17, "y":2},
+ {"label":"KEYPAD +", "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":"SEMICOLON", "x":10.75, "y":3},
+ {"label":"QUOTE", "x":11.75, "y":3},
+ {"label":"ENTER", "x":12.75, "y":3, "w":2.25},
+ {"label":"KEYPAD 4", "x":15, "y":3},
+ {"label":"KEYPAD 5", "x":16, "y":3},
+ {"label":"KEYPAD 6", "x":17, "y":3},
+
+ {"label":"LSHIFT", "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":"COMMA", "x":9.25, "y":4},
+ {"label":"PERIOD", "x":10.25, "y":4},
+ {"label":"SLASH", "x":11.25, "y":4},
+ {"label":"RSHIFT", "x":12.25, "y":4, "w":1.75},
+ {"label":"UP", "x":14, "y":4},
+ {"label":"KEYPAD 1", "x":15, "y":4},
+ {"label":"KEYPAD 2", "x":16, "y":4},
+ {"label":"KEYPAD 3", "x":17, "y":4},
+ {"label":"KEYPAD ENTER", "x":18, "y":4, "h":2},
+
+ {"label":"LCTRL", "x":0, "y":5, "w":1.25},
+ {"label":"LGUI", "x":1.25, "y":5, "w":1.25},
+ {"label":"LALT", "x":2.5, "y":5, "w":1.25},
+ {"label":"SPACE", "x":3.75, "y":5, "w":6.25},
+ {"label":"RALT", "x":10, "y":5},
+ {"label":"RCTRL", "x":11, "y":5},
+ {"label":"FN", "x":12, "y":5},
+ {"label":"LEFT", "x":13, "y":5},
+ {"label":"DOWN", "x":14, "y":5},
+ {"label":"RIGHT", "x":15, "y":5},
+ {"label":"KEYPAD 0", "x":16, "y":5},
+ {"label":"KEYPAD .", "x":17, "y":5}
+ ]
+ },
+
+ "LAYOUT_split_shift_and_bs": {
+ "key_count": 104,
+ "layout": [
+ {"label":"ESC", "x":0, "y":0},
+ {"label":"F1", "x":1, "y":0},
+ {"label":"F2", "x":2, "y":0},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0},
+ {"label":"F5", "x":5, "y":0},
+ {"label":"F6", "x":6, "y":0},
+ {"label":"F7", "x":7, "y":0},
+ {"label":"F8", "x":8, "y":0},
+ {"label":"F9", "x":9, "y":0},
+ {"label":"F10", "x":10, "y":0},
+ {"label":"F11", "x":11, "y":0},
+ {"label":"F12", "x":12, "y":0},
+ {"label":"PRINT SCREEN", "x":13, "y":0},
+ {"label":"HOME", "x":14, "y":0},
+ {"label":"END", "x":15, "y":0},
+ {"label":"PAGE UP", "x":16, "y":0},
+ {"label":"PAGE DOWN", "x":17, "y":0},
+ {"label":"DELETE", "x":18, "y":0},
+
+ {"label":"GRAVE", "x":0, "y":1},
+ {"label":"1", "x":1, "y":1},
+ {"label":"2", "x":2, "y":1},
+ {"label":"3", "x":3, "y":1},
+ {"label":"4", "x":4, "y":1},
+ {"label":"5", "x":5, "y":1},
+ {"label":"6", "x":6, "y":1},
+ {"label":"7", "x":7, "y":1},
+ {"label":"8", "x":8, "y":1},
+ {"label":"9", "x":9, "y":1},
+ {"label":"0", "x":10, "y":1},
+ {"label":"MINUS", "x":11, "y":1},
+ {"label":"EQUAL", "x":12, "y":1},
+ {"label":"BACKSPACE", "x":13, "y":1},
+ {"label":"BACKSPACE", "x":14, "y":1},
+ {"label":"NUM LOCK", "x":15, "y":1},
+ {"label":"KEYPAD /", "x":16, "y":1},
+ {"label":"KEYPAD *", "x":17, "y":1},
+ {"label":"KEYPAD -", "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":"LBRACKET", "x":11.5, "y":2},
+ {"label":"RBRACKET", "x":12.5, "y":2},
+ {"label":"BACKSLASH", "x":13.5, "y":2, "w":1.5},
+ {"label":"KEYPAD 7", "x":15, "y":2},
+ {"label":"KEYPAD 8", "x":16, "y":2},
+ {"label":"KEYPAD 9", "x":17, "y":2},
+ {"label":"KEYPAD +", "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":"SEMICOLON", "x":10.75, "y":3},
+ {"label":"QUOTE", "x":11.75, "y":3},
+ {"label":"ENTER", "x":12.75, "y":3, "w":2.25},
+ {"label":"KEYPAD 4", "x":15, "y":3},
+ {"label":"KEYPAD 5", "x":16, "y":3},
+ {"label":"KEYPAD 6", "x":17, "y":3},
+ {"label":"KEYPAD +", "x":18, "y":3},
+
+ {"label":"LSHIFT", "x":0, "y":4, "w":1.25},
+ {"label":"ISO BACKSLASH", "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":"COMMA", "x":9.25, "y":4},
+ {"label":"PERIOD", "x":10.25, "y":4},
+ {"label":"SLASH", "x":11.25, "y":4},
+ {"label":"RSHIFT", "x":12.25, "y":4, "w":1.75},
+ {"label":"UP", "x":14, "y":4},
+ {"label":"KEYPAD 1", "x":15, "y":4},
+ {"label":"KEYPAD 2", "x":16, "y":4},
+ {"label":"KEYPAD 3", "x":17, "y":4},
+ {"label":"KEYPAD ENTER", "x":18, "y":4},
+
+ {"label":"LCTRL", "x":0, "y":5, "w":1.25},
+ {"label":"LGUI", "x":1.25, "y":5, "w":1.25},
+ {"label":"LALT", "x":2.5, "y":5, "w":1.25},
+ {"label":"SPACE", "x":3.75, "y":5, "w":6.25},
+ {"label":"RALT", "x":10, "y":5},
+ {"label":"MENU", "x":11, "y":5},
+ {"label":"RCTRL", "x":12, "y":5},
+ {"label":"LEFT", "x":13, "y":5},
+ {"label":"DOWN", "x":14, "y":5},
+ {"label":"RIGHT", "x":15, "y":5},
+ {"label":"KEYPAD 0", "x":16, "y":5},
+ {"label":"KEYPAD .", "x":17, "y":5},
+ {"label":"KEYPAD ENTER", "x":18, "y":5}
+ ]
+ },
+
+ "LAYOUT_iso": {
+ "key_count": 101,
+ "layout": [
+ {"label":"ESC", "x":0, "y":0},
+ {"label":"F1", "x":1, "y":0},
+ {"label":"F2", "x":2, "y":0},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0},
+ {"label":"F5", "x":5, "y":0},
+ {"label":"F6", "x":6, "y":0},
+ {"label":"F7", "x":7, "y":0},
+ {"label":"F8", "x":8, "y":0},
+ {"label":"F9", "x":9, "y":0},
+ {"label":"F10", "x":10, "y":0},
+ {"label":"F11", "x":11, "y":0},
+ {"label":"F12", "x":12, "y":0},
+ {"label":"PRINT SCREEN", "x":13, "y":0},
+ {"label":"HOME", "x":14, "y":0},
+ {"label":"END", "x":15, "y":0},
+ {"label":"PAGE UP", "x":16, "y":0},
+ {"label":"PAGE DOWN", "x":17, "y":0},
+ {"label":"DELETE", "x":18, "y":0},
+
+ {"label":"GRAVE", "x":0, "y":1},
+ {"label":"1", "x":1, "y":1},
+ {"label":"2", "x":2, "y":1},
+ {"label":"3", "x":3, "y":1},
+ {"label":"4", "x":4, "y":1},
+ {"label":"5", "x":5, "y":1},
+ {"label":"6", "x":6, "y":1},
+ {"label":"7", "x":7, "y":1},
+ {"label":"8", "x":8, "y":1},
+ {"label":"9", "x":9, "y":1},
+ {"label":"0", "x":10, "y":1},
+ {"label":"MINUS", "x":11, "y":1},
+ {"label":"EQUAL", "x":12, "y":1},
+ {"label":"BACKSPACE", "x":13, "y":1, "w":2},
+ {"label":"NUM LOCK", "x":15, "y":1},
+ {"label":"KEYPAD /", "x":16, "y":1},
+ {"label":"KEYPAD *", "x":17, "y":1},
+ {"label":"KEYPAD -", "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":"LBRACKET", "x":11.5, "y":2},
+ {"label":"RBRACKET", "x":12.5, "y":2},
+ {"label":"KEYPAD 7", "x":15, "y":2},
+ {"label":"KEYPAD 8", "x":16, "y":2},
+ {"label":"KEYPAD 9", "x":17, "y":2},
+ {"label":"KEYPAD +", "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":"SEMICOLON", "x":10.75, "y":3},
+ {"label":"QUOTE", "x":11.75, "y":3},
+ {"label":"ISO HASH", "x":12.75, "y":3},
+ {"label":"ENTER", "x":13.75, "y":2, "w":1.25, "h":2},
+ {"label":"KEYPAD 4", "x":15, "y":3},
+ {"label":"KEYPAD 5", "x":16, "y":3},
+ {"label":"KEYPAD 6", "x":17, "y":3},
+
+ {"label":"LSHIFT", "x":0, "y":4, "w":1.25},
+ {"label":"ISO BACKSLASH", "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":"COMMA", "x":9.25, "y":4},
+ {"label":"PERIOD", "x":10.25, "y":4},
+ {"label":"SLASH", "x":11.25, "y":4},
+ {"label":"RSHIFT", "x":12.25, "y":4, "w":1.75},
+ {"label":"UP", "x":14, "y":4},
+ {"label":"KEYPAD 1", "x":15, "y":4},
+ {"label":"KEYPAD 2", "x":16, "y":4},
+ {"label":"KEYPAD 3", "x":17, "y":4},
+ {"label":"KEYPAD ENTER", "x":18, "y":4, "h":2},
+
+ {"label":"LCTRL", "x":0, "y":5, "w":1.25},
+ {"label":"LGUI", "x":1.25, "y":5, "w":1.25},
+ {"label":"LALT", "x":2.5, "y":5, "w":1.25},
+ {"label":"SPACE", "x":3.75, "y":5, "w":6.25},
+ {"label":"RALT", "x":10, "y":5},
+ {"label":"MENU", "x":11, "y":5},
+ {"label":"RCTRL", "x":12, "y":5},
+ {"label":"LEFT", "x":13, "y":5},
+ {"label":"DOWN", "x":14, "y":5},
+ {"label":"RIGHT", "x":15, "y":5},
+ {"label":"KEYPAD 0", "x":16, "y":5},
+ {"label":"KEYPAD .", "x":17, "y":5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/espectro/keymaps/default/keymap.c b/keyboards/espectro/keymaps/default/keymap.c
new file mode 100755
index 000000000..b78fdbcac
--- /dev/null
+++ b/keyboards/espectro/keymaps/default/keymap.c
@@ -0,0 +1,88 @@
+/* Copyright 2018 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include QMK_KEYBOARD_H
+
+#define _BL 0 //Base layer
+#define _FN1 1 //Function layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* BL
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | | | | | |
+| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL | PRT SC | SCR LK | PAUSE | P UP | P DOWN |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | | | | | | | | | | | | | BACK | NUM | | | |
+| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | SPACE | LOCK | / | * | - |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|_________________|________|________|________|________|
+| | | | | | | | | | | | [ | ] | | | | | |
+| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | |
+|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________| + |
+| | | | | | | | | | | ; | ' | | | | | |
+| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | | | | | | , | . | / | | | | | | |
+| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | |
+|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| ENTER |
+| | | | | | | MO | | | | | | |
+| CTRL | LGUI | L ALT | SPACE | R ALT | R CTRL | _FN | LEFT | DOWN | RIGHT | 0 | . | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+ */
+
+ [_BL] = LAYOUT_default(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_PSCR, KC_SLCK, KC_PAUS, KC_PGUP, KC_PGDN, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
+ ),
+
+/* FN_1
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | VOL | VOL | NEXT | | |
+| RESET | | | | | | | | | | | | | MUTE | DOWN | UP | TRACK | HOME | END |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | RGB | RGB | RGB | RGB | RGB | RGB | RGB | RGB | | | | | | | | | |
+| | TOGGLE | MODE |INCREASE|DECREASE| HUE | HUE | SAT | SAT | | | | | DELETE | | | | |
+|________|________|________|________|________|INCREASE|DECREASE|INCREASE|DECREASE|________|________|________|________|_________________|________|________|________|________|
+| | BACK | BACK | | | | | | | | | | | | | | | |
+| | LIGHT | LIGHT | | | | | | | | | | | | | | | |
+|____________| TOGGLE |INCREASE|DECREASE|________|________|________|________|________|________|________|________|________|_____________|________|________|________| |
+| | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | |
+|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| |
+| | | | | | | | | | | | | |
+| | | | | | | | | | | | | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+ */
+
+ [_FN1] = LAYOUT_default(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_HOME, KC_END, \
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, \
+ _______, BL_TOGG, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+};
+
diff --git a/keyboards/espectro/keymaps/iso/keymap.c b/keyboards/espectro/keymaps/iso/keymap.c
new file mode 100755
index 000000000..a9625e4d9
--- /dev/null
+++ b/keyboards/espectro/keymaps/iso/keymap.c
@@ -0,0 +1,88 @@
+/* Copyright 2018 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include QMK_KEYBOARD_H
+
+#define _BL 0 //Base layer
+#define _FN1 1 //Function layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* BL
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | | | | | |
+| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE | P SCN | HOME | END | P UP | P DOWN |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| ` | | | | | | | | | | | | | BACK | NUM | | | |
+| ¬ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | SPACE | LOCK | / | * | - |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|_________________|________|________|________|________|
+| | | | | | | | | | | | [ | ] | | | | | |
+| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | 7 | 8 | 9 | |
+|____________|________|________|________|________|________|________|________|________|________|________|________|________|__ ENTER |________|________|________| + |
+| | | | | | | | | | | ; | ' | # | | | | | |
+| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | @ | ~ | | 4 | 5 | 6 | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|________|___________|________|________|________|________|
+| | \ | | | | | | | | , | . | / | | | | | | |
+| SHIFT | | | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | |
+|__________|_______|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| ENTER |
+| | | | | | | MO | | | | | | |
+| CTRL | LGUI | L ALT | SPACE | R ALT | R CTRL | _FN | LEFT | DOWN | RIGHT | 0 | . | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+ */
+
+ [_BL] = LAYOUT_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_DEL, KC_PSCR, 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_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_P7, KC_P8, KC_P9, KC_PPLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
+ ),
+
+/* FN_1
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | VOL | VOL | NEXT | | |
+| RESET | | | | | | | | | | | | | MUTE | DOWN | UP | TRACK | HOME | END |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | RGB | RGB | RGB | RGB | RGB | RGB | RGB | RGB | | | | | | | | | |
+| | TOGGLE | MODE |INCREASE|DECREASE| HUE | HUE | SAT | SAT | | | | | DELETE | | | | |
+|________|________|________|________|________|INCREASE|DECREASE|INCREASE|DECREASE|________|________|________|________|_________________|________|________|________|________|
+| | BACK | BACK | | | | | | | | | | | | | | | |
+| | LIGHT | LIGHT | | | | | | | | | | | | | | | |
+|____________| TOGGLE |INCREASE|DECREASE|________|________|________|________|________|________|________|________|________|__ |________|________|________| |
+| | | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|________|___________|________|________|________|________|
+| | | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | | |
+|__________|_______|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| |
+| | | | | | | | | | | | | |
+| | | | | | | | | | | | | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+ */
+
+ [_FN1] = LAYOUT_iso(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT, KC_HOME, KC_END, \
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______, \
+ _______, BL_TOGG, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+};
+
diff --git a/keyboards/espectro/keymaps/mac/config.h b/keyboards/espectro/keymaps/mac/config.h
new file mode 100644
index 000000000..a18495221
--- /dev/null
+++ b/keyboards/espectro/keymaps/mac/config.h
@@ -0,0 +1,22 @@
+/* Copyright 2018 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define TAPPING_TOGGLE 2
+
+// place overrides here
+
diff --git a/keyboards/espectro/keymaps/mac/keymap.c b/keyboards/espectro/keymaps/mac/keymap.c
new file mode 100644
index 000000000..9c03e1345
--- /dev/null
+++ b/keyboards/espectro/keymaps/mac/keymap.c
@@ -0,0 +1,166 @@
+/* Copyright 2018 @TurboMech /u/TurboMech <discord> @A9entOran9e#6134
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include QMK_KEYBOARD_H
+
+
+#define _QWERTY 0 //BASE layer
+#define _FUNCTION 1 //Function layer
+#define _WINDOWS 2 //Windows layer
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ EXPOSE, // Expose (LCTRL + UP)
+ LAUNCH,
+ DOCK,
+ SCRCAP,
+ CS1,
+ CS2,
+ QALL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Base Layer
+____________________________________________________________________________________________________________________________________________________________________________
+| | SCREEN | SCREEN | | |SHOW | TOGGLE |SCREEN |CUSTOM |CUSTOM |PREVIOUS| PLAY/ | NEXT | | | | | | |
+| ESC |BRIGHTEN| DIM | EXPOSE |LAUNCHPA|DESKTOP | DOCK |CAPTURE |SHORTCUT|SHORTCUT| TRACK | PAUSE | TRACK | MUTE | VOL DN | VOL UP | PG UP |PG DOWN | POWER |
+|________|________|________|________|________|________|________|________|___1____|___2____|________|________|________|________|________|________|________|________|________|
+| | | | | | | | | | | | | | BACK | | | | |
+| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | SPACE | DELETE | / | * | - |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|_________________|________|________|________|________|
+| | | | | | | | | | | | [ | ] | | | | | |
+| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | |
+|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________| + |
+| | | | | | | | | | | ; | ' | | | | | |
+| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | | | | | | , | . | / | | | | | | |
+| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | |
+|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| ENTER |
+| | | | | | | TT | | | | | | |
+| CTRL | L ALT | L GUI | SPACE | R GUI | R CTRL | _FN | LEFT | DOWN | RIGHT | 0 | . | |
+|__________|__________| COMMAND |________________________________________________________|COMMAND |________|________|________|________|________|________|________|________|
+ */
+
+ [_QWERTY] = LAYOUT_default(
+ KC_ESC, KC_F14, KC_F15, EXPOSE, LAUNCH, KC_F11, DOCK, SCRCAP, CS1, CS2, KC_MRWD, KC_MPLY, KC_MFFD, KC_MUTE, KC_VOLD, KC_VOLU, KC_PGUP, KC_PGDN, KC_POWER,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RCTL, TT(1), KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT
+ ),
+/* FN1 - SEE readme.md
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | | | | | |
+| QUIT | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | | | HOME | END | RESET |
+|_ALL____|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | RGB | RGB | RGB | RGB | RGB | RGB | RGB | RGB | | | | | | | | | |
+| | TOGGLE | MODE |INCREASE|DECREASE| HUE | HUE | SAT | | | | | | DELETE | | | | |
+|________|________|________|________|________|INCREASE|DECREASE|INCREASE|DECREASE|________|________|________|________|_________________|________|________|________|________|
+| | BACK | BACK | | | | | | | | | | | | | | | |
+| | LIGHT | LIGHT | | | | | | | | | | | | | | | |
+|____________| TOGGLE |INCREASE|DECREASE|________|________|________|________|________|________|________|________|________|_____________|________|________|________| |
+| | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | |
+|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| |
+| | | | | | | | | | | | | |
+| | | | | | | | | | | | | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+ */
+
+
+ [_FUNCTION] = LAYOUT_default(
+ QALL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, KC_HOME, KC_END, RESET,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______,
+ _______, BL_TOGG, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, TO(2), _______, _______, _______, _______, _______, _______
+
+ ),
+
+/* Windows layer
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | | | | | |
+| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DELETE | HOME | END | P UP | P DOWN | MENU |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | | | | | | | | | | | | | BACK | NUM | | | |
+| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | SPACE | LOCK | / | * | - |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|_________________|________|________|________|________|
+| | | | | | | | | | | | [ | ] | | | | | |
+| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | |
+|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________| + |
+| | | | | | | | | | | ; | ' | | | | | |
+| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | | | | | | , | . | / | | | | | | |
+| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | |
+|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| ENTER |
+| | | | | | | TO | | | | | | |
+| L GUI | L ALT | L CTL | SPACE | R CTL | R ALT |LAYER 0 | LEFT | DOWN | RIGHT | 0 | . | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+ */
+
+
+ [_WINDOWS] = LAYOUT_default(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_HOME, KC_END, KC_PGUP, KC_PGDN, KC_MENU,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LGUI, KC_LALT, KC_LCTL, KC_SPC, KC_RCTL, KC_RALT, TO(0), KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT
+ ),
+};
+
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch (keycode) {
+ // dynamically generate these.
+ case EXPOSE:
+ SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_UP) SS_UP(X_LCTRL));
+ return false;
+ case LAUNCH:
+ SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_L) SS_UP(X_LCTRL));
+ return false;
+ case DOCK:
+ SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LGUI) SS_TAP(X_D) SS_UP(X_LGUI) SS_UP(X_LALT));
+ return false;
+ case SCRCAP: //screen capture
+ SEND_STRING(SS_DOWN(X_LCTRL) SS_TAP(X_S) SS_UP(X_LCTRL));
+ return false;
+ case CS1: //custom shortcut 1
+ SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LGUI) SS_TAP(X_1) SS_UP(X_LGUI) SS_UP(X_LALT));
+ return false;
+ case CS2: //custom shortcut 2
+ SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LGUI) SS_TAP(X_2) SS_UP(X_LGUI) SS_UP(X_LALT));
+ return false;
+ case QALL: //quit all applications
+ SEND_STRING(SS_DOWN(X_LALT) SS_DOWN(X_LGUI) SS_TAP(X_Q) SS_UP(X_LGUI) SS_UP(X_LALT));
+ return false;
+ }
+ return false;
+ }
+ return true;
+};
+
diff --git a/keyboards/espectro/keymaps/mac/readme.md b/keyboards/espectro/keymaps/mac/readme.md
new file mode 100644
index 000000000..fb6226018
--- /dev/null
+++ b/keyboards/espectro/keymaps/mac/readme.md
@@ -0,0 +1,56 @@
+# This is u/TurboMech's keyboard layout for Espectro.
+
+## It is designed for Mac OS, due to the specific functions created.
+
+### Here is the layout found in the keymap.c file.
+##### I use shortcuts for the Function row (above number row) listed below
+ - Scrn Bright Up: F14
+ - Scrn Bright Down: F15
+ - Expose: LCTRL + Up
+ - Launchpad: LCTRL + L
+ - Show Desktop: F11
+ - Show/Hide Dock: LALT + LGUI + D
+ - Screen Capture: LCTRL + S
+ - Custom Shortcut 1: LCTRL + LGUI + 1
+ - Custom Shortcut 2: LCTRL + LGUI + 2
+ - use the custom shortcuts for whatever you want: launch an application, a macro, etc.
+ - Play/Pause: exactly that
+ - Mute / Volume Up / Volume Down: exactly what it says
+ - QALL: Quit all applications
+
+ ##### Going down the right side from Vol Down:
+ - POWER: this serves as the power button on Mac's only. Press and hold the button as you would on your Macbook or iMac keyboard.
+ - Menu: this slides the notification bar on the right side (its the same as on iPhones/ iPads)
+
+### See below keymaps for how to setup shortcuts on Mac
+
+#### Base Layer
+```
+Needs updating.
+```
+#### Function Layer 1 - See above for shortcuts
+```
+Needs updating
+```
+
+#### How to use/ setup shortcuts on Mac
+- First navigate to System Preferences > Keyboard > Shortcuts
+ - You can use any of them in here
+ - Just set them to the shortcut keys listed above
+
+#### How to make your own (to launch applications, quit all, etc.)
+- Navigate to Automator > New Document > click Service > Choose
+- Now we have to setup our shortcut
+ - Here's how to setup the Quit All Shortcut
+ - In the right window select the Service recieves dropdown > select No Input
+ - At the top left click the Name (Search) > type quit > click and hold Quit All Applications > drag to the right hand box (under the Service Recieves)
+ - **IMPORTANT** You have to click the Run button at the upper right hand corner in order for these to actually work.
+ - Now click File > Save > save it as Quit All Apps (or whatever you want) / you can also just exit out and it'll ask you if you want to save
+- Navigate back to System Preferences > Keyboard > Shortcuts
+ - The new shortcut can be found under services, set it to one of the shortcuts I listed above and done
+- The same applies for applications in the Name (search) just type the application you want to have as shortcut. Don't forget to run it, then do the same steps
+ to set it up as a shortcut.
+
+
+
+
diff --git a/keyboards/espectro/keymaps/mapdev/keymap.c b/keyboards/espectro/keymaps/mapdev/keymap.c
new file mode 100644
index 000000000..89d412b2d
--- /dev/null
+++ b/keyboards/espectro/keymaps/mapdev/keymap.c
@@ -0,0 +1,87 @@
+/*
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include QMK_KEYBOARD_H
+
+#define _BL 0 //Base layer
+#define _FN1 1 //Function layer
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* BL
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | | | | | |
+| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | P SCN | HOME | END | P UP | P DOWN | DEL |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | | | | | | | | | | | | | BACK | NUM | | | |
+| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | SPACE | LOCK | / | * | - |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|_________________|________|________|________|________|
+| | | | | | | | | | | | [ | ] | | | | | |
+| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | |
+|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________| + |
+| | | | | | | | | | | ; | ' | | | | | |
+| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | | | | | | , | . | / | | | | | | |
+| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | |
+|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| ENTER |
+| | | | | | | MO | | | | | | |
+| CTRL | LGUI | L ALT | SPACE | R ALT | R CTRL | _FN | LEFT | DOWN | RIGHT | 0 | . | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+ */
+
+ [_BL] = LAYOUT_default(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLD, KC_VOLU, 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_BSPC, KC_DEL, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6,
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ MO(_FN1), KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, _______, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT
+ ),
+
+/* FN_1
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | VOL | VOL | NEXT | | |
+| RESET | | | | | | | | | | | | | MUTE | DOWN | UP | TRACK | HOME | END |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | RGB | RGB | RGB | RGB | RGB | RGB | RGB | RGB | | | | | | | | | |
+| | TOGGLE | MODE |INCREASE|DECREASE| HUE | HUE | SAT | | | | | | DELETE | | | | |
+|________|________|________|________|________|INCREASE|DECREASE|INCREASE|DECREASE|________|________|________|________|_________________|________|________|________|________|
+| | BACK | BACK | | | | | | | | | | | | | | | |
+| | LIGHT | LIGHT | | | | | | | | | | | | | | | |
+|____________| TOGGLE |INCREASE|DECREASE|________|________|________|________|________|________|________|________|________|_____________|________|________|________| |
+| | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | |
+|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________| |
+| | | | | | | | | | | | | |
+| | | | | | | | | | | | | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+ */
+
+ [_FN1] = LAYOUT_default(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, KC_END, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, KC_DEL, _______, _______, _______, _______,
+ _______, BL_TOGG, BL_INC, BL_DEC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
+
diff --git a/keyboards/espectro/readme.md b/keyboards/espectro/readme.md
new file mode 100644
index 000000000..c4c0edc7f
--- /dev/null
+++ b/keyboards/espectro/readme.md
@@ -0,0 +1,15 @@
+# Espectro
+
+![Espectro](https://cdn.shopify.com/s/files/1/1697/5323/products/IMG_0162_53a5ca83-3ce5-4741-92e8-10f769cf5ee1_1024x1024.jpg?v=1540701787)
+
+A 96% keyboard made and sold by MECHKEYS [More info on MECHKEYS](https://mechkeys.ca).
+
+Keyboard Maintainer: [TurboMech](https://github.com/TurboMech)
+Hardware Supported: Espectro
+Hardware Availability: [MECHKEYS](https://mechkeys.ca)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make espectro: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/espectro/rules.mk b/keyboards/espectro/rules.mk
new file mode 100755
index 000000000..2c28fe850
--- /dev/null
+++ b/keyboards/espectro/rules.mk
@@ -0,0 +1,61 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Bootloader
+# 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 = atmel-dfu
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/evil80/config.h b/keyboards/evil80/config.h
new file mode 100644
index 000000000..81138a770
--- /dev/null
+++ b/keyboards/evil80/config.h
@@ -0,0 +1,64 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Evil
+#define PRODUCT Evil80
+#define DESCRIPTION QMK keyboard firmware for Evil80
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 16
+
+/* Planck PCB default pin-out */
+#define MATRIX_ROW_PINS { F1, F4, F5, F0, B3, B0 }
+#define MATRIX_COL_PINS { B2, D0, D1, D2, D3, D5, D4, D6, D7, B4, B1, C6, C7, E6, F6, F7 }
+#define UNUSED_PINS
+
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_BREATHING
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/evil80/evil80.c b/keyboards/evil80/evil80.c
new file mode 100644
index 000000000..d4653d049
--- /dev/null
+++ b/keyboards/evil80/evil80.c
@@ -0,0 +1,47 @@
+#include "evil80.h"
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ led_init_ports();
+ 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_init_ports(void) {
+ DDRB |= (1<<6) | (1<<7); // OUT
+}
+
+void led_set_kb(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_CAPS_LOCK))
+ {
+ PORTB |= (1<<6); // HI
+ }
+ else
+ {
+ PORTB &= ~(1<<6); // LO
+ }
+
+ if (usb_led & (1<<USB_LED_SCROLL_LOCK))
+ {
+ PORTB |= (1<<7); // HI
+ }
+ else
+ {
+ PORTB &= ~(1<<7); // LO
+ }
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/evil80/evil80.h b/keyboards/evil80/evil80.h
new file mode 100644
index 000000000..a880de98f
--- /dev/null
+++ b/keyboards/evil80/evil80.h
@@ -0,0 +1,23 @@
+#ifndef EVIL80_H
+#define EVIL80_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
+ K500, K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+ K501, K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, \
+ K502, K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
+ K503, K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K414, \
+ K504, K505, K506, K507, K509, K510, K511, K512, K513, K514, K515 \
+) \
+{ \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, KC_NO, KC_NO, KC_NO }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO, K414, KC_NO }, \
+ { K500, K501, K502, K503, K504, K505, K506, K507, KC_NO, K509, K510, K511, K512, K513, K514, K515 } \
+}
+
+#endif
diff --git a/keyboards/evil80/info.json b/keyboards/evil80/info.json
new file mode 100644
index 000000000..8b3b4cd0d
--- /dev/null
+++ b/keyboards/evil80/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "Evil80",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 90,
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":2, "y":0}, {"label":"F2", "x":3, "y":0}, {"label":"F3", "x":4, "y":0}, {"label":"F4", "x":5, "y":0}, {"label":"F5", "x":6.5, "y":0}, {"label":"F6", "x":7.5, "y":0}, {"label":"F7", "x":8.5, "y":0}, {"label":"F8", "x":9.5, "y":0}, {"label":"F9", "x":11, "y":0}, {"label":"F10", "x":12, "y":0}, {"label":"F11", "x":13, "y":0}, {"label":"F12", "x":14, "y":0}, {"label":"PrtSc", "x":15.25, "y":0}, {"label":"Scroll Lock", "x":16.25, "y":0}, {"label":"Pause", "x":17.25, "y":0}, {"label":"~", "x":0, "y":1.5}, {"label":"!", "x":1, "y":1.5}, {"label":"@", "x":2, "y":1.5}, {"label":"#", "x":3, "y":1.5}, {"label":"$", "x":4, "y":1.5}, {"label":"%", "x":5, "y":1.5}, {"label":"^", "x":6, "y":1.5}, {"label":"&", "x":7, "y":1.5}, {"label":"*", "x":8, "y":1.5}, {"label":"(", "x":9, "y":1.5}, {"label":")", "x":10, "y":1.5}, {"label":"_", "x":11, "y":1.5}, {"label":"+", "x":12, "y":1.5}, {"label":"Backspace", "x":13, "y":1.5, "w":2}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"x":12.75, "y":3.5}, {"label":"Enter", "x":13.75, "y":3.5, "w":1.25}, {"label":"Shift", "x":0, "y":4.5, "w":1.25}, {"x":1.25, "y":4.5}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":1.75}, {"x":14, "y":4.5}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/evil80/keymaps/default/keymap.c b/keyboards/evil80/keymaps/default/keymap.c
new file mode 100644
index 000000000..1706517a2
--- /dev/null
+++ b/keyboards/evil80/keymaps/default/keymap.c
@@ -0,0 +1,31 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: Winkey */
+ 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_NUHS, KC_ENT, \
+ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH,KC_RSFT, MO(2), KC_UP, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ /* 1: Winkeyless */
+ 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_NUHS, KC_ENT, \
+ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH,KC_RSFT, MO(2), KC_UP, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_NO,KC_RALT,KC_RGUI,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ /* 2: Fn */
+ LAYOUT(
+ KC_TRNS, BL_ON, BL_OFF,BL_STEP,BL_BRTG,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,\
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,\
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,\
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS, 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/evil80/readme.md b/keyboards/evil80/readme.md
new file mode 100644
index 000000000..bc21855eb
--- /dev/null
+++ b/keyboards/evil80/readme.md
@@ -0,0 +1,15 @@
+# Evil 80
+
+![Evil 80](https://i.imgur.com/f5dKuML.jpg)
+
+Also known as the Odyssey, the Evil 80 is a QMK-powered aluminum TKL keyboard featuring an Aviator connector cable. Sold via a Geekhack group buy in January of 2018.
+
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: Evil 80-Odyssey QMK version
+Hardware Availability: [Geekhack](https://geekhack.org/index.php?topic=93434.0)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make evil80: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/evil80/rules.mk b/keyboards/evil80/rules.mk
new file mode 100644
index 000000000..1067b4344
--- /dev/null
+++ b/keyboards/evil80/rules.mk
@@ -0,0 +1,68 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# change 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 = 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.
+API_SYSEX_ENABLE = no
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/facew/readme.md b/keyboards/facew/readme.md
index 727c04d93..6d7186704 100644
--- a/keyboards/facew/readme.md
+++ b/keyboards/facew/readme.md
@@ -7,18 +7,47 @@ but does have in switch LEDs. Also unlike the B.Face, it is based on ps2avru ins
is designed and manufactured in Korea. It originally uses BootMapperClient for programming but
can now also use QMK.
-Keyboard Maintainer: [MechMerlin](www.github.com/mechmerlin)
-Hardware Supported: FaceW Sprit Edition PCB
+Keyboard Maintainer: [MechMerlin](www.github.com/mechmerlin)
+Hardware Supported: FaceW Sprit Edition PCB
Hardware Availability: https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=1352
## Keyboard Notes
- The FaceW Sprit Edition can be purchased on [mechanicalkeyboards.com](www.mechanicalkeyboards.com)
- Uses ps2avru instead of ps2avrgb
- To put in reset mode hold `q` while inserting the USB cable
-- When flashing, type `bootloadHID -r yourfile.hex` and wait awhile
Make example for this keyboard (after setting up your build environment):
make facew:default
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/fc660c/keymaps/dbroqua/keymap.c b/keyboards/fc660c/keymaps/dbroqua/keymap.c
new file mode 100644
index 000000000..62ef234c7
--- /dev/null
+++ b/keyboards/fc660c/keymaps/dbroqua/keymap.c
@@ -0,0 +1,47 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* BASE layer: Default Layer
+ * ,--------------------------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace | | Ins |
+ * |-----------------------------------------------------------------------------------------+ +-----+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp | | Del |
+ * |-----------------------------------------------------------------------------------------+ +-----+
+ * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |--------------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Shift | Up |
+ * +--------------------------------------------------------------------------------------------+-----+
+ * | Ctrl | Gui | Alt | Space | Alt | Gui | Fn | Left| Down|Right|
+ * `--------------------------------------------------------------------------------------------------´
+ */
+ [0] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL,
+ KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,
+ KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT, KC_UP,
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,MO(1), KC_LEFT,KC_DOWN,KC_RGHT
+ ),
+ /* FN layer
+ * ,--------------------------------------------------------------------------------------------------.
+ * | Esc| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | | | |
+ * |-----------------------------------------------------------------------------------------+ +-----+
+ * | | | | | | | | |PrtSc| Slck| Paus| | | | | |
+ * |-----------------------------------------------------------------------------------------+ +-----+
+ * | | Vol-| Vol+| Mute|Eject| | | | Home| PgUp| | | |
+ * |--------------------------------------------------------------------------------------------+
+ * | | Prev| Play| Next| | | | | End | PgDn| | | |
+ * +--------------------------------------------------------------------------------------------+-----+
+ * | | | | | | | | | | |
+ * `--------------------------------------------------------------------------------------------------´
+ */
+ [1] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ _______,_______,_______,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK,KC_PAUS,_______,_______,_______, _______,
+ _______,KC_VOLD,KC_VOLU,KC_MUTE,KC_EJCT,_______,_______,_______,KC_HOME,KC_PGUP,_______,_______, _______,
+ _______,KC_MPRV,KC_MPLY,KC_MNXT,_______,_______,_______,_______,KC_END, KC_PGDN,_______,_______, _______,
+ _______,_______,_______, _______, _______,_______,MO(1), _______,_______,_______
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
diff --git a/keyboards/fc660c/keymaps/spacebarracecar/config.h b/keyboards/fc660c/keymaps/spacebarracecar/config.h
new file mode 100644
index 000000000..9d83a2700
--- /dev/null
+++ b/keyboards/fc660c/keymaps/spacebarracecar/config.h
@@ -0,0 +1,8 @@
+#pragma once
+
+/*
+higher value means deeper actuation point, less sensitive
+this should probably stay in the range +/-5.
+*/
+#undef ACTUATION_DEPTH_ADJUSTMENT
+#define ACTUATION_DEPTH_ADJUSTMENT -1
diff --git a/keyboards/fc660c/keymaps/spacebarracecar/keymap.c b/keyboards/fc660c/keymaps/spacebarracecar/keymap.c
new file mode 100644
index 000000000..760b83b9f
--- /dev/null
+++ b/keyboards/fc660c/keymaps/spacebarracecar/keymap.c
@@ -0,0 +1,38 @@
+#include QMK_KEYBOARD_H
+#include "spacebarracecar.h"
+
+enum layers {
+ _BASE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BASE] = LAYOUT(
+ KC_ESC, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, DE_MINS,CU_EQL, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, CU_Z, KC_U, KC_I, KC_O, KC_P, CU_LBRC,CU_RBRC,CU_BSLS, KC_DEL,
+ CU_NAV, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, CU_SCLN,CU_QUOT, KC_ENT,
+ CU_LSFT,CU_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, CU_COMM,CU_DOT, CU_SLSH,CU_RSFT, KC_UP,
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
+ ),
+
+ [_DEADKEY] = LAYOUT(
+ CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, CU_ED,
+ _______,CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED,
+ _______,CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, CU_DDQ ,
+ _______,CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______,
+ _______,_______,_______, CU_DDQ, _______,_______,_______, _______,_______,_______
+ ),
+
+ [_NAV] = LAYOUT(
+ CU_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, CU_GAME,
+ _______,KC_PGDN,KC_UP, KC_PGUP,KC_HOME,XXXXXXX,XXXXXXX,XXXXXXX,GUIU, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, CU_ESCT,
+ _______,KC_LEFT,KC_DOWN,KC_RGHT,KC_END, XXXXXXX,XXXXXXX,GUIL, GUID, GUIR, XXXXXXX,XXXXXXX, KC_ENT,
+ _______,KC_MPRV,KC_MPLY,KC_MNXT,KC_VOLD,KC_VOLU,KC_MUTE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,_______, KC_PGUP,
+ RESET, _______,_______, KC_SPC, _______,_______,_______, KC_HOME,KC_PGDN,KC_END
+ )
+
+};
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
diff --git a/keyboards/fc660c/keymaps/spacebarracecar/readme.md b/keyboards/fc660c/keymaps/spacebarracecar/readme.md
new file mode 100644
index 000000000..88c447e75
--- /dev/null
+++ b/keyboards/fc660c/keymaps/spacebarracecar/readme.md
@@ -0,0 +1,5 @@
+# SpacebarRacecar US-International FC660C Keymap for German PCs
+
+This keymap emulates most keys of the US-International layout on PCs that have German set as input language.
+This allows the use of the keyboard on any PC in Germany without the need to change any settings.
+The keymap is mostly based on the US-International layout.
diff --git a/keyboards/fc660c/keymaps/spacebarracecar/rules.mk b/keyboards/fc660c/keymaps/spacebarracecar/rules.mk
new file mode 100644
index 000000000..8ee642a4a
--- /dev/null
+++ b/keyboards/fc660c/keymaps/spacebarracecar/rules.mk
@@ -0,0 +1,6 @@
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+
+# Userspace defines
+GERMAN_ENABLE = yes # Enable Custom US Ansi Keycodes for PC with German set as input language
diff --git a/keyboards/fc980c/fc980c.h b/keyboards/fc980c/fc980c.h
index 74c468061..ffb02e257 100644
--- a/keyboards/fc980c/fc980c.h
+++ b/keyboards/fc980c/fc980c.h
@@ -14,11 +14,9 @@ GNU General Public License for more details.
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 FC980C_H
-#define FC980C_H
+#pragma once
#include "quantum.h"
-// #include "quantum_keycodes.h"
/*
----------------------------------------------------------------------------------------------------------------------
@@ -37,42 +35,31 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
----------------------------------------------------------------------------------------------------------------------
*/
-#define LAYOUT( \
- K0D, K2D, K5D, K3D, K6D, K7D, K7F, K7E, K7C, K72, K71, K70, K73, K74, K76, K77, K75, \
- K0A, K69, K59, K58, K5B, K6F, K5F, K5E, K6C, K5C, K52, K51, K50, K55, K54, K56, K57, K65, \
- K6A, K39, K68, K6B, K3B, K3F, K6E, K3E, K3C, K62, K61, K60, K33, K53, K64, K66, K67, K25, \
- K3A, K29, K38, K28, K2B, K2F, K2E, K2C, K1C, K32, K31, K20, K63, K24, K26, K27, \
- K2A, K18, K08, K1B, K0B, K1F, K1E, K0E, K22, K11, K21, K30, K34, K14, K16, K17, K15, \
- K1A, K09, K19, K0F, K02, K01, K10, K00, K04, K06, K07, K05) \
- { \
- {K00, K01, K02, KC_NO, K04, K05, K06, K07, \
- K08, K09, K0A, K0B, KC_NO, K0D, K0E, K0F}, \
- {K10, K11, KC_NO, KC_NO, K14, K15, K16, K17, \
- K18, K19, K1A, K1B, K1C, KC_NO, K1E, K1F}, \
- {K20, K21, K22, KC_NO, K24, K25, K26, K27, \
- K28, K29, K2A, K2B, K2C, K2D, K2E, K2F}, \
- {K30, K31, K32, K33, K34, KC_NO, KC_NO, KC_NO, \
- K38, K39, K3A, K3B, K3C, K3D, K3E, K3F}, \
- {KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO}, \
- {K50, K51, K52, K53, K54, K55, K56, K57, \
- K58, K59, KC_NO, K5B, K5C, K5D, K5E, K5F}, \
- {K60, K61, K62, K63, K64, K65, K66, K67, \
- K68, K69, K6A, K6B, K6C, K6D, K6E, K6F}, \
- { \
- K70, K71, K72, K73, K74, K75, K76, K77, \
- KC_NO, KC_NO, KC_NO, KC_NO, K7C, K7D, K7E, K7F \
- } \
- }
+#define LAYOUT( \
+ K0D, K2D, K5D, K3D, K6D, K7D, K7F, K7E, K7C, K72, K71, K70, K73, K74, K76, K77, K75, \
+ K0A, K69, K59, K58, K5B, K6F, K5F, K5E, K6C, K5C, K52, K51, K50, K55, K54, K56, K57, K65, \
+ K6A, K39, K68, K6B, K3B, K3F, K6E, K3E, K3C, K62, K61, K60, K33, K53, K64, K66, K67, K25, \
+ K3A, K29, K38, K28, K2B, K2F, K2E, K2C, K1C, K32, K31, K20, K63, K24, K26, K27, \
+ K2A, K18, K08, K1B, K0B, K1F, K1E, K0E, K22, K11, K21, K30, K34, K14, K16, K17, K15, \
+ K1A, K09, K19, K0F, K02, K01, K10, K00, K04, K06, K07, K05 \
+) { \
+ { K00, K01, K02, KC_NO, K04, K05, K06, K07, K08, K09, K0A, K0B, KC_NO, K0D, K0E, K0F }, \
+ { K10, K11, KC_NO, KC_NO, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO, K1E, K1F }, \
+ { K20, K21, K22, KC_NO, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, KC_NO, KC_NO, KC_NO, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, KC_NO, K5B, K5C, K5D, K5E, K5F }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K6A, K6B, K6C, K6D, K6E, K6F }, \
+ { K70, K71, K72, K73, K74, K75, K76, K77, KC_NO, KC_NO, KC_NO, KC_NO, K7C, K7D, K7E, K7F } \
+}
/*
LAYOUT(
- _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______,_______,_______,
- _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______,_______,_______,
- _______,_______,_______, _______, _______,_______,_______, _______,_______,_______, _______,_______
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
)
*/
-#endif
diff --git a/keyboards/fc980c/info.json b/keyboards/fc980c/info.json
index f3007f2f8..a15ff216c 100644
--- a/keyboards/fc980c/info.json
+++ b/keyboards/fc980c/info.json
@@ -6,105 +6,106 @@
"height": 6.75,
"layouts": {
"LAYOUT": {
+ "key_count": 98,
"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": "Delete", "x": 15.5, "y": 0 },
- { "label": "Insert", "x": 16.5, "y": 0 },
- { "label": "Pg Up", "x": 17.5, "y": 0 },
- { "label": "Pg Dn", "x": 18.5, "y": 0 },
- { "label": "~", "x": 0, "y": 1.5 },
- { "label": "!", "x": 1, "y": 1.5 },
- { "label": "@", "x": 2, "y": 1.5 },
- { "label": "#", "x": 3, "y": 1.5 },
- { "label": "$", "x": 4, "y": 1.5 },
- { "label": "%", "x": 5, "y": 1.5 },
- { "label": "^", "x": 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": "Num Lock", "x": 15.5, "y": 1.5 },
- { "label": "/", "x": 16.5, "y": 1.5 },
- { "label": "*", "x": 17.5, "y": 1.5 },
- { "label": "-", "x": 18.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": "7", "x": 15.5, "y": 2.5 },
- { "label": "8", "x": 16.5, "y": 2.5 },
- { "label": "9", "x": 17.5, "y": 2.5 },
- { "label": "+", "x": 18.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": 15.5, "y": 3.5 },
- { "label": "5", "x": 16.5, "y": 3.5 },
- { "label": "6", "x": 17.5, "y": 3.5 },
- { "label": "Shift", "x": 0, "y": 4.5, "w": 2.25 },
- { "label": "Z", "x": 2.25, "y": 4.5 },
- { "label": "X", "x": 3.25, "y": 4.5 },
- { "label": "C", "x": 4.25, "y": 4.5 },
- { "label": "V", "x": 5.25, "y": 4.5 },
- { "label": "B", "x": 6.25, "y": 4.5 },
- { "label": "N", "x": 7.25, "y": 4.5 },
- { "label": "M", "x": 8.25, "y": 4.5 },
- { "label": "<", "x": 9.25, "y": 4.5 },
- { "label": ">", "x": 10.25, "y": 4.5 },
- { "label": "?", "x": 11.25, "y": 4.5 },
- { "label": "Shift", "x": 12.25, "y": 4.5, "w": 1.75 },
- { "label": "1", "x": 15.5, "y": 4.5 },
- { "label": "2", "x": 16.5, "y": 4.5 },
- { "label": "3", "x": 17.5, "y": 4.5 },
- { "label": "Enter", "x": 18.5, "y": 4.5, "h": 2 },
- { "label": "\u2191", "x": 14.25, "y": 4.75 },
- { "label": "Ctrl", "x": 0, "y": 5.5, "w": 1.25 },
- { "label": "Win", "x": 1.25, "y": 5.5 },
- { "label": "Alt", "x": 2.25, "y": 5.5, "w": 1.25 },
- { "x": 3.5, "y": 5.5, "w": 6 },
- { "label": "Alt", "x": 9.5, "y": 5.5, "w": 1.25 },
- { "label": "Ctrl", "x": 10.75, "y": 5.5 },
- { "label": "Fn", "x": 11.75, "y": 5.5, "w": 1.25 },
- { "label": "0", "x": 16.5, "y": 5.5 },
- { "label": ".", "x": 17.5, "y": 5.5 },
- { "label": "\u2190", "x": 13.25, "y": 5.75 },
- { "label": "\u2193", "x": 14.25, "y": 5.75 },
- { "label": "\u2192", "x": 15.25, "y": 5.75 }
+ {"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":"Delete", "x":15.5, "y":0},
+ {"label":"Insert", "x":16.5, "y":0},
+ {"label":"Page Up", "x":17.5, "y":0},
+ {"label":"Page Down", "x":18.5, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Num Lock", "x":15.5, "y":1.5},
+ {"label":"/", "x":16.5, "y":1.5},
+ {"label":"*", "x":17.5, "y":1.5},
+ {"label":"-", "x":18.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":"7", "x":15.5, "y":2.5},
+ {"label":"8", "x":16.5, "y":2.5},
+ {"label":"9", "x":17.5, "y":2.5},
+ {"label":"+", "x":18.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":15.5, "y":3.5},
+ {"label":"5", "x":16.5, "y":3.5},
+ {"label":"6", "x":17.5, "y":3.5},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":1.75},
+ {"label":"Up", "x":14.25, "y":4.75},
+ {"label":"1", "x":15.5, "y":4.5},
+ {"label":"2", "x":16.5, "y":4.5},
+ {"label":"3", "x":17.5, "y":4.5},
+ {"label":"Enter", "x":18.5, "y":4.5, "h":2},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5.5},
+ {"label":"Alt", "x":2.25, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.5, "y":5.5, "w":6},
+ {"label":"Alt", "x":9.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":10.75, "y":5.5},
+ {"label":"Fn", "x":11.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":13.25, "y":5.75},
+ {"label":"Down", "x":14.25, "y":5.75},
+ {"label":"Right", "x":15.25, "y":5.75},
+ {"label":"0", "x":16.5, "y":5.5},
+ {"label":".", "x":17.5, "y":5.5}
]
}
}
diff --git a/keyboards/felix/config.h b/keyboards/felix/config.h
index f70089af4..003fe87dc 100644
--- a/keyboards/felix/config.h
+++ b/keyboards/felix/config.h
@@ -42,8 +42,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
/* there is no rgb underglow by default. */
#define RGB_DI_PIN
@@ -53,4 +51,4 @@
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/fortitude60/config.h b/keyboards/fortitude60/config.h
index 863722d7d..27a44ab92 100644
--- a/keyboards/fortitude60/config.h
+++ b/keyboards/fortitude60/config.h
@@ -19,5 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define CONFIG_H
#include "config_common.h"
+#include <serial_config.h>
#endif // CONFIG_H
diff --git a/keyboards/fortitude60/keymaps/default/config.h b/keyboards/fortitude60/keymaps/default/config.h
index b356791fc..174837348 100644
--- a/keyboards/fortitude60/keymaps/default/config.h
+++ b/keyboards/fortitude60/keymaps/default/config.h
@@ -28,7 +28,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define MASTER_RIGHT
#define EE_HANDS
-#define USE_SERIAL_PD2
/* #undef RGBLED_NUM */
/* #define RGBLIGHT_ANIMATIONS */
/* #define RGBLED_NUM 12 */
diff --git a/keyboards/fortitude60/keymaps/default/keymap.c b/keyboards/fortitude60/keymaps/default/keymap.c
index 18d2527e4..f0b9964ab 100644
--- a/keyboards/fortitude60/keymaps/default/keymap.c
+++ b/keyboards/fortitude60/keymaps/default/keymap.c
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | [ | ] | N | M | , | . | / |Enter |
* `-------------+------+------+------+------+------+------+------+------+------+------+-------------'
- * | GUI | Ctrl |Lower |Space | Ctrl |Enter |Space |Raise | Alt | GUI |
+ * | GUI | Alt |Lower |Space | Ctrl |Enter |Space |Raise | Alt | GUI |
* `---------------------------------------------------------------------'
*/
[_QWERTY] = LAYOUT( \
@@ -62,7 +62,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | [ | ] | K | M | , | . | / |Enter |
* `-------------+------+------+------+------+------+------+------+------+------+------+-------------'
- * | GUI | Ctrl |Lower |Space | Ctrl |Enter |Space |Raise | Alt | GUI |
+ * | GUI | Alt |Lower |Space | Ctrl |Enter |Space |Raise | Alt | GUI |
* `---------------------------------------------------------------------'
*/
[_COLEMAK] = LAYOUT( \
@@ -83,7 +83,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
* | Shift| ; | Q | J | K | X | [ | ] | B | M | W | V | Z |Enter |
* `-------------+------+------+------+------+------+------+------+------+------+------+-------------'
- * | GUI | Ctrl |Lower |Space | Ctrl |Enter |Space |Raise | Alt | GUI |
+ * | GUI | Alt |Lower |Space | Ctrl |Enter |Space |Raise | Alt | GUI |
* `---------------------------------------------------------------------'
*/
[_DVORAK] = LAYOUT( \
@@ -119,9 +119,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------. ,-----------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
* |------+------+------+------+------+------. ,------+------+------+------+------+------|
- * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * | ` | 1 | ↑ | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+------. ,------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | | |
+ * | Del | ← | ↓ | → | F4 | F5 | | F6 | - | = | [ | ] | | |
* |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | | | F12 |ISO # |ISO / | | | |
* `-------------+------+------+------+------+------+------+------+------+------+------+-------------'
diff --git a/keyboards/fortitude60/keymaps/default/rules.mk b/keyboards/fortitude60/keymaps/default/rules.mk
index e0ed6f0c2..1964bd0a7 100644
--- a/keyboards/fortitude60/keymaps/default/rules.mk
+++ b/keyboards/fortitude60/keymaps/default/rules.mk
@@ -1 +1,2 @@
RGBLIGHT_ENABLE = no
+BACKLIGHT_ENABLE = no \ No newline at end of file
diff --git a/keyboards/fortitude60/rev1/config.h b/keyboards/fortitude60/rev1/config.h
index 4ba195ff8..b89f5c7df 100644
--- a/keyboards/fortitude60/rev1/config.h
+++ b/keyboards/fortitude60/rev1/config.h
@@ -64,12 +64,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
)
/* ws2812 RGB LED */
-/* #define RGB_DI_PIN D3 */
-/* #define RGBLIGHT_TIMER */
-/* #define RGBLED_NUM 16 // Number of LEDs */
-/* #define ws2812_PORTREG PORTD */
-/* #define ws2812_DDRREG DDRD */
-
+#ifdef RGBLIGHT_ENABLE
+ #define RGB_DI_PIN B5
+
+ #define RGBLED_NUM 18 // Number of LEDs */
+#endif
/*
* Feature disable options
* These options are also useful to firmware size reduction.
diff --git a/keyboards/fortitude60/rev1/rules.mk b/keyboards/fortitude60/rev1/rules.mk
index bd518d8f2..e69de29bb 100644
--- a/keyboards/fortitude60/rev1/rules.mk
+++ b/keyboards/fortitude60/rev1/rules.mk
@@ -1 +0,0 @@
-BACKLIGHT_ENABLE = yes
diff --git a/keyboards/fortitude60/rules.mk b/keyboards/fortitude60/rules.mk
index 7b2557b70..3d1745c6f 100644
--- a/keyboards/fortitude60/rules.mk
+++ b/keyboards/fortitude60/rules.mk
@@ -62,7 +62,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
USE_SERIAL = yes # Serial support only on fortitude60
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
diff --git a/keyboards/fortitude60/serial.c b/keyboards/fortitude60/serial.c
index 46dfad021..6006ebf1b 100644
--- a/keyboards/fortitude60/serial.c
+++ b/keyboards/fortitude60/serial.c
@@ -1,5 +1,10 @@
/*
* WARNING: be careful changing this code, it is very timing dependent
+ *
+ * 2018-10-28 checked
+ * avr-gcc 4.9.2
+ * avr-gcc 5.4.0
+ * avr-gcc 7.3.0
*/
#ifndef F_CPU
@@ -9,227 +14,577 @@
#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
-#ifndef USE_I2C
+#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
+ }
+};
-// Serial pulse period in microseconds. Its probably a bad idea to lower this
-// value.
-#define SERIAL_DELAY 24
+void serial_master_init(void)
+{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
+void serial_slave_init(void)
+{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
+// 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(void) {
+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 serial_master_init(void) {
- serial_output();
- serial_high();
+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 serial_slave_init(void) {
- serial_input();
-
-#ifndef USE_SERIAL_PD2
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
+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
- // Enable INT2
- EIMSK |= _BV(INT2);
- // Trigger on falling edge of INT2
- EICRA &= ~(_BV(ISC20) | _BV(ISC21));
+ // Trigger on falling edge of INT0-INT3
+ EICRA &= EICRx_BIT;
#endif
}
-// Used by the master to synchronize timing with the slave.
+// Used by the sender to synchronize timing with the reciver.
+static void sync_recv(void) NO_INLINE;
static
void sync_recv(void) {
- serial_input();
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
+ 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());
- serial_delay();
}
-// Used by the slave to send a synchronization signal to the master.
+// 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_output();
-
serial_low();
serial_delay();
-
serial_high();
}
// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
- serial_input();
- for ( uint8_t i = 0; i < 8; ++i) {
- byte = (byte << 1) | serial_read_pin();
- serial_delay();
- _delay_us(1);
+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
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 8;
- serial_output();
- while( b-- ) {
- if(data & (1 << b)) {
- serial_high();
- } else {
- serial_low();
+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();
- }
-}
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- sync_send();
+ serial_low(); // sync_send() / senc_recv() need raise edge
+}
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_slave_buffer[i]);
+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();
- checksum += serial_slave_buffer[i];
+ serial_write_chunk(data,8);
}
- serial_write_byte(checksum);
- sync_send();
+}
- // wait for the sync to finish sending
- serial_delay();
+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;
+}
- // read the middle of pulses
- _delay_us(SERIAL_DELAY/2);
+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
+}
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_master_buffer[i] = serial_read_byte();
- sync_send();
- checksum_computed += serial_master_buffer[i];
+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;
}
- uint8_t checksum_received = serial_read_byte();
- sync_send();
+ serial_delay_half1();
- serial_input(); // end transaction
+ 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
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
+ // 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 {
- status &= ~SLAVE_DATA_CORRUPT;
+ *trans->status = TRANSACTION_ACCEPTED;
}
-}
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
+ sync_recv(); //weit initiator output to high
}
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
+/////////
+// start transaction by initiator
+//
+// int soft_serial_transaction(int sstd_index)
//
// Returns:
-// 0 => no error
-// 1 => slave did not respond
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
+// 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 slave that we want to start a transaction
+ // signal to the target that we want to start a transaction
serial_output();
serial_low();
- _delay_us(1);
+ _delay_us(SLAVE_INT_WIDTH_US);
- // wait for the slaves response
- serial_input();
- serial_high();
- _delay_us(SERIAL_DELAY);
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+ // wait for the target response
+ serial_input_with_pullup();
+ _delay_us(SLAVE_INT_RESPONSE_TIME);
- // check if the slave is present
+ // check if the target is present
if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
+ // target failed to pull the line low, assume not present
+ serial_output();
+ serial_high();
+ *trans->status = TRANSACTION_NO_RESPONSE;
sei();
- return 1;
+ return TRANSACTION_NO_RESPONSE;
}
- // if the slave is present syncronize with it
- sync_recv();
-
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_slave_buffer[i] = serial_read_byte();
- sync_recv();
- checksum_computed += serial_slave_buffer[i];
+#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);
}
- uint8_t checksum_received = serial_read_byte();
- sync_recv();
- if (checksum_computed != checksum_received) {
- sei();
- return 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
- uint8_t checksum = 0;
- // send data to the slave
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_master_buffer[i]);
- sync_recv();
- checksum += serial_master_buffer[i];
+ // 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);
}
- serial_write_byte(checksum);
- sync_recv();
// always, release the line when not in use
- serial_output();
- serial_high();
+ sync_send();
+ *trans->status = TRANSACTION_END;
sei();
- return 0;
+ 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/fortitude60/serial.h b/keyboards/fortitude60/serial.h
index 361f1881b..2e53928df 100644
--- a/keyboards/fortitude60/serial.h
+++ b/keyboards/fortitude60/serial.h
@@ -1,32 +1,89 @@
-#ifndef MY_SERIAL_H
-#define MY_SERIAL_H
+#ifndef SOFT_SERIAL_H
+#define SOFT_SERIAL_H
-#include "config.h"
#include <stdbool.h>
-/* TODO: some defines for interrupt setup */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
+// /////////////////////////////////////////////////////////////////
+// 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
+//
+// /////////////////////////////////////////////////////////////////
-#ifndef USE_SERIAL_PD2
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
-#else
-#define SERIAL_PIN_MASK _BV(PD2)
-#define SERIAL_PIN_INTERRUPT INT2_vect
-#endif
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
+//////////////// 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
+////////////////////////////////////////////////////////////////////////////
-// Buffers for master - slave communication
-extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
-extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+// 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))
-void serial_master_init(void);
-void serial_slave_init(void);
-int serial_update_buffers(void);
-bool serial_slave_data_corrupt(void);
+// 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
+
+#endif /* SOFT_SERIAL_H */
diff --git a/keyboards/fortitude60/serial_config.h b/keyboards/fortitude60/serial_config.h
new file mode 100644
index 000000000..d4a42bce3
--- /dev/null
+++ b/keyboards/fortitude60/serial_config.h
@@ -0,0 +1,10 @@
+#ifndef SOFT_SERIAL_CONFIG_H
+#define SOFT_SERIAL_CONFIG_H
+
+/* Soft Serial defines */
+#define SOFT_SERIAL_PIN D2
+
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH 1
+
+#endif /* SOFT_SERIAL_CONFIG_H */
diff --git a/keyboards/four_banger/config.h b/keyboards/four_banger/config.h
index 96011cbdf..761ddba71 100644
--- a/keyboards/four_banger/config.h
+++ b/keyboards/four_banger/config.h
@@ -40,12 +40,9 @@
/* key combination for command */
#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN E6
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
@@ -55,4 +52,4 @@
#define RGBLIGHT_VAL_STEP 8
#endif
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/four_banger/four_banger.h b/keyboards/four_banger/four_banger.h
index b0de731b9..a6da8dd0b 100644
--- a/keyboards/four_banger/four_banger.h
+++ b/keyboards/four_banger/four_banger.h
@@ -4,11 +4,11 @@
#include "quantum.h"
#define LAYOUT_ortho_2x2( \
- K00, K01, \
- K10, K11 \
+ K00, K01, \
+ K10, K11 \
) { \
- { K00, K01 }, \
- { K10, K11 } \
+ { K00, K01 }, \
+ { K10, K11 } \
}
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/four_banger/keymaps/default/keymap.c b/keyboards/four_banger/keymaps/default/keymap.c
index 6c5f7c8a5..3fea0afd4 100644
--- a/keyboards/four_banger/keymaps/default/keymap.c
+++ b/keyboards/four_banger/keymaps/default/keymap.c
@@ -5,20 +5,20 @@ enum custom_keycodes {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- LAYOUT_ortho_2x2(
- KC_1, KC_U,
- KC_P, UP_URL
- ),
+ LAYOUT_ortho_2x2(
+ KC_1, KC_U,
+ KC_P, UP_URL
+ ),
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case UP_URL:
- if (record->event.pressed) {
- SEND_STRING("http://1upkeyboards.com");
- }
- return false;
- break;
- }
- return true;
+ switch (keycode) {
+ case UP_URL:
+ if (record->event.pressed) {
+ SEND_STRING("http://1upkeyboards.com");
+ }
+ return false;
+ break;
+ }
+ return true;
}
diff --git a/keyboards/fourier/config.h b/keyboards/fourier/config.h
index 8f0524f97..cfb6bf4ff 100644
--- a/keyboards/fourier/config.h
+++ b/keyboards/fourier/config.h
@@ -16,13 +16,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
-
-#ifdef SUBPROJECT_rev1
- #include "rev1/config.h"
-#endif
-
-#endif
diff --git a/keyboards/fourier/fourier.h b/keyboards/fourier/fourier.h
index 4e9797b35..1b4585c82 100644
--- a/keyboards/fourier/fourier.h
+++ b/keyboards/fourier/fourier.h
@@ -1,12 +1,11 @@
-#ifndef FOURIER_H
-#define FOURIER_H
-
-#include "quantum.h"
+#pragma once
#ifdef KEYBOARD_fourier_rev1
#include "rev1.h"
#endif
+#include "quantum.h"
+
// Used to create a keymap using only KC_ prefixed keys
#define LAYOUT_kc( \
LA1, LA2, LA3, LA4, LA5, LA6, RA1, RA2, RA3, RA4, RA5, RA6, RA7, \
@@ -20,4 +19,3 @@
KC_##LC1, KC_##LC2, KC_##LC3, KC_##LC4, KC_##LC5, KC_##LC6, KC_##RC1, KC_##RC3, KC_##RC4, KC_##RC5, KC_##RC6, KC_##RC7, \
KC_##LD1, KC_##LD2, KC_##LD3, KC_##LD4, KC_##LD5, KC_##RD1, KC_##RD4, KC_##RD5, KC_##RD6, KC_##RD7 \
)
-#endif
diff --git a/keyboards/fourier/i2c.c b/keyboards/fourier/i2c.c
deleted file mode 100644
index 084c890c4..000000000
--- a/keyboards/fourier/i2c.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <util/twi.h>
-#include <avr/io.h>
-#include <stdlib.h>
-#include <avr/interrupt.h>
-#include <util/twi.h>
-#include <stdbool.h>
-#include "i2c.h"
-
-#ifdef USE_I2C
-
-// Limits the amount of we wait for any one i2c transaction.
-// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
-// 9 bits, a single transaction will take around 90μs to complete.
-//
-// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
-// poll loop takes at least 8 clock cycles to execute
-#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
-
-#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
-
-volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-static volatile uint8_t slave_buffer_pos;
-static volatile bool slave_has_register_set = false;
-
-// Wait for an i2c operation to finish
-inline static
-void i2c_delay(void) {
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-
- // easier way, but will wait slightly longer
- // _delay_us(100);
-}
-
-// Setup twi to run at 100kHz
-void i2c_master_init(void) {
- // no prescaler
- TWSR = 0;
- // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
- // Check datasheets for more info.
- TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
-}
-
-// Start a transaction with the given i2c slave address. The direction of the
-// transfer is set with I2C_READ and I2C_WRITE.
-// returns: 0 => success
-// 1 => error
-uint8_t i2c_master_start(uint8_t address) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
-
- i2c_delay();
-
- // check that we started successfully
- if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
- return 1;
-
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
- return 1; // slave did not acknowledge
- else
- return 0; // success
-}
-
-
-// Finish the i2c transaction.
-void i2c_master_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-}
-
-// Write one byte to the i2c slave.
-// returns 0 => slave ACK
-// 1 => slave NACK
-uint8_t i2c_master_write(uint8_t data) {
- TWDR = data;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- // check if the slave acknowledged us
- return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
-}
-
-// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
-// if ack=0 the acknowledge bit is not set.
-// returns: byte read from i2c device
-uint8_t i2c_master_read(int ack) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
-
- i2c_delay();
- return TWDR;
-}
-
-void i2c_reset_state(void) {
- TWCR = 0;
-}
-
-void i2c_slave_init(uint8_t address) {
- TWAR = address << 0; // slave i2c address
- // TWEN - twi enable
- // TWEA - enable address acknowledgement
- // TWINT - twi interrupt flag
- // TWIE - enable the twi interrupt
- TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
-}
-
-ISR(TWI_vect);
-
-ISR(TWI_vect) {
- uint8_t ack = 1;
- switch(TW_STATUS) {
- case TW_SR_SLA_ACK:
- // this device has been addressed as a slave receiver
- slave_has_register_set = false;
- break;
-
- case TW_SR_DATA_ACK:
- // this device has received data as a slave receiver
- // The first byte that we receive in this transaction sets the location
- // of the read/write location of the slaves memory that it exposes over
- // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
- // slave_buffer_pos after each write.
- if(!slave_has_register_set) {
- slave_buffer_pos = TWDR;
- // don't acknowledge the master if this memory loctaion is out of bounds
- if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
- ack = 0;
- slave_buffer_pos = 0;
- }
- slave_has_register_set = true;
- } else {
- i2c_slave_buffer[slave_buffer_pos] = TWDR;
- BUFFER_POS_INC();
- }
- break;
-
- case TW_ST_SLA_ACK:
- case TW_ST_DATA_ACK:
- // master has addressed this device as a slave transmitter and is
- // requesting data.
- TWDR = i2c_slave_buffer[slave_buffer_pos];
- BUFFER_POS_INC();
- break;
-
- case TW_BUS_ERROR: // something went wrong, reset twi state
- TWCR = 0;
- default:
- break;
- }
- // Reset everything, so we are ready for the next TWI interrupt
- TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
-}
-#endif
diff --git a/keyboards/fourier/keymaps/default/config.h b/keyboards/fourier/keymaps/default/config.h
index 20e49c421..18f4c1f7a 100644
--- a/keyboards/fourier/keymaps/default/config.h
+++ b/keyboards/fourier/keymaps/default/config.h
@@ -18,14 +18,8 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
-
#define USE_SERIAL
// #define USE_I2C
-
-#endif
diff --git a/keyboards/fourier/keymaps/default/keymap.c b/keyboards/fourier/keymaps/default/keymap.c
index 9c2013776..a08f27b7c 100644
--- a/keyboards/fourier/keymaps/default/keymap.c
+++ b/keyboards/fourier/keymaps/default/keymap.c
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
-
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
@@ -14,8 +12,6 @@ enum custom_keycodes {
QWERTY = SAFE_RANGE,
};
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
#define KC_FN1 MO(_FN1)
#define KC_FN2 MO(_FN2)
#define KC_SPFN1 LT(_FN1, KC_SPACE)
diff --git a/keyboards/fourier/keymaps/default/rules.mk b/keyboards/fourier/keymaps/default/rules.mk
index 457a3d01d..e69de29bb 100644
--- a/keyboards/fourier/keymaps/default/rules.mk
+++ b/keyboards/fourier/keymaps/default/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/fourier/keymaps/jennetters/config.h b/keyboards/fourier/keymaps/jennetters/config.h
index 87cda7b5c..5f99c65ad 100644
--- a/keyboards/fourier/keymaps/jennetters/config.h
+++ b/keyboards/fourier/keymaps/jennetters/config.h
@@ -22,10 +22,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TAPPING_TERM 100
-/* Try to prevent sticky keys */
-#define PREVENT_STUCK_MODIFIERS
-
/* Use I2C or Serial, not both */
#define USE_SERIAL
-// #define USE_I2C \ No newline at end of file
+// #define USE_I2C
diff --git a/keyboards/fourier/matrix.c b/keyboards/fourier/matrix.c
deleted file mode 100644
index fdeead7dc..000000000
--- a/keyboards/fourier/matrix.c
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "split_util.h"
-#include "pro_micro.h"
-#include "config.h"
-#include "timer.h"
-#include "backlight.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else // USE_SERIAL
-# include "serial.h"
-#endif
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-
-#if (DEBOUNCING_DELAY > 0)
- static uint16_t debouncing_time;
- static bool debouncing = false;
-#endif
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#else
-# error "Currently only supports 8 COLS"
-#endif
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-#define ERROR_DISCONNECT_COUNT 5
-
-#define SERIAL_LED_ADDR 0x00
-
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
-
-static uint8_t error_count = 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];
-
-#if (DIODE_DIRECTION == COL2ROW)
- static void init_cols(void);
- static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
- static void unselect_rows(void);
- static void select_row(uint8_t row);
- static void unselect_row(uint8_t row);
-#elif (DIODE_DIRECTION == ROW2COL)
- static void init_rows(void);
- static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
- static void unselect_cols(void);
- static void unselect_col(uint8_t col);
- static void select_col(uint8_t col);
-#endif
-
-__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;
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-
-}
-
-uint8_t _matrix_scan(void)
-{
- int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
-#if (DIODE_DIRECTION == COL2ROW)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
-
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-
-# else
- read_cols_on_row(matrix+offset, current_row);
-# endif
-
- }
-
-#elif (DIODE_DIRECTION == ROW2COL)
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_rows_on_col(matrix+offset, current_col);
-# endif
-
- }
-#endif
-
-# if (DEBOUNCING_DELAY > 0)
- if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- matrix[i+offset] = matrix_debouncing[i+offset];
- }
- debouncing = false;
- }
-# endif
-
- return 1;
-}
-
-#ifdef USE_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(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
-
- if (serial_update_buffers()) {
- return 1;
- }
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_slave_buffer[i];
- }
-
-#ifdef BACKLIGHT_ENABLE
- // Write backlight level for slave to read
- serial_master_buffer[SERIAL_LED_ADDR] = get_backlight_level();
-#endif
- return 0;
-}
-#endif
-
-uint8_t matrix_scan(void)
-{
- uint8_t ret = _matrix_scan();
-
-#ifdef USE_I2C
- if( i2c_transaction() ) {
-#else // USE_SERIAL
- if( serial_transaction() ) {
-#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_I2C
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- i2c_slave_buffer[i] = matrix[offset+i];
- }
-#else // USE_SERIAL
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_slave_buffer[i] = matrix[offset+i];
- }
-
-#ifdef BACKLIGHT_ENABLE
- // Read backlight level sent from master and update level on slave
- backlight_set(serial_master_buffer[SERIAL_LED_ADDR]);
-#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;
-}
-
-#if (DIODE_DIRECTION == COL2ROW)
-
-static void init_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin = col_pins[col_index];
- uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-static void select_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#elif (DIODE_DIRECTION == ROW2COL)
-
-static void init_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
- {
-
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[row_index];
-
- // Check row pin state
- if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
- {
- // Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-static void select_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#endif
diff --git a/keyboards/fourier/rev1/config.h b/keyboards/fourier/rev1/config.h
index c13752226..d9913d7de 100644
--- a/keyboards/fourier/rev1/config.h
+++ b/keyboards/fourier/rev1/config.h
@@ -16,10 +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 REV1_CONFIG_H
-#define REV1_CONFIG_H
-
-#include "../config.h"
+#pragma once
/* USB Device descriptor parameter */
#define VENDOR_ID 0xCB10
@@ -38,6 +35,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROW_PINS { F4, D7, E6, B4 }
#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6 }
+/* Split Defines */
+#define SPLIT_HAND_PIN D2
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* define if matrix has ghost */
//#define MATRIX_HAS_GHOST
@@ -56,11 +58,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 14 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
@@ -79,6 +78,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-
-#endif
diff --git a/keyboards/fourier/rev1/rev1.c b/keyboards/fourier/rev1/rev1.c
index 61d7139d6..1e662e7b8 100644
--- a/keyboards/fourier/rev1/rev1.c
+++ b/keyboards/fourier/rev1/rev1.c
@@ -1,7 +1,5 @@
#include "fourier.h"
-
void matrix_init_kb(void) {
matrix_init_user();
};
-
diff --git a/keyboards/fourier/rev1/rev1.h b/keyboards/fourier/rev1/rev1.h
index 9ef9b9233..ac889462b 100644
--- a/keyboards/fourier/rev1/rev1.h
+++ b/keyboards/fourier/rev1/rev1.h
@@ -1,19 +1,8 @@
-#ifndef REV1_H
-#define REV1_H
-
-#include "../fourier.h"
+#pragma once
+#include "fourier.h"
#include "quantum.h"
-
-#ifdef USE_I2C
-#include <stddef.h>
-#ifdef __AVR__
- #include <avr/io.h>
- #include <avr/interrupt.h>
-#endif
-#endif
-
#define LAYOUT( \
LA1, LA2, LA3, LA4, LA5, LA6, RA1, RA2, RA3, RA4, RA5, RA6, RA7, \
LB1, LB2, LB3, LB4, LB5, LB6, RB1, RB2, RB3, RB4, RB5, RB7, \
@@ -30,5 +19,3 @@
{ RC1, KC_NO, RC3, RC4, RC5, RC6, RC7}, \
{ RD1, KC_NO, KC_NO, RD4, RD5, RD6, RD7} \
}
-
-#endif
diff --git a/keyboards/fourier/rules.mk b/keyboards/fourier/rules.mk
index 151339bc9..93935e02e 100644
--- a/keyboards/fourier/rules.mk
+++ b/keyboards/fourier/rules.mk
@@ -1,10 +1,4 @@
-SRC += matrix.c \
- i2c.c \
- split_util.c \
- serial.c
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -41,7 +35,7 @@ F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
-# different sizes, comment this out, and the correct address will be loaded
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina
@@ -63,12 +57,12 @@ 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 this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = yes
-USE_I2C = yes
+
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-CUSTOM_MATRIX = yes
+SPLIT_KEYBOARD = yes
DEFAULT_FOLDER = fourier/rev1
diff --git a/keyboards/fourier/serial.c b/keyboards/fourier/serial.c
deleted file mode 100644
index 74bcbb6bf..000000000
--- a/keyboards/fourier/serial.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * WARNING: be careful changing this code, it is very timing dependent
- */
-
-#ifndef F_CPU
-#define F_CPU 16000000
-#endif
-
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <stdbool.h>
-#include "serial.h"
-
-#ifndef USE_I2C
-
-// Serial pulse period in microseconds. Its probably a bad idea to lower this
-// value.
-#define SERIAL_DELAY 24
-
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
-
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
-
-inline static
-void serial_delay(void) {
- _delay_us(SERIAL_DELAY);
-}
-
-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(void) {
- SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-inline static
-uint8_t serial_read_pin(void) {
- return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
-}
-
-inline static
-void serial_low(void) {
- SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
-}
-
-inline static
-void serial_high(void) {
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-void serial_master_init(void) {
- serial_output();
- serial_high();
-}
-
-void serial_slave_init(void) {
- serial_input();
-
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
-}
-
-// Used by the master to synchronize timing with the slave.
-static
-void sync_recv(void) {
- serial_input();
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
- while (!serial_read_pin());
- serial_delay();
-}
-
-// Used by the slave to send a synchronization signal to the master.
-static
-void sync_send(void) {
- serial_output();
-
- serial_low();
- serial_delay();
-
- serial_high();
-}
-
-// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
- serial_input();
- for ( uint8_t i = 0; i < 8; ++i) {
- byte = (byte << 1) | serial_read_pin();
- serial_delay();
- _delay_us(1);
- }
-
- return byte;
-}
-
-// Sends a byte with MSB ordering
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 8;
- serial_output();
- while( b-- ) {
- if(data & (1 << b)) {
- serial_high();
- } else {
- serial_low();
- }
- serial_delay();
- }
-}
-
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- sync_send();
-
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_slave_buffer[i]);
- sync_send();
- checksum += serial_slave_buffer[i];
- }
- serial_write_byte(checksum);
- sync_send();
-
- // wait for the sync to finish sending
- serial_delay();
-
- // read the middle of pulses
- _delay_us(SERIAL_DELAY/2);
-
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_master_buffer[i] = serial_read_byte();
- sync_send();
- checksum_computed += serial_master_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_send();
-
- serial_input(); // end transaction
-
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
- } else {
- status &= ~SLAVE_DATA_CORRUPT;
- }
-}
-
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
-}
-
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
-//
-// Returns:
-// 0 => no error
-// 1 => slave did not respond
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
- cli();
-
- // signal to the slave that we want to start a transaction
- serial_output();
- serial_low();
- _delay_us(1);
-
- // wait for the slaves response
- serial_input();
- serial_high();
- _delay_us(SERIAL_DELAY);
-
- // check if the slave is present
- if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
- sei();
- return 1;
- }
-
- // if the slave is present syncronize with it
- sync_recv();
-
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_slave_buffer[i] = serial_read_byte();
- sync_recv();
- checksum_computed += serial_slave_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_recv();
-
- if (checksum_computed != checksum_received) {
- sei();
- return 1;
- }
-
- uint8_t checksum = 0;
- // send data to the slave
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_master_buffer[i]);
- sync_recv();
- checksum += serial_master_buffer[i];
- }
- serial_write_byte(checksum);
- sync_recv();
-
- // always, release the line when not in use
- serial_output();
- serial_high();
-
- sei();
- return 0;
-}
-
-#endif
diff --git a/keyboards/fourier/serial.h b/keyboards/fourier/serial.h
deleted file mode 100644
index 15fe4db7b..000000000
--- a/keyboards/fourier/serial.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef MY_SERIAL_H
-#define MY_SERIAL_H
-
-#include "config.h"
-#include <stdbool.h>
-
-/* TODO: some defines for interrupt setup */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
-
-// Buffers for master - slave communication
-extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
-extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
-
-void serial_master_init(void);
-void serial_slave_init(void);
-int serial_update_buffers(void);
-bool serial_slave_data_corrupt(void);
-
-#endif
diff --git a/keyboards/fourier/split_util.c b/keyboards/fourier/split_util.c
deleted file mode 100644
index 2704e30e0..000000000
--- a/keyboards/fourier/split_util.c
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/power.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/eeprom.h>
-#include "split_util.h"
-#include "matrix.h"
-#include "keyboard.h"
-#include "config.h"
-#include "timer.h"
-#include "pincontrol.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else
-# include "serial.h"
-#endif
-
-volatile bool isLeftHand = true;
-
-static void setup_handedness(void) {
- // Test D2 pin for handedness, if D2 is grounded, it's the right hand
- pinMode(D2, PinDirectionInput);
- isLeftHand = digitalRead(D2);
-}
-
-static void keyboard_master_setup(void) {
-#ifdef USE_I2C
- i2c_master_init();
-#ifdef SSD1306OLED
- matrix_master_OLED_init();
-#endif
-#else
- serial_master_init();
-#endif
-}
-
-static void keyboard_slave_setup(void) {
- timer_init();
-#ifdef USE_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();
-}
-
-void keyboard_slave_loop(void) {
- matrix_init();
-
- while (1) {
- matrix_slave_scan();
- }
-}
-
-// this code runs before the usb and keyboard is initialized
-void matrix_setup(void) {
- split_keyboard_setup();
-
- if (!has_usb()) {
- keyboard_slave_loop();
- }
-}
diff --git a/keyboards/fourier/split_util.h b/keyboards/fourier/split_util.h
deleted file mode 100644
index 595a0659e..000000000
--- a/keyboards/fourier/split_util.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef SPLIT_KEYBOARD_UTIL_H
-#define SPLIT_KEYBOARD_UTIL_H
-
-#include <stdbool.h>
-#include "eeconfig.h"
-
-#define SLAVE_I2C_ADDRESS 0x32
-
-extern volatile bool isLeftHand;
-
-// slave version of matix scan, defined in matrix.c
-void matrix_slave_scan(void);
-
-void split_keyboard_setup(void);
-bool has_usb(void);
-void keyboard_slave_loop(void);
-
-void matrix_master_OLED_init (void);
-
-#endif
diff --git a/keyboards/fractal/config.h b/keyboards/fractal/config.h
index 30b703b6e..396c3b4b9 100755
--- a/keyboards/fractal/config.h
+++ b/keyboards/fractal/config.h
@@ -17,7 +17,8 @@
/* key matrix pins */
#define MATRIX_ROW_PINS { B1, F7, F6, F5, F4 }
-#define MATRIX_COL_PINS { B3, B2, B6, B5, B4, E6, D7, C6, D4, D0, D1, D2 }
+#define MATRIX_COL_PINS { B3, B2, B6, B5, B4, E6, D7, C6, D4, D0, D1, D3 }
+
#define UNUSED_PINS
/* COL2ROW or ROW2COL */
@@ -43,10 +44,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 0
diff --git a/keyboards/frosty_flake/keymaps/QFR_JM/config.h b/keyboards/frosty_flake/keymaps/QFR_JM/config.h
deleted file mode 100644
index b25194014..000000000
--- a/keyboards/frosty_flake/keymaps/QFR_JM/config.h
+++ /dev/null
@@ -1,11 +0,0 @@
-
-#define TAPPING_TERM 150 //reduce time required to register a held key
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-// place overrides here
-
-#endif
diff --git a/keyboards/frosty_flake/keymaps/QFR_JM/keymap.c b/keyboards/frosty_flake/keymaps/QFR_JM/keymap.c
deleted file mode 100644
index 81899396a..000000000
--- a/keyboards/frosty_flake/keymaps/QFR_JM/keymap.c
+++ /dev/null
@@ -1,132 +0,0 @@
-#include "frosty_flake.h"
-#include "action_layer.h"
-#ifdef AUDIO_ENABLE
- #include "audio.h"
-#endif
-#include "eeconfig.h"
-
-enum QFR_layers {
- _COLEMAK,
- _QWERTY,
- _DVORAK,
- _LOWER,
- _MOUSE
-};
-
-enum QFR_keycodes {
- COLEMAK = SAFE_RANGE,
- QWERTY,
- DVORAK,
- LOWER,
- MOUSE
-};
-
-enum custom_macros {
- R_PIPE,
- R_POINT
-};
-
- const uint16_t PROGMEM fn_actions[] = { //ACTION_LAYER_TAP_TOGGLE requires that number of taps be defined in *config.h* - default set to 5
- [0] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC), //Hold for momentary Lower layer, Tap for Space,
- [1] = ACTION_LAYER_MOMENTARY(_MOUSE) //Hold for momentary MOUSE
-
- };
-
-#define SPC_LW FUNC(0)
-#define MSE FUNC(1)
-#define PIPE M(R_PIPE)
-#define POINT M(R_POINT)
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_COLEMAK] = KEYMAP_TKL(\
- 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_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC,KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
- KC_BSPC, 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_LSPO,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, \
- KC_LCTL,KC_LGUI, KC_LALT, SPC_LW, MSE, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
- ),
-
-[_QWERTY] = KEYMAP_TKL(\
- 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_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL,KC_LGUI,KC_LALT, SPC_LW, MSE, KC_RGUI , KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
-[_DVORAK] = KEYMAP_TKL(\
- 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_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_END, KC_PGDN, \
- KC_BSPC,KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_QUOT, KC_ENT, \
- KC_LSFT,KC_NUBS,KC_SCLN,KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \
- KC_LCTL,KC_LGUI,KC_LALT, SPC_LW, MSE, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
- ),
-
-[_LOWER] = KEYMAP_TKL(\
- RESET, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, _______, KC_MUTE, KC_VOLD, KC_VOLU, QWERTY, COLEMAK,DVORAK, \
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LBRC, KC_RBRC, KC_UNDS, KC_PLUS, KC_BSPC, _______,_______,_______, \
- KC_TAB, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE, _______,_______,_______, \
- KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, \
- _______,XXXXXXX,POINT,PIPE, KC_LCBR, KC_LBRC, KC_GRV, KC_PIPE, KC_RBRC, KC_RCBR, _______, _______, _______, _______, \
- _______, _______, _______, _______, KC_RALT, _______, _______, _______, _______,_______,_______ \
- ),
-
-[_MOUSE] = KEYMAP_TKL(\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,_______,_______, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, _______,_______,_______, \
- KC_TAB, KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, XXXXXXX, XXXXXXX, KC_BTN3, KC_BTN4, KC_BTN5, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, _______,_______,_______, \
- KC_BSPC, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
- _______,XXXXXXX,PIPE,POINT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, \
- _______, _______, _______, KC_ACL2, MSE, _______, _______, _______, _______,_______,_______ \
- )
-};
-
-// Macros to send R pointer & dplyr pipe
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch(id) {
- case R_POINT:
- if (record->event.pressed) { // pointer
- SEND_STRING("<- ");
-// return MACRO(D(LSFT), T(COMM), U(LSFT), T(MINS), END);
- }
- break;
- case R_PIPE:
- if (record->event.pressed) { // dplyr pipe
- SEND_STRING("%>% ");
-// return MACRO(D(LSFT), T(5), T(DOT), T(5), U(LSFT), END);
- }
- break;
- }
- return MACRO_NONE;
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- break;
- case COLEMAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_COLEMAK);
- }
- return false;
- break;
- case DVORAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_DVORAK);
- }
- return false;
- break;
- }
- return true;
-} \ No newline at end of file
diff --git a/keyboards/frosty_flake/keymaps/QFR_JM/rules.mk b/keyboards/frosty_flake/keymaps/QFR_JM/rules.mk
deleted file mode 100644
index 0ae0b9646..000000000
--- a/keyboards/frosty_flake/keymaps/QFR_JM/rules.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = 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. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/frosty_flake/keymaps/default/keymap.c b/keyboards/frosty_flake/keymaps/default/keymap.c
deleted file mode 100644
index 4dc7ed655..000000000
--- a/keyboards/frosty_flake/keymaps/default/keymap.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "frosty_flake.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = KEYMAP(\
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
- KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \
- KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT)
-}; \ No newline at end of file
diff --git a/keyboards/frosty_flake/keymaps/default/rules.mk b/keyboards/frosty_flake/keymaps/default/rules.mk
deleted file mode 100644
index 9d3df5964..000000000
--- a/keyboards/frosty_flake/keymaps/default/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/frosty_flake/keymaps/nikchi/config.h b/keyboards/frosty_flake/keymaps/nikchi/config.h
deleted file mode 100644
index 3f7852643..000000000
--- a/keyboards/frosty_flake/keymaps/nikchi/config.h
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define TAPPING_TERM 200
-#define LEADER_TIMEOUT 800
-
-#define DISABLE_SPACE_CADET_ROLLOVER
-
-#define UNICODE_TYPE_DELAY 0
-
-#define LSPO_KEY KC_9
-#define RSPC_KEY KC_0
-
-#define MOUSEKEY_INTERVAL 20
-#define MOUSEKEY_DELAY 0
-#define MOUSEKEY_TIME_TO_MAX 60
-#define MOUSEKEY_MAX_SPEED 7
-#define MOUSEKEY_WHEEL_DELAY 0
-// place overrides here
-
-#endif
diff --git a/keyboards/frosty_flake/keymaps/nikchi/keymap.c b/keyboards/frosty_flake/keymaps/nikchi/keymap.c
deleted file mode 100644
index bf7c5e588..000000000
--- a/keyboards/frosty_flake/keymaps/nikchi/keymap.c
+++ /dev/null
@@ -1,228 +0,0 @@
-#include "frosty_flake.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-#include "process_unicode.h"
-#include "process_unicodemap.h"
-#include "quantum.h"
-
-#define _______ KC_TRNS
-#define MAXEMOJITAPS 80
-
-
-//declarations for tap dancing emojis
-void register_hex32(uint32_t hex);
-void cycleEmojis(qk_tap_dance_state_t *state, void *user_data);
-void cycleAnimals(qk_tap_dance_state_t *state, void *user_data);
-void cycleFoods(qk_tap_dance_state_t *state, void *user_data);
-void cycleEtc(qk_tap_dance_state_t *state, void *user_data);
-void cycleAll(qk_tap_dance_state_t *state, void *user_data);
-
-void tap(uint16_t keycode){
- register_code(keycode);
- unregister_code(keycode);
-};
-
-//Tap Dance Declarations
-enum taps{
- TD_CTCPS = 0,
- EMOJIS,
- ANIMAL,
- HAND,
- MEMES,
- COPA,
- ALLS
-};
-
-enum unicode_name {
- EMOTIS = 1,//80, //1F60x - 1F64x
- ANIMALS, //64, //1F40x - 1F43x
- SYMBOLS,// = 45, //1F300 - 1F32C
- FOODS,// = 87 , //1F32D -
- ETC,// = 192, //1F44x -1F4Fx
- VEHICLES,// = 83, //1F68x - 1F6Dx
- SUPPLEMENT,// = 32, //1F91x-1F92x
- ALCHEMY,// = 116 //1F70x - 1F773
-
-};
-
-enum my_macros {
- NEWDESK = 0,
- LEFTDESK,
- RIGHTDESK,
- CLOSEDESK
-};
-
-
-// Tap Dance Definitions
-qk_tap_dance_action_t tap_dance_actions[] = {
- // Tap once for CTRL, twice for Caps Lock
- [TD_CTCPS] = ACTION_TAP_DANCE_DOUBLE(KC_LCTL, KC_CAPS),
- [COPA] = ACTION_TAP_DANCE_DOUBLE(LCTL(KC_C), LCTL(KC_V)),
- [EMOJIS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleEmojis, NULL, NULL, 800),
- [ANIMAL] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleAnimals, NULL, NULL, 800),
- //[SYMBOLS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleSymbols, NULL, NULL, 800),
- [FOODS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleFoods, NULL, NULL, 800),
- [ETC] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleEtc, NULL, NULL, 800),
- //[VEHICLES] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleVehicles, NULL, NULL, 800),
- //[SUPPLEMENT] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleSupplement, NULL, NULL, 800),
- [ALLS] = ACTION_TAP_DANCE_FN_ADVANCED_TIME(cycleAll, NULL, NULL, 800)
-// Other declarations would go here, separated by commas, if you have them
-};
-
-// macros
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch(id) {
- case NEWDESK: // this would trigger when you hit a key mapped as M(0)
- if (record->event.pressed) {
- return MACRO( I(1), D(LGUI), D(LCTL), D(D), U(LGUI), U(LCTL), U(D), END ); // NEW DESKTOP
- }
- break;
- case LEFTDESK: // this would trigger when you hit a key mapped as M(0)
- if (record->event.pressed) {
- return MACRO( I(1), D(LGUI), D(LCTL), D(LEFT), U(LGUI), U(LCTL), U(LEFT), END ); // LEFT DESKTOP
- }
- break;
- case RIGHTDESK: // this would trigger when you hit a key mapped as M(0)
- if (record->event.pressed) {
- return MACRO( I(1), D(LGUI), D(LCTL), D(RGHT), U(LGUI), U(LCTL), U(RGHT), END ); // RIGHT DESKTOP
- }
- break;
- case CLOSEDESK: // this would trigger when you hit a key mapped as M(0)
- if (record->event.pressed) {
- return MACRO( I(1), D(LGUI), D(LCTL), D(F4), U(LGUI), U(LCTL), U(F4), END ); // CLOSE DESKTOP
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
-// emojis in unicode
-const uint32_t PROGMEM unicode_map[] = {
- [EMOTIS] = 0x1F600,
- [ANIMALS] = 0x1F400,
- [SYMBOLS] = 0x1F300,
- [FOODS] = 0x1F32D,
- [ETC] = 0x1F440,
- [VEHICLES] = 0x1F680,
- [SUPPLEMENT] = 0x1F910,
- [ALCHEMY] = 0x1F700
- };
-// Layouts
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = KEYMAP(\
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_INS,KC_HOME,KC_PGUP, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC,KC_RBRC,KC_BSLS, KC_DEL, KC_END,KC_PGDN, KC_P7, KC_P8, KC_P9,KC_PPLS, \
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_SCLN,KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
- KC_LSPO,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSPC, KC_UP, KC_P1, KC_P2, KC_P3,KC_PENT, \
- TD(TD_CTCPS),KC_LGUI,KC_LALT, KC_SPC, KC_LEAD,KC_RGUI, KC_APP,MO(1) , KC_LEFT,KC_DOWN,KC_RGHT, KC_P0,KC_PDOT),
-[1] = KEYMAP(\
- TD(ALLS), KC_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, TD(EMOJIS),TD(ANIMAL),TD(ETC),TD(FOODS), KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, KC_NLCK,KC_PSLS,KC_PAST,KC_PMNS, \
- KC_TAB, KC_Q, M(0), KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_UP ,KC_RBRC,KC_BSLS, KC_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \
- KC_LCTL, M(1), M(3), M(2), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L,KC_LEFT,KC_RGHT, KC_ENT, KC_P4, KC_P5, KC_P6, \
- KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_DOWN, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \
- KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, TG(2),_______ , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT),
-[2] = KEYMAP(\
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL,KC_BSPC, KC_MPRV,KC_MPLY,KC_MNXT, 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_MUTE,KC_VOLD,KC_VOLU, KC_P7, KC_P8, KC_P9,KC_PPLS, \
- KC_LCTL, KC_D, 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_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,KC_COMM, KC_DOT,KC_SLSH, KC_RSFT, KC_MS_U, KC_P1, KC_P2, KC_P3,KC_PENT, \
- KC_BTN1,KC_BTN3,KC_BTN2, KC_SPC, KC_RALT,KC_RGUI, TG(2) , KC_NO , KC_MS_L,KC_MS_D,KC_MS_R, KC_P0,KC_PDOT),
-};
-
-LEADER_EXTERNS();
-
-void matrix_scan_user(void) {
- LEADER_DICTIONARY() {
- leading = false;
- leader_end();
-
- SEQ_TWO_KEYS(KC_A, KC_A) { // select all and copy
- register_code(KC_LCTL);
- tap(KC_A);
- tap(KC_C);
- unregister_code(KC_LCTL);
- }
- }
-}
-
-void matrix_init_user(void) {
- _delay_ms(500);
- set_unicode_input_mode(UC_WINC);
-};
-
-void cycleAll(qk_tap_dance_state_t *state, void *user_data) {
- if(state->count == 1) {
- unicode_input_start();
- register_hex32(pgm_read_dword(&unicode_map[EMOTIS]));
- unicode_input_finish();
- }
- else if(state->count <= 1642) {
- tap(KC_BSPC);
- unicode_input_start();
- register_hex32(pgm_read_dword(&unicode_map[1])+state->count);
- unicode_input_finish();
- }
-};
-
-
-void cycleEmojis(qk_tap_dance_state_t *state, void *user_data) {
- if(state->count == 1) {
- unicode_input_start();
- register_hex32(pgm_read_dword(&unicode_map[EMOTIS]));
- unicode_input_finish();
- }
- else if(state->count <= 80) {
- tap(KC_BSPC);
- unicode_input_start();
- register_hex32(pgm_read_dword(&unicode_map[EMOTIS])+state->count);
- unicode_input_finish();
- }
-};
-
-void cycleAnimals(qk_tap_dance_state_t *state, void *user_data) {
- if(state->count == 1) {
- unicode_input_start();
- register_hex32(pgm_read_dword(&unicode_map[ANIMALS]));
- unicode_input_finish();
- }
- else if(state->count <= MAXEMOJITAPS) {
- tap(KC_BSPC);
- unicode_input_start();
- register_hex32(pgm_read_dword(&unicode_map[ANIMALS])+state->count);
- unicode_input_finish();
- }
-};
-
-void cycleFoods(qk_tap_dance_state_t *state, void *user_data) {
- if(state->count == 1) {
- unicode_input_start();
- register_hex32(pgm_read_dword(&unicode_map[FOODS]));
- unicode_input_finish();
- }
- else if(state->count <= 87) {
- tap(KC_BSPC);
- unicode_input_start();
- register_hex32(pgm_read_dword(&unicode_map[FOODS])+state->count);
- unicode_input_finish();
- }
-};
-
-
-void cycleEtc(qk_tap_dance_state_t *state, void *user_data) {
- if(state->count == 1) {
- unicode_input_start();
- register_hex32(pgm_read_dword(&unicode_map[ETC]));
- unicode_input_finish();
- }
- else if(state->count <= MAXEMOJITAPS) {
- tap(KC_BSPC);
- unicode_input_start();
- register_hex32(pgm_read_dword(&unicode_map[ETC])+state->count);
- unicode_input_finish();
- }
-};
-
diff --git a/keyboards/frosty_flake/keymaps/nikchi/rules.mk b/keyboards/frosty_flake/keymaps/nikchi/rules.mk
deleted file mode 100644
index ad86e82d2..000000000
--- a/keyboards/frosty_flake/keymaps/nikchi/rules.mk
+++ /dev/null
@@ -1,23 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-UNICODEMAP_ENABLE = yes # unicodemap
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-TAP_DANCE_ENABLE = yes
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/frosty_flake/keymaps/tkl/keymap.c b/keyboards/frosty_flake/keymaps/tkl/keymap.c
deleted file mode 100644
index 99dc95627..000000000
--- a/keyboards/frosty_flake/keymaps/tkl/keymap.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "frosty_flake.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = KEYMAP_TKL(\
- 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_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT )
-};
diff --git a/keyboards/frosty_flake/keymaps/tkl/rules.mk b/keyboards/frosty_flake/keymaps/tkl/rules.mk
deleted file mode 100644
index f29756f22..000000000
--- a/keyboards/frosty_flake/keymaps/tkl/rules.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = 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. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/frosty_flake/matrix.c b/keyboards/frosty_flake/matrix.c
deleted file mode 100644
index cde7f63b9..000000000
--- a/keyboards/frosty_flake/matrix.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- Copyright 2017 Gabriel Young <gabeplaysdrums@live.com>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-static uint8_t debouncing = DEBOUNCING_DELAY;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-static matrix_row_t scan_col(void) {
- return (
- (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<0)) |
- (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<1)) |
- (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) |
- (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<3)) |
- (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) |
- (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<5)) |
- (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<6)) |
- (PINB&(1<<0) ? 0 : ((matrix_row_t)1<<7))
- );
-}
-
-static void select_col(uint8_t col) {
- switch (col) {
- case 0: PORTD = (PORTD & ~0b01111011) | 0b00011011; break;
- case 1: PORTD = (PORTD & ~0b01111011) | 0b01000011; break;
- case 2: PORTD = (PORTD & ~0b01111011) | 0b01101010; break;
- case 3: PORTD = (PORTD & ~0b01111011) | 0b01111001; break;
- case 4: PORTD = (PORTD & ~0b01111011) | 0b01100010; break;
- case 5: PORTD = (PORTD & ~0b01111011) | 0b01110001; break;
- case 6: PORTD = (PORTD & ~0b01111011) | 0b01100001; break;
- case 7: PORTD = (PORTD & ~0b01111011) | 0b01110000; break;
- case 8: PORTD = (PORTD & ~0b01111011) | 0b01100000; break;
- case 9: PORTD = (PORTD & ~0b01111011) | 0b01101000; break;
- case 10: PORTD = (PORTD & ~0b01111011) | 0b00101011; break;
- case 11: PORTD = (PORTD & ~0b01111011) | 0b00110011; break;
- case 12: PORTD = (PORTD & ~0b01111011) | 0b00100011; break;
- case 13: PORTD = (PORTD & ~0b01111011) | 0b01111000; break;
- case 14: PORTD = (PORTD & ~0b01111011) | 0b00010011; break;
- case 15: PORTD = (PORTD & ~0b01111011) | 0b01101001; break;
- case 16: PORTD = (PORTD & ~0b01111011) | 0b00001011; break;
- case 17: PORTD = (PORTD & ~0b01111011) | 0b00111011; break;
- }
-}
-
-void matrix_init(void) {
- /* Row output pins */
- DDRD |= 0b01111011;
- /* Column input pins */
- DDRC &= ~0b10000000;
- DDRB &= ~0b01111111;
- PORTC |= 0b10000000;
- PORTB |= 0b01111111;
-
- for (uint8_t i=0; i < MATRIX_ROWS; i++)
- matrix[i] = matrix_debouncing[i] = 0;
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t col = 0; col < MATRIX_COLS; col++) {
- select_col(col);
- _delay_us(3);
- matrix_row_t col_scan = scan_col();
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
- bool curr_bit = col_scan & (1<<row);
- if (prev_bit != curr_bit) {
- matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
- debouncing = DEBOUNCING_DELAY;
- }
- }
- }
-
- if (debouncing) {
- if (--debouncing)
- _delay_ms(1);
- else
- for (uint8_t i = 0; i < MATRIX_ROWS; i++)
- matrix[i] = matrix_debouncing[i];
- }
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-#ifndef NO_PRINT
- print("\nr\\c ABCDEFGHIJKLMNOPQR\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_row_t matrix_row = matrix_get_row(row);
- xprintf("%02X: ", row);
- for (uint8_t col = 0; col < MATRIX_COLS; col++) {
- bool curr_bit = matrix_row & (1<<col);
- xprintf("%c", curr_bit ? '*' : '.');
- }
- print("\n");
- }
-#endif
-}
-
-uint8_t matrix_key_count(void) {
- uint8_t count = 0;
- for (uint8_t row = 0; row < MATRIX_ROWS; row++)
- count += bitpop32(matrix[row]);
- return count;
-}
diff --git a/keyboards/frosty_flake/readme.md b/keyboards/frosty_flake/readme.md
deleted file mode 100644
index 822377a71..000000000
--- a/keyboards/frosty_flake/readme.md
+++ /dev/null
@@ -1,46 +0,0 @@
-# Frosty Flake Controller
-
-This is the firmware for Rev. 20140521 of the Frosty Flake controller
-by [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/),
-a replacement controller for the [Cooler Master Quick Fire
-Rapid](http://www.coolermaster.com/peripheral/keyboards/quickfirerapid/).
-
-The code was adapted from the [BathroomEpiphanies TMK
-Firmware](https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers),
-but has been cleaned up to match the
-[schematic](https://deskthority.net/wiki/File:Frosty_Flake_Schematics.pdf)
-and gone through some minor refactoring for QMK.
-
-## 104 and 87 layout support
-
-Support for both 104 key and 87 key layouts is provided. See the
-keymaps `default` (104) and `tkl` (87) for example layouts.
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: Frosty Flake
-Hardware Availability: https://1upkeyboards.com/qfr-frosty-flake-controller.html
-
-Make example for this keyboard (after setting up your build environment):
-
-104 key default layout:
-
-```
-make frosty_flake:default
-```
-
-To directly flash the frosty_flake after compiling use
-
-```
-make frosty_flake:default:dfu
-```
-
-87 key tkl layout:
-
-```
-make frosty_flake:tkl:dfu
-```
-
-See [build environment
-setup](https://docs.qmk.fm/build_environment_setup.html) then the
-[make instructions](https://docs.qmk.fm/make_instructions.html) for
-more information.
diff --git a/keyboards/gh60/keymaps/dbroqua/config.h b/keyboards/gh60/keymaps/dbroqua/config.h
index 0b8218d28..fd63c9a8f 100644
--- a/keyboards/gh60/keymaps/dbroqua/config.h
+++ b/keyboards/gh60/keymaps/dbroqua/config.h
@@ -158,26 +158,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/*
* RGB Underglow
* These settings are for the F4 by default:
- *
*
- * #define ws2812_PORTREG PORTF
- * #define ws2812_DDRREG DDRF
+ *
* #define ws2812_pin PF4
* #define RGBLED_NUM 14 // Number of LEDs
* #define RGBLIGHT_HUE_STEP 10
* #define RGBLIGHT_SAT_STEP 17
* #define RGBLIGHT_VAL_STEP 17
*
- * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects.
- * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations.
+ * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects.
+ * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations.
* For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c
*/
-/* Deprecated code below
-#define ws2812_PORTREG PORTF
-#define ws2812_DDRREG DDRF
-#define ws2812_pin PF4
-*/
#define RGB_DI_PIN F4
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 11 // Number of LEDs
diff --git a/keyboards/gh60/keymaps/emiilsd/keymap.c b/keyboards/gh60/keymaps/emiilsd/keymap.c
new file mode 100644
index 000000000..0fbfe38c2
--- /dev/null
+++ b/keyboards/gh60/keymaps/emiilsd/keymap.c
@@ -0,0 +1,51 @@
+/* Copyright 2018 Funderburker
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ ISO HHKB layout:
+
+ * 2u Backspace
+ * ISO Enter
+ * split left Shift
+ * split right Shift
+ * Caps as Control
+ * 1u/1.5u/7u/1.5u//1u bottom row
+ */
+
+ /* 0: QWERTY */
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NO,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT,
+ KC_LSFT, KC_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(1), KC_RSFT,
+ KC_NO, KC_LALT, KC_LGUI, KC_SPC, KC_NO, KC_NO, KC_RALT, KC_CAPSLOCK, KC_NO
+ ),
+
+ /* 1: Fn layer */
+ [1] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, KC_UP, _______, _______,
+ _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, KC_PGUP, KC_LEFT, KC_RGHT, _______, _______,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/gh60/keymaps/robotmaxtron/config.h b/keyboards/gh60/keymaps/robotmaxtron/config.h
index abaddb71f..925a69efe 100644
--- a/keyboards/gh60/keymaps/robotmaxtron/config.h
+++ b/keyboards/gh60/keymaps/robotmaxtron/config.h
@@ -161,26 +161,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/*
* RGB Underglow
* These settings are for the F4 by default:
- *
*
- * #define ws2812_PORTREG PORTF
- * #define ws2812_DDRREG DDRF
+ *
* #define ws2812_pin PF4
* #define RGBLED_NUM 14 // Number of LEDs
* #define RGBLIGHT_HUE_STEP 10
* #define RGBLIGHT_SAT_STEP 17
* #define RGBLIGHT_VAL_STEP 17
*
- * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects.
- * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations.
+ * The firmware supports 5 different light effects, and the color (hue, saturation, brightness) can be customized in most effects.
+ * To control the underglow, you need to modify your keymap file to assign those functions to some keys/key combinations.
* For details, please check this keymap. keyboard/planck/keymaps/yang/keymap.c
*/
-/* Deprecated code below
-#define ws2812_PORTREG PORTF
-#define ws2812_DDRREG DDRF
-#define ws2812_pin PF4
-*/
#define RGB_DI_PIN F4
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 8 // Number of LEDs
diff --git a/keyboards/gh80_3000/config.h b/keyboards/gh80_3000/config.h
index 83d30129a..ca72aba5a 100644
--- a/keyboards/gh80_3000/config.h
+++ b/keyboards/gh80_3000/config.h
@@ -43,10 +43,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 0
@@ -55,4 +51,4 @@
#define RGBLIGHT_VAL_STEP 8
#endif
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/gherkin/README.md b/keyboards/gherkin/README.md
deleted file mode 100644
index 5e0daeabf..000000000
--- a/keyboards/gherkin/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-Gherkin
-===
-
-A 30 key keyboard.
-
-* [The original TMK firmware](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/gherkin)
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: Gherkin PCB
-Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2016/11/gherkin.html)
-
-Make example for this keyboard (after setting up your build environment):
-
- make gherkin:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-First pass at adding support for the gherkin keyboard. Compiles but completely
-untested. Intended to kick-start development.
diff --git a/keyboards/gherkin/config.h b/keyboards/gherkin/config.h
deleted file mode 100644
index 4607962d7..000000000
--- a/keyboards/gherkin/config.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER 40 Percent Club
-#define PRODUCT Gherkin
-#define DESCRIPTION A 30 key ortholinear keyboard
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 6
-
-/* key matrix pins */
-#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
-#define MATRIX_COL_PINS { B4, E6, D7, C6, D4, D0 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* number of backlight levels */
-#define BACKLIGHT_PIN B5
-#ifdef BACKLIGHT_PIN
-#define BACKLIGHT_LEVELS 3
-#endif
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-
-#ifdef RGB_DI_PIN
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 0
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#endif
-
-#endif \ No newline at end of file
diff --git a/keyboards/gherkin/keymaps/bbaserdem/config.h b/keyboards/gherkin/keymaps/bbaserdem/config.h
deleted file mode 100644
index 37d7113e7..000000000
--- a/keyboards/gherkin/keymaps/bbaserdem/config.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef CONFIG_KEYMAP_H
-#define CONFIG_KEYMAP_H
-
-#include "../../config.h"
-#define RGB_DI_PIN F6
-#define RGBLED_NUM 10
-#define RGBLIGHT_ANIMATIONS
-#ifdef BACKLIGHT_LEVELS
-#undef BACKLIGHT_LEVELS
-#endif
-#define BACKLIGHT_LEVELS 3
-
-#endif
diff --git a/keyboards/gherkin/keymaps/bbaserdem/rules.mk b/keyboards/gherkin/keymaps/bbaserdem/rules.mk
deleted file mode 100644
index cd1cddebf..000000000
--- a/keyboards/gherkin/keymaps/bbaserdem/rules.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-USER_NAME := bbaserdem-nouserspace
-
-STENO_ENABLE = no # Additional protocols for Stenography(+1700), requires VIRTSER
-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
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-AUDIO_ENABLE = no # Enable audio output from keyboard
-
-NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE = yes # Enable RBG light strips
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
diff --git a/keyboards/gherkin/keymaps/default/keymap.c b/keyboards/gherkin/keymaps/default/keymap.c
deleted file mode 100644
index f01820030..000000000
--- a/keyboards/gherkin/keymaps/default/keymap.c
+++ /dev/null
@@ -1,74 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define _______ KC_TRNS
-#define FN1_Q LT(1, KC_Q)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [0] = LAYOUT_ortho_3x10(
- FN1_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC,
- KC_Z, KC_X, KC_C, KC_V, KC_BSPC, KC_SPC, KC_B, KC_N, KC_M, KC_ENT
- ),
-
- [1] = LAYOUT_ortho_3x10(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_INC,
- _______, _______, _______, _______, _______, _______, RESET, _______, _______, BL_DEC
- ),
-
-};
-
-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) {
-}
-
-void matrix_scan_user(void) {
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-void led_set_user(uint8_t usb_led) {
-
- if (usb_led & (1 << USB_LED_NUM_LOCK)) {
- DDRD |= (1 << 5); PORTD &= ~(1 << 5);
- } else {
- DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
- }
-
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 0); PORTB &= ~(1 << 0);
- } else {
- DDRB &= ~(1 << 0); PORTB &= ~(1 << 0);
- }
-
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
-
- } else {
-
- }
-
- if (usb_led & (1 << USB_LED_COMPOSE)) {
-
- } else {
-
- }
-
- if (usb_led & (1 << USB_LED_KANA)) {
-
- } else {
-
- }
-
-}
diff --git a/keyboards/gherkin/keymaps/itsaferbie/config.h b/keyboards/gherkin/keymaps/itsaferbie/config.h
deleted file mode 100644
index 71c0cb8b5..000000000
--- a/keyboards/gherkin/keymaps/itsaferbie/config.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#undef RGB_DI_PIN
-#undef RGBLED_NUM
-#define RGB_DI_PIN D2
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 8
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-
-#endif \ No newline at end of file
diff --git a/keyboards/gherkin/keymaps/itsaferbie/keymap.c b/keyboards/gherkin/keymaps/itsaferbie/keymap.c
deleted file mode 100644
index 580b041c9..000000000
--- a/keyboards/gherkin/keymaps/itsaferbie/keymap.c
+++ /dev/null
@@ -1,152 +0,0 @@
-#include QMK_KEYBOARD_H
-
-extern rgblight_config_t rgblight_config;
-extern keymap_config_t keymap_config;
-
-#define _PS 0 // This is the Photoshop Layer
-#define _AI 1 // This is the Illustrator Layer
-#define _PR 2 // This is the Premier Layer
-#define _XD 3 // This is the Experience Design Layer
-
-enum custom_keycodes {
- PS = SAFE_RANGE,
- AI,
- PR,
-};
-
-#define _______ KC_TRNS
-
-#define PS TO(0)
-#define AI TO(1)
-#define PR TO(2)
-#define XD TO(3)
-
-// Mix of Photoshop, Illustrator, Premiere, and Experience Design shortcuts.
-#define SAVE LCTL(KC_S)
-#define OPEN LCTL(KC_O)
-#define COPY LCTL(KC_C)
-#define PAST LCTL(KC_V)
-#define CUNDO LCTL(LALT(KC_Z))
-#define INVERT LCTL(LSFT(KC_I))
-#define NLAYER LSFT(LCTL(KC_N))
-#define UNDO LCTL(KC_Z)
-#define TRANS LCTL(KC_T)
-#define ALIGNL LCTL(LSFT(KC_L))
-#define ALIGNC LCTL(LSFT(KC_C))
-#define ALIGNR LCTL(LSFT(KC_R))
-#define BRINGF LCTL(KC_RBRC)
-#define BRINGB LCTL(KC_LBRC)
-
-// Illustrator layer shortcuts.
-#define SHAPE LSFT(KC_M)
-#define RULER LCTL(LALT(KC_R))
-
-// Premiere layer shortcuts.
-#define REDO LCTL(LSFT(KC_Z))
-#define EXPORT LCTL(KC_M)
-#define IMPORT LCTL(KC_I)
-#define PCOPY LCTL(KC_V)
-#define PPASTE LCTL(LSFT(KC_V))
-
-// Experience Design layer shortcuts. (can be used with others too.)
-#define NEW LCTL(KC_N)
-#define LOCK LCTL(KC_L)
-#define SYMB LCTL(KC_K)
-#define HIDE LCTL(KC_SCLN)
-#define REPEAT LCTL(KC_R)
-#define MASK LCTL(LSFT(KC_M))
-#define GROUP LCTL(KC_G)
-#define UNGRP LCTL(LSFT(KC_G))
-#define VIEW LCTL(KC_TAB)
-#define HORZ LSFT(KC_C)
-#define VERT LSFT(KC_M)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- // Photoshop layer
- [_PS] = LAYOUT_ortho_3x10(
- SAVE, KC_W, KC_E, KC_T, KC_U, KC_I, KC_P, INVERT, CUNDO, NLAYER,
- UNDO, KC_H, KC_L, TRANS, ALIGNL, ALIGNC, ALIGNR, BRINGB, BRINGF, OPEN,
- KC_LSFT, COPY, PAST, KC_Z, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, AI
- ),
-
- // Illustrator layer
- [_AI] = LAYOUT_ortho_3x10(
- _______, M(0), RULER, _______, KC_G, _______, _______, KC_Q, KC_MINS, KC_PLUS,
- _______, _______, _______, KC_E, _______, _______, _______, SHAPE, KC_O, OPEN,
- _______, _______, _______, _______, _______, _______, _______, KC_M, KC_SLSH, PR
- ),
-
- // Premiere layer
- [_PR] = LAYOUT_ortho_3x10(
- _______, KC_Q, KC_W, KC_I, KC_O, KC_P, IMPORT, EXPORT, KC_MINS, KC_EQL,
- _______, REDO, KC_D, KC_F, KC_H, KC_M, KC_ENT, KC_LBRC, KC_RBRC, OPEN,
- _______, PCOPY, PPASTE, KC_SPC, KC_Z, KC_C, KC_V, KC_LEFT, KC_RIGHT, XD
- ),
-
- // Experience Design layer
- [_XD] = LAYOUT_ortho_3x10(
- _______, KC_E, KC_R, KC_T, KC_P, KC_A, KC_L, KC_V, KC_DEL, NEW,
- _______, REDO, GROUP, UNGRP, VIEW, HORZ, VERT, KC_Z, KC_ENT, OPEN,
- _______, KC_LCTL, COPY, PAST, SYMB, LOCK, MASK, HIDE, REPEAT, PS
- ),
-
-};
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-void matrix_init_user(void) {
- rgblight_enable();
-}
-
-void matrix_scan_user(void) {
- #ifdef RGBLIGHT_ENABLE
-
- static uint8_t old_layer = 255;
- uint8_t new_layer = biton32(layer_state);
-
- // Color of the Icons.
- if (old_layer != new_layer) {
- switch (new_layer) {
- case _PS:
- // #31C5F0
- rgblight_setrgb(49, 197, 240);
- break;
- case _AI:
- // #FF8011
- rgblight_setrgb(255, 128, 17);
- break;
- case _PR:
- // #E788FF
- rgblight_setrgb(231, 136, 255);
- break;
- case _XD:
- // #FF2BC2
- rgblight_setrgb(255, 43, 194);
- break;
- }
- old_layer = new_layer;
- }
- #endif
-}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- keyevent_t event = record->event;
- (void)event;
-
- switch (id) {
- case 0:
- // Save for Web Macro.
- return MACRO(D(LSFT), D(LALT), D(LCTL), T(S), U(LCTL), U(LALT), U(LSFT), END);
- }
- return MACRO_NONE;
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- }
- return true;
-}
diff --git a/keyboards/gherkin/keymaps/itsaferbie/rules.mk b/keyboards/gherkin/keymaps/itsaferbie/rules.mk
deleted file mode 100644
index ed0af7b8b..000000000
--- a/keyboards/gherkin/keymaps/itsaferbie/rules.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-BACKLIGHT_ENABLE = yes
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = yes
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/gherkin/keymaps/mjt/config.h b/keyboards/gherkin/keymaps/mjt/config.h
deleted file mode 100644
index bb59ec213..000000000
--- a/keyboards/gherkin/keymaps/mjt/config.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER Some Guy
-#define PRODUCT Gherkin
-#define DESCRIPTION 30 percent disaster
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 6
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-
-// These are with USB on the left.
-// #define MATRIX_ROW_PINS { B6, B2, B3, B1, F7 }
-// original from TMK: #define MATRIX_COL_PINS { D0, D4, C6, D7, E6, B4 }
-// #define MATRIX_COL_PINS { D0, D4, F6, D7, E6, B4 }
-
-// these are with USB on the right.
-#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
-#define MATRIX_COL_PINS { B4, E6, D7, F6, D4, D0 }
-
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* 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 */
-#define BACKLIGHT_LEVELS 3
-#define BACKLIGHT_PIN B5
-
-/* 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 AUDIO_VOICES
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-//#define FORCE_NKRO
-
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
-/* key combination for magic key command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* control how magic key switches layers */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
-
-/* override magic key keymap */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
-//#define MAGIC_KEY_HELP1 H
-//#define MAGIC_KEY_HELP2 SLASH
-//#define MAGIC_KEY_DEBUG D
-//#define MAGIC_KEY_DEBUG_MATRIX X
-//#define MAGIC_KEY_DEBUG_KBD K
-//#define MAGIC_KEY_DEBUG_MOUSE M
-//#define MAGIC_KEY_VERSION V
-//#define MAGIC_KEY_STATUS S
-//#define MAGIC_KEY_CONSOLE C
-//#define MAGIC_KEY_LAYER0_ALT1 ESC
-//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
-//#define MAGIC_KEY_LAYER0 0
-//#define MAGIC_KEY_LAYER1 1
-//#define MAGIC_KEY_LAYER2 2
-//#define MAGIC_KEY_LAYER3 3
-//#define MAGIC_KEY_LAYER4 4
-//#define MAGIC_KEY_LAYER5 5
-//#define MAGIC_KEY_LAYER6 6
-//#define MAGIC_KEY_LAYER7 7
-//#define MAGIC_KEY_LAYER8 8
-//#define MAGIC_KEY_LAYER9 9
-//#define MAGIC_KEY_BOOTLOADER PAUSE
-//#define MAGIC_KEY_LOCK CAPS
-//#define MAGIC_KEY_EEPROM E
-//#define MAGIC_KEY_NKRO N
-//#define MAGIC_KEY_SLEEP_LED Z
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/gherkin/keymaps/mjt/keymap.c b/keyboards/gherkin/keymaps/mjt/keymap.c
deleted file mode 100644
index 2b4369c34..000000000
--- a/keyboards/gherkin/keymaps/mjt/keymap.c
+++ /dev/null
@@ -1,279 +0,0 @@
-#include QMK_KEYBOARD_H
-#ifdef AUDIO_ENABLE
- #include "audio.h"
-#endif
-
-extern keymap_config_t keymap_config;
-
-//Tap Dance Declarations
-enum {
- TD_Z_LCTL = 0,
- TD_X_LGUI = 1,
- TD_C_LALT = 2,
- TD_A_TAB = 3,
- TD_Q_ESC = 4,
-// M(0)
-};
-
-//Friendly Layer Names
-enum gherkin_layers {
- _QWERTY,
- _SONGS,
- _NUMBERS,
- _SYMBOLS,
- _PLOVER,
- _ADJUST
-};
-
-// custom keycodes
-enum gherkin_keycodes {
- QWERTY = SAFE_RANGE,
- NUMBERS,
- SYMBOLS,
- SONGS,
- PLOVER,
- BACKLIT,
- MACSLEEP,
- EXT_PLV
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_ortho_3x10(
- TD(TD_Q_ESC), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- TD(TD_A_TAB), LT(_SYMBOLS,KC_S), KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_ADJUST,KC_SPC),
- TD(TD_Z_LCTL), TD(TD_X_LGUI), TD(TD_C_LALT), KC_V, KC_B, LT(_NUMBERS, KC_N), KC_M, KC_COMM, KC_DOT, SFT_T(KC_ENT)
- ),
- [_NUMBERS] = LAYOUT_ortho_3x10(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_HOME, KC_PGDN, KC_PGUP, KC_END ,
- KC_F7, KC_F8, KC_F9, KC_F10, LT(_ADJUST,KC_F11), _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
- ),
- [_SYMBOLS] = LAYOUT_ortho_3x10(
- KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
- KC_GRV, _______, XXXXXXX, KC_LBRC, KC_RBRC, KC_BSLS, KC_MINS, KC_EQL , KC_SCLN, KC_QUOT,
- KC_TILD, MO(_ADJUST), XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE, KC_UNDS, KC_PLUS, S(KC_SCLN), S(KC_QUOT)
- ),
- [_PLOVER] = LAYOUT_ortho_3x10(
- KC_Q, KC_W, KC_E, KC_R, KC_1, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- EXT_PLV, XXXXXXX, KC_C, KC_V, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
- ),
- [_ADJUST] = LAYOUT_ortho_3x10(
- RESET, _______, _______, _______, _______, QWERTY, NUMBERS, SYMBOLS, PLOVER, SONGS,
- MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, _______, _______, MACSLEEP, _______,
- BACKLIT, _______, _______, _______, _______, _______, _______, _______, _______, _______
- )
-};
-
-#ifdef AUDIO_ENABLE
-
-float tone_startup[][2] = SONG(STARTUP_SOUND);
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float tone_dvorak[][2] = SONG(DVORAK_SOUND);
-float tone_colemak[][2] = SONG(COLEMAK_SOUND);
-float tone_plover[][2] = SONG(PLOVER_SOUND);
-float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
-float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
-
-float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
-#endif
-
-void persistant_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_qwerty);
- #endif
- persistant_default_layer_set(1UL<<_QWERTY);
- }
- return false;
- break;
- case NUMBERS:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_dvorak);
- #endif
- persistant_default_layer_set(1UL<<_NUMBERS);
- }
- return false;
- break;
- case SYMBOLS:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_colemak);
- #endif
- persistant_default_layer_set(1UL<<_SYMBOLS);
- }
- return false;
- break;
- case PLOVER:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- stop_all_notes();
- PLAY_SONG(tone_plover);
- #endif
- layer_off(_NUMBERS);
- layer_off(_SYMBOLS);
- layer_off(_ADJUST);
- layer_on(_PLOVER);
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
- keymap_config.raw = eeconfig_read_keymap();
- keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
- }
- return false;
- break;
- case EXT_PLV:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_plover_gb);
- #endif
- layer_off(_PLOVER);
- }
- return false;
- break;
- case MACSLEEP:
- if (record->event.pressed) {
- // ACTION_MODS_KEY(MOD_LCTL | MOD_LSFT, KC_POWER);
- register_code(KC_RSFT);
- register_code(KC_RCTL);
- register_code(KC_POWER);
- unregister_code(KC_POWER);
- unregister_code(KC_RCTL);
- unregister_code(KC_RSFT);
- }
- return false;
- break;
- case BACKLIT:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- } else {
- unregister_code(KC_RSFT);
- }
- return false;
- break;
- }
- return true;
-}
-
-
-/*
-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) {
- 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) > 150) { // 150 being 150ms, the threshhold we pick for counting something as a tap.
- return MACRO( D(LSFT), END );
- }
- else {
- return MACRO( T(N), END );
- }
- }
- break;
- }
- }
- return MACRO_NONE;
-}*/
-
-void matrix_init_user(void) {
- #ifdef AUDIO_ENABLE
- startup_user();
- #endif
-}
-
-#ifdef AUDIO_ENABLE
-
-void startup_user()
-{
- _delay_ms(20); // gets rid of tick
- PLAY_SONG(tone_startup);
-}
-
-void shutdown_user()
-{
- PLAY_SONG(tone_goodbye);
- _delay_ms(150);
- stop_all_notes();
-}
-
-void music_on_user(void)
-{
- music_scale_user();
-}
-
-void music_scale_user(void)
-{
- PLAY_SONG(music_scale);
-}
-
-#endif
-
-void matrix_scan_user(void) {
-}
-
-//Tap Dance Definitions
-qk_tap_dance_action_t tap_dance_actions[] = {
- //Tap once for Esc, twice for Caps Lock
- [TD_Z_LCTL] = ACTION_TAP_DANCE_DOUBLE(KC_Z, KC_LCTL),
- [TD_X_LGUI] = ACTION_TAP_DANCE_DOUBLE(KC_X, KC_LGUI),
- [TD_C_LALT] = ACTION_TAP_DANCE_DOUBLE(KC_C, KC_LALT),
- [TD_A_TAB] = ACTION_TAP_DANCE_DOUBLE(KC_A, KC_TAB),
- [TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC)
-};
-
-// don't know what this is doing...
-/*
-void led_set_user(uint8_t usb_led) {
-
- if (usb_led & (1 << USB_LED_NUM_LOCK)) {
- DDRD |= (1 << 5); PORTD &= ~(1 << 5);
- } else {
- DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
- }
-
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 0); PORTB &= ~(1 << 0);
- } else {
- DDRB &= ~(1 << 0); PORTB &= ~(1 << 0);
- }
-
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
-
- } else {
-
- }
-
- if (usb_led & (1 << USB_LED_COMPOSE)) {
-
- } else {
-
- }
-
- if (usb_led & (1 << USB_LED_KANA)) {
-
- } else {
-
- }
-
-}
-*/
diff --git a/keyboards/gherkin/keymaps/mjt/rules.mk b/keyboards/gherkin/keymaps/mjt/rules.mk
deleted file mode 100644
index b397f86d0..000000000
--- a/keyboards/gherkin/keymaps/mjt/rules.mk
+++ /dev/null
@@ -1,29 +0,0 @@
-## not sure where this stuff goes ##
-MCU = atmega32u4
-F_CPU = 16000000
-ARCH = AVR8
-F_USB = $(F_CPU)
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = yes # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-TAP_DANCE_ENABLE=yes
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/gherkin/keymaps/steno/config.h b/keyboards/gherkin/keymaps/steno/config.h
deleted file mode 100644
index abacefa01..000000000
--- a/keyboards/gherkin/keymaps/steno/config.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define NO_ACTION_LAYER
-#define NO_ACTION_TAPPING
-#define NO_ACTION_ONESHOT
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
-
-#endif \ No newline at end of file
diff --git a/keyboards/gherkin/keymaps/steno/rules.mk b/keyboards/gherkin/keymaps/steno/rules.mk
deleted file mode 100644
index fa813f209..000000000
--- a/keyboards/gherkin/keymaps/steno/rules.mk
+++ /dev/null
@@ -1,16 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER
-
-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
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = no \ No newline at end of file
diff --git a/keyboards/gherkin/keymaps/talljoe_gherkin/config.h b/keyboards/gherkin/keymaps/talljoe_gherkin/config.h
deleted file mode 100644
index 3e9e692d3..000000000
--- a/keyboards/gherkin/keymaps/talljoe_gherkin/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define PREVENT_STUCK_MODIFIERS
-
-#endif \ No newline at end of file
diff --git a/keyboards/gherkin/keymaps/talljoe_gherkin/keymap.c b/keyboards/gherkin/keymaps/talljoe_gherkin/keymap.c
deleted file mode 100644
index ea2921924..000000000
--- a/keyboards/gherkin/keymaps/talljoe_gherkin/keymap.c
+++ /dev/null
@@ -1,58 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "keymap_steno.h"
-
-#define ST_BOLT QK_STENO_BOLT
-#define ST_GEM QK_STENO_GEMINI
-
-#define XXXXXXX KC_NO
-
-enum keyboard_layers {
- _QWERTY,
- _RAISE,
- _LOWER,
- _PLOVER,
- _ADJUST
-};
-
-#define ADJ_Z LT(_ADJUST, KC_Z)
-#define RS_BSPC LT(_RAISE, KC_BSPC)
-#define LW_SPC LT(_LOWER, KC_SPC)
-#define MO_ADJ MO(_ADJUST)
-#define TG_PLV TG(_PLOVER)
-#define OS_LCTL OSM(MOD_LCTL)
-#define OS_LALT OSM(MOD_LALT)
-#define OS_LGUI OSM(MOD_LGUI)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_QWERTY] = LAYOUT_ortho_3x10(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_RSFT,
- ADJ_Z, KC_X, KC_C, KC_V, RS_BSPC, LW_SPC, KC_B, KC_N, KC_M, KC_ENT
- ),
-
- [_RAISE] = LAYOUT_ortho_3x10(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_7, KC_9, KC_0,
- KC_ESC, KC_MINS, KC_EQL, _______, KC_LBRC, KC_RBRC, _______, KC_QUOT, KC_SCLN, _______,
- OS_LCTL, OS_LGUI, OS_LALT, KC_GRV, _______, KC_TAB, KC_BSLS, KC_COMM, KC_DOT, KC_SLSH
- ),
-
- [_LOWER] = LAYOUT_ortho_3x10(
- KC_F1, KC_F2, KC_F3, KC_F4, XXXXXXX, KC_PGUP, KC_HOME, KC_UP, KC_END, XXXXXXX,
- KC_F5, KC_F6, KC_F7, KC_F8, XXXXXXX, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______,
- KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______, OS_LALT, OS_LGUI, OS_LCTL, KC_CAPS
- ),
-
- [_PLOVER] = LAYOUT_ortho_3x10(
- STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
- STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
- MO_ADJ, STN_NUM, STN_A, STN_O, STN_NUM, STN_E, STN_U, STN_NUM, STN_NUM, XXXXXXX
- ),
-
- [_ADJUST] = LAYOUT_ortho_3x10(
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ST_BOLT, ST_GEM, TG_PLV,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET
- ),
-
-};
diff --git a/keyboards/gherkin/keymaps/talljoe_gherkin/rules.mk b/keyboards/gherkin/keymaps/talljoe_gherkin/rules.mk
deleted file mode 100644
index 02216ecb3..000000000
--- a/keyboards/gherkin/keymaps/talljoe_gherkin/rules.mk
+++ /dev/null
@@ -1,6 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER
diff --git a/keyboards/gherkin/keymaps/wanleg/config.h b/keyboards/gherkin/keymaps/wanleg/config.h
deleted file mode 100644
index 98e2b2338..000000000
--- a/keyboards/gherkin/keymaps/wanleg/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-#endif
-
-#define PREVENT_STUCK_MODIFIERS
-
-//Tap Dance Prerequisite
-#define TAPPING_TERM 200
-
-//Mousekeys Settings
-#define MOUSEKEY_INTERVAL 16
-#define MOUSEKEY_DELAY 0
-#define MOUSEKEY_TIME_TO_MAX 60
-#define MOUSEKEY_MAX_SPEED 7
-#define MOUSEKEY_WHEEL_DELAY 0
-
-/* for QMK DFU bootloader */
-/* not required if using default ProMicro bootloader */
-/* set top left key as bootloader mode escape key */
-#define QMK_ESC_OUTPUT B4 // usually COL
-#define QMK_ESC_INPUT F7 // usually ROW
-#define QMK_LED B0 \ No newline at end of file
diff --git a/keyboards/gherkin/keymaps/wanleg/keymap.c b/keyboards/gherkin/keymaps/wanleg/keymap.c
deleted file mode 100644
index 108ed40e5..000000000
--- a/keyboards/gherkin/keymaps/wanleg/keymap.c
+++ /dev/null
@@ -1,218 +0,0 @@
-/* Copyright 2017 Brian Fong
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include QMK_KEYBOARD_H
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QW 0
-#define DIR 1
-#define NUM 2
-#define ETC 3
-
-// Readability keycodes
-#define _______ KC_TRNS
-
-
-/////////////// TAP DANCE SECTION START ///////////////
-//Tap Dance Declarations (list of my tap dance configurations)
-enum {
- TD_SFT_CAPS = 0
- ,TD_Q_ESC
- ,ENT_TAP_DANCE
- ,DEL_TAP_DANCE
-};
-
-///// QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION START /////
-///// (no need to edit this section) /////
-//Enums used to clearly convey the state of the tap dance
-enum {
- SINGLE_TAP = 1,
- SINGLE_HOLD = 2,
- DOUBLE_TAP = 3,
- DOUBLE_HOLD = 4,
- DOUBLE_SINGLE_TAP = 5 //send SINGLE_TAP twice - NOT DOUBLE_TAP
- // Add more enums here if you want for triple, quadruple, etc.
-};
-
-typedef struct {
- bool is_press_action;
- int state;
-} tap;
-
-int cur_dance (qk_tap_dance_state_t *state) {
- if (state->count == 1) {
- //If count = 1, and it has been interrupted - it doesn't matter if it is pressed or not: Send SINGLE_TAP
- if (state->interrupted || !state->pressed) return SINGLE_TAP;
- if (state->interrupted) return SINGLE_TAP;
- else return SINGLE_HOLD;
- }
- //If count = 2, and it has been interrupted - assume that user is trying to type the letter associated
- //with single tap.
- else if (state->count == 2) {
- if (state->interrupted) return DOUBLE_SINGLE_TAP;
- else if (state->pressed) return DOUBLE_HOLD;
- else return DOUBLE_TAP;
- }
- else return 6; //magic number. At some point this method will expand to work for more presses
-}
-///// QUAD FUNCTION TAP DANCE GENERAL SETUP SECTION END /////
-///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION START /////
-//instantialize an instance of 'tap' for the 'ENT' tap dance.
-static tap ENTtap_state = {
- .is_press_action = true,
- .state = 0
-};
-
-void ENT_finished (qk_tap_dance_state_t *state, void *user_data) {
- ENTtap_state.state = cur_dance(state);
- switch (ENTtap_state.state) {
- case SINGLE_TAP: register_code(KC_SPC); break;
- case SINGLE_HOLD: register_code(KC_LSFT); break;
- case DOUBLE_TAP: register_code(KC_ENT); break;
- case DOUBLE_HOLD: register_code(KC_NO); break; // setting double hold to do nothing (change this if you want)
- case DOUBLE_SINGLE_TAP: register_code(KC_SPC); unregister_code(KC_SPC); register_code(KC_SPC);
- //Last case is for fast typing. Assuming your key is `f`:
- //For example, when typing the word `buffer`, and you want to make sure that you send `ff` and not `Esc`.
- //In order to type `ff` when typing fast, the next character will have to be hit within the `TAPPING_TERM`, which by default is 200ms.
- }
-}
-
-void ENT_reset (qk_tap_dance_state_t *state, void *user_data) {
- switch (ENTtap_state.state) {
- case SINGLE_TAP: unregister_code(KC_SPC); break;
- case SINGLE_HOLD: unregister_code(KC_LSFT); break;
- case DOUBLE_TAP: unregister_code(KC_ENT); break;
- case DOUBLE_HOLD: unregister_code(KC_NO);
- case DOUBLE_SINGLE_TAP: unregister_code(KC_SPC);
- }
- ENTtap_state.state = 0;
-}
-
-//instanalize an instance of 'tap' for the 'DEL' tap dance.
-static tap DELtap_state = {
- .is_press_action = true,
- .state = 0
-};
-
-void DEL_finished (qk_tap_dance_state_t *state, void *user_data) {
- DELtap_state.state = cur_dance(state);
- switch (DELtap_state.state) {
- case SINGLE_TAP: register_code(KC_BSPC); break;
- case SINGLE_HOLD: register_code(KC_LCTL); break;
- case DOUBLE_TAP: register_code(KC_DEL); break;
- case DOUBLE_HOLD: register_code(KC_NO); break;
- case DOUBLE_SINGLE_TAP: register_code(KC_BSPC); unregister_code(KC_BSPC); register_code(KC_BSPC);
- }
-}
-
-void DEL_reset (qk_tap_dance_state_t *state, void *user_data) {
- switch (DELtap_state.state) {
- case SINGLE_TAP: unregister_code(KC_BSPC); break;
- case SINGLE_HOLD: unregister_code(KC_LCTL); break;
- case DOUBLE_TAP: unregister_code(KC_DEL); break;
- case DOUBLE_HOLD: unregister_code(KC_NO);
- case DOUBLE_SINGLE_TAP: unregister_code(KC_BSPC);
- }
- DELtap_state.state = 0;
-}
-///// QUAD FUNCTION TAP DANCE PERSONALIZATION SECTION END /////
-
-//Tap Dance Definitions
-//THIS SECTION HAS TO BE AT THE END OF THE TAP DANCE SECTION
-qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_SFT_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS)
-// Other declarations would go here, separated by commas, if you have them
- ,[TD_Q_ESC] = ACTION_TAP_DANCE_DOUBLE(KC_Q, KC_ESC)
- ,[ENT_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, ENT_finished, ENT_reset)
- ,[DEL_TAP_DANCE] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, DEL_finished, DEL_reset)
-};
-
-//In Layer declaration, add tap dance item in place of a key code
-//TD(TD_SFT_CAPS)
-
-///////////// TAP DANCE SECTION END ///////////////
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Qwerty
- * .-----------------------------------------------------------------------------------------.
- * | Q//ESC | W | E | R | T | Y | U | I | O | P |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | A | S | D | F | G | H | J | K | L | SPACE |
- * | | | | | | | | | |SFThold |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | Z | X | C | V/NUM | B/ETC | N | M/DIR | ,/GUI | ./ALT | BKSC |
- * | SFThold| | | | | | | | |CTRLhold|
- * '-----------------------------------------------------------------------------------------'
- */
- [_QW] = LAYOUT_ortho_3x10( /* Qwerty*/
- TD(TD_Q_ESC), 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, SFT_T(KC_SPC),
- SFT_T(KC_Z), KC_X, KC_C, LT(NUM, KC_V), LT(ETC, KC_B), KC_N, LT(DIR, KC_M), GUI_T(KC_COMM), ALT_T(KC_DOT), CTL_T(KC_BSPC)
- ),
-
- /*
- * Directional Modifiers
- * .-----------------------------------------------------------------------------------------.
- * | TAB | up | | INS | CTRL | SHIFT | PgUp | HOME | - | = |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | left | down | right | PrScr | SHIFT | CTRL | PgDn | END | [ | ] |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | P-Brk | | | | | | | RGUI | ALT | / |
- * '-----------------------------------------------------------------------------------------'
- */
- [DIR] = LAYOUT_ortho_3x10( /* Directional Modifiers */
- KC_TAB, KC_UP, _______, KC_INS, KC_LCTL, KC_RSFT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL,
- KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, KC_LSFT, KC_RCTL, KC_PGDN, KC_END, KC_LBRC, KC_RBRC,
- KC_PAUS, _______, _______, _______, _______, _______, _______, KC_RGUI, KC_LALT, KC_SLSH
- ),
-
- /*
- * Numbers
- * .-----------------------------------------------------------------------------------------.
- * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | F11 | F12 | | | | ENTER | SHIFT | GUI | ./ALT | BKSC |
- * | | | | | | | | | |CTRLhold|
- * '-----------------------------------------------------------------------------------------'
- */
- [NUM] = LAYOUT_ortho_3x10 ( /* Numbers */
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
- KC_F11, KC_F12, _______, _______, _______, KC_ENT, KC_RSFT, KC_RGUI, ALT_T(KC_DOT), CTL_T(KC_BSPC)
- ),
-
- /*
- * ETC
- * .-----------------------------------------------------------------------------------------.
- * | ` | mUP | | | RESET | SHIFT | mUp | mDown | | \ |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | mLeft | mDown | mRight | | SHIFT | mBtn3 | mBtn1 | mBtn2 | ; | ' |
- * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
- * | Sft//Cp| | | | | C-A-D | mLeft | mRight | ALT | DEL |
- * '-----------------------------------------------------------------------------------------'
- */
- [ETC] = LAYOUT_ortho_3x10( /* ETC */
- KC_GRV, KC_MS_U, _______, _______, RESET, KC_RSFT, KC_WH_U, KC_WH_D, _______, KC_BSLS,
- KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_LSFT, KC_BTN3, KC_BTN1, KC_BTN2, KC_SCLN, KC_QUOT,
- TD(TD_SFT_CAPS), _______, _______, _______, _______, LALT(LCTL(KC_DEL)), KC_WH_L, KC_WH_R, KC_LALT, KC_DEL
- ),
-
-};
diff --git a/keyboards/gherkin/keymaps/wanleg/readme.md b/keyboards/gherkin/keymaps/wanleg/readme.md
deleted file mode 100644
index 0b1b099c4..000000000
--- a/keyboards/gherkin/keymaps/wanleg/readme.md
+++ /dev/null
@@ -1,86 +0,0 @@
-![Gherkin Wanleg Layout Image](https://i.imgur.com/nCPog2W.png)
-# Gherkin Wanleg Layout
-This is the layout I came up with to preserve a standard QWERTY 104 key ANSI layout as much as possible, in as few layers as possible for a 30 key board.
-I originally set up a few Tap Dance keys, but dropped half of them in favor of chorded versions since in actual use, they tended to impede typing speed more than their current two-key versions.
-I've left them in my `keymap.c` ready for use if anyone wants to try them out:
-
-Legend Name | Single Tap | Double Tap | Hold
---- | --- | --- | ---
-*null* | space | enter | shift
-*null* | backspace | delete | control
-Sft//Cp | shift | caps lock | *null*
-Q//Esc | KC_Q | escape | *null*
-
-# Gherkin Flashing
-## Windows
-1. The standard Gherkin uses a ProMicro (or clone) microcontroller, which has the Caterina bootloader by default.
-2. If you have never flashed your ProMicro with QMK before, you will need to short the RST pin to GND to put it into bootloader mode (you only have 7 seconds to flash once it enters bootloader mode). You may need to touch the RST pin to GND **TWICE** in quick succession if it doesn't flash with just one touch.
-3. Once connected to your computer, you should be able to flash using
-`make gherkin:wanleg:avrdude`
-4. Once you've been able to successfully flash the ProMicro, you should be able to use the `RESET` key for future flashes instead of shorting the RST pin.
-
-## Linux
-### First Flash with QMK
-The built-in `:avrdude` QMK target in Linux doesn't work with the default Caterina bootloader on the ProMicro, so we have to use avrdude separately. The instructions below are adapted from https://deskthority.net/workshop-f7/how-to-use-a-pro-micro-as-a-cheap-controller-converter-like-soarer-s-t8448.html
-
-1. To flash the device, you need to have AVRdude installed. You can do this via your distro's package manager (or compile from source if needed).
-2. Once avrdude has been installed, open a terminal and run
-`ls /dev/tty*`
-3. Next, plug in your device and re-run `ls /dev/tty*`
-There should be one more device than was seen previously. Make a note of it. For me, it's `/dev/ttyACM0`.
-4. Navigate to the directory with your `.hex` file in it. Touch the RST pin to GND **TWICE** in quick succession, then run the following within 7 seconds:
-`sudo avrdude -p m32u4 -P YOUR_SERIAL_PORT -c avr109 -U flash:w:YOUR_FILENAME.hex`
-Replace YOUR_SERIAL_PORT with your serial port's device name, and YOUR_FILENAME.hex with the appropriate filename. For me, it looks like this:
-`sudo avrdude -p m32u4 -P /dev/ttyACM0 -c avr109 -U flash:w:gherkin_wanleg.hex`
-If you miss the 7 second window, the ProMicro will leave bootloader mode and the flash will fail. Hit `Control` + `C` to exit the `avrdude` command, connect RST to GND twice quickly, and try the `avrdude` command again.
-
-### Subsequent Flashes with QMK
-1. Re-flashing is similar to the initial flash procedure. Plug in your keyboard, open a terminal and run
-`ls /dev/tty*`
-2. Next, hit the `RESET` key on your keyboard and re-run the `ls /dev/tty*` command to find your keyboard's serial port.
-3. Flash your keyboard with the avrdude command you used for the initial flash within 7 seconds after hitting `RESET`.
-
-# ProMicro Bootloader Replacement (Caterina to QMK DFU)
-If you have an Arduino (or clone), you can replace the bootloader for a few extra features (e.g. no more 7 second "flash window", simplified Linux flashing, blinking LED when the ProMicro is in bootloader mode, ability to exit bootloader mode without unplugging your keyboard, among others).
-The instructions below have been adapted from https://www.reddit.com/r/olkb/comments/8sxgzb/replace_pro_micro_bootloader_with_qmk_dfu/)
-## Arduino Setup
-1. Upload the ArduinoISP sketch onto your Arduino board (https://www.arduino.cc/en/Tutorial/ArduinoISP).
-2. Wire the Arduino to the ProMicro
-
-| Arduino | ProMicro |
-| --- | --- |
-| 10 | RST |
-| 11 | 16 |
-| 12 | 14 |
-| 13 | 15 |
-| GND | GND |
-| 5V | VCC |
-
-## Make the QMK DFU .hex
-3. In `config.h` add the following. This is already set up in `qmk_firmware/keyboards/gherkin/wanleg`. You only need to do this on other keymaps.
-```
-#define QMK_ESC_OUTPUT B4
-#define QMK_ESC_INPUT F7
-#define QMK_LED B0
-```
-The `QMK_ESC_` lines define where the bootloader escape key is. Refer to the `MATRIX_ROW_PINS` and `MATRIX_COL_PINS` lines in your keyboard's `config.h` to choose your preferred key.
-You hit the bootloader escape key to exit bootloader mode after you've hit the RESET key to enter bootloader mode (e.g. if you change your mind and don't want to flash just then).
-On a Gherkin, B4/F7 corresponds to the top-left corner key.
-`B0` is an indicator light on one of the ProMicro's onboard LEDs. With QMK DFU, it will flash to indicate the ProMicro is in bootloader mode.
-You can add `#define QMK_SPEAKER C6` if you have a speaker hooked up to pin C6. The Gherkin PCB already uses pin C6 in its switch layout, so you cannot use a speaker on a standard Gherkin.
-4. Also, you should add `BOOTLOADER = qmk-dfu` to your `rules.mk` file, so it is flagged properly. Again, this is already set up in `qmk_firmware/keyboards/gherkin/wanleg`.
-5. Once you've made the required edits, it's time to compile the firmware. If you use the `:production` target when compiling, it will produce the usual `.hex` file as well as `_bootloader.hex` and `_production.hex` files. The `_production.hex` will be what we want. This contains the bootloader and the firmware, so we only have to flash once (rather than flash the bootloader, and THEN flash the firmware).
-For example
-`make <keyboard>:<keymap>:production`
-For my particular keymap, for reasons listed in the **Using QMK DFU** section, you should use the following to ensure the bootloader is set properly
-`make gherkin:wanleg:production dfu=qmk`
-
-## Burn QMK DFU
-6. Navigate to the directory with your `_production.hex` file, and burn it with the following command
-`avrdude -b 19200 -c avrisp -p m32u4 -v -e -U lock:w:0x3F:m -U efuse:w:0xC3:m -U hfuse:w:0xD9:m -U lfuse:w:0x5E:m -U YOUR_production.hex -P comPORT`
-Change `comPORT` to whatever port is used by the Arduino (e.g. `com11` in Windows or `/dev/ttyACM0` in Linux). Use Device Manager in Windows to find the port being used. Use `ls /dev/tty*` in Linux. Change `YOUR_production.hex` to whatever you've created in the previous step.
-
-## Using QMK DFU
-7. Once QMK DFU is burned to your ProMicro, you can then flash subsequent hex files with
-`make gherkin:<keymap>:dfu dfu=qmk`
-The `dfu=qmk` conditional will set `BOOTLOADER = qmk-dfu` instead of `BOOTLOADER = caterina`
diff --git a/keyboards/gherkin/keymaps/wanleg/rules.mk b/keyboards/gherkin/keymaps/wanleg/rules.mk
deleted file mode 100644
index 7f2ff3327..000000000
--- a/keyboards/gherkin/keymaps/wanleg/rules.mk
+++ /dev/null
@@ -1,7 +0,0 @@
-TAP_DANCE_ENABLE = yes # Enable Tap Dance (comment if not being implemented)
-
-#If ProMicro has QMK DFU bootloader instead of Caterina,
-#run "make <keyboard>:<keymap> dfu=qmk" when compiling to ensure it is flagged properly after being flashed
-ifeq ($(strip $(dfu)), qmk)
- BOOTLOADER = qmk-dfu
-endif \ No newline at end of file
diff --git a/keyboards/gherkin/rules.mk b/keyboards/gherkin/rules.mk
deleted file mode 100644
index 416ca5e5f..000000000
--- a/keyboards/gherkin/rules.mk
+++ /dev/null
@@ -1,59 +0,0 @@
-# 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
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = no
-
-LAYOUTS = ortho_3x10
diff --git a/keyboards/gonnerd/keymaps/default/rules.mk b/keyboards/gonnerd/keymaps/default/rules.mk
index 772d7aee3..e34aba692 100644
--- a/keyboards/gonnerd/keymaps/default/rules.mk
+++ b/keyboards/gonnerd/keymaps/default/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/gonnerd/keymaps/gam3cat/config.h b/keyboards/gonnerd/keymaps/gam3cat/config.h
index a3819d3a5..334beb0ac 100644
--- a/keyboards/gonnerd/keymaps/gam3cat/config.h
+++ b/keyboards/gonnerd/keymaps/gam3cat/config.h
@@ -1,7 +1,10 @@
-#include "../../config.h"
+#pragma once
+
+//Force NKRO to be enabled.
+#define FORCE_NKRO
+
//GRAVE_ESC override for CTRL+SHIFT+ESC Windows task manager shortcut.
-#define GRAVE_ESC_CTRL_OVERRIDE
-#define PREVENT_STUCK_MODIFIERS
+//#define GRAVE_ESC_CTRL_OVERRIDE
//Delay matrix scan for tap dance, reduce to activate modifier keys faster.
//#define TAPPING_TERM 200
diff --git a/keyboards/gonnerd/keymaps/gam3cat/keymap.c b/keyboards/gonnerd/keymaps/gam3cat/keymap.c
index 3e43d67d5..f01dd920e 100644
--- a/keyboards/gonnerd/keymaps/gam3cat/keymap.c
+++ b/keyboards/gonnerd/keymaps/gam3cat/keymap.c
@@ -11,13 +11,16 @@ enum layers {
_AL, // Adjust Layer
};
-enum gonnerd_keycodes {
+enum custom_keycodes {
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
+ QMK_REV,
+ KC_WEB,
+ KC_SP4
};
+extern backlight_config_t backlight_config;
+
#include "dynamic_macro.h"
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
#define FN_CAPS LT(_FL, KC_CAPS)
#define KC_DMR1 DYN_REC_START1
#define KC_DMR2 DYN_REC_START2
@@ -25,47 +28,44 @@ enum gonnerd_keycodes {
#define KC_DMP2 DYN_MACRO_PLAY2
#define KC_DMRS DYN_REC_STOP
-static uint8_t current_layer;
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* _BL: Base Layer, mostly standard TKL QWERTY layout.
- * .-----------------------------------------------------------------------.
- * |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| -| =|Backsp |Ins|Hom|PgU|
- * |-----------------------------------------------------------|-----------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|End|PgD|
- * |-----------------------------------------------------------|-----------|
- * |FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return | |
- * |-----------------------------------------------------------|-----------|
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up| |
- * |-----------------------------------------------------------|-----------|
- * |Ctrl |||||Win | Space |RAlt |||||Ctrl |Lft|Dwn|Rgt|
- * *-----------------------------------------------------------------------*
+ /*#### _BL: Base Layer - Standard TKL QWERTY layout.
+ * .-----------------------------------------------------------------------.
+ * |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 |- |= |Backsp |Ins|Hom|PgU|
+ * |-----------------------------------------------------------|-----------|
+ * |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
+ * |-----------------------------------------------------------|-----------|
+ * |Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
+ * |-----------------------------------------------------------|-----------|
+ * |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
+ * |-----------------------------------------------------------|-----------|
+ * |Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
+ * *-----------------------------------------------------------------------*
*/
[_BL] = LAYOUT_tkl( \
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, \
- FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
),
-
- /* _WL: Workman Layer.
- * .-----------------------------------------------------------------------.
- * | ||||| | | | ||| | | | ||| | | | | | | |
- * .-----------------------------------------------------------|-----------|
- * | | | | | | | | | | | | -| =| | | | |
- * |-----------------------------------------------------------|-----------|
- * | | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| | | |
- * |-----------------------------------------------------------|-----------|
- * | | A| S| H| T| G| Y| N| E| O| I| '| | |
- * |-----------------------------------------------------------|-----------|
- * | | Z| X| M| C| V| K| L| ,| .| /| | | | | |
- * |-----------------------------------------------------------|-----------|
- * | ||||| | | ||||| | | | |
- * *-----------------------------------------------------------------------*
+ /*#### _WL: Workman Layer.
+ * .-----------------------------------------------------------------------.
+ * | ||||| | | | ||| | | | ||| | | | | | | |
+ * .-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | | |- |= | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |A |S |H |T |G |Y |N |E |O |I |' | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Z |X |M |C |V |K |L |, |. |/ | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | |
+ * *-----------------------------------------------------------------------*
*/
[_WL] = LAYOUT_tkl( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
@@ -75,21 +75,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
-
- /* _NL: Norman Layer.
- * .-----------------------------------------------------------------------.
- * | ||||| | | | ||| | | | ||| | | | | | | |
- * .-----------------------------------------------------------|-----------|
- * | | | | | | | | | | | | -| =| | | | |
- * |-----------------------------------------------------------|-----------|
- * | | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| | | |
- * |-----------------------------------------------------------|-----------|
- * | | A| S| E| T| G| Y| N| I| O| H| '| | |
- * |-----------------------------------------------------------|-----------|
- * | | Z| X| C| V| B| P| M| ,| .| /| | | | | |
- * |-----------------------------------------------------------|-----------|
- * | ||||| | | ||||| | | | |
- * *-----------------------------------------------------------------------*
+ /*#### _NL: Norman Layer.
+ * .-----------------------------------------------------------------------.
+ * | ||||| | | | ||| | | | ||| | | | | | | |
+ * .-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | | |- |= | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |A |S |E |T |G |Y |N |I |O |H |' | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Z |X |C |V |B |P |M |, |. |/ | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | |
+ * *-----------------------------------------------------------------------*
*/
[_NL] = LAYOUT_tkl( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
@@ -99,21 +98,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
-
- /* _DL: Dvorak Layer.
- * .-----------------------------------------------------------------------.
- * | ||||| | | | ||| | | | ||| | | | | | | |
- * .-----------------------------------------------------------|-----------|
- * | | | | | | | | | | | | [| ]| | | | |
- * |-----------------------------------------------------------|-----------|
- * | | '| ,| .| P| Y| F| G| C| R| L| /| =| \| | | |
- * |-----------------------------------------------------------|-----------|
- * | | A| O| E| U| I| D| H| T| N| S| -| | |
- * |-----------------------------------------------------------|-----------|
- * | | ;| Q| J| K| X| B| M| W| V| Z| | | | | |
- * |-----------------------------------------------------------|-----------|
- * | ||||| | | ||||| | | | |
- * *-----------------------------------------------------------------------*
+ /*#### _DL: Dvorak Layer.
+ * .-----------------------------------------------------------------------.
+ * | ||||| | | | ||| | | | ||| | | | | | | |
+ * .-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | | |[ |] | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |A |O |E |U |I |D |H |T |N |S |- | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |; |Q |J |K |X |B |M |W |V |Z | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | |
+ * *-----------------------------------------------------------------------*
*/
[_DL] = LAYOUT_tkl( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
@@ -123,21 +121,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
-
- /* _CL: Colmak Layer.
- * .-----------------------------------------------------------------------.
- * | ||||| | | | ||| | | | ||| | | | | | | |
- * .-----------------------------------------------------------|-----------|
- * | | | | | | | | | | | | -| =| | | | |
- * |-----------------------------------------------------------|-----------|
- * | | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| | | |
- * |-----------------------------------------------------------|-----------|
- * | | A| R| S| T| D| H| N| E| I| O| '| | |
- * |-----------------------------------------------------------|-----------|
- * | | Z| X| C| V| B| K| M| ,| .| /| | | | | |
- * |-----------------------------------------------------------|-----------|
- * | ||||| | | ||||| | | | |
- * *-----------------------------------------------------------------------*
+ /*#### _CL: Colmak Layer.
+ * .-----------------------------------------------------------------------.
+ * | ||||| | | | ||| | | | ||| | | | | | | |
+ * .-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | | |- |= | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |A |R |S |T |D |H |N |E |I |O |' | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Z |X |C |V |B |K |M |, |. |/ | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | |
+ * *-----------------------------------------------------------------------*
*/
[_CL] = LAYOUT_tkl( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
@@ -147,142 +144,126 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
-
- /* _FL: Function Layer.
- * M0 opens Chrome
- * .-----------------------------------------------------------------------.
- * | ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
- * .-----------------------------------------------------------|-----------|
- * | M0| | | | | | | | | | | | | | | | |
- * |-----------------------------------------------------------|-----------|
- * |Fn_AL| | | | | | | | | | | | | | | | |
- * |-----------------------------------------------------------|-----------|
- * |FnCaps| | | | | | |Lft|Dwn|Up |Rgt| | | |
- * |-----------------------------------------------------------|-----------|
- * | | | | | | | | | | | | | | | | |
- * |-----------------------------------------------------------|-----------|
- * | ||||| | | ||||| |WBk| |WFw|
- * *-----------------------------------------------------------------------*
+ /*#### _FL: Function Layer.
+ * .-----------------------------------------------------------------------.
+ * | ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
+ * .-----------------------------------------------------------|-----------|
+ * |Web| | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * |Fn_AL| | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | |Lft|Dwn|Up |Rgt| | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | | | |Fn | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | SP4 | |Fn | |WBk| |WFw|
+ * *-----------------------------------------------------------------------*
*/
[_FL] = LAYOUT_tkl( \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, \
- M(0), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ KC_WEB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
MO(_AL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
- XXXXXXX, XXXXXXX, KC_MENU, M(1), XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_WBAK, XXXXXXX, KC_WFWD \
+ XXXXXXX, XXXXXXX, KC_MENU, KC_SP4, XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_WBAK, XXXXXXX, KC_WFWD \
),
-
- /* _AL: Adjust Layer.
- * Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
- * .-----------------------------------------------------------------------.
- * |Rst||||| | | | ||| | | | ||| | | | | | | |
- * .-----------------------------------------------------------|-----------|
- * |Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
- * |-----------------------------------------------------------|-----------|
- * |Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
- * |-----------------------------------------------------------|-----------|
- * |FnCaps| | |_DL| | | | | | | | | | |
- * |-----------------------------------------------------------|-----------|
- * | | | |_CL| |_BL|_NL| | | | | | | | | |
- * |-----------------------------------------------------------|-----------|
- * | ||||| | | ||||| | | | |
- * *-----------------------------------------------------------------------*
+ /*#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
+ * .-----------------------------------------------------------------------.
+ * |Rst||||| | | | ||| | | | ||| | | | | | | |
+ * .-----------------------------------------------------------|-----------|
+ * |Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
+ * |-----------------------------------------------------------|-----------|
+ * |Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
+ * |-----------------------------------------------------------|-----------|
+ * | | | |_DL| | | | | | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | |_CL| |_BL|_NL| | | | | |Fn | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | |Fn | | | | |
+ * *-----------------------------------------------------------------------*
*/
[_AL] = LAYOUT_tkl( \
RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- F(0), RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMR1, KC_DMP1, \
+ QMK_REV, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMR1, KC_DMP1, \
_______, DF(_BL), DF(_WL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMRS, KC_DMR2, KC_DMP2, \
- _______, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF(_CL), XXXXXXX, DF(_BL), DF(_NL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
),
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch(id) {
- case 0:
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMK_REV:
if (record->event.pressed) {
- return MACRO(I(0), D(LGUI), T(R), U(LGUI), END);
+ SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION ":" QMK_BUILDDATE);
}
- else {
+ return false;
+ break;
+ case KC_WEB:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LGUI("r"));
+ wait_ms(100);
SEND_STRING("chrome.exe\n");
- return false;
}
- break;
- case 1:
+ return false;
+ break;
+ case KC_SP4:
if (record->event.pressed) {
- return MACRO(I(0), T(SPC), T(SPC), T(SPC), T(SPC), END);
+ SEND_STRING (" ");
}
- else {
- return false;
- }
- break;
+ return false;
+ break;
}
- return MACRO_NONE;
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(0),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch (id) {
- case 0:
- if (record->event.pressed) {
- SEND_STRING ("[QMK:" QMK_KEYBOARD ":" QMK_KEYMAP ":" QMK_VERSION "]");
- }
- break;
+ // Dynamic Macros.
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
}
+ return true;
+}
+
+void custom_backlight_level(uint8_t level) {
+ if (level > BACKLIGHT_LEVELS)
+ level = BACKLIGHT_LEVELS;
+ backlight_config.level = level;
+ backlight_config.enable = !!backlight_config.level;
+ backlight_set(backlight_config.level);
}
void matrix_init_user(void) {
#ifdef BACKLIGHT_ENABLE
- backlight_level(0);
+ custom_backlight_level(0);
#endif
}
-// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
- uint8_t layer = biton32(layer_state);
- if (current_layer == layer) {
- }
- else {
- current_layer = layer;
- switch (layer) {
- case 0:
- backlight_level(0);
- break;
- case 1:
- backlight_level(1);
- break;
- case 2:
- backlight_level(1);
- break;
- case 3:
- backlight_level(1);
- break;
- case 4:
- backlight_level(1);
- break;
- case 5:
- backlight_level(2);
- break;
- case 6:
- backlight_level(3);
- break;
- default:
- backlight_level(0);
- break;
- }
- }
}
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- // Enable Dynamic Macros.
- if (!process_record_dynamic_macro(keycode, record)) {
- return false;
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case _BL:
+ custom_backlight_level(0);
+ break;
+ case _WL:
+ case _NL:
+ case _DL:
+ case _CL:
+ custom_backlight_level(1);
+ break;
+ case _FL:
+ custom_backlight_level(2);
+ break;
+ case _AL:
+ custom_backlight_level(3);
+ break;
+ default:
+ custom_backlight_level(0);
+ break;
}
- return true;
+ return state;
+}
+
+void led_set_user(uint8_t usb_led) {
+
}
diff --git a/keyboards/gonnerd/keymaps/gam3cat/readme.md b/keyboards/gonnerd/keymaps/gam3cat/readme.md
index 181369790..8630ea296 100644
--- a/keyboards/gonnerd/keymaps/gam3cat/readme.md
+++ b/keyboards/gonnerd/keymaps/gam3cat/readme.md
@@ -1,120 +1,114 @@
# Keymap Maintainer: Gam3cat
make gonnerd:gam3cat
## Layout Config:
-2u backspace, 2.25u left shift/enter, 1.75u right shift.
-2x1.5u, 1x7.0u, 2x1.5u, 3x1u bottom row.
-
- FN_CAPS = MO(_FL) when held, CAPS when tapped.
- GRAVE_ESC + GUI = `
- GRAVE_ESC + SHIFT = ~
+2u backspace, 2.25u lshift/enter, [2.75u rshift] or [1.75u rshift, 1u Fn].
+[1.5u, 1u, 1.5u 1x7.0u, 1.5u, 1u, 1.5u, 3x1u] or [2x1.5u, 1x7.0u, 2x1.5u, 3x1u] bottom row.
## Base Layer Selection:
-(Caps+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
+(Fn+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
### Base Layer Options:
- _BL: Base Layer, mostly standard TKL QWERTY layout.
+#### _BL: Base Layer - Standard TKL QWERTY layout.
.-----------------------------------------------------------------------.
- |Esc||||| F1| F2| F3| F4||| F5| F6| F7| F8||| F9|F10|F11|F12|PSc|SLk|Pau|
+ |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| -| =|Backsp |Ins|Hom|PgU|
+ |~ |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|Hom|PgU|
|-----------------------------------------------------------|-----------|
- |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|End|PgD|
+ |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
|-----------------------------------------------------------|-----------|
- |FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return | |
+ |Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
|-----------------------------------------------------------|-----------|
- |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | | Up| |
+ |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
|-----------------------------------------------------------|-----------|
- |Ctrl |||||Win | Space |RAlt |||||Ctrl |Lft|Dwn|Rgt|
+ |Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
*-----------------------------------------------------------------------*
-
- _WL: Workman Layer.
+
+#### _WL: Workman Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
- | | | | | | | | | | | | -| =| | | | |
+ | | | | | | | | | | | |- |= | | | | |
|-----------------------------------------------------------|-----------|
- | | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| | | |
+ | |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
|-----------------------------------------------------------|-----------|
- | | A| S| H| T| G| Y| N| E| O| I| '| | |
+ | |A |S |H |T |G |Y |N |E |O |I |' | | |
|-----------------------------------------------------------|-----------|
- | | Z| X| M| C| V| K| L| ,| .| /| | | | | |
+ | |Z |X |M |C |V |K |L |, |. |/ | | | | | |
|-----------------------------------------------------------|-----------|
- | ||||| | | ||||| | | | |
+ | | | | | | | | | | |
*-----------------------------------------------------------------------*
-
- _NL: Norman Layer.
+
+#### _NL: Norman Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
- | | | | | | | | | | | | -| =| | | | |
+ | | | | | | | | | | | |- |= | | | | |
|-----------------------------------------------------------|-----------|
- | | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| | | |
+ | |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
|-----------------------------------------------------------|-----------|
- | | A| S| E| T| G| Y| N| I| O| H| '| | |
+ | |A |S |E |T |G |Y |N |I |O |H |' | | |
|-----------------------------------------------------------|-----------|
- | | Z| X| C| V| B| P| M| ,| .| /| | | | | |
+ | |Z |X |C |V |B |P |M |, |. |/ | | | | | |
|-----------------------------------------------------------|-----------|
- | ||||| | | ||||| | | | |
+ | | | | | | | | | | |
*-----------------------------------------------------------------------*
-
- _DL: Dvorak Layer.
+
+#### _DL: Dvorak Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
- | | | | | | | | | | | | [| ]| | | | |
+ | | | | | | | | | | | |[ |] | | | | |
|-----------------------------------------------------------|-----------|
- | | '| ,| .| P| Y| F| G| C| R| L| /| =| \| | | |
+ | |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
|-----------------------------------------------------------|-----------|
- | | A| O| E| U| I| D| H| T| N| S| -| | |
+ | |A |O |E |U |I |D |H |T |N |S |- | | |
|-----------------------------------------------------------|-----------|
- | | ;| Q| J| K| X| B| M| W| V| Z| | | | | |
+ | |; |Q |J |K |X |B |M |W |V |Z | | | | | |
|-----------------------------------------------------------|-----------|
- | ||||| | | ||||| | | | |
+ | | | | | | | | | | |
*-----------------------------------------------------------------------*
-
- _CL: Colmak Layer.
+
+#### _CL: Colmak Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
- | | | | | | | | | | | | -| =| | | | |
+ | | | | | | | | | | | |- |= | | | | |
|-----------------------------------------------------------|-----------|
- | | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| | | |
+ | |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
|-----------------------------------------------------------|-----------|
- | | A| R| S| T| D| H| N| E| I| O| '| | |
+ | |A |R |S |T |D |H |N |E |I |O |' | | |
|-----------------------------------------------------------|-----------|
- | | Z| X| C| V| B| K| M| ,| .| /| | | | | |
+ | |Z |X |C |V |B |K |M |, |. |/ | | | | | |
|-----------------------------------------------------------|-----------|
- | ||||| | | ||||| | | | |
+ | | | | | | | | | | |
*-----------------------------------------------------------------------*
-
- _FL: Function Layer.
- M0 opens Chrome
+
+#### _FL: Function Layer.
.-----------------------------------------------------------------------.
| ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
.-----------------------------------------------------------|-----------|
- | M0| | | | | | | | | | | | | | | | |
+ |Web| | | | | | | | | | | | | | | | |
|-----------------------------------------------------------|-----------|
- | | | | | | | | | | | | | | | | | |
+ |Fn_AL| | | | | | | | | | | | | | | | |
|-----------------------------------------------------------|-----------|
| | | | | | | |Lft|Dwn|Up |Rgt| | | |
|-----------------------------------------------------------|-----------|
- | | | | | | | | | | | | | | | | |
+ | | | | | | | | | | | | |Fn | | | |
|-----------------------------------------------------------|-----------|
- | ||||| | | ||||| |WBk| |WFw|
+ | | | | SP4 | |Fn | |WBk| |WFw|
*-----------------------------------------------------------------------*
-
- _AL: Adjust Layer.
- Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
+
+#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
.-----------------------------------------------------------------------.
|Rst||||| | | | ||| | | | ||| | | | | | | |
.-----------------------------------------------------------|-----------|
- |Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
+ |Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
|-----------------------------------------------------------|-----------|
|Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
|-----------------------------------------------------------|-----------|
- |FnCaps| | |_DL| | | | | | | | | | |
+ | | | |_DL| | | | | | | | | | |
|-----------------------------------------------------------|-----------|
- | | | |_CL| |_BL|_NL| | | | | | | | | |
+ | | | |_CL| |_BL|_NL| | | | | |Fn | | | |
|-----------------------------------------------------------|-----------|
- | ||||| | | ||||| | | | |
+ | | | | | |Fn | | | | |
*-----------------------------------------------------------------------*
diff --git a/keyboards/gonnerd/keymaps/gam3cat/rules.mk b/keyboards/gonnerd/keymaps/gam3cat/rules.mk
index a32d22e41..6eab033cc 100644
--- a/keyboards/gonnerd/keymaps/gam3cat/rules.mk
+++ b/keyboards/gonnerd/keymaps/gam3cat/rules.mk
@@ -2,20 +2,23 @@
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
+TAP_DANCE_ENABLE = no # Enable TapDance functionality
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+MOUSEKEY_ENABLE = no # Mouse keys(+1500)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+CONSOLE_ENABLE = 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 # Nkey Rollover - If this doesn't work, add this to config.h: #define FORCE_NKRO
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
+UNICODEMAP_ENABLE = no # Enable extended unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
+#VARIABLE_TRACE = no # Use this to debug changes to variable values
+API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings(+5390)
+KEY_LOCK_ENABLE = no # This enables key lock(+260)
+SPLIT_KEYBOARD = no # This enables split keyboard support and includes all necessary files located at quantum/split_common
diff --git a/keyboards/gonnerd/keymaps/mauin/rules.mk b/keyboards/gonnerd/keymaps/mauin/rules.mk
index 772d7aee3..e34aba692 100644
--- a/keyboards/gonnerd/keymaps/mauin/rules.mk
+++ b/keyboards/gonnerd/keymaps/mauin/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/gonnerd/keymaps/tkl/rules.mk b/keyboards/gonnerd/keymaps/tkl/rules.mk
index 5854366f9..b96663efe 100644
--- a/keyboards/gonnerd/keymaps/tkl/rules.mk
+++ b/keyboards/gonnerd/keymaps/tkl/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/gskt00/config.h b/keyboards/gskt00/config.h
new file mode 100755
index 000000000..f36493f28
--- /dev/null
+++ b/keyboards/gskt00/config.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6061
+#define DEVICE_VER 0x0001
+#define MANUFACTURER inachie
+#define PRODUCT GSKT00
+#define DESCRIPTION GSKT00 Gasket 60 keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 8
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F1, D1, D2, D4, D6, F7, B0, F4 }
+#define MATRIX_COL_PINS { F6, D7, F5, C7, B4, C6, B6, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
diff --git a/keyboards/gskt00/gskt00.c b/keyboards/gskt00/gskt00.c
new file mode 100755
index 000000000..89a0040ff
--- /dev/null
+++ b/keyboards/gskt00/gskt00.c
@@ -0,0 +1,2 @@
+#include "gskt00.h"
+
diff --git a/keyboards/gskt00/gskt00.h b/keyboards/gskt00/gskt00.h
new file mode 100755
index 000000000..90e9a1ad5
--- /dev/null
+++ b/keyboards/gskt00/gskt00.h
@@ -0,0 +1,57 @@
+#ifndef GSKT00_H
+#define GSKT00_H
+
+#include "quantum.h"
+
+#define LAYOUT_all( \
+ K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K26, K27, \
+ K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \
+ K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \
+ K31, K41, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, K22, \
+ K30, K40, K50, K60, K00, K10, K20 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37 }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77 } \
+}
+
+#define LAYOUT_60_iso_tsangan( \
+ K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K27, \
+ K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, \
+ K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K24, K23, /* enter */ \
+ K31, K41, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, \
+ K30, K40, K50, K60, K00, K10, K20 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { KC_NO, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K20, K21, KC_NO, K23, K24, K25, KC_NO, K27 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37 }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47 }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77 } \
+}
+
+#define LAYOUT_60_ansi_tsangan( \
+ K36, K37, K46, K47, K56, K57, K66, K67, K76, K77, K06, K07, K17, K27, \
+ K34, K35, K44, K45, K54, K55, K64, K65, K75, K05, K15, K16, K25, K24, \
+ K32, K33, K43, K52, K53, K63, K73, K74, K03, K04, K13, K14, K23, \
+ K31, K42, K51, K61, K62, K71, K72, K01, K02, K11, K12, K21, \
+ K30, K40, K50, K60, K00, K10, K20 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17 }, \
+ { K20, K21, KC_NO, K23, K24, K25, KC_NO, K27 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37 }, \
+ { K40, KC_NO, K42, K43, K44, K45, K46, K47 }, \
+ { K50, K51, K52, K53, K54, K55, K56, K57 }, \
+ { K60, K61, K62, K63, K64, K65, K66, K67 }, \
+ { KC_NO, K71, K72, K73, K74, K75, K76, K77 } \
+}
+
+#endif
diff --git a/keyboards/gskt00/info.json b/keyboards/gskt00/info.json
new file mode 100644
index 000000000..bfbb1fd7c
--- /dev/null
+++ b/keyboards/gskt00/info.json
@@ -0,0 +1,84 @@
+{
+ "keyboard_name": "gskt00",
+ "url": "",
+ "maintainer": "nachie",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Win", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
+ },
+
+ "LAYOUT_60_iso_tsangan": {
+ "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.5}, {"label":"Win", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"AltGr", "x":11, "y":4, "w":1.5}, {"label":"Menu", "x":12.5, "y":4}, {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}]
+ },
+
+ "LAYOUT_all": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"\\", "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":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":1.25},
+ {"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":"Fn", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.5},
+ {"label":"GUI", "x":1.5, "y":4},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.5},
+ {"label":"Space", "x":4, "y":4, "w":7},
+ {"label":"Alt", "x":11, "y":4, "w":1.5},
+ {"label":"GUI", "x":12.5, "y":4},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/gskt00/keymaps/default/keymap.c b/keyboards/gskt00/keymaps/default/keymap.c
new file mode 100755
index 000000000..792ba2f41
--- /dev/null
+++ b/keyboards/gskt00/keymaps/default/keymap.c
@@ -0,0 +1,82 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY */
+ LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_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_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(3),
+ KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(3)),
+
+ /* DVORAK */
+ LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_GRV, KC_BSLS,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC,
+ MO(3), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_LSFT, MO(3),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL),
+
+ /* COLEMAK */
+ LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSLS,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC,
+ MO(3), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(3),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL),
+
+ /* FUNCTION */
+ LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SLCK, KC_PAUS, KC_UP, KC_PAUS, KC_DEL,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, KC_TRNS, RGB_TOG)
+
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
+
diff --git a/keyboards/gskt00/keymaps/nachie/keymap.c b/keyboards/gskt00/keymaps/nachie/keymap.c
new file mode 100755
index 000000000..8606d2484
--- /dev/null
+++ b/keyboards/gskt00/keymaps/nachie/keymap.c
@@ -0,0 +1,82 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY */
+ LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSLS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(3),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_LCTL),
+
+ /* DVORAK */
+ LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_GRV, KC_BSLS,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC,
+ MO(3), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_LSFT, MO(3),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL),
+
+ /* COLEMAK */
+ LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSLS,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC,
+ MO(3), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(3),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, KC_RCTL),
+
+ /* FUNCTION */
+ 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_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, KC_BSPC,
+ KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD, KC_VOLU, KC_TRNS, KC_END, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, KC_TRNS, RGB_TOG)
+
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
+
diff --git a/keyboards/gskt00/readme.md b/keyboards/gskt00/readme.md
new file mode 100644
index 000000000..ad03ac819
--- /dev/null
+++ b/keyboards/gskt00/readme.md
@@ -0,0 +1,17 @@
+# GSKT-00 PCB
+
+Firmware for the GSKT-00 PCB
+
+Keyboard Maintainer: [/u/iNachie](https://github.com/nachie)
+Hardware Supported: GSKT-00 PCB
+Hardware Availability: [/u/iNachie](https://www.reddit.com/user/inachie/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make gskt00:default
+
+Or to make and flash:
+
+ make gskt00: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/gskt00/rules.mk b/keyboards/gskt00/rules.mk
new file mode 100755
index 000000000..338384e3e
--- /dev/null
+++ b/keyboards/gskt00/rules.mk
@@ -0,0 +1,55 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = 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
+
+LAYOUTS = 60_ansi_tsangan 60_iso_tsangan
diff --git a/keyboards/h87a/keymaps/gam3cat/config.h b/keyboards/h87a/keymaps/gam3cat/config.h
new file mode 100644
index 000000000..334beb0ac
--- /dev/null
+++ b/keyboards/h87a/keymaps/gam3cat/config.h
@@ -0,0 +1,10 @@
+#pragma once
+
+//Force NKRO to be enabled.
+#define FORCE_NKRO
+
+//GRAVE_ESC override for CTRL+SHIFT+ESC Windows task manager shortcut.
+//#define GRAVE_ESC_CTRL_OVERRIDE
+
+//Delay matrix scan for tap dance, reduce to activate modifier keys faster.
+//#define TAPPING_TERM 200
diff --git a/keyboards/h87a/keymaps/gam3cat/keymap.c b/keyboards/h87a/keymaps/gam3cat/keymap.c
new file mode 100644
index 000000000..2a4e5ca41
--- /dev/null
+++ b/keyboards/h87a/keymaps/gam3cat/keymap.c
@@ -0,0 +1,292 @@
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+enum layers {
+ _BL = 0, // Base Layer
+ _WL, // Workman Layer
+ _NL, // Norman Layer
+ _DL, // Dvorak Layer
+ _CL, // Base Layer
+ _FL, // Function Layer
+ _AL, // Adjust Layer
+};
+
+enum custom_keycodes {
+ DYNAMIC_MACRO_RANGE = SAFE_RANGE,
+ QMK_REV,
+ KC_WEB,
+ KC_SP4
+};
+
+extern backlight_config_t backlight_config;
+
+#include "dynamic_macro.h"
+#define FN_CAPS LT(_FL, KC_CAPS)
+#define KC_DMR1 DYN_REC_START1
+#define KC_DMR2 DYN_REC_START2
+#define KC_DMP1 DYN_MACRO_PLAY1
+#define KC_DMP2 DYN_MACRO_PLAY2
+#define KC_DMRS DYN_REC_STOP
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*#### _BL: Base Layer - Standard TKL QWERTY layout.
+ * .-----------------------------------------------------------------------.
+ * |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 |- |= |Backsp |Ins|Hom|PgU|
+ * |-----------------------------------------------------------|-----------|
+ * |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
+ * |-----------------------------------------------------------|-----------|
+ * |Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
+ * |-----------------------------------------------------------|-----------|
+ * |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
+ * |-----------------------------------------------------------|-----------|
+ * |Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
+ * *-----------------------------------------------------------------------*
+ */
+ [_BL] = LAYOUT_all( \
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, XXXXXXX, KC_ENT, \
+ KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FL), KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RGUI, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ /*#### _WL: Workman Layer.
+ * .-----------------------------------------------------------------------.
+ * | ||||| | | | ||| | | | ||| | | | | | | |
+ * .-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | | |- |= | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |A |S |H |T |G |Y |N |E |O |I |' | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Z |X |M |C |V |K |L |, |. |/ | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | |
+ * *-----------------------------------------------------------------------*
+ */
+ [_WL] = LAYOUT_all( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_Q , KC_D , KC_R , KC_W , KC_B , KC_J , KC_F , KC_U , KC_P , KC_SCLN, _______, _______, _______, _______, _______, _______, \
+ _______, KC_A , KC_S , KC_H , KC_T , KC_G , KC_Y , KC_N , KC_E , KC_O , KC_I , _______, _______, _______, \
+ _______, _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ /*#### _NL: Norman Layer.
+ * .-----------------------------------------------------------------------.
+ * | ||||| | | | ||| | | | ||| | | | | | | |
+ * .-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | | |- |= | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |A |S |E |T |G |Y |N |I |O |H |' | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Z |X |C |V |B |P |M |, |. |/ | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | |
+ * *-----------------------------------------------------------------------*
+ */
+ [_NL] = LAYOUT_all( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_Q , KC_W , KC_D , KC_F , KC_K , KC_J , KC_U , KC_R , KC_L , KC_SCLN, _______, _______, _______, _______, _______, _______, \
+ _______, KC_A , KC_S , KC_E , KC_T , KC_G , KC_Y , KC_N , KC_I , KC_O , KC_H , _______, _______, _______, \
+ _______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ /*#### _DL: Dvorak Layer.
+ * .-----------------------------------------------------------------------.
+ * | ||||| | | | ||| | | | ||| | | | | | | |
+ * .-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | | |[ |] | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |A |O |E |U |I |D |H |T |N |S |- | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |; |Q |J |K |X |B |M |W |V |Z | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | |
+ * *-----------------------------------------------------------------------*
+ */
+ [_DL] = LAYOUT_all( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, _______, _______, \
+ _______, KC_QUOT, KC_COMM, KC_DOT , KC_P , KC_Y , KC_F , KC_G , KC_C , KC_R , KC_L , KC_SLSH, KC_EQL , _______, _______, _______, _______, \
+ _______, KC_A , KC_O , KC_E , KC_U , KC_I , KC_D , KC_H , KC_T , KC_N , KC_S , KC_MINS, _______, _______, \
+ _______, _______, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ /*#### _CL: Colmak Layer.
+ * .-----------------------------------------------------------------------.
+ * | ||||| | | | ||| | | | ||| | | | | | | |
+ * .-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | | |- |= | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |A |R |S |T |D |H |N |E |I |O |' | | |
+ * |-----------------------------------------------------------|-----------|
+ * | |Z |X |C |V |B |K |M |, |. |/ | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | |
+ * *-----------------------------------------------------------------------*
+ */
+ [_CL] = LAYOUT_all( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_Q , KC_W , KC_F , KC_P , KC_G , KC_J , KC_L , KC_U , KC_Y , KC_SCLN, _______, _______, _______, _______, _______, _______, \
+ _______, KC_A , KC_R , KC_S , KC_T , KC_D , KC_H , KC_N , 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_SLSH, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ /*#### _FL: Function Layer.
+ * .-----------------------------------------------------------------------.
+ * | ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
+ * .-----------------------------------------------------------|-----------|
+ * |Web| | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * |Fn_AL| | | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | |Lft|Dwn|Up |Rgt| | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | | | | | | | | |Fn | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | SP4 | |Fn | |WBk| |WFw|
+ * *-----------------------------------------------------------------------*
+ */
+ [_FL] = LAYOUT_all( \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, XXXXXXX, \
+ KC_WEB, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ MO(_AL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
+ XXXXXXX, XXXXXXX, KC_MENU, KC_SP4, XXXXXXX, _______, XXXXXXX, XXXXXXX, KC_WBAK, XXXXXXX, KC_WFWD \
+ ),
+ /*#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
+ * .-----------------------------------------------------------------------.
+ * |Rst||||| | | | ||| | | | ||| | | | | | | |
+ * .-----------------------------------------------------------|-----------|
+ * |Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
+ * |-----------------------------------------------------------|-----------|
+ * |Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
+ * |-----------------------------------------------------------|-----------|
+ * | | | |_DL| | | | | | | | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | |_CL| |_BL|_NL| | | | | |Fn | | | |
+ * |-----------------------------------------------------------|-----------|
+ * | | | | | |Fn | | | | |
+ * *-----------------------------------------------------------------------*
+ */
+ [_AL] = LAYOUT_all( \
+ RESET, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ QMK_REV, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMR1, KC_DMP1, \
+ _______, DF(_BL), DF(_WL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMRS, KC_DMR2, KC_DMP2, \
+ XXXXXXX, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF(_CL), XXXXXXX, DF(_BL), DF(_NL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMK_REV:
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION ":" QMK_BUILDDATE);
+ }
+ return false;
+ break;
+ case KC_WEB:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LGUI("r"));
+ wait_ms(100);
+ SEND_STRING("chrome.exe\n");
+ }
+ return false;
+ break;
+ case KC_SP4:
+ if (record->event.pressed) {
+ SEND_STRING (" ");
+ }
+ return false;
+ break;
+ }
+ // Dynamic Macros.
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+ return true;
+}
+
+void custom_backlight_level(uint8_t level) {
+ if (level > BACKLIGHT_LEVELS)
+ level = BACKLIGHT_LEVELS;
+ backlight_config.level = level;
+ backlight_config.enable = !!backlight_config.level;
+ backlight_set(backlight_config.level);
+}
+
+void matrix_init_user(void) {
+ #ifdef BACKLIGHT_ENABLE
+ custom_backlight_level(0);
+ #endif
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode(1);
+ rgblight_sethsv_noeeprom(180,100,100);
+ #endif
+}
+
+void matrix_scan_user(void) {
+
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case _BL:
+ custom_backlight_level(0);
+ rgblight_sethsv_noeeprom(180,100,255);
+ break;
+ case _WL:
+ case _NL:
+ case _DL:
+ case _CL:
+ custom_backlight_level(1);
+ rgblight_sethsv_noeeprom(230,255,255);
+ break;
+ case _FL:
+ custom_backlight_level(2);
+ rgblight_sethsv_noeeprom(280,255,255);
+ break;
+ case _AL:
+ custom_backlight_level(3);
+ rgblight_sethsv_noeeprom(350,255,255);
+ break;
+ default:
+ custom_backlight_level(0);
+ rgblight_sethsv_noeeprom(180,100,100);
+ break;
+ }
+ return state;
+}
+
+void led_init_ports(void) {
+ DDRD |= (1<<5); // OUT
+ DDRE |= (1<<6); // OUT
+}
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRD |= (1 << 5); PORTD &= ~(1 << 5);
+ } else {
+ DDRD &= ~(1 << 5); PORTD &= ~(1 << 5);
+ }
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ DDRE |= (1 << 6); PORTE &= ~(1 << 6);
+ } else {
+ DDRE &= ~(1 << 6); PORTE &= ~(1 << 6);
+ }
+}
diff --git a/keyboards/h87a/keymaps/gam3cat/readme.md b/keyboards/h87a/keymaps/gam3cat/readme.md
new file mode 100644
index 000000000..5eb4c7d61
--- /dev/null
+++ b/keyboards/h87a/keymaps/gam3cat/readme.md
@@ -0,0 +1,114 @@
+# Keymap Maintainer: Gam3cat
+make h87a:gam3cat
+## Layout Config:
+2u backspace, 2.25u lshift/enter, [2.75u rshift] or [1.75u rshift, 1u Fn].
+[1.5u, 1u, 1.5u 1x7.0u, 1.5u, 1u, 1.5u, 3x1u] or [2x1.5u, 1x7.0u, 2x1.5u, 3x1u] bottom row.
+
+## Base Layer Selection:
+(Fn+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
+
+### Base Layer Options:
+#### _BL: Base Layer - Standard TKL QWERTY layout.
+ .-----------------------------------------------------------------------.
+ |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 |- |= |Backsp |Ins|Hom|PgU|
+ |-----------------------------------------------------------|-----------|
+ |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|End|PgD|
+ |-----------------------------------------------------------|-----------|
+ |Caps |A |S |D |F |G |H |J |K |L |; |' |Return | |
+ |-----------------------------------------------------------|-----------|
+ |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Fn | | Up| |
+ |-----------------------------------------------------------|-----------|
+ |Ctrl |Win|Alt | Space |RAlt |Fn |Ctrl |Lft|Dwn|Rgt|
+ *-----------------------------------------------------------------------*
+
+#### _WL: Workman Layer.
+ .-----------------------------------------------------------------------.
+ | ||||| | | | ||| | | | ||| | | | | | | |
+ .-----------------------------------------------------------|-----------|
+ | | | | | | | | | | | |- |= | | | | |
+ |-----------------------------------------------------------|-----------|
+ | |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | | | |
+ |-----------------------------------------------------------|-----------|
+ | |A |S |H |T |G |Y |N |E |O |I |' | | |
+ |-----------------------------------------------------------|-----------|
+ | |Z |X |M |C |V |K |L |, |. |/ | | | | | |
+ |-----------------------------------------------------------|-----------|
+ | | | | | | | | | | |
+ *-----------------------------------------------------------------------*
+
+#### _NL: Norman Layer.
+ .-----------------------------------------------------------------------.
+ | ||||| | | | ||| | | | ||| | | | | | | |
+ .-----------------------------------------------------------|-----------|
+ | | | | | | | | | | | |- |= | | | | |
+ |-----------------------------------------------------------|-----------|
+ | |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | | | |
+ |-----------------------------------------------------------|-----------|
+ | |A |S |E |T |G |Y |N |I |O |H |' | | |
+ |-----------------------------------------------------------|-----------|
+ | |Z |X |C |V |B |P |M |, |. |/ | | | | | |
+ |-----------------------------------------------------------|-----------|
+ | | | | | | | | | | |
+ *-----------------------------------------------------------------------*
+
+#### _DL: Dvorak Layer.
+ .-----------------------------------------------------------------------.
+ | ||||| | | | ||| | | | ||| | | | | | | |
+ .-----------------------------------------------------------|-----------|
+ | | | | | | | | | | | |[ |] | | | | |
+ |-----------------------------------------------------------|-----------|
+ | |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | | | |
+ |-----------------------------------------------------------|-----------|
+ | |A |O |E |U |I |D |H |T |N |S |- | | |
+ |-----------------------------------------------------------|-----------|
+ | |; |Q |J |K |X |B |M |W |V |Z | | | | | |
+ |-----------------------------------------------------------|-----------|
+ | | | | | | | | | | |
+ *-----------------------------------------------------------------------*
+
+#### _CL: Colmak Layer.
+ .-----------------------------------------------------------------------.
+ | ||||| | | | ||| | | | ||| | | | | | | |
+ .-----------------------------------------------------------|-----------|
+ | | | | | | | | | | | |- |= | | | | |
+ |-----------------------------------------------------------|-----------|
+ | |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | | | |
+ |-----------------------------------------------------------|-----------|
+ | |A |R |S |T |D |H |N |E |I |O |' | | |
+ |-----------------------------------------------------------|-----------|
+ | |Z |X |C |V |B |K |M |, |. |/ | | | | | |
+ |-----------------------------------------------------------|-----------|
+ | | | | | | | | | | |
+ *-----------------------------------------------------------------------*
+
+#### _FL: Function Layer.
+ .-----------------------------------------------------------------------.
+ | ||||| | | | ||| | | | ||| |VlM|VlD|VlU| | | |
+ .-----------------------------------------------------------|-----------|
+ |Web| | | | | | | | | | | | | | | | |
+ |-----------------------------------------------------------|-----------|
+ |Fn_AL| | | | | | | | | | | | | | | | |
+ |-----------------------------------------------------------|-----------|
+ | | | | | | | |Lft|Dwn|Up |Rgt| | | |
+ |-----------------------------------------------------------|-----------|
+ | | | | | | | | | | | | |Fn | | | |
+ |-----------------------------------------------------------|-----------|
+ | | | | SP4 | |Fn | |WBk| |WFw|
+ *-----------------------------------------------------------------------*
+
+#### _AL: Adjust Layer - Keymap select, LED backlight, and Dynamic Macro settings.
+ .-----------------------------------------------------------------------.
+ |Rst||||| | | | ||| | | | ||| | | | | | | |
+ .-----------------------------------------------------------|-----------|
+ |Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| | |MR1|MP1|
+ |-----------------------------------------------------------|-----------|
+ |Fn_AL|_BL|_WL| | | | | | | | | | | | MS|MR2|MP2|
+ |-----------------------------------------------------------|-----------|
+ | | | |_DL| | | | | | | | | | |
+ |-----------------------------------------------------------|-----------|
+ | | | |_CL| |_BL|_NL| | | | | |Fn | | | |
+ |-----------------------------------------------------------|-----------|
+ | | | | | |Fn | | | | |
+ *-----------------------------------------------------------------------*
diff --git a/keyboards/h87a/keymaps/gam3cat/rules.mk b/keyboards/h87a/keymaps/gam3cat/rules.mk
new file mode 100644
index 000000000..85b2b41a6
--- /dev/null
+++ b/keyboards/h87a/keymaps/gam3cat/rules.mk
@@ -0,0 +1,24 @@
+# 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
+#
+TAP_DANCE_ENABLE = no # Enable TapDance functionality
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+1500)
+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 # Nkey Rollover - If this doesn't work, add this to config.h: #define FORCE_NKRO
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+UNICODEMAP_ENABLE = no # Enable extended unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
+#VARIABLE_TRACE = no # Use this to debug changes to variable values
+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/hadron/config.h b/keyboards/hadron/config.h
index 0c19d6c79..d54d2c543 100644
--- a/keyboards/hadron/config.h
+++ b/keyboards/hadron/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -25,12 +24,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT_ID 0x6060
#define MANUFACTURER ishtob
#define PRODUCT Hadron Keyboard
-#define DESCRIPTION A cherry ML ortholinear keyboard
+#define DESCRIPTION A low profile ortholinear keyboard
-//#define AUDIO_VOICES
+//#define AUDIO_VOICES
//#define BACKLIGHT_PIN B7
@@ -47,9 +46,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEBOUNCING_DELAY 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
+//#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
+//#define LOCKING_RESYNC_ENABLE
/* key combination for command */
#define IS_COMMAND() ( \
@@ -73,11 +72,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-#ifdef SUBPROJECT_ver0
- #include "ver0/config.h"
-#endif
-#ifdef SUBPROJECT_ver2
- #include "ver2/config.h"
-#endif
-
-#endif
+
+
diff --git a/keyboards/hadron/hadron.c b/keyboards/hadron/hadron.c
index ca5b20e89..fa5065b32 100644
--- a/keyboards/hadron/hadron.c
+++ b/keyboards/hadron/hadron.c
@@ -1,26 +1,2 @@
#include "hadron.h"
-
-void matrix_init_kb(void) {
-
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
- matrix_scan_user();
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
- // put your per-action keyboard code here
- // runs for every action, just before processing by the firmware
-
- return process_record_user(keycode, record);
-}
-
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
- led_set_user(usb_led);
-} \ No newline at end of file
diff --git a/keyboards/hadron/hadron.h b/keyboards/hadron/hadron.h
index a165f4c5c..426face6f 100644
--- a/keyboards/hadron/hadron.h
+++ b/keyboards/hadron/hadron.h
@@ -7,7 +7,9 @@
#ifdef SUBPROJECT_ver2
#include "ver2.h"
#endif
-
+#ifdef SUBPROJECT_ver3
+ #include "ver3.h"
+#endif
#include "quantum.h"
diff --git a/keyboards/hadron/keymaps/default/config.h b/keyboards/hadron/keymaps/default/config.h
deleted file mode 100644
index 0f349ad93..000000000
--- a/keyboards/hadron/keymaps/default/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define LEADER_TIMEOUT 300
-//#define BACKLIGHT_BREATHING
-#define PREVENT_STUCK_MODIFIERS
-
-#define USE_I2C
-#define SSD1306OLED
-#define OLED_ROTATE180
-
-/* ws2812 RGB LED*/
-#define RGB_DI_PIN D4
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 14 // Number of LEDs
-#define RGBLIGHT_HUE_STEP 10
-#define RGBLIGHT_SAT_STEP 17
-
-#endif
diff --git a/keyboards/hadron/keymaps/default/keymap.c b/keyboards/hadron/keymaps/default/keymap.c
deleted file mode 100644
index de5979c1d..000000000
--- a/keyboards/hadron/keymaps/default/keymap.c
+++ /dev/null
@@ -1,493 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "LUFA/Drivers/Peripheral/TWI.h"
-#ifdef AUDIO_ENABLE
- #include "audio.h"
-#endif
-#ifdef USE_I2C
-#include "i2c.h"
-#endif
-#ifdef SSD1306OLED
-#include "ssd1306.h"
-#endif
-extern keymap_config_t keymap_config;
-
-//Following line allows macro to read current RGB settings
-extern rgblight_config_t rgblight_config;
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QWERTY 0
-#define _COLEMAK 1
-#define _DVORAK 2
-#define _LOWER 3
-#define _RAISE 4
-#define _MOUSECURSOR 8
-#define _ADJUST 16
-
-enum preonic_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- LOWER,
- RAISE,
- BACKLIT,
- RGBLED_TOGGLE,
- RGBLED_STEP_MODE,
- RGBLED_INCREASE_HUE,
- RGBLED_DECREASE_HUE,
- RGBLED_INCREASE_SAT,
- RGBLED_DECREASE_SAT,
- RGBLED_INCREASE_VAL,
- RGBLED_DECREASE_VAL,
-};
-
-enum macro_keycodes {
- KC_DEMOMACRO,
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-// Custom macros
-#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
-#define CTL_TTAB CTL_T(KC_TAB) // Tap for Esc, hold for Ctrl
-#define CTL_ENT CTL_T(KC_ENT) // Tap for Enter, hold for Ctrl
-#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
-// 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] = {
-
-/* Qwerty
- * ,------+------+------+------+------+------------------------------------------------.
- * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | DEL |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | Tab | Q | W | E | R | T | 7 | 8 | 9 | Y | U | I | O | P | Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | CAPS | A | S | D | F | G | 4 | 5 | 6 | H | J | K | L | ;/Nav| ' |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | 1 | 2 | 3 | N | M | , | . | / |Ctl/Et|
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | ` | Ctrl | Alt | GUI |Lower |Space | 0 | . | = |Space |Raise | Left | Down | Up |Right |
- * `--------------------------------------------------------------------------------------------------------'
- */
-[_QWERTY] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_H, KC_J, KC_K, KC_L,LT_MC(KC_SCLN), KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, CTL_ENT, \
- KC_GRV, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_LEFT,KC_DOWN, KC_UP, KC_RGHT \
-),
-
-/* Colemak
- * ,------+------+------+------+------+------------------------------------------------.
- * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | 0 | - |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | Tab | Q | W | F | P | G | 7 | 8 | 9 | J | L | U | Y | ; | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
- * | CAPS | A | R | S | T | D | 4 | 5 | 6 | H | N | E | I | O | ' |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | 1 | 2 | 3 | K | M | , | . | / |Ctl/Et|
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | ` | Ctrl | Alt | GUI |Lower |Space | 0 | . | = |Space |Raise | Left | Down | Up |Right |
- * `--------------------------------------------------------------------------------------------------------'
- */
-[_COLEMAK] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
- KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_P7, KC_P8, KC_P9, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
- KC_LCTRL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_P4, KC_P5, KC_P6, KC_H, KC_N, KC_E, KC_I, LT_MC(KC_O), KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, CTL_ENT, \
- KC_GRV, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
- ),
-
-/* Dvorak
- * ,------+------+------+------+------+------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | Tab | " | , | . | P | Y | 7 | 8 | 9 | F | G | C | R | L | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
- * | Esc | A | O | E | U | I | 4 | 5 | 6 | D | H | T | N | S | / |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | Shift| ; | Q | J | K | X | 1 | 2 | 3 | B | M | W | V | Z |Ctl/Et|
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | ` | Ctrl | Alt | GUI |Lower |Space | 0 | . | = |Space |Raise | Left | Down | Up |Right |
- * `--------------------------------------------------------------------------------------------------------'
- */
-[_DVORAK] = LAYOUT(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_P7, KC_P8, KC_P9, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
- KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_P4, KC_P5, KC_P6, KC_D, KC_H, KC_T, KC_N, LT_MC(KC_S), KC_SLSH, \
- KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_P1, KC_P2, KC_P3, KC_B, KC_M, KC_W, KC_V, KC_Z, CTL_ENT, \
- KC_GRV, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, 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(
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, 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
- * ,------+------+------+------+------+------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | | | | F6 | - | = | [ | ] | \ |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO # |ISO / | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
- * `--------------------------------------------------------------------------------------------------------'
- */
-[_RAISE] = LAYOUT(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
- KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
- _______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
-),
-
-/* Mouse Layer (semi-col)
- * ,------+------+------+------+------+------------------------------------------------.
- * | ACCL0| ACCL1| ACCL2| | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | | | | | | | | | Home | Wh_Up| WHL_L| M_Up | WHL_R| Macro| |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | End | Wh_Dn| M_Lft| M_Dn | M_Rt | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | BTN2 | BTN3 | BTN4 | BTN5 | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | BTN1 | | | | BTN1 | | | | | |
- * `--------------------------------------------------------------------------------------------------------'
- */
-
-[_MOUSECURSOR] = LAYOUT(
- KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_WH_L, KC_MS_U, KC_WH_R,DEMOMACRO,_______, \
- _______, _______, _______, _______, _______, _______, _______, _______, KC_END , KC_PGDN, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5, _______, _______, \
- _______, _______, _______, _______, _______, KC_BTN1, _______, _______, _______, KC_BTN1, _______, _______, _______, _______, _______ \
-),
-
-/* Adjust (Lower + Raise)
- * ,------+------+------+------+------+------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | Reset|RGB TG|RGB ST|RGBH -|RGBH +|RGBS -|RGBS +|RGBV -|RGBV +| | | | | | Del |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | |Aud on|Audoff|AGnorm| | | |AGswap|Qwerty|Colemk| | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | |Voice-|Voice+|Mus on|Musoff| | | | | | | | BL + |BL ST |BL TG |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | | | | |
- * `--------------------------------------------------------------------------------------------------------'
- */
-[_ADJUST] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
- RESET, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, KC_DEL, \
- _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, _______, _______, AG_SWAP, QWERTY, COLEMAK, _______, _______, _______, \
- _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, BL_DEC, BL_INC, BL_STEP, BL_TOGG, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______\
-)
-
-
-
-};
-
-
-#ifdef AUDIO_ENABLE
-
-float tone_startup[][2] = SONG(STARTUP_SOUND);
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float tone_dvorak[][2] = SONG(DVORAK_SOUND);
-float tone_colemak[][2] = SONG(COLEMAK_SOUND);
-float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
-float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
-#endif
-
-// define variables for reactive RGB
-bool RGB_INIT = false;
-bool TOG_STATUS = false;
-int RGB_current_mode;
-
-
-
-void persistant_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
- if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
- rgblight_mode(RGB_current_mode);
- layer_on(layer3);
- } else {
- layer_off(layer3);
- }
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_qwerty);
- #endif
- persistant_default_layer_set(1UL<<_QWERTY);
- }
- return false;
- break;
- case COLEMAK:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_colemak);
- #endif
- persistant_default_layer_set(1UL<<_COLEMAK);
- }
- return false;
- break;
- case LOWER:
- if (record->event.pressed) {
- //not sure how to have keyboard check mode and set it to a variable, so my work around
- //uses another variable that would be set to true after the first time a reactive key is pressed.
- if (RGB_INIT) {} else {
- RGB_current_mode = rgblight_config.mode;
- RGB_INIT = true;
- }
- if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
- } else {
- TOG_STATUS = !TOG_STATUS;
- rgblight_mode(16);
- }
- layer_on(_LOWER);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- } else {
- rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
- TOG_STATUS = false;
- layer_off(_LOWER);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case RAISE:
- if (record->event.pressed) {
- //not sure how to have keyboard check mode and set it to a variable, so my work around
- //uses another variable that would be set to true after the first time a reactive key is pressed.
- if (RGB_INIT) {} else {
- RGB_current_mode = rgblight_config.mode;
- RGB_INIT = true;
- }
- if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
- } else {
- TOG_STATUS = !TOG_STATUS;
- rgblight_mode(15);
- }
- layer_on(_RAISE);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- } else {
- rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
- layer_off(_RAISE);
- TOG_STATUS = false;
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case BACKLIT:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- } else {
- unregister_code(KC_RSFT);
- }
- return false;
- break;
- case RGB_MOD:
- //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
- if (record->event.pressed) {
- rgblight_mode(RGB_current_mode);
- rgblight_step();
- RGB_current_mode = rgblight_config.mode;
- }
- return false;
- break;
- }
- return true;
-}
-
-void matrix_init_user(void) {
- #ifdef USE_I2C
- i2c_master_init();
- #ifdef SSD1306OLED
- // calls code for the SSD1306 OLED
- _delay_ms(400);
- TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
- iota_gfx_init(); // turns on the display
- #endif
- #endif
- #ifdef AUDIO_ENABLE
- startup_user();
- #endif
-}
-
-void matrix_scan_user(void) {
- #ifdef SSD1306OLED
- iota_gfx_task(); // this is what updates the display continuously
- #endif
-}
-
-#ifdef AUDIO_ENABLE
-
-void startup_user()
-{
- _delay_ms(20); // gets rid of tick
- PLAY_SONG(tone_startup);
-}
-
-void shutdown_user()
-{cc
- PLAY_SONG(tone_goodbye);
- _delay_ms(150);
- stop_all_notes();
-}
-
-void music_on_user(void)
-{
- music_scale_user();
-}
-
-void music_scale_user(void)
-{
- PLAY_SONG(music_scale);
-}
-
-#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_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_update(struct CharacterMatrix *dest,
- const struct CharacterMatrix *source) {
- if (memcmp(dest->display, source->display, sizeof(dest->display))) {
- memcpy(dest->display, source->display, sizeof(dest->display));
- dest->dirty = true;
- }
-}
-
-//assign the right code to your layers for OLED display
-#define L_BASE 0
-#define L_LOWER 8
-#define L_RAISE 16
-#define L_FNLAYER 64
-#define L_NUMLAY 128
-#define L_NLOWER 136
-#define L_NFNLAYER 192
-#define L_MOUSECURSOR 256
-#define L_ADJUST 65560
-
-void iota_gfx_task_user(void) {
-#if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
-#endif
-
- struct CharacterMatrix matrix;
-
- matrix_clear(&matrix);
- matrix_write_P(&matrix, PSTR("USB: "));
-#ifdef PROTOCOL_LUFA
- switch (USB_DeviceState) {
- case DEVICE_STATE_Unattached:
- matrix_write_P(&matrix, PSTR("Unattached"));
- break;
- case DEVICE_STATE_Suspended:
- matrix_write_P(&matrix, PSTR("Suspended"));
- break;
- case DEVICE_STATE_Configured:
- matrix_write_P(&matrix, PSTR("Connected"));
- break;
- case DEVICE_STATE_Powered:
- matrix_write_P(&matrix, PSTR("Powered"));
- break;
- case DEVICE_STATE_Default:
- matrix_write_P(&matrix, PSTR("Default"));
- break;
- case DEVICE_STATE_Addressed:
- matrix_write_P(&matrix, PSTR("Addressed"));
- break;
- default:
- matrix_write_P(&matrix, PSTR("Invalid"));
- }
-#endif
-
-// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
-
- char buf[40];
- snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
- matrix_write_P(&matrix, PSTR("\n\nLayer: "));
- switch (layer_state) {
- case L_BASE:
- matrix_write_P(&matrix, PSTR("Default"));
- break;
- case L_RAISE:
- matrix_write_P(&matrix, PSTR("Raise"));
- break;
- case L_LOWER:
- matrix_write_P(&matrix, PSTR("Lower"));
- break;
- case L_ADJUST:
- matrix_write_P(&matrix, PSTR("ADJUST"));
- break;
- default:
- matrix_write(&matrix, buf);
- }
-
- // Host Keyboard LED Status
- char led[40];
- snprintf(led, sizeof(led), "\n%s %s %s",
- (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
- (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
- (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
- matrix_write(&matrix, led);
- matrix_update(&display, &matrix);
-}
-
diff --git a/keyboards/hadron/keymaps/default/rules.mk b/keyboards/hadron/keymaps/default/rules.mk
deleted file mode 100644
index 1f3975255..000000000
--- a/keyboards/hadron/keymaps/default/rules.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-# 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 = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/hadron/keymaps/side_numpad/config.h b/keyboards/hadron/keymaps/side_numpad/config.h
deleted file mode 100644
index 0f349ad93..000000000
--- a/keyboards/hadron/keymaps/side_numpad/config.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define LEADER_TIMEOUT 300
-//#define BACKLIGHT_BREATHING
-#define PREVENT_STUCK_MODIFIERS
-
-#define USE_I2C
-#define SSD1306OLED
-#define OLED_ROTATE180
-
-/* ws2812 RGB LED*/
-#define RGB_DI_PIN D4
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 14 // Number of LEDs
-#define RGBLIGHT_HUE_STEP 10
-#define RGBLIGHT_SAT_STEP 17
-
-#endif
diff --git a/keyboards/hadron/keymaps/side_numpad/keymap.c b/keyboards/hadron/keymaps/side_numpad/keymap.c
deleted file mode 100644
index fa42c79ea..000000000
--- a/keyboards/hadron/keymaps/side_numpad/keymap.c
+++ /dev/null
@@ -1,502 +0,0 @@
-#include QMK_KEYBOARD_H
-#include "LUFA/Drivers/Peripheral/TWI.h"
-#ifdef AUDIO_ENABLE
- #include "audio.h"
-#endif
-#ifdef USE_I2C
-#include "i2c.h"
-#endif
-#ifdef SSD1306OLED
-#include "ssd1306.h"
-#endif
-extern keymap_config_t keymap_config;
-
-//Following line allows macro to read current RGB settings
-extern rgblight_config_t rgblight_config;
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QWERTY 0
-#define _LOWER 3
-#define _RAISE 4
-#define _FNLAYER 6
-#define _NUMLAY 7
-#define _MOUSECURSOR 8
-#define _ADJUST 16
-
-enum preonic_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- LOWER,
- RAISE,
- BACKLIT,
- RGBLED_TOGGLE,
- RGBLED_STEP_MODE,
- RGBLED_INCREASE_HUE,
- RGBLED_DECREASE_HUE,
- RGBLED_INCREASE_SAT,
- RGBLED_DECREASE_SAT,
- RGBLED_INCREASE_VAL,
- RGBLED_DECREASE_VAL,
-};
-
-enum macro_keycodes {
- KC_DEMOMACRO,
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-// Custom macros
-#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
-#define CTL_TTAB CTL_T(KC_TAB) // Tap for Esc, hold for Ctrl
-#define CTL_ENT CTL_T(KC_ENT) // Tap for Enter, hold for Ctrl
-#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
-// Requires KC_TRNS/_______ for the trigger key in the destination layer
-#define LT_FN(kc) LT(_FNLAYER, kc) // L-ayer T-ap Function 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 TG_NUMLAY TG(_NUMLAY) //Toggle for layer _NUMLAY
-#define DEMOMACRO M(KC_DEMOMACRO) // My login macros
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Qwerty
- * ,------+------+------+------+------+------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | 7 | 8 | 9 |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | CAPS | A | S | D | F | G | H | J | K | L | ; |Enter | 4 | 5 | 6 |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | N | M | , | . | / | = | 1 | 2 | 3 |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | ~ | Ctrl | Alt | GUI |Lower |Space |Space |Raise | RAlt | Ins | Del |NumLay| 0 | . | ENT |
- * `--------------------------------------------------------------------------------------------------------'
- */
-[_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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_P7, KC_P8, KC_P9, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT_MC(KC_SCLN), CTL_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_EQL, KC_P1, KC_P2, KC_P3, \
- KC_GRV, KC_RCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, KC_INS, KC_DEL, TG_NUMLAY, KC_P0, KC_PDOT, KC_PENT \
-),
-
-/* Lower
- * ,-----------------------------------------------------------------------------------.
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ~ | \ | | | |
- * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
- * | CAPS | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | [ | ] | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | Next | Vol- | Vol+ | Play | | | |
- * `--------------------------------------------------------------------------------------------------------'
- */
-[_LOWER] = LAYOUT(
- KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, KC_BSLS, _______, _______, _______, \
- KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE, _______, _______, _______, \
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_LCBR, KC_RCBR, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______\
-),
-
-/* Raise
- * ,-----------------------------------------------------------------------------------.
- * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ~ | \ | | | |
- * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
- * | | A | Up | D | PrSc | | 4 | 5 | 6 | * | : | ' | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | Lt | Dn | Rt | Mute | | 1 | 2 | 3 | Up | / | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | |Space | 0 | | Left | Down | Right| | | | |
- * `--------------------------------------------------------------------------------------------------------'
- */
-[_RAISE] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PLUS, KC_BSLS, _______, _______, _______, \
- _______, KC_A, KC_UP, KC_D, KC_PSCR, _______, KC_4, KC_5, KC_6, KC_PAST, KC_COLN, KC_QUOT, _______, _______, _______, \
- _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC__MUTE, _______, KC_1, KC_2, KC_3, KC_UP, KC_SLSH, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, KC_SPC, KC_0, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______ \
-),
-
-/* FN layer on Esc key
- * ,-----------------------------------------------------------------------------------.
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | | ! | @ | # | $ | % | ^ | & | * | ( | ) | + | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | [ | ] | ' | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | { | } | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | Next | Vol- | Vol+ | Play | | | |
- * `--------------------------------------------------------------------------------------------------------'
- */
-[_FNLAYER] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
- _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS, _______, _______, _______, \
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT, _______, _______, _______, \
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS), S(KC_NUBS), KC_LCBR, KC_RCBR, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______ \
-),
-
-/* Num Layer
- * ,-----------------------------------------------------------------------------------.
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | | | | | | | | | | | | | F7 | F8 | F9 |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | | F4 | F5 | F6 |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | | | Up | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | Exit | Left | Down | Rght |
- * `--------------------------------------------------------------------------------------------------------'
- */
-[_NUMLAY] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PMNS, KC_UP, KC_PPLS, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT \
-),
-
-/* Mouse Layer (semi-col)
- * ,-----------------------------------------------------------------------------------.
- * | |ACCL0| ACCL1| ACCL2 | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | | | | | | Home | Wh_Up| WHL_L| M_Up | WHL_R| | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | End | Wh_Dn| M_Lft| M_Dn | M_Rt | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | BTN2 | BTN3 | BTN4 | BTN5 | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | BTN1 | | | | BTN1 | | | | | |
- * `--------------------------------------------------------------------------------------------------------'
- */
-
-[_MOUSECURSOR] = LAYOUT(
- _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, _______, _______, _______,\
- _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_WH_L, KC_MS_U, KC_WH_R, DEMOMACRO, _______, _______, _______, _______, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_END , KC_PGDN, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, _______, _______, _______ \
-),
-
-/* Adjust (Lower + Raise)
-
- * ,-----------------------------------------------------------------------------------.
- * | Reset| | | | | | | | | VolD | VolU | Mute |
- * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
- * | |RGB TG|RGB ST|RGBH -|RGBH +|RGBS -|RGBS +|RGBV -|RGBV +| | | Del | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | BL + |BL ST |BLSTEP| BL TG| | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | | | | | |
- * `--------------------------------------------------------------------------------------------------------'
- */
-[_ADJUST] = LAYOUT(
- RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLD, KC_VOLU, KC_MUTE, \
- _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_DEL, _______, _______, _______, \
- _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______, _______, _______, _______, \
- _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, BL_DEC, BL_INC, BL_STEP, BL_TOGG, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
-)
-
-
-
-};
-
-
-#ifdef AUDIO_ENABLE
-
-float tone_startup[][2] = SONG(STARTUP_SOUND);
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
-float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
-#endif
-
-// define variables for reactive RGB
-bool RGB_INIT = false;
-bool TOG_STATUS = false;
-bool NUMLAY_STATUS = false;
-int RGB_current_mode;
-
-
-
-void persistant_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
- if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
- rgblight_mode(RGB_current_mode);
- layer_on(layer3);
- } else {
- layer_off(layer3);
- }
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_qwerty);
- #endif
- persistant_default_layer_set(1UL<<_QWERTY);
- }
- return false;
- break;
- case LOWER:
- if (record->event.pressed) {
- //not sure how to have keyboard check mode and set it to a variable, so my work around
- //uses another variable that would be set to true after the first time a reactive key is pressed.
- if (RGB_INIT) {} else {
- RGB_current_mode = rgblight_config.mode;
- RGB_INIT = true;
- }
- if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
- } else {
- TOG_STATUS = !TOG_STATUS;
- rgblight_mode(16);
- }
- layer_on(_LOWER);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- } else {
- rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
- TOG_STATUS = false;
- layer_off(_LOWER);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case RAISE:
- if (record->event.pressed) {
- //not sure how to have keyboard check mode and set it to a variable, so my work around
- //uses another variable that would be set to true after the first time a reactive key is pressed.
- if (RGB_INIT) {} else {
- RGB_current_mode = rgblight_config.mode;
- RGB_INIT = true;
- }
- if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
- } else {
- TOG_STATUS = !TOG_STATUS;
- rgblight_mode(15);
- }
- layer_on(_RAISE);
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- } else {
- rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
- layer_off(_RAISE);
- TOG_STATUS = false;
- update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case BACKLIT:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- } else {
- unregister_code(KC_RSFT);
- }
- return false;
- break;
- //my attempt for RGB layer lock indication via changing the mode, still have to figure out how to not have other keypress not override this mode
- case TG_NUMLAY:
- if (record->event.pressed) {
- if (RGB_INIT) {} else {
- RGB_current_mode = rgblight_config.mode;
- RGB_INIT = true;
- }
- NUMLAY_STATUS = !NUMLAY_STATUS;
- if (NUMLAY_STATUS) {
- rgblight_mode(4);
- layer_on(_NUMLAY);
- } else {
- rgblight_mode(RGB_current_mode);
- layer_off(_NUMLAY); }
- }
- return false;
- break;
- case RGB_MOD:
- //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
- if (record->event.pressed) {
- rgblight_mode(RGB_current_mode);
- rgblight_step();
- RGB_current_mode = rgblight_config.mode;
- }
- return false;
- break;
- }
- return true;
-}
-
-void matrix_init_user(void) {
- #ifdef USE_I2C
- i2c_master_init();
- #ifdef SSD1306OLED
- // calls code for the SSD1306 OLED
- _delay_ms(400);
- TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
- iota_gfx_init(); // turns on the display
- #endif
- #endif
- #ifdef AUDIO_ENABLE
- startup_user();
- #endif
-}
-
-void matrix_scan_user(void) {
- #ifdef SSD1306OLED
- iota_gfx_task(); // this is what updates the display continuously
- #endif
-}
-
-#ifdef AUDIO_ENABLE
-
-void startup_user()
-{
- _delay_ms(20); // gets rid of tick
- PLAY_SONG(tone_startup);
-}
-
-void shutdown_user()
-{cc
- PLAY_SONG(tone_goodbye);
- _delay_ms(150);
- stop_all_notes();
-}
-
-void music_on_user(void)
-{
- music_scale_user();
-}
-
-void music_scale_user(void)
-{
- PLAY_SONG(music_scale);
-}
-
-#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_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_update(struct CharacterMatrix *dest,
- const struct CharacterMatrix *source) {
- if (memcmp(dest->display, source->display, sizeof(dest->display))) {
- memcpy(dest->display, source->display, sizeof(dest->display));
- dest->dirty = true;
- }
-}
-
-//assign the right code to your layers for OLED display
-#define L_BASE 0
-#define L_LOWER 8
-#define L_RAISE 16
-#define L_FNLAYER 64
-#define L_NUMLAY 128
-#define L_NLOWER 136
-#define L_NFNLAYER 192
-#define L_MOUSECURSOR 256
-#define L_ADJUST 65560
-
-void iota_gfx_task_user(void) {
-#if DEBUG_TO_SCREEN
- if (debug_enable) {
- return;
- }
-#endif
-
- struct CharacterMatrix matrix;
-
- matrix_clear(&matrix);
- matrix_write_P(&matrix, PSTR("USB: "));
-#ifdef PROTOCOL_LUFA
- switch (USB_DeviceState) {
- case DEVICE_STATE_Unattached:
- matrix_write_P(&matrix, PSTR("Unattached"));
- break;
- case DEVICE_STATE_Suspended:
- matrix_write_P(&matrix, PSTR("Suspended"));
- break;
- case DEVICE_STATE_Configured:
- matrix_write_P(&matrix, PSTR("Connected"));
- break;
- case DEVICE_STATE_Powered:
- matrix_write_P(&matrix, PSTR("Powered"));
- break;
- case DEVICE_STATE_Default:
- matrix_write_P(&matrix, PSTR("Default"));
- break;
- case DEVICE_STATE_Addressed:
- matrix_write_P(&matrix, PSTR("Addressed"));
- break;
- default:
- matrix_write_P(&matrix, PSTR("Invalid"));
- }
-#endif
-
-// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
-
- char buf[40];
- snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
- matrix_write_P(&matrix, PSTR("\n\nLayer: "));
- switch (layer_state) {
- case L_BASE:
- matrix_write_P(&matrix, PSTR("Default"));
- break;
- case L_RAISE:
- matrix_write_P(&matrix, PSTR("Raise"));
- break;
- case L_LOWER:
- matrix_write_P(&matrix, PSTR("Lower"));
- break;
- case L_ADJUST:
- matrix_write_P(&matrix, PSTR("ADJUST"));
- break;
- default:
- matrix_write(&matrix, buf);
- }
-
- // Host Keyboard LED Status
- char led[40];
- snprintf(led, sizeof(led), "\n%s %s %s",
- (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
- (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
- (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
- matrix_write(&matrix, led);
- matrix_update(&display, &matrix);
-}
diff --git a/keyboards/hadron/keymaps/side_numpad/rules.mk b/keyboards/hadron/keymaps/side_numpad/rules.mk
deleted file mode 100644
index d9fabc1ac..000000000
--- a/keyboards/hadron/keymaps/side_numpad/rules.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = yes # 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 this with audio at the same time.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/hadron/readme.md b/keyboards/hadron/readme.md
index ebebab9e6..13ef6c66a 100644
--- a/keyboards/hadron/readme.md
+++ b/keyboards/hadron/readme.md
@@ -2,10 +2,10 @@
![Hadron](https://i.imgur.com/aFbvV08.jpg)
-A low-profile Cherry ML ortholinear build.
+A low-profile ortholinear build.
Keyboard Maintainer: [ishtob](https://github.com/ishtob), [QMK](https://github.com/qmk)
-Hardware Supported: Hadron PCB rev0, rev2
+Hardware Supported: Hadron PCB rev0, rev2, rev3
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/hadron/rules.mk b/keyboards/hadron/rules.mk
index 66a900825..bd1633f61 100644
--- a/keyboards/hadron/rules.mk
+++ b/keyboards/hadron/rules.mk
@@ -1,73 +1,2 @@
-# MCU name
-#MCU = at90usb1287
-MCU = atmega32u4
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=512
-
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no # Console for debug(+400)
-COMMAND_ENABLE ?= no # Commands for debug and configuration
-NKRO_ENABLE ?= no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality
-MIDI_ENABLE ?= no # MIDI controls
-AUDIO_ENABLE ?= no # Audio output on port C6
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight.
-API_SYSEX_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
-
-SRC = i2c.c \
- ssd1306.c
-
-DEFAULT_FOLDER = hadron/ver2 \ No newline at end of file
+DEFAULT_FOLDER = hadron/ver2
diff --git a/keyboards/hadron/ver0/config.h b/keyboards/hadron/ver0/config.h
index 039d4f1c7..2157a52ce 100644
--- a/keyboards/hadron/ver0/config.h
+++ b/keyboards/hadron/ver0/config.h
@@ -14,10 +14,7 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef VER0_CONFIG_H
-#define VER0_CONFIG_H
-
-#include "../config.h"
+#pragma once
/* USB Device descriptor parameter */
#define DEVICE_VER 0x0001
@@ -32,4 +29,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define UNUSED_PINS
-#endif
+
diff --git a/keyboards/hadron/ver2/config.h b/keyboards/hadron/ver2/config.h
index 71a0ab5b3..e051db209 100644
--- a/keyboards/hadron/ver2/config.h
+++ b/keyboards/hadron/ver2/config.h
@@ -14,10 +14,7 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef VER2_CONFIG_H
-#define VER2_CONFIG_H
-
-#include "../config.h"
+#pragma once
/* USB Device descriptor parameter */
#define DEVICE_VER 0x0002
@@ -32,4 +29,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define UNUSED_PINS
-#endif
+#define USE_I2C
+#define SSD1306OLED
+#define OLED_ROTATE180
+
+/* ws2812 RGB LED*/
+#define RGB_DI_PIN D4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+
diff --git a/keyboards/hadron/ver2/keymaps/default/config.h b/keyboards/hadron/ver2/keymaps/default/config.h
new file mode 100644
index 000000000..e1fdd6dd3
--- /dev/null
+++ b/keyboards/hadron/ver2/keymaps/default/config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND) \
+ }
+
+#define LEADER_TIMEOUT 300
+//#define BACKLIGHT_BREATHING
+
diff --git a/keyboards/hadron/ver2/keymaps/default/keymap.c b/keyboards/hadron/ver2/keymaps/default/keymap.c
new file mode 100644
index 000000000..cc79f5267
--- /dev/null
+++ b/keyboards/hadron/ver2/keymaps/default/keymap.c
@@ -0,0 +1,448 @@
+#include QMK_KEYBOARD_H
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#ifdef USE_I2C
+#include "i2c.h"
+#endif
+#ifdef SSD1306OLED
+#include "ssd1306.h"
+#endif
+extern keymap_config_t keymap_config;
+
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _MOUSECURSOR 8
+#define _ADJUST 16
+
+enum preonic_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ RGBLED_TOGGLE,
+ RGBLED_STEP_MODE,
+ RGBLED_INCREASE_HUE,
+ RGBLED_DECREASE_HUE,
+ RGBLED_INCREASE_SAT,
+ RGBLED_DECREASE_SAT,
+ RGBLED_INCREASE_VAL,
+ RGBLED_DECREASE_VAL,
+};
+
+enum macro_keycodes {
+ KC_DEMOMACRO,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+// Custom macros
+#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
+#define CTL_TTAB CTL_T(KC_TAB) // Tap for Esc, hold for Ctrl
+#define CTL_ENT CTL_T(KC_ENT) // Tap for Enter, hold for Ctrl
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+// 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] = {
+
+/* Qwerty
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | DEL |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Tab | Q | W | E | R | T | 7 | 8 | 9 | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CAPS | A | S | D | F | G | 4 | 5 | 6 | H | J | K | L | ;/Nav| ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | 1 | 2 | 3 | N | M | , | . | / |Ctl/Et|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | Ctrl | Alt | GUI |Lower |Space | 0 | . | = |Space |Raise | Left | Down | Up |Right |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_H, KC_J, KC_K, KC_L,LT_MC(KC_SCLN), KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, CTL_ENT, \
+ KC_GRV, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_LEFT,KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Tab | Q | W | F | P | G | 7 | 8 | 9 | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
+ * | CAPS | A | R | S | T | D | 4 | 5 | 6 | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | 1 | 2 | 3 | K | M | , | . | / |Ctl/Et|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | Ctrl | Alt | GUI |Lower |Space | 0 | . | = |Space |Raise | Left | Down | Up |Right |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_P7, KC_P8, KC_P9, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_LCTRL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_P4, KC_P5, KC_P6, KC_H, KC_N, KC_E, KC_I, LT_MC(KC_O), KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, CTL_ENT, \
+ KC_GRV, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+/* Dvorak
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Tab | " | , | . | P | Y | 7 | 8 | 9 | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | 4 | 5 | 6 | D | H | T | N | S | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | 1 | 2 | 3 | B | M | W | V | Z |Ctl/Et|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | Ctrl | Alt | GUI |Lower |Space | 0 | . | = |Space |Raise | Left | Down | Up |Right |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_P7, KC_P8, KC_P9, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_P4, KC_P5, KC_P6, KC_D, KC_H, KC_T, KC_N, LT_MC(KC_S), KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_P1, KC_P2, KC_P3, KC_B, KC_M, KC_W, KC_V, KC_Z, CTL_ENT, \
+ KC_GRV, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, 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(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, 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
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | | | | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO # |ISO / | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
+ _______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Mouse Layer (semi-col)
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | ACCL0| ACCL1| ACCL2| | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | | | | | | | | | Home | Wh_Up| WHL_L| M_Up | WHL_R| Macro| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | End | Wh_Dn| M_Lft| M_Dn | M_Rt | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | BTN2 | BTN3 | BTN4 | BTN5 | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | BTN1 | | | | BTN1 | | | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+
+[_MOUSECURSOR] = LAYOUT(
+ KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_WH_L, KC_MS_U, KC_WH_R,DEMOMACRO,_______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_END , KC_PGDN, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5, _______, _______, \
+ _______, _______, _______, _______, _______, KC_BTN1, _______, _______, _______, KC_BTN1, _______, _______, _______, _______, _______ \
+),
+
+/* Adjust (Lower + Raise)
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Reset|RGB TG|RGB ST|RGBH -|RGBH +|RGBS -|RGBS +|RGBV -|RGBV +| | | | | | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm| | | |AGswap|Qwerty|Colemk| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff| | | | | | | | BL + |BL ST |BL TG |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ RESET, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, _______, _______, AG_SWAP, QWERTY, COLEMAK, _______, _______, _______, \
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, BL_DEC, BL_INC, BL_STEP, BL_TOGG, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______\
+)
+
+
+
+};
+
+// define variables for reactive RGB
+bool RGB_INIT = false;
+bool TOG_STATUS = false;
+int RGB_current_mode;
+
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ rgblight_mode(RGB_current_mode);
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (RGB_INIT) {} else {
+ RGB_current_mode = rgblight_config.mode;
+ RGB_INIT = true;
+ }
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ rgblight_mode(16);
+ }
+ layer_on(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
+ TOG_STATUS = false;
+ layer_off(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (RGB_INIT) {} else {
+ RGB_current_mode = rgblight_config.mode;
+ RGB_INIT = true;
+ }
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ rgblight_mode(15);
+ }
+ layer_on(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
+ layer_off(_RAISE);
+ TOG_STATUS = false;
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case RGB_MOD:
+ //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ 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"
+void matrix_init_user(void) {
+ #ifdef USE_I2C
+ i2c_master_init();
+ #ifdef SSD1306OLED
+ // calls code for the SSD1306 OLED
+ _delay_ms(400);
+ TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
+ iota_gfx_init(); // turns on the display
+ #endif
+ #endif
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+
+void matrix_scan_user(void) {
+ #ifdef SSD1306OLED
+ iota_gfx_task(); // this is what updates the display continuously
+ #endif
+}
+
+void matrix_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+//assign the right code to your layers for OLED display
+#define L_BASE 0
+#define L_LOWER 8
+#define L_RAISE 16
+#define L_FNLAYER 64
+#define L_NUMLAY 128
+#define L_NLOWER 136
+#define L_NFNLAYER 192
+#define L_MOUSECURSOR 256
+#define L_ADJUST 65560
+
+void iota_gfx_task_user(void) {
+#if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+#endif
+
+ struct CharacterMatrix matrix;
+
+ matrix_clear(&matrix);
+ matrix_write_P(&matrix, PSTR("USB: "));
+#ifdef PROTOCOL_LUFA
+ switch (USB_DeviceState) {
+ case DEVICE_STATE_Unattached:
+ matrix_write_P(&matrix, PSTR("Unattached"));
+ break;
+ case DEVICE_STATE_Suspended:
+ matrix_write_P(&matrix, PSTR("Suspended"));
+ break;
+ case DEVICE_STATE_Configured:
+ matrix_write_P(&matrix, PSTR("Connected"));
+ break;
+ case DEVICE_STATE_Powered:
+ matrix_write_P(&matrix, PSTR("Powered"));
+ break;
+ case DEVICE_STATE_Default:
+ matrix_write_P(&matrix, PSTR("Default"));
+ break;
+ case DEVICE_STATE_Addressed:
+ matrix_write_P(&matrix, PSTR("Addressed"));
+ break;
+ default:
+ matrix_write_P(&matrix, PSTR("Invalid"));
+ }
+#endif
+
+// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
+
+ char buf[40];
+ snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
+ matrix_write_P(&matrix, PSTR("\n\nLayer: "));
+ switch (layer_state) {
+ case L_BASE:
+ matrix_write_P(&matrix, PSTR("Default"));
+ break;
+ case L_RAISE:
+ matrix_write_P(&matrix, PSTR("Raise"));
+ break;
+ case L_LOWER:
+ matrix_write_P(&matrix, PSTR("Lower"));
+ break;
+ case L_ADJUST:
+ matrix_write_P(&matrix, PSTR("ADJUST"));
+ break;
+ default:
+ matrix_write(&matrix, buf);
+ }
+
+ // Host Keyboard LED Status
+ char led[40];
+ snprintf(led, sizeof(led), "\n%s %s %s",
+ (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
+ matrix_write(&matrix, led);
+ matrix_update(&display, &matrix);
+}
+
+#endif \ No newline at end of file
diff --git a/keyboards/hadron/keymaps/default/readme.md b/keyboards/hadron/ver2/keymaps/default/readme.md
index de9680b49..de9680b49 100644
--- a/keyboards/hadron/keymaps/default/readme.md
+++ b/keyboards/hadron/ver2/keymaps/default/readme.md
diff --git a/keyboards/hadron/keymaps/readme.md b/keyboards/hadron/ver2/keymaps/readme.md
index 54fb5f6d9..54fb5f6d9 100644
--- a/keyboards/hadron/keymaps/readme.md
+++ b/keyboards/hadron/ver2/keymaps/readme.md
diff --git a/keyboards/hadron/ver2/keymaps/side_numpad/config.h b/keyboards/hadron/ver2/keymaps/side_numpad/config.h
new file mode 100644
index 000000000..409279a95
--- /dev/null
+++ b/keyboards/hadron/ver2/keymaps/side_numpad/config.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND)\
+ }
+
+#define LEADER_TIMEOUT 300
+//#define BACKLIGHT_BREATHING
+
diff --git a/keyboards/hadron/ver2/keymaps/side_numpad/keymap.c b/keyboards/hadron/ver2/keymaps/side_numpad/keymap.c
new file mode 100644
index 000000000..248bb7ca6
--- /dev/null
+++ b/keyboards/hadron/ver2/keymaps/side_numpad/keymap.c
@@ -0,0 +1,484 @@
+#include QMK_KEYBOARD_H
+#include "LUFA/Drivers/Peripheral/TWI.h"
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#ifdef USE_I2C
+#include "i2c.h"
+#endif
+#ifdef SSD1306OLED
+#include "ssd1306.h"
+#endif
+extern keymap_config_t keymap_config;
+
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 3
+#define _RAISE 4
+#define _FNLAYER 6
+#define _NUMLAY 7
+#define _MOUSECURSOR 8
+#define _ADJUST 16
+
+enum preonic_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ RGBLED_TOGGLE,
+ RGBLED_STEP_MODE,
+ RGBLED_INCREASE_HUE,
+ RGBLED_DECREASE_HUE,
+ RGBLED_INCREASE_SAT,
+ RGBLED_DECREASE_SAT,
+ RGBLED_INCREASE_VAL,
+ RGBLED_DECREASE_VAL,
+};
+
+enum macro_keycodes {
+ KC_DEMOMACRO,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+// Custom macros
+#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
+#define CTL_TTAB CTL_T(KC_TAB) // Tap for Esc, hold for Ctrl
+#define CTL_ENT CTL_T(KC_ENT) // Tap for Enter, hold for Ctrl
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+// Requires KC_TRNS/_______ for the trigger key in the destination layer
+#define LT_FN(kc) LT(_FNLAYER, kc) // L-ayer T-ap Function 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 TG_NUMLAY TG(_NUMLAY) //Toggle for layer _NUMLAY
+#define DEMOMACRO M(KC_DEMOMACRO) // My login macros
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp | 7 | 8 | 9 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CAPS | A | S | D | F | G | H | J | K | L | ; |Enter | 4 | 5 | 6 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / | = | 1 | 2 | 3 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ~ | Ctrl | Alt | GUI |Lower |Space |Space |Raise | RAlt | Ins | Del |NumLay| 0 | . | ENT |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_P7, KC_P8, KC_P9, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT_MC(KC_SCLN), CTL_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_EQL, KC_P1, KC_P2, KC_P3, \
+ KC_GRV, KC_RCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, KC_INS, KC_DEL, TG_NUMLAY, KC_P0, KC_PDOT, KC_PENT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ~ | \ | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
+ * | CAPS | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | [ | ] | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Next | Vol- | Vol+ | Play | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT(
+ KC_ESC, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, KC_BSLS, _______, _______, _______, \
+ KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE, _______, _______, _______, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_LCBR, KC_RCBR, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______\
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ~ | \ | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
+ * | | A | Up | D | PrSc | | 4 | 5 | 6 | * | : | ' | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Lt | Dn | Rt | Mute | | 1 | 2 | 3 | Up | / | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | |Space | 0 | | Left | Down | Right| | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PLUS, KC_BSLS, _______, _______, _______, \
+ _______, KC_A, KC_UP, KC_D, KC_PSCR, _______, KC_4, KC_5, KC_6, KC_PAST, KC_COLN, KC_QUOT, _______, _______, _______, \
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC__MUTE, _______, KC_1, KC_2, KC_3, KC_UP, KC_SLSH, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, KC_SPC, KC_0, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______ \
+),
+
+/* FN layer on Esc key
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | | ! | @ | # | $ | % | ^ | & | * | ( | ) | + | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | [ | ] | ' | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | { | } | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Next | Vol- | Vol+ | Play | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_FNLAYER] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS, _______, _______, _______, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT, _______, _______, _______, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS), S(KC_NUBS), KC_LCBR, KC_RCBR, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______ \
+),
+
+/* Num Layer
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | | | | | | | | | | | | | F7 | F8 | F9 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | F4 | F5 | F6 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | Up | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | Exit | Left | Down | Rght |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_NUMLAY] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,\
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_PGUP, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, KC_END, KC_PGDN, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PMNS, KC_UP, KC_PPLS, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT \
+),
+
+/* Mouse Layer (semi-col)
+ * ,-----------------------------------------------------------------------------------.
+ * | |ACCL0| ACCL1| ACCL2 | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | | | | | | Home | Wh_Up| WHL_L| M_Up | WHL_R| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | End | Wh_Dn| M_Lft| M_Dn | M_Rt | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | BTN2 | BTN3 | BTN4 | BTN5 | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | BTN1 | | | | BTN1 | | | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+
+[_MOUSECURSOR] = LAYOUT(
+ _______, KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, _______, _______, _______,\
+ _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_WH_L, KC_MS_U, KC_WH_R, DEMOMACRO, _______, _______, _______, _______, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_END , KC_PGDN, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, _______, _______, _______, _______, _______ \
+),
+
+/* Adjust (Lower + Raise)
+
+ * ,-----------------------------------------------------------------------------------.
+ * | Reset| | | | | | | | | VolD | VolU | Mute |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | |RGB TG|RGB ST|RGBH -|RGBH +|RGBS -|RGBS +|RGBV -|RGBV +| | | Del | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | BL + |BL ST |BLSTEP| BL TG| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT(
+ RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_VOLD, KC_VOLU, KC_MUTE, \
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_DEL, _______, _______, _______, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______, _______, _______, _______, \
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, BL_DEC, BL_INC, BL_STEP, BL_TOGG, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+
+};
+
+// define variables for reactive RGB
+bool RGB_INIT = false;
+bool TOG_STATUS = false;
+bool NUMLAY_STATUS = false;
+int RGB_current_mode;
+
+
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ rgblight_mode(RGB_current_mode);
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (RGB_INIT) {} else {
+ RGB_current_mode = rgblight_config.mode;
+ RGB_INIT = true;
+ }
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ rgblight_mode(16);
+ }
+ layer_on(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
+ TOG_STATUS = false;
+ layer_off(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (RGB_INIT) {} else {
+ RGB_current_mode = rgblight_config.mode;
+ RGB_INIT = true;
+ }
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ rgblight_mode(15);
+ }
+ layer_on(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
+ layer_off(_RAISE);
+ TOG_STATUS = false;
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ //my attempt for RGB layer lock indication via changing the mode, still have to figure out how to not have other keypress not override this mode
+ case TG_NUMLAY:
+ if (record->event.pressed) {
+ if (RGB_INIT) {} else {
+ RGB_current_mode = rgblight_config.mode;
+ RGB_INIT = true;
+ }
+ NUMLAY_STATUS = !NUMLAY_STATUS;
+ if (NUMLAY_STATUS) {
+ rgblight_mode(4);
+ layer_on(_NUMLAY);
+ } else {
+ rgblight_mode(RGB_current_mode);
+ layer_off(_NUMLAY); }
+ }
+ return false;
+ break;
+ case RGB_MOD:
+ //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef USE_I2C
+ i2c_master_init();
+ #ifdef SSD1306OLED
+ // calls code for the SSD1306 OLED
+ _delay_ms(400);
+ TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
+ iota_gfx_init(); // turns on the display
+ #endif
+ #endif
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+void matrix_scan_user(void) {
+ #ifdef SSD1306OLED
+ iota_gfx_task(); // this is what updates the display continuously
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_SONG(tone_startup);
+}
+
+void shutdown_user()
+{cc
+ PLAY_SONG(tone_goodbye);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_SONG(music_scale);
+}
+
+#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_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_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+//assign the right code to your layers for OLED display
+#define L_BASE 0
+#define L_LOWER 8
+#define L_RAISE 16
+#define L_FNLAYER 64
+#define L_NUMLAY 128
+#define L_NLOWER 136
+#define L_NFNLAYER 192
+#define L_MOUSECURSOR 256
+#define L_ADJUST 65560
+
+void iota_gfx_task_user(void) {
+#if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+#endif
+
+ struct CharacterMatrix matrix;
+
+ matrix_clear(&matrix);
+ matrix_write_P(&matrix, PSTR("USB: "));
+#ifdef PROTOCOL_LUFA
+ switch (USB_DeviceState) {
+ case DEVICE_STATE_Unattached:
+ matrix_write_P(&matrix, PSTR("Unattached"));
+ break;
+ case DEVICE_STATE_Suspended:
+ matrix_write_P(&matrix, PSTR("Suspended"));
+ break;
+ case DEVICE_STATE_Configured:
+ matrix_write_P(&matrix, PSTR("Connected"));
+ break;
+ case DEVICE_STATE_Powered:
+ matrix_write_P(&matrix, PSTR("Powered"));
+ break;
+ case DEVICE_STATE_Default:
+ matrix_write_P(&matrix, PSTR("Default"));
+ break;
+ case DEVICE_STATE_Addressed:
+ matrix_write_P(&matrix, PSTR("Addressed"));
+ break;
+ default:
+ matrix_write_P(&matrix, PSTR("Invalid"));
+ }
+#endif
+
+// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
+
+ char buf[40];
+ snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
+ matrix_write_P(&matrix, PSTR("\n\nLayer: "));
+ switch (layer_state) {
+ case L_BASE:
+ matrix_write_P(&matrix, PSTR("Default"));
+ break;
+ case L_RAISE:
+ matrix_write_P(&matrix, PSTR("Raise"));
+ break;
+ case L_LOWER:
+ matrix_write_P(&matrix, PSTR("Lower"));
+ break;
+ case L_ADJUST:
+ matrix_write_P(&matrix, PSTR("ADJUST"));
+ break;
+ default:
+ matrix_write(&matrix, buf);
+ }
+
+ // Host Keyboard LED Status
+ char led[40];
+ snprintf(led, sizeof(led), "\n%s %s %s",
+ (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
+ matrix_write(&matrix, led);
+ matrix_update(&display, &matrix);
+}
diff --git a/keyboards/hadron/keymaps/side_numpad/readme.md b/keyboards/hadron/ver2/keymaps/side_numpad/readme.md
index de9680b49..de9680b49 100644
--- a/keyboards/hadron/keymaps/side_numpad/readme.md
+++ b/keyboards/hadron/ver2/keymaps/side_numpad/readme.md
diff --git a/keyboards/hadron/ver2/keymaps/side_numpad/rules.mk b/keyboards/hadron/ver2/keymaps/side_numpad/rules.mk
new file mode 100644
index 000000000..687c285bd
--- /dev/null
+++ b/keyboards/hadron/ver2/keymaps/side_numpad/rules.mk
@@ -0,0 +1,26 @@
+
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = yes # 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
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/hadron/ver2/rules.mk b/keyboards/hadron/ver2/rules.mk
index a3952a5d3..c47bdb1af 100644
--- a/keyboards/hadron/ver2/rules.mk
+++ b/keyboards/hadron/ver2/rules.mk
@@ -1 +1,76 @@
-#AUDIO_ENABLE ?= yes # Audio output on port C6 \ No newline at end of file
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+BOOTLOADER = halfkay
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+API_SYSEX_ENABLE = yes
+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
+
+
+EXTRAFLAGS += -flto
+
+
+SRC = i2c.c \
+ ssd1306.c \ No newline at end of file
diff --git a/keyboards/hadron/ver2/ver2.c b/keyboards/hadron/ver2/ver2.c
index bc0917746..739f06567 100644
--- a/keyboards/hadron/ver2/ver2.c
+++ b/keyboards/hadron/ver2/ver2.c
@@ -1 +1,26 @@
-#include "ver2.h" \ No newline at end of file
+#include "ver2.h"
+
+
+void matrix_init_kb(void) {
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+} \ No newline at end of file
diff --git a/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.c b/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.c
new file mode 100644
index 000000000..4331155df
--- /dev/null
+++ b/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.c
@@ -0,0 +1,126 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#include "hal.h"
+
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+/**
+ * @brief PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ * This variable is used by the HAL when initializing the PAL driver.
+ */
+const PALConfig pal_default_config = {
+#if STM32_HAS_GPIOA
+ {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
+ VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
+#endif
+#if STM32_HAS_GPIOB
+ {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
+ VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
+#endif
+#if STM32_HAS_GPIOC
+ {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
+ VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
+#endif
+#if STM32_HAS_GPIOD
+ {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
+ VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
+#endif
+#if STM32_HAS_GPIOE
+ {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
+ VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
+#endif
+#if STM32_HAS_GPIOF
+ {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
+ VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
+#endif
+#if STM32_HAS_GPIOG
+ {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
+ VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
+#endif
+#if STM32_HAS_GPIOH
+ {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
+ VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
+#endif
+#if STM32_HAS_GPIOI
+ {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
+ VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}
+#endif
+};
+#endif
+
+void enter_bootloader_mode_if_requested(void);
+
+/**
+ * @brief Early initialization code.
+ * @details This initialization must be performed just after stack setup
+ * and before any other initialization.
+ */
+void __early_init(void) {
+ enter_bootloader_mode_if_requested();
+ stm32_clock_init();
+}
+
+#if HAL_USE_SDC || defined(__DOXYGEN__)
+/**
+ * @brief SDC card detection.
+ */
+bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
+
+ (void)sdcp;
+ /* TODO: Fill the implementation.*/
+ return true;
+}
+
+/**
+ * @brief SDC card write protection detection.
+ */
+bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
+
+ (void)sdcp;
+ /* TODO: Fill the implementation.*/
+ return false;
+}
+#endif /* HAL_USE_SDC */
+
+#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
+/**
+ * @brief MMC_SPI card detection.
+ */
+bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return true;
+}
+
+/**
+ * @brief MMC_SPI card write protection detection.
+ */
+bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return false;
+}
+#endif
+
+/**
+ * @brief Board-specific initialization code.
+ * @todo Add your board-specific code, if any.
+ */
+void boardInit(void) {
+}
diff --git a/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.h b/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.h
new file mode 100644
index 000000000..ec26557f3
--- /dev/null
+++ b/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.h
@@ -0,0 +1,1187 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+/*
+ * Setup for Clueboard 60% Keyboard
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_GENERIC_STM32_F303XC
+#define BOARD_NAME "Planck PCB"
+
+/*
+ * Board oscillators-related settings.
+ * NOTE: LSE not fitted.
+ */
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK 0U
+#endif
+
+#define STM32_LSEDRV (3U << 3U)
+
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK 8000000U
+#endif
+
+// #define STM32_HSE_BYPASS
+
+/*
+ * MCU type as defined in the ST header.
+ */
+#define STM32F303xC
+
+/*
+ * IO pins assignments.
+ */
+#define GPIOA_PIN0 0U
+#define GPIOA_PIN1 1U
+#define GPIOA_PIN2 2U
+#define GPIOA_PIN3 3U
+#define GPIOA_PIN4 4U
+#define GPIOA_PIN5 5U
+#define GPIOA_PIN6 6U
+#define GPIOA_PIN7 7U
+#define GPIOA_PIN8 8U
+#define GPIOA_PIN9 9U
+#define GPIOA_PIN10 10U
+#define GPIOA_USB_DM 11U
+#define GPIOA_USB_DP 12U
+#define GPIOA_SWDIO 13U
+#define GPIOA_SWCLK 14U
+#define GPIOA_PIN15 15U
+
+#define GPIOB_PIN0 0U
+#define GPIOB_PIN1 1U
+#define GPIOB_PIN2 2U
+#define GPIOB_PIN3 3U
+#define GPIOB_PIN4 4U
+#define GPIOB_PIN5 5U
+#define GPIOB_PIN6 6U
+#define GPIOB_PIN7 7U
+#define GPIOB_PIN8 8U
+#define GPIOB_PIN9 9U
+#define GPIOB_PIN10 10U
+#define GPIOB_PIN11 11U
+#define GPIOB_PIN12 12U
+#define GPIOB_PIN13 13U
+#define GPIOB_PIN14 14U
+#define GPIOB_PIN15 15U
+
+#define GPIOC_PIN0 0U
+#define GPIOC_PIN1 1U
+#define GPIOC_PIN2 2U
+#define GPIOC_PIN3 3U
+#define GPIOC_PIN4 4U
+#define GPIOC_PIN5 5U
+#define GPIOC_PIN6 6U
+#define GPIOC_PIN7 7U
+#define GPIOC_PIN8 8U
+#define GPIOC_PIN9 9U
+#define GPIOC_PIN10 10U
+#define GPIOC_PIN11 11U
+#define GPIOC_PIN12 12U
+#define GPIOC_PIN13 13U
+#define GPIOC_PIN14 14U
+#define GPIOC_PIN15 15U
+
+#define GPIOD_PIN0 0U
+#define GPIOD_PIN1 1U
+#define GPIOD_PIN2 2U
+#define GPIOD_PIN3 3U
+#define GPIOD_PIN4 4U
+#define GPIOD_PIN5 5U
+#define GPIOD_PIN6 6U
+#define GPIOD_PIN7 7U
+#define GPIOD_PIN8 8U
+#define GPIOD_PIN9 9U
+#define GPIOD_PIN10 10U
+#define GPIOD_PIN11 11U
+#define GPIOD_PIN12 12U
+#define GPIOD_PIN13 13U
+#define GPIOD_PIN14 14U
+#define GPIOD_PIN15 15U
+
+#define GPIOE_PIN0 0U
+#define GPIOE_PIN1 1U
+#define GPIOE_PIN2 2U
+#define GPIOE_PIN3 3U
+#define GPIOE_PIN4 4U
+#define GPIOE_PIN5 5U
+#define GPIOE_PIN6 6U
+#define GPIOE_PIN7 7U
+#define GPIOE_PIN8 8U
+#define GPIOE_PIN9 9U
+#define GPIOE_PIN10 10U
+#define GPIOE_PIN11 11U
+#define GPIOE_PIN12 12U
+#define GPIOE_PIN13 13U
+#define GPIOE_PIN14 14U
+#define GPIOE_PIN15 15U
+
+#define GPIOF_I2C2_SDA 0U
+#define GPIOF_I2C2_SCL 1U
+#define GPIOF_PIN2 2U
+#define GPIOF_PIN3 3U
+#define GPIOF_PIN4 4U
+#define GPIOF_PIN5 5U
+#define GPIOF_PIN6 6U
+#define GPIOF_PIN7 7U
+#define GPIOF_PIN8 8U
+#define GPIOF_PIN9 9U
+#define GPIOF_PIN10 10U
+#define GPIOF_PIN11 11U
+#define GPIOF_PIN12 12U
+#define GPIOF_PIN13 13U
+#define GPIOF_PIN14 14U
+#define GPIOF_PIN15 15U
+
+#define GPIOG_PIN0 0U
+#define GPIOG_PIN1 1U
+#define GPIOG_PIN2 2U
+#define GPIOG_PIN3 3U
+#define GPIOG_PIN4 4U
+#define GPIOG_PIN5 5U
+#define GPIOG_PIN6 6U
+#define GPIOG_PIN7 7U
+#define GPIOG_PIN8 8U
+#define GPIOG_PIN9 9U
+#define GPIOG_PIN10 10U
+#define GPIOG_PIN11 11U
+#define GPIOG_PIN12 12U
+#define GPIOG_PIN13 13U
+#define GPIOG_PIN14 14U
+#define GPIOG_PIN15 15U
+
+#define GPIOH_PIN0 0U
+#define GPIOH_PIN1 1U
+#define GPIOH_PIN2 2U
+#define GPIOH_PIN3 3U
+#define GPIOH_PIN4 4U
+#define GPIOH_PIN5 5U
+#define GPIOH_PIN6 6U
+#define GPIOH_PIN7 7U
+#define GPIOH_PIN8 8U
+#define GPIOH_PIN9 9U
+#define GPIOH_PIN10 10U
+#define GPIOH_PIN11 11U
+#define GPIOH_PIN12 12U
+#define GPIOH_PIN13 13U
+#define GPIOH_PIN14 14U
+#define GPIOH_PIN15 15U
+
+/*
+ * IO lines assignments.
+ */
+#define LINE_L3GD20_SDI PAL_LINE(GPIOA, 7U)
+#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
+#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
+#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
+#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
+
+#define LINE_PIN6 PAL_LINE(GPIOF, 0U)
+#define LINE_PIN7 PAL_LINE(GPIOF, 1U)
+
+#define LINE_CAPS_LOCK PAL_LINE(GPIOB, 7U)
+
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
+#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
+#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
+#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
+#define PIN_ODR_LOW(n) (0U << (n))
+#define PIN_ODR_HIGH(n) (1U << (n))
+#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
+#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
+#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
+#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
+#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
+#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
+#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
+#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
+#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
+#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
+
+/*
+ * GPIOA setup:
+ *
+ * PA0 - NC
+ * PA1 - NC
+ * PA2 - COL1
+ * PA3 - COL2
+ * PA4 - SPEAKER1
+ * PA5 - SPEAKER2
+ * PA6 - COL3
+ * PA7 - COL8
+ * PA8 - COL6
+ * PA9 - COL7
+ * PA10 - ROW5
+ * PA11 - USB_DM (alternate 14).
+ * PA12 - USB_DP (alternate 14).
+ * PA13 - SWDIO (alternate 0).
+ * PA14 - SWCLK (alternate 0).
+ * PA15 - ROW4
+ */
+#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_PIN0) | \
+ PIN_MODE_ALTERNATE(GPIOA_PIN1) | \
+ PIN_MODE_INPUT(GPIOA_PIN2) | \
+ PIN_MODE_INPUT(GPIOA_PIN3) | \
+ PIN_MODE_INPUT(GPIOA_PIN4) | \
+ PIN_MODE_INPUT(GPIOA_PIN5) | \
+ PIN_MODE_INPUT(GPIOA_PIN6) | \
+ PIN_MODE_INPUT(GPIOA_PIN7) | \
+ PIN_MODE_INPUT(GPIOA_PIN8) | \
+ PIN_MODE_INPUT(GPIOA_PIN9) | \
+ PIN_MODE_INPUT(GPIOA_PIN10) | \
+ PIN_MODE_ALTERNATE(GPIOA_USB_DM) | \
+ PIN_MODE_ALTERNATE(GPIOA_USB_DP) | \
+ PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \
+ PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \
+ PIN_MODE_INPUT(GPIOA_PIN15))
+#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
+#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOA_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOA_USB_DM) | \
+ PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
+ PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
+ PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN15))
+#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_PIN0) | \
+ PIN_PUPDR_FLOATING(GPIOA_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
+ PIN_PUPDR_FLOATING(GPIOA_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
+ PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
+ PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
+ PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
+ PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN15))
+#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_PIN0) | \
+ PIN_ODR_HIGH(GPIOA_PIN1) | \
+ PIN_ODR_HIGH(GPIOA_PIN2) | \
+ PIN_ODR_HIGH(GPIOA_PIN3) | \
+ PIN_ODR_HIGH(GPIOA_PIN4) | \
+ PIN_ODR_HIGH(GPIOA_PIN5) | \
+ PIN_ODR_HIGH(GPIOA_PIN6) | \
+ PIN_ODR_HIGH(GPIOA_PIN7) | \
+ PIN_ODR_HIGH(GPIOA_PIN8) | \
+ PIN_ODR_HIGH(GPIOA_PIN9) | \
+ PIN_ODR_HIGH(GPIOA_PIN10) | \
+ PIN_ODR_HIGH(GPIOA_USB_DM) | \
+ PIN_ODR_HIGH(GPIOA_USB_DP) | \
+ PIN_ODR_HIGH(GPIOA_SWDIO) | \
+ PIN_ODR_HIGH(GPIOA_SWCLK) | \
+ PIN_ODR_HIGH(GPIOA_PIN15))
+#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN1, 1) | \
+ PIN_AFIO_AF(GPIOA_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN5, 5) | \
+ PIN_AFIO_AF(GPIOA_PIN6, 5) | \
+ PIN_AFIO_AF(GPIOA_PIN7, 5))
+#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOA_USB_DM, 14) | \
+ PIN_AFIO_AF(GPIOA_USB_DP, 14) | \
+ PIN_AFIO_AF(GPIOA_SWDIO, 0) | \
+ PIN_AFIO_AF(GPIOA_SWCLK, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN15, 0))
+
+/*
+ * GPIOB setup:
+ *
+ * PB0 - PIN0 (input pullup).
+ * PB1 - PIN1 (input pullup).
+ * PB2 - PIN2 (input pullup).
+ * PB3 - PIN3 (alternate 0).
+ * PB4 - PIN4 (input pullup).
+ * PB5 - PIN5 (input pullup).
+ * PB6 - PIN6 LSM303DLHC_SCL (alternate 4).
+ * PB7 - PIN7 LSM303DLHC_SDA (alternate 4).
+ * PB8 - PIN8 (input pullup).
+ * PB9 - PIN9 (input pullup).
+ * PB10 - PIN10 (input pullup).
+ * PB11 - PIN11 (input pullup).
+ * PB12 - PIN12 (input pullup).
+ * PB13 - PIN13 (input pullup).
+ * PB14 - PIN14 (input pullup).
+ * PB15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
+ PIN_MODE_INPUT(GPIOB_PIN1) | \
+ PIN_MODE_INPUT(GPIOB_PIN2) | \
+ PIN_MODE_ALTERNATE(GPIOB_PIN3) | \
+ PIN_MODE_INPUT(GPIOB_PIN4) | \
+ PIN_MODE_INPUT(GPIOB_PIN5) | \
+ PIN_MODE_ALTERNATE(GPIOB_PIN6) | \
+ PIN_MODE_OUTPUT(GPIOB_PIN7) | \
+ PIN_MODE_INPUT(GPIOB_PIN8) | \
+ PIN_MODE_INPUT(GPIOB_PIN9) | \
+ PIN_MODE_INPUT(GPIOB_PIN10) | \
+ PIN_MODE_INPUT(GPIOB_PIN11) | \
+ PIN_MODE_INPUT(GPIOB_PIN12) | \
+ PIN_MODE_INPUT(GPIOB_PIN13) | \
+ PIN_MODE_INPUT(GPIOB_PIN14) | \
+ PIN_MODE_INPUT(GPIOB_PIN15))
+#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
+ PIN_OTYPE_OPENDRAIN(GPIOB_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN15))
+#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN15))
+#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
+ PIN_PUPDR_FLOATING(GPIOB_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
+ PIN_PUPDR_FLOATING(GPIOB_PIN6) | \
+ PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN15))
+#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
+ PIN_ODR_HIGH(GPIOB_PIN1) | \
+ PIN_ODR_HIGH(GPIOB_PIN2) | \
+ PIN_ODR_HIGH(GPIOB_PIN3) | \
+ PIN_ODR_HIGH(GPIOB_PIN4) | \
+ PIN_ODR_HIGH(GPIOB_PIN5) | \
+ PIN_ODR_HIGH(GPIOB_PIN6) | \
+ PIN_ODR_LOW(GPIOB_PIN7) | \
+ PIN_ODR_HIGH(GPIOB_PIN8) | \
+ PIN_ODR_HIGH(GPIOB_PIN9) | \
+ PIN_ODR_HIGH(GPIOB_PIN10) | \
+ PIN_ODR_HIGH(GPIOB_PIN11) | \
+ PIN_ODR_HIGH(GPIOB_PIN12) | \
+ PIN_ODR_HIGH(GPIOB_PIN13) | \
+ PIN_ODR_HIGH(GPIOB_PIN14) | \
+ PIN_ODR_HIGH(GPIOB_PIN15))
+#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN6, 4) | \
+ PIN_AFIO_AF(GPIOB_PIN7, 0))
+#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN15, 0))
+
+/*
+ * GPIOC setup:
+ *
+ * PC0 - PIN0 (input pullup).
+ * PC1 - PIN1 (input pullup).
+ * PC2 - PIN2 (input pullup).
+ * PC3 - PIN3 (input pullup).
+ * PC4 - PIN4 (input pullup).
+ * PC5 - PIN5 (input pullup).
+ * PC6 - PIN6 (input pullup).
+ * PC7 - PIN7 (input pullup).
+ * PC8 - PIN8 (input pullup).
+ * PC9 - PIN9 (input pullup).
+ * PC10 - PIN10 (input pullup).
+ * PC11 - PIN11 (input pullup).
+ * PC12 - PIN12 (input pullup).
+ * PC13 - PIN13 (input pullup).
+ * PC14 - PIN14 (input floating).
+ * PC15 - PIN15 (input floating).
+ */
+#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_PIN0) | \
+ PIN_MODE_INPUT(GPIOC_PIN1) | \
+ PIN_MODE_INPUT(GPIOC_PIN2) | \
+ PIN_MODE_INPUT(GPIOC_PIN3) | \
+ PIN_MODE_INPUT(GPIOC_PIN4) | \
+ PIN_MODE_INPUT(GPIOC_PIN5) | \
+ PIN_MODE_INPUT(GPIOC_PIN6) | \
+ PIN_MODE_INPUT(GPIOC_PIN7) | \
+ PIN_MODE_INPUT(GPIOC_PIN8) | \
+ PIN_MODE_INPUT(GPIOC_PIN9) | \
+ PIN_MODE_INPUT(GPIOC_PIN10) | \
+ PIN_MODE_INPUT(GPIOC_PIN11) | \
+ PIN_MODE_INPUT(GPIOC_PIN12) | \
+ PIN_MODE_INPUT(GPIOC_PIN13) | \
+ PIN_MODE_INPUT(GPIOC_PIN14) | \
+ PIN_MODE_INPUT(GPIOC_PIN15))
+#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN15))
+#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOC_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN15))
+#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
+ PIN_PUPDR_FLOATING(GPIOC_PIN14) | \
+ PIN_PUPDR_FLOATING(GPIOC_PIN15))
+#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \
+ PIN_ODR_HIGH(GPIOC_PIN1) | \
+ PIN_ODR_HIGH(GPIOC_PIN2) | \
+ PIN_ODR_HIGH(GPIOC_PIN3) | \
+ PIN_ODR_HIGH(GPIOC_PIN4) | \
+ PIN_ODR_HIGH(GPIOC_PIN5) | \
+ PIN_ODR_HIGH(GPIOC_PIN6) | \
+ PIN_ODR_HIGH(GPIOC_PIN7) | \
+ PIN_ODR_HIGH(GPIOC_PIN8) | \
+ PIN_ODR_HIGH(GPIOC_PIN9) | \
+ PIN_ODR_HIGH(GPIOC_PIN10) | \
+ PIN_ODR_HIGH(GPIOC_PIN11) | \
+ PIN_ODR_HIGH(GPIOC_PIN12) | \
+ PIN_ODR_HIGH(GPIOC_PIN13) | \
+ PIN_ODR_HIGH(GPIOC_PIN14) | \
+ PIN_ODR_HIGH(GPIOC_PIN15))
+#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN7, 0))
+#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN15, 0))
+
+/*
+ * GPIOD setup:
+ *
+ * PD0 - PIN0 (input pullup).
+ * PD1 - PIN1 (input pullup).
+ * PD2 - PIN2 (input pullup).
+ * PD3 - PIN3 (input pullup).
+ * PD4 - PIN4 (input pullup).
+ * PD5 - PIN5 (input pullup).
+ * PD6 - PIN6 (input pullup).
+ * PD7 - PIN7 (input pullup).
+ * PD8 - PIN8 (input pullup).
+ * PD9 - PIN9 (input pullup).
+ * PD11 - PIN10 (input pullup).
+ * PD11 - PIN11 (input pullup).
+ * PD12 - PIN12 (input pullup).
+ * PD13 - PIN13 (input pullup).
+ * PD14 - PIN14 (input pullup).
+ * PD15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
+ PIN_MODE_INPUT(GPIOD_PIN1) | \
+ PIN_MODE_INPUT(GPIOD_PIN2) | \
+ PIN_MODE_INPUT(GPIOD_PIN3) | \
+ PIN_MODE_INPUT(GPIOD_PIN4) | \
+ PIN_MODE_INPUT(GPIOD_PIN5) | \
+ PIN_MODE_INPUT(GPIOD_PIN6) | \
+ PIN_MODE_INPUT(GPIOD_PIN7) | \
+ PIN_MODE_INPUT(GPIOD_PIN8) | \
+ PIN_MODE_INPUT(GPIOD_PIN9) | \
+ PIN_MODE_INPUT(GPIOD_PIN10) | \
+ PIN_MODE_INPUT(GPIOD_PIN11) | \
+ PIN_MODE_INPUT(GPIOD_PIN12) | \
+ PIN_MODE_INPUT(GPIOD_PIN13) | \
+ PIN_MODE_INPUT(GPIOD_PIN14) | \
+ PIN_MODE_INPUT(GPIOD_PIN15))
+#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
+#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN15))
+#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN15))
+#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
+ PIN_ODR_HIGH(GPIOD_PIN1) | \
+ PIN_ODR_HIGH(GPIOD_PIN2) | \
+ PIN_ODR_HIGH(GPIOD_PIN3) | \
+ PIN_ODR_HIGH(GPIOD_PIN4) | \
+ PIN_ODR_HIGH(GPIOD_PIN5) | \
+ PIN_ODR_HIGH(GPIOD_PIN6) | \
+ PIN_ODR_HIGH(GPIOD_PIN7) | \
+ PIN_ODR_HIGH(GPIOD_PIN8) | \
+ PIN_ODR_HIGH(GPIOD_PIN9) | \
+ PIN_ODR_HIGH(GPIOD_PIN10) | \
+ PIN_ODR_HIGH(GPIOD_PIN11) | \
+ PIN_ODR_HIGH(GPIOD_PIN12) | \
+ PIN_ODR_HIGH(GPIOD_PIN13) | \
+ PIN_ODR_HIGH(GPIOD_PIN14) | \
+ PIN_ODR_HIGH(GPIOD_PIN15))
+#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN7, 0))
+#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN15, 0))
+
+/*
+ * GPIOE setup:
+ *
+ * PE0 - PIN0 (input pullup).
+ * PE1 - PIN1 (input pullup).
+ * PE2 - PIN2 (input pullup).
+ * PE3 - PIN3 L3GD20_CS (output pushpull maximum).
+ * PE4 - PIN4 (input pullup).
+ * PE5 - PIN5 (input pullup).
+ * PE6 - PIN6 (input pullup).
+ * PE7 - PIN7 (input pullup).
+ * PE8 - PIN8 (output pushpull maximum).
+ * PE9 - PIN9 (output pushpull maximum).
+ * PE10 - PIN10 (output pushpull maximum).
+ * PE11 - PIN11 (output pushpull maximum).
+ * PE12 - PIN12 (output pushpull maximum).
+ * PE13 - PIN13 (output pushpull maximum).
+ * PE14 - PIN14 (output pushpull maximum).
+ * PE15 - PIN15 (output pushpull maximum).
+ */
+#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
+ PIN_MODE_INPUT(GPIOE_PIN1) | \
+ PIN_MODE_INPUT(GPIOE_PIN2) |\
+ PIN_MODE_OUTPUT(GPIOE_PIN3) | \
+ PIN_MODE_INPUT(GPIOE_PIN4) |\
+ PIN_MODE_INPUT(GPIOE_PIN5) |\
+ PIN_MODE_INPUT(GPIOE_PIN6) | \
+ PIN_MODE_INPUT(GPIOE_PIN7) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN8) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN9) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN10) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN11) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN12) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN13) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN14) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN15))
+#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN10) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN14) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
+#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN1) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN2) |\
+ PIN_OSPEED_HIGH(GPIOE_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN4) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN5) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN15))
+#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN2) |\
+ PIN_PUPDR_FLOATING(GPIOE_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN4) |\
+ PIN_PUPDR_PULLUP(GPIOE_PIN5) |\
+ PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
+ PIN_PUPDR_FLOATING(GPIOE_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
+ PIN_PUPDR_FLOATING(GPIOE_PIN13) | \
+ PIN_PUPDR_FLOATING(GPIOE_PIN14) |\
+ PIN_PUPDR_FLOATING(GPIOE_PIN15))
+#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
+ PIN_ODR_HIGH(GPIOE_PIN1) | \
+ PIN_ODR_HIGH(GPIOE_PIN2) | \
+ PIN_ODR_HIGH(GPIOE_PIN3) | \
+ PIN_ODR_HIGH(GPIOE_PIN4) | \
+ PIN_ODR_HIGH(GPIOE_PIN5) | \
+ PIN_ODR_HIGH(GPIOE_PIN6) | \
+ PIN_ODR_HIGH(GPIOE_PIN7) | \
+ PIN_ODR_LOW(GPIOE_PIN8) | \
+ PIN_ODR_LOW(GPIOE_PIN9) | \
+ PIN_ODR_LOW(GPIOE_PIN10) | \
+ PIN_ODR_LOW(GPIOE_PIN11) | \
+ PIN_ODR_LOW(GPIOE_PIN12) | \
+ PIN_ODR_LOW(GPIOE_PIN13) | \
+ PIN_ODR_LOW(GPIOE_PIN14) | \
+ PIN_ODR_LOW(GPIOE_PIN15))
+#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN2, 0) |\
+ PIN_AFIO_AF(GPIOE_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN4, 0) |\
+ PIN_AFIO_AF(GPIOE_PIN5, 0) |\
+ PIN_AFIO_AF(GPIOE_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN7, 0))
+#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN15, 0))
+
+/*
+ * GPIOF setup:
+ *
+ * PF0 - I2C2_SDA (input floating).
+ * PF1 - I2C2_SCL (input floating).
+ * PF2 - PIN2 (input pullup).
+ * PF3 - PIN3 (input pullup).
+ * PF4 - PIN4 (input pullup).
+ * PF5 - PIN5 (input pullup).
+ * PF6 - PIN6 (input pullup).
+ * PF7 - PIN7 (input pullup).
+ * PF8 - PIN8 (input pullup).
+ * PF9 - PIN9 (input pullup).
+ * PF10 - PIN10 (input pullup).
+ * PF11 - PIN11 (input pullup).
+ * PF12 - PIN12 (input pullup).
+ * PF13 - PIN13 (input pullup).
+ * PF14 - PIN14 (input pullup).
+ * PF15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_I2C2_SDA) | \
+ PIN_MODE_INPUT(GPIOF_I2C2_SCL) | \
+ PIN_MODE_INPUT(GPIOF_PIN2) | \
+ PIN_MODE_INPUT(GPIOF_PIN3) | \
+ PIN_MODE_INPUT(GPIOF_PIN4) | \
+ PIN_MODE_INPUT(GPIOF_PIN5) | \
+ PIN_MODE_INPUT(GPIOF_PIN6) | \
+ PIN_MODE_INPUT(GPIOF_PIN7) | \
+ PIN_MODE_INPUT(GPIOF_PIN8) | \
+ PIN_MODE_INPUT(GPIOF_PIN9) | \
+ PIN_MODE_INPUT(GPIOF_PIN10) | \
+ PIN_MODE_INPUT(GPIOF_PIN11) | \
+ PIN_MODE_INPUT(GPIOF_PIN12) | \
+ PIN_MODE_INPUT(GPIOF_PIN13) | \
+ PIN_MODE_INPUT(GPIOF_PIN14) | \
+ PIN_MODE_INPUT(GPIOF_PIN15))
+#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SDA) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SCL) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
+#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_HIGH(GPIOF_I2C2_SDA) | \
+ PIN_OSPEED_HIGH(GPIOF_I2C2_SCL) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN15))
+#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_I2C2_SDA) | \
+ PIN_PUPDR_FLOATING(GPIOF_I2C2_SCL) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN15))
+#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_I2C2_SDA) | \
+ PIN_ODR_HIGH(GPIOF_I2C2_SCL) | \
+ PIN_ODR_HIGH(GPIOF_PIN2) | \
+ PIN_ODR_HIGH(GPIOF_PIN3) | \
+ PIN_ODR_HIGH(GPIOF_PIN4) | \
+ PIN_ODR_HIGH(GPIOF_PIN5) | \
+ PIN_ODR_HIGH(GPIOF_PIN6) | \
+ PIN_ODR_HIGH(GPIOF_PIN7) | \
+ PIN_ODR_HIGH(GPIOF_PIN8) | \
+ PIN_ODR_HIGH(GPIOF_PIN9) | \
+ PIN_ODR_HIGH(GPIOF_PIN10) | \
+ PIN_ODR_HIGH(GPIOF_PIN11) | \
+ PIN_ODR_HIGH(GPIOF_PIN12) | \
+ PIN_ODR_HIGH(GPIOF_PIN13) | \
+ PIN_ODR_HIGH(GPIOF_PIN14) | \
+ PIN_ODR_HIGH(GPIOF_PIN15))
+#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_I2C2_SDA, 0) | \
+ PIN_AFIO_AF(GPIOF_I2C2_SCL, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN7, 0))
+#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN15, 0))
+
+/*
+ * GPIOG setup:
+ *
+ * PG0 - PIN0 (input pullup).
+ * PG1 - PIN1 (input pullup).
+ * PG2 - PIN2 (input pullup).
+ * PG3 - PIN3 (input pullup).
+ * PG4 - PIN4 (input pullup).
+ * PG5 - PIN5 (input pullup).
+ * PG6 - PIN6 (input pullup).
+ * PG7 - PIN7 (input pullup).
+ * PG8 - PIN8 (input pullup).
+ * PG9 - PIN9 (input pullup).
+ * PG10 - PIN10 (input pullup).
+ * PG11 - PIN11 (input pullup).
+ * PG12 - PIN12 (input pullup).
+ * PG13 - PIN13 (input pullup).
+ * PG14 - PIN14 (input pullup).
+ * PG15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOG_MODER (PIN_MODE_INPUT(GPIOG_PIN0) | \
+ PIN_MODE_INPUT(GPIOG_PIN1) | \
+ PIN_MODE_INPUT(GPIOG_PIN2) | \
+ PIN_MODE_INPUT(GPIOG_PIN3) | \
+ PIN_MODE_INPUT(GPIOG_PIN4) | \
+ PIN_MODE_INPUT(GPIOG_PIN5) | \
+ PIN_MODE_INPUT(GPIOG_PIN6) | \
+ PIN_MODE_INPUT(GPIOG_PIN7) | \
+ PIN_MODE_INPUT(GPIOG_PIN8) | \
+ PIN_MODE_INPUT(GPIOG_PIN9) | \
+ PIN_MODE_INPUT(GPIOG_PIN10) | \
+ PIN_MODE_INPUT(GPIOG_PIN11) | \
+ PIN_MODE_INPUT(GPIOG_PIN12) | \
+ PIN_MODE_INPUT(GPIOG_PIN13) | \
+ PIN_MODE_INPUT(GPIOG_PIN14) | \
+ PIN_MODE_INPUT(GPIOG_PIN15))
+#define VAL_GPIOG_OTYPER (PIN_OTYPE_PUSHPULL(GPIOG_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN15))
+#define VAL_GPIOG_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOG_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN15))
+#define VAL_GPIOG_PUPDR (PIN_PUPDR_PULLUP(GPIOG_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN15))
+#define VAL_GPIOG_ODR (PIN_ODR_HIGH(GPIOG_PIN0) | \
+ PIN_ODR_HIGH(GPIOG_PIN1) | \
+ PIN_ODR_HIGH(GPIOG_PIN2) | \
+ PIN_ODR_HIGH(GPIOG_PIN3) | \
+ PIN_ODR_HIGH(GPIOG_PIN4) | \
+ PIN_ODR_HIGH(GPIOG_PIN5) | \
+ PIN_ODR_HIGH(GPIOG_PIN6) | \
+ PIN_ODR_HIGH(GPIOG_PIN7) | \
+ PIN_ODR_HIGH(GPIOG_PIN8) | \
+ PIN_ODR_HIGH(GPIOG_PIN9) | \
+ PIN_ODR_HIGH(GPIOG_PIN10) | \
+ PIN_ODR_HIGH(GPIOG_PIN11) | \
+ PIN_ODR_HIGH(GPIOG_PIN12) | \
+ PIN_ODR_HIGH(GPIOG_PIN13) | \
+ PIN_ODR_HIGH(GPIOG_PIN14) | \
+ PIN_ODR_HIGH(GPIOG_PIN15))
+#define VAL_GPIOG_AFRL (PIN_AFIO_AF(GPIOG_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN7, 0))
+#define VAL_GPIOG_AFRH (PIN_AFIO_AF(GPIOG_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN15, 0))
+
+/*
+ * GPIOH setup:
+ *
+ * PH0 - PIN0 (input pullup).
+ * PH1 - PIN1 (input pullup).
+ * PH2 - PIN2 (input pullup).
+ * PH3 - PIN3 (input pullup).
+ * PH4 - PIN4 (input pullup).
+ * PH5 - PIN5 (input pullup).
+ * PH6 - PIN6 (input pullup).
+ * PH7 - PIN7 (input pullup).
+ * PH8 - PIN8 (input pullup).
+ * PH9 - PIN9 (input pullup).
+ * PH10 - PIN10 (input pullup).
+ * PH11 - PIN11 (input pullup).
+ * PH12 - PIN12 (input pullup).
+ * PH13 - PIN13 (input pullup).
+ * PH14 - PIN14 (input pullup).
+ * PH15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOH_MODER (PIN_MODE_INPUT(GPIOH_PIN0) | \
+ PIN_MODE_INPUT(GPIOH_PIN1) | \
+ PIN_MODE_INPUT(GPIOH_PIN2) | \
+ PIN_MODE_INPUT(GPIOH_PIN3) | \
+ PIN_MODE_INPUT(GPIOH_PIN4) | \
+ PIN_MODE_INPUT(GPIOH_PIN5) | \
+ PIN_MODE_INPUT(GPIOH_PIN6) | \
+ PIN_MODE_INPUT(GPIOH_PIN7) | \
+ PIN_MODE_INPUT(GPIOH_PIN8) | \
+ PIN_MODE_INPUT(GPIOH_PIN9) | \
+ PIN_MODE_INPUT(GPIOH_PIN10) | \
+ PIN_MODE_INPUT(GPIOH_PIN11) | \
+ PIN_MODE_INPUT(GPIOH_PIN12) | \
+ PIN_MODE_INPUT(GPIOH_PIN13) | \
+ PIN_MODE_INPUT(GPIOH_PIN14) | \
+ PIN_MODE_INPUT(GPIOH_PIN15))
+#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(GPIOH_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN15))
+#define VAL_GPIOH_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOH_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN15))
+#define VAL_GPIOH_PUPDR (PIN_PUPDR_PULLUP(GPIOH_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN15))
+#define VAL_GPIOH_ODR (PIN_ODR_HIGH(GPIOH_PIN0) | \
+ PIN_ODR_HIGH(GPIOH_PIN1) | \
+ PIN_ODR_HIGH(GPIOH_PIN2) | \
+ PIN_ODR_HIGH(GPIOH_PIN3) | \
+ PIN_ODR_HIGH(GPIOH_PIN4) | \
+ PIN_ODR_HIGH(GPIOH_PIN5) | \
+ PIN_ODR_HIGH(GPIOH_PIN6) | \
+ PIN_ODR_HIGH(GPIOH_PIN7) | \
+ PIN_ODR_HIGH(GPIOH_PIN8) | \
+ PIN_ODR_HIGH(GPIOH_PIN9) | \
+ PIN_ODR_HIGH(GPIOH_PIN10) | \
+ PIN_ODR_HIGH(GPIOH_PIN11) | \
+ PIN_ODR_HIGH(GPIOH_PIN12) | \
+ PIN_ODR_HIGH(GPIOH_PIN13) | \
+ PIN_ODR_HIGH(GPIOH_PIN14) | \
+ PIN_ODR_HIGH(GPIOH_PIN15))
+#define VAL_GPIOH_AFRL (PIN_AFIO_AF(GPIOH_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN7, 0))
+#define VAL_GPIOH_AFRH (PIN_AFIO_AF(GPIOH_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN15, 0))
+
+
+/*
+ * USB bus activation macro, required by the USB driver.
+ */
+// #define usb_lld_connect_bus(usbp)
+#define usb_lld_connect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_ALTERNATE(14)))
+// #define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT)
+/*
+ * USB bus de-activation macro, required by the USB driver.
+ */
+// #define usb_lld_disconnect_bus(usbp)
+#define usb_lld_disconnect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_OUTPUT_PUSHPULL)); palClearPad(GPIOA, GPIOA_USB_DP)
+// #define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12)
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* _BOARD_H_ */
diff --git a/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.mk b/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.mk
new file mode 100644
index 000000000..43377629a
--- /dev/null
+++ b/keyboards/hadron/ver3/boards/GENERIC_STM32_F303XC/board.mk
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC
diff --git a/keyboards/hadron/ver3/bootloader_defs.h b/keyboards/hadron/ver3/bootloader_defs.h
new file mode 100644
index 000000000..3b0e9d20a
--- /dev/null
+++ b/keyboards/hadron/ver3/bootloader_defs.h
@@ -0,0 +1,7 @@
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here:
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ * This also requires a patch to chibios:
+ * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+ */
+#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
diff --git a/keyboards/hadron/ver3/chconf.h b/keyboards/hadron/ver3/chconf.h
new file mode 100644
index 000000000..1d9f12ff1
--- /dev/null
+++ b/keyboards/hadron/ver3/chconf.h
@@ -0,0 +1,520 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION 32
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY 100000
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#define CH_CFG_ST_TIMEDELTA 2
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM 0
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE 0
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM TRUE
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY TRUE
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT TRUE
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES TRUE
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES TRUE
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS TRUE
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS TRUE
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES TRUE
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY TRUE
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES TRUE
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE TRUE
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP TRUE
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS TRUE
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS FALSE
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS FALSE
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS FALSE
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK TRUE
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS FALSE
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note It is invoked from within @p chThdInit() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/hadron/ver3/config.h b/keyboards/hadron/ver3/config.h
new file mode 100644
index 000000000..7db500304
--- /dev/null
+++ b/keyboards/hadron/ver3/config.h
@@ -0,0 +1,202 @@
+/*
+ * Copyright 2018 Jack Humbert <jack.humb@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef REV3_CONFIG_H
+#define REV3_CONFIG_H
+
+/* USB Device descriptor parameter */
+#define DEVICE_VER 0x0003
+
+#undef MATRIX_ROWS
+#undef MATRIX_COLS
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+
+//Audio
+#undef AUDIO_VOICES
+#undef C6_AUDIO
+
+#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 AUDIO_CLICKY
+ /* to enable clicky on startup */
+ //#define AUDIO_CLICKY_ON
+#define AUDIO_CLICKY_FREQ_RANDOMNESS 1.5f
+#endif
+
+//configure qwiic micro_oled driver for the 128x32 oled
+#ifdef QWIIC_MICRO_OLED_ENABLE
+
+#undef I2C_ADDRESS_SA0_1
+#define I2C_ADDRESS_SA0_1 0b0111100
+#define LCDWIDTH 128
+#define LCDHEIGHT 32
+#define micro_oled_rotate_180
+
+#endif
+/*
+ * 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)
+ *
+*/
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 6
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+/* Haptic Driver initialization settings
+ * Feedback Control Settings */
+#define FB_ERM_LRA 1 /* For ERM:0 or LRA:1*/
+#define FB_BRAKEFACTOR 6 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */
+#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
+
+/* default 3V ERM vibration motor voltage and library*/
+#if FB_ERM_LRA == 0
+#define RATED_VOLTAGE 3
+#define V_RMS 2.3
+#define V_PEAK 3.30
+/* Library Selection */
+#define LIB_SELECTION 4 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
+
+/* default 2V LRA voltage and library */
+#elif FB_ERM_LRA == 1
+#define RATED_VOLTAGE 2
+#define V_RMS 2.0
+#define V_PEAK 2.85
+#define F_LRA 200
+/* Library Selection */
+#define LIB_SELECTION 6 /* For Empty:0' TS2200 library A to D:1-5, LRA Library: 6 */
+
+#endif
+
+
+/* Control 1 register settings */
+#define DRIVE_TIME 25
+#define AC_COUPLE 0
+#define STARTUP_BOOST 1
+
+/* Control 2 Settings */
+#define BIDIR_INPUT 1
+#define BRAKE_STAB 1 /* Loopgain is reduced when braking is almost complete to improve stability */
+#define SAMPLE_TIME 3
+#define BLANKING_TIME 1
+#define IDISS_TIME 1
+
+/* Control 3 settings */
+#define NG_THRESH 2
+#define ERM_OPEN_LOOP 1
+#define SUPPLY_COMP_DIS 0
+#define DATA_FORMAT_RTO 0
+#define LRA_DRIVE_MODE 0
+#define N_PWM_ANALOG 0
+#define LRA_OPEN_LOOP 0
+/* Control 4 settings */
+#define ZC_DET_TIME 0
+#define AUTO_CAL_TIME 3
+
+//#define RGBLIGHT_ANIMATIONS
+
+//#define RGBLED_NUM 10
+//#define RGB_DI_PIN B5
+//#define DRIVER_LED_TOTAL RGBLED_NUM
+
+//#define RGB_MATRIX_KEYPRESSES
+#endif
diff --git a/keyboards/hadron/ver3/halconf.h b/keyboards/hadron/ver3/halconf.h
new file mode 100644
index 000000000..c3e0cbb72
--- /dev/null
+++ b/keyboards/hadron/ver3/halconf.h
@@ -0,0 +1,388 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef HALCONF_H
+#define HALCONF_H
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC TRUE
+#endif
+
+/**
+ * @brief Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT TRUE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C TRUE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM FALSE
+#endif
+
+/**
+ * @brief Enables the QSPI subsystem.
+ */
+#if !defined(HAL_USE_QSPI) || defined(__DOXYGEN__)
+#define HAL_USE_QSPI FALSE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB TRUE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 16 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 256 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 1
+#endif
+
+/**
+ * @brief Serial over USB number of buffers.
+ * @note The default is 2 buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_NUMBER 2
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* UART driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
+#define UART_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define UART_USE_MUTUAL_EXCLUSION FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+#endif /* HALCONF_H */
+
+/** @} */
diff --git a/keyboards/hadron/ver3/keymaps/default/config.h b/keyboards/hadron/ver3/keymaps/default/config.h
new file mode 100644
index 000000000..6f70f09be
--- /dev/null
+++ b/keyboards/hadron/ver3/keymaps/default/config.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/keyboards/hadron/ver3/keymaps/default/keymap.c b/keyboards/hadron/ver3/keymaps/default/keymap.c
new file mode 100644
index 000000000..11761b321
--- /dev/null
+++ b/keyboards/hadron/ver3/keymaps/default/keymap.c
@@ -0,0 +1,295 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _MOUSECURSOR 8
+#define _ADJUST 16
+
+enum preonic_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ RGBLED_TOGGLE,
+ RGBLED_STEP_MODE,
+ RGBLED_INCREASE_HUE,
+ RGBLED_DECREASE_HUE,
+ RGBLED_INCREASE_SAT,
+ RGBLED_DECREASE_SAT,
+ RGBLED_INCREASE_VAL,
+ RGBLED_DECREASE_VAL,
+};
+
+enum macro_keycodes {
+ KC_DEMOMACRO,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+// Custom macros
+#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
+#define CTL_TTAB CTL_T(KC_TAB) // Tap for Esc, hold for Ctrl
+#define CTL_ENT CTL_T(KC_ENT) // Tap for Enter, hold for Ctrl
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+// 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] = {
+
+/* Qwerty
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | DEL |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Tab | Q | W | E | R | T | 7 | 8 | 9 | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | CAPS | A | S | D | F | G | 4 | 5 | 6 | H | J | K | L | ;/Nav| ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | 1 | 2 | 3 | N | M | , | . | / |Ctl/Et|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | Ctrl | Alt | GUI |Lower |Space | 0 | . | = |Space |Raise | Left | Down | Up |Right |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_P7, KC_P8, KC_P9, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_P4, KC_P5, KC_P6, KC_H, KC_J, KC_K, KC_L,LT_MC(KC_SCLN), KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, CTL_ENT, \
+ KC_GRV, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_LEFT,KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Tab | Q | W | F | P | G | 7 | 8 | 9 | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
+ * | CAPS | A | R | S | T | D | 4 | 5 | 6 | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | 1 | 2 | 3 | K | M | , | . | / |Ctl/Et|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | Ctrl | Alt | GUI |Lower |Space | 0 | . | = |Space |Raise | Left | Down | Up |Right |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_P7, KC_P8, KC_P9, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_LCTRL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_P4, KC_P5, KC_P6, KC_H, KC_N, KC_E, KC_I, LT_MC(KC_O), KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P1, KC_P2, KC_P3, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, CTL_ENT, \
+ KC_GRV, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+/* Dvorak
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Tab | " | , | . | P | Y | 7 | 8 | 9 | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | 4 | 5 | 6 | D | H | T | N | S | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | 1 | 2 | 3 | B | M | W | V | Z |Ctl/Et|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | Ctrl | Alt | GUI |Lower |Space | 0 | . | = |Space |Raise | Left | Down | Up |Right |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_P7, KC_P8, KC_P9, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_P4, KC_P5, KC_P6, KC_D, KC_H, KC_T, KC_N, LT_MC(KC_S), KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_P1, KC_P2, KC_P3, KC_B, KC_M, KC_W, KC_V, KC_Z, CTL_ENT, \
+ KC_GRV, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, 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(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, 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
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | | | | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO # |ISO / | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
+ _______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Mouse Layer (semi-col)
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | ACCL0| ACCL1| ACCL2| | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | | | | | | | | | Home | Wh_Up| WHL_L| M_Up | WHL_R| Macro| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | End | Wh_Dn| M_Lft| M_Dn | M_Rt | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | BTN2 | BTN3 | BTN4 | BTN5 | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | BTN1 | | | | BTN1 | | | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+
+[_MOUSECURSOR] = LAYOUT(
+ KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_WH_L, KC_MS_U, KC_WH_R,DEMOMACRO,_______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_END , KC_PGDN, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5, _______, _______, \
+ _______, _______, _______, _______, _______, KC_BTN1, _______, _______, _______, KC_BTN1, _______, _______, _______, _______, _______ \
+),
+
+/* Adjust (Lower + Raise)
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Reset|RGB TG|RGB ST|RGBH -|RGBH +|RGBS -|RGBS +|RGBV -|RGBV +| | | | | | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm| | | |AGswap|Qwerty|Colemk| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff| | | | | | | | BL + |BL ST |BL TG |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ RESET, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, _______, _______, _______, AG_SWAP, QWERTY, COLEMAK, _______, _______, _______, \
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, BL_DEC, BL_INC, BL_STEP, BL_TOGG, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CK_RST, CK_DOWN, CK_UP, CK_TOGG\
+)
+
+
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ 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;
+}
+
+
+void matrix_init_user(void) {
+}
+
+
+void matrix_scan_user(void) {
+}
+
diff --git a/keyboards/hadron/ver3/keymaps/default/readme.md b/keyboards/hadron/ver3/keymaps/default/readme.md
new file mode 100644
index 000000000..88b958ec4
--- /dev/null
+++ b/keyboards/hadron/ver3/keymaps/default/readme.md
@@ -0,0 +1,2 @@
+# The Default Hadron Layout
+
diff --git a/keyboards/hadron/ver3/keymaps/ishtob/config.h b/keyboards/hadron/ver3/keymaps/ishtob/config.h
new file mode 100644
index 000000000..6f70f09be
--- /dev/null
+++ b/keyboards/hadron/ver3/keymaps/ishtob/config.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/keyboards/hadron/ver3/keymaps/ishtob/keymap.c b/keyboards/hadron/ver3/keymaps/ishtob/keymap.c
new file mode 100644
index 000000000..641c01624
--- /dev/null
+++ b/keyboards/hadron/ver3/keymaps/ishtob/keymap.c
@@ -0,0 +1,250 @@
+#include QMK_KEYBOARD_H
+#include "ishtob.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | DEL |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Tab | Q | W | E | R | T | 7 | 8 | 9 | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | LCTL | A | S | D | F | G | 4 | 5 | 6 | H | J | K | L | ;/Nav|Ctl/Et|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | 1 | 2 | 3 | N | M | , | . | / | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | Ctrl | GUI | Alt |Lower |Space | 0 | . | = |Space |Raise | Alt | NumL | App | Del |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_wrapper(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
+ LT_FN(KC_TAB), _________________QWERTY_L1_________________, KC_P7, KC_P8, KC_P9, _________________QWERTY_R1_________________, KC_BSPC, \
+ KC_CAPS, _________________QWERTY_L2_________________, KC_P4, KC_P5, KC_P6, _________________QWERTY_R2_________________, CTL_ENT, \
+ KC_LSFT, _________________QWERTY_L3_________________, KC_P1, KC_P2, KC_P3, _________________QWERTY_R3_________________, LT_RAI(KC_MINS), \
+ KC_ESC, KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_DEL \
+),
+
+/* Colemak
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Tab | Q | W | F | P | G | 7 | 8 | 9 | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
+ * | CAPS | A | R | S | T | D | 4 | 5 | 6 | H | N | E | I | O |Ctl/Et|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | 1 | 2 | 3 | K | M | , | . | / | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | Ctrl | GUI | Alt |Lower |Space | 0 | . | = |Space |Raise | Alt | NumL | App | Del |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_wrapper(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
+ LT_FN(KC_TAB), _________________COLEMAK_L1________________, KC_P7, KC_P8, KC_P9, _________________COLEMAK_R1________________, KC_BSPC, \
+ KC_LCTRL, _________________COLEMAK_L2________________, KC_P4, KC_P5, KC_P6, _________________COLEMAK_R2________________, CTL_ENT, \
+ KC_LSFT, _________________COLEMAK_L3________________, KC_P1, KC_P2, KC_P3, _________________COLEMAK_R3________________, LT_RAI(KC_MINS), \
+ KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_DEL \
+ ),
+
+/* Dvorak
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Tab | " | , | . | P | Y | 7 | 8 | 9 | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | 4 | 5 | 6 | D | H | T | N | S | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | 1 | 2 | 3 | B | M | W | V | Z |Ctl/Et|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Esc | Ctrl | GUI | Alt |Lower |Space | 0 | . | = |Space |Raise | Alt | NumL | App | Del |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_wrapper(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,\
+ LT_FN(KC_TAB), _________________DVORAK_L1_________________, KC_P7, KC_P8, KC_P9, _________________DVORAK_R1_________________, KC_BSPC, \
+ KC_LCTL, _________________DVORAK_L2_________________, KC_P4, KC_P5, KC_P6, _________________DVORAK_R2_________________, CTL_ENT, \
+ KC_LSFT, _________________DVORAK_L3_________________, KC_P1, KC_P2, KC_P3, _________________DVORAK_R3_________________, LT_RAI(KC_MINS), \
+ KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P0, KC_DOT, KC_EQL, KC_SPC, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_DEL \
+),
+
+/* Lower
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO ~ |ISO | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_wrapper(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, 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
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | ` | 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_wrapper(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ ________________NUMBER_LEFT________________, KC_6, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, KC_PLUS, KC_BSLS, \
+ KC_DEL, KC_A, KC_UP, KC_D, KC_PSCR, KC_VOLU, _______, _______, _______, KC_4, KC_5, KC_6, KC_PAST, KC_COLN, KC_QUOT, \
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT,KC__MUTE, KC_VOLD, _______, _______, _______, KC_1, KC_2, KC_3, KC_UP, KC_SLSH, _______, \
+ _______, _______, _______, _______, _______, KC_SPC, _______, _______, KC_SPC, KC_0, _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NLCK \
+),
+
+/* FN layer on Esc key
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | + |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | _ | = | [ | ] | ' |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | | | F12 |ISO ~ |ISO | | { | } |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * '------+------+------+------+------+------+------+------+------+------+------+------+--------------------'
+ */
+[_FNLAYER] = LAYOUT_wrapper(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS, \
+ _______, __________________LONG_FUNC_LEFT___________________, _______, _______, _______, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT, \
+ _______, __________________LONG_FUNC_RIGHT__________________, _______, _______, _______,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Mouse Layer (semi-col)
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | ACCL0| ACCL1| ACCL2| | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | | | | | | | | | Home | Wh_Up| WHL_L| M_Up | WHL_R| Macro| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | End | Wh_Dn| M_Lft| M_Dn | M_Rt | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | BTN2 | BTN3 | BTN4 | BTN5 | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | BTN1 | | | | BTN1 | | | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+
+[_MOUSECURSOR] = LAYOUT_wrapper(
+ KC_ACL0, KC_ACL1, KC_ACL2, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, M_EMAIL,M_EMAIL2, _______, _______, _______, KC_HOME, KC_PGUP, KC_WH_L, KC_MS_U, KC_WH_R, P_MPASS, P_META, \
+ _______, _______, _______, _______, O_RTQ6H, _______, _______, _______, KC_END , KC_PGDN, KC_MS_L, KC_MS_D, KC_MS_R, _______, O_DAYRN, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5, _______, _______, \
+ _______, _______, _______, _______, _______, KC_BTN1, _______, _______, _______, KC_BTN1, _______, _______, _______, P_CITRIX, O_AUTODC \
+),
+
+/* Adjust (Lower + Raise)
+ * ,------+------+------+------+------+------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+--------------------.
+ * | Reset|RGB TG|RGB ST|RGBH -|RGBH +|RGBS -|RGBS +|RGBV -|RGBV +| | | | | | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm| | | |AGswap|Qwerty|Colemk| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff| | | | | | | | BL + |BL ST |BL TG |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * `--------------------------------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_wrapper(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ RESET, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, MAGIC_TOGGLE_NKRO, _______, AU_ON, AU_OFF, AG_NORM, _______, _______, _______, AG_SWAP, QWERTY, COLEMAK, _______, _______, _______, \
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, BL_DEC, BL_INC, BL_STEP, BL_TOGG, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, CK_RST, CK_DOWN, CK_UP, CK_TOGG\
+)
+
+
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
+
+
+void matrix_init_keymap(void) {
+}
+
+
+void matrix_scan_keymap(void) {
+}
+
diff --git a/keyboards/hadron/ver3/keymaps/ishtob/readme.md b/keyboards/hadron/ver3/keymaps/ishtob/readme.md
new file mode 100644
index 000000000..88b958ec4
--- /dev/null
+++ b/keyboards/hadron/ver3/keymaps/ishtob/readme.md
@@ -0,0 +1,2 @@
+# The Default Hadron Layout
+
diff --git a/keyboards/hadron/ver3/keymaps/readme.md b/keyboards/hadron/ver3/keymaps/readme.md
new file mode 100644
index 000000000..54fb5f6d9
--- /dev/null
+++ b/keyboards/hadron/ver3/keymaps/readme.md
@@ -0,0 +1,23 @@
+# How to add your own keymap
+
+Folders can be named however you'd like (will be approved upon merging), or should follow the format with a preceding `_`:
+
+ _[ISO 3166-1 alpha-2 code*]_[layout variant]_[layout name/author]
+
+\* See full list: https://en.wikipedia.org/wiki/ISO_3166-1#Officially_assigned_code_elements
+
+and contain the following files:
+
+* `keymap.c`
+* `readme.md` *recommended*
+* `config.h` *optional*, found automatically when compiling
+* `Makefile` *optional*, found automatically when compling
+
+When adding your keymap to this list, keep it organised alphabetically (select list, edit->sort lines), and use this format:
+
+ * **folder_name** description
+
+# List of Planck keymaps
+
+* **default** default Planck layout
+* **cbbrowne** cbbrowne's Planck layout \ No newline at end of file
diff --git a/keyboards/hadron/ver3/matrix.c b/keyboards/hadron/ver3/matrix.c
new file mode 100644
index 000000000..329d1328a
--- /dev/null
+++ b/keyboards/hadron/ver3/matrix.c
@@ -0,0 +1,195 @@
+#include <string.h>
+#include "hal.h"
+#include "timer.h"
+#include "wait.h"
+#include "printf.h"
+#include "backlight.h"
+#include "matrix.h"
+#include "action.h"
+#include "keycode.h"
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_COLS];
+static bool debouncing = false;
+static uint16_t debouncing_time = 0;
+
+static uint8_t encoder_state = 0;
+static int8_t encoder_value = 0;
+static int8_t encoder_LUT[] = { 0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0 };
+
+__attribute__ ((weak))
+void matrix_init_user(void) {}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+void matrix_init(void) {
+ printf("matrix init\n");
+ //debug_matrix = true;
+
+ // encoder setup
+ palSetPadMode(GPIOB, 13, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOB, 14, PAL_MODE_INPUT_PULLUP);
+
+ encoder_state = (palReadPad(GPIOB, 13) << 0) | (palReadPad(GPIOB, 14) << 1);
+
+ // actual matrix setup
+ palSetPadMode(GPIOB, 8, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOB, 2, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOB, 10, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOA, 0, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOA, 1, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOA, 2, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOB, 0, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOA, 3, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOB, 1, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOA, 6, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOA, 7, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOB, 12, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOC, 13, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOB, 11, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPadMode(GPIOB, 9, PAL_MODE_OUTPUT_PUSHPULL);
+
+ palSetPadMode(GPIOC, 15, PAL_MODE_INPUT_PULLDOWN);
+ palSetPadMode(GPIOC, 14, PAL_MODE_INPUT_PULLDOWN);
+ palSetPadMode(GPIOA, 10, PAL_MODE_INPUT_PULLDOWN);
+ palSetPadMode(GPIOA, 9, PAL_MODE_INPUT_PULLDOWN);
+ palSetPadMode(GPIOA, 8, PAL_MODE_INPUT_PULLDOWN);
+
+
+ memset(matrix, 0, MATRIX_ROWS * sizeof(matrix_row_t));
+ memset(matrix_debouncing, 0, MATRIX_COLS * sizeof(matrix_row_t));
+
+
+ matrix_init_quantum();
+}
+
+__attribute__ ((weak))
+void encoder_update(bool clockwise) { }
+
+#ifndef ENCODER_RESOLUTION
+ #define ENCODER_RESOLUTION 4
+#endif
+
+uint8_t matrix_scan(void) {
+ // encoder on B13 and B14
+ encoder_state <<= 2;
+ encoder_state |= (palReadPad(GPIOB, 13) << 0) | (palReadPad(GPIOB, 14) << 1);
+ encoder_value += encoder_LUT[encoder_state & 0xF];
+ if (encoder_value >= ENCODER_RESOLUTION) {
+ encoder_update(0);
+ }
+ if (encoder_value <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
+ encoder_update(1);
+ }
+ encoder_value %= ENCODER_RESOLUTION;
+
+ // actual matrix
+ for (int col = 0; col < MATRIX_COLS; col++) {
+ matrix_row_t data = 0;
+
+ // strobe col { PB8, PB2, PB10, PA0, PA1, PA2, PB0, PA3, PB1, PA6, PA7, PB1, PA6, PA7, PB12, PC3, PB11, }
+ switch (col) {
+ case 0: palSetPad(GPIOB, 8); break;
+ case 1: palSetPad(GPIOB, 2); break;
+ case 2: palSetPad(GPIOB, 10); break;
+ case 3: palSetPad(GPIOA, 0); break;
+ case 4: palSetPad(GPIOA, 1); break;
+ case 5: palSetPad(GPIOA, 2); break;
+ case 6: palSetPad(GPIOB, 0); break;
+ case 7: palSetPad(GPIOA, 3); break;
+ case 8: palSetPad(GPIOB, 1); break;
+ case 9: palSetPad(GPIOA, 6); break;
+ case 10: palSetPad(GPIOA, 7); break;
+ case 11: palSetPad(GPIOB, 12); break;
+ case 12: palSetPad(GPIOC, 13); break;
+ case 13: palSetPad(GPIOB, 11); break;
+ case 14: palSetPad(GPIOB, 9); break;
+ }
+
+ // need wait to settle pin state
+ wait_us(20);
+
+ // read row data { PC15, PC14, PA10, PA9, PA8 }
+ data = (
+ (palReadPad(GPIOC, 15) << 0 ) |
+ (palReadPad(GPIOC, 14) << 1 ) |
+ (palReadPad(GPIOA, 10) << 2 ) |
+ (palReadPad(GPIOA, 9) << 3 ) |
+ (palReadPad(GPIOA, 8) << 4 )
+ );
+
+ // unstrobe col { PB8, PB2, PB10, PA0, PA1, PA2, PB0, PA3, PB1, PA6, PA7, PB1, PA6, PA7, PB12, PC3, PB11, }
+ switch (col) {
+ case 0: palClearPad(GPIOB, 8); break;
+ case 1: palClearPad(GPIOB, 2); break;
+ case 2: palClearPad(GPIOB, 10); break;
+ case 3: palClearPad(GPIOA, 0); break;
+ case 4: palClearPad(GPIOA, 1); break;
+ case 5: palClearPad(GPIOA, 2); break;
+ case 6: palClearPad(GPIOB, 0); break;
+ case 7: palClearPad(GPIOA, 3); break;
+ case 8: palClearPad(GPIOB, 1); break;
+ case 9: palClearPad(GPIOA, 6); break;
+ case 10: palClearPad(GPIOA, 7); break;
+ case 11: palClearPad(GPIOB, 12); break;
+ case 12: palClearPad(GPIOC, 13); break;
+ case 13: palClearPad(GPIOB, 11); break;
+ case 14: palClearPad(GPIOB, 9); break;
+ }
+
+ if (matrix_debouncing[col] != data) {
+ matrix_debouncing[col] = data;
+ debouncing = true;
+ debouncing_time = timer_read();
+ }
+ }
+
+ if (debouncing && timer_elapsed(debouncing_time) > DEBOUNCE) {
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ matrix[row] = 0;
+ for (int col = 0; col < MATRIX_COLS; col++) {
+ matrix[row] |= ((matrix_debouncing[col] & (1 << row) ? 1 : 0) << col);
+ }
+ }
+ debouncing = false;
+ }
+
+ matrix_scan_quantum();
+
+ return 1;
+}
+
+bool matrix_is_on(uint8_t row, uint8_t col) {
+ return (matrix[row] & (1<<col));
+}
+
+matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+ printf("\nr/c 01234567\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ printf("%X0: ", row);
+ matrix_row_t data = matrix_get_row(row);
+ for (int col = 0; col < MATRIX_COLS; col++) {
+ if (data & (1<<col))
+ printf("1");
+ else
+ printf("0");
+ }
+ printf("\n");
+ }
+}
diff --git a/keyboards/hadron/ver3/mcuconf.h b/keyboards/hadron/ver3/mcuconf.h
new file mode 100644
index 000000000..d0776b046
--- /dev/null
+++ b/keyboards/hadron/ver3/mcuconf.h
@@ -0,0 +1,257 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef MCUCONF_H
+#define MCUCONF_H
+
+/*
+ * STM32F3xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F3xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PREDIV_VALUE 1
+#define STM32_PLLMUL_VALUE 9
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV2
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_ADC12PRES STM32_ADC12PRES_DIV1
+#define STM32_ADC34PRES STM32_ADC34PRES_DIV1
+#define STM32_USART1SW STM32_USART1SW_PCLK
+#define STM32_USART2SW STM32_USART2SW_PCLK
+#define STM32_USART3SW STM32_USART3SW_PCLK
+#define STM32_UART4SW STM32_UART4SW_PCLK
+#define STM32_UART5SW STM32_UART5SW_PCLK
+#define STM32_I2C1SW STM32_I2C1SW_SYSCLK
+#define STM32_I2C2SW STM32_I2C2SW_SYSCLK
+#define STM32_TIM1SW STM32_TIM1SW_PCLK2
+#define STM32_TIM8SW STM32_TIM8SW_PCLK2
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+#define STM32_USB_CLOCK_REQUIRED TRUE
+#define STM32_USBPRE STM32_USBPRE_DIV1P5
+
+#undef STM32_HSE_BYPASS
+// #error "oh no"
+// #endif
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_DUAL_MODE FALSE
+#define STM32_ADC_COMPACT_SAMPLES FALSE
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_USE_ADC2 FALSE
+#define STM32_ADC_USE_ADC3 FALSE
+#define STM32_ADC_USE_ADC4 FALSE
+#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
+#define STM32_ADC_ADC2_DMA_STREAM STM32_DMA_STREAM_ID(2, 1)
+#define STM32_ADC_ADC3_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
+#define STM32_ADC_ADC4_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_ADC2_DMA_PRIORITY 2
+#define STM32_ADC_ADC3_DMA_PRIORITY 2
+#define STM32_ADC_ADC4_DMA_PRIORITY 2
+#define STM32_ADC_ADC12_IRQ_PRIORITY 5
+#define STM32_ADC_ADC3_IRQ_PRIORITY 5
+#define STM32_ADC_ADC4_IRQ_PRIORITY 5
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC4_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC12_CLOCK_MODE ADC_CCR_CKMODE_AHB_DIV1
+#define STM32_ADC_ADC34_CLOCK_MODE ADC_CCR_CKMODE_AHB_DIV1
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1 FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY 11
+
+/*
+ * DAC driver system settings.
+ */
+#define STM32_DAC_DUAL_MODE FALSE
+#define STM32_DAC_USE_DAC1_CH1 TRUE
+#define STM32_DAC_USE_DAC1_CH2 TRUE
+#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY 10
+#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY 10
+#define STM32_DAC_DAC1_CH1_DMA_PRIORITY 2
+#define STM32_DAC_DAC1_CH2_DMA_PRIORITY 2
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI20_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI21_22_29_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI30_32_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI33_IRQ_PRIORITY 6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM6 TRUE
+#define STM32_GPT_USE_TIM7 TRUE
+#define STM32_GPT_USE_TIM8 TRUE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM6_IRQ_PRIORITY 7
+#define STM32_GPT_TIM7_IRQ_PRIORITY 7
+#define STM32_GPT_TIM8_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 TRUE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 10
+#define STM32_I2C_I2C2_IRQ_PRIORITY 10
+#define STM32_I2C_USE_DMA FALSE
+#define STM32_I2C_I2C1_DMA_PRIORITY 1
+#define STM32_I2C_I2C2_DMA_PRIORITY 1
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM8 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM8_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 TRUE
+#define STM32_PWM_USE_TIM3 TRUE
+#define STM32_PWM_USE_TIM4 FALSE
+#define STM32_PWM_USE_TIM8 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM8_IRQ_PRIORITY 7
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 TRUE
+#define STM32_SERIAL_USE_USART3 FALSE
+#define STM32_SERIAL_USE_UART4 FALSE
+#define STM32_SERIAL_USE_UART5 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART3_PRIORITY 12
+#define STM32_SERIAL_UART4_PRIORITY 12
+#define STM32_SERIAL_UART5_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USE_USART3 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART3_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART3_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
+
+/*
+ * WDG driver system settings.
+ */
+#define STM32_WDG_USE_IWDG FALSE
+
+#endif /* MCUCONF_H */
diff --git a/keyboards/hadron/ver3/rules.mk b/keyboards/hadron/ver3/rules.mk
new file mode 100644
index 000000000..8375efdd3
--- /dev/null
+++ b/keyboards/hadron/ver3/rules.mk
@@ -0,0 +1,57 @@
+# project specific files
+SRC = matrix.c
+
+## chip/board settings
+# - the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F3xx
+
+# Linker script to use
+# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F303xC
+
+# Startup code to use
+# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f3xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+BOARD = GENERIC_STM32_F303XC
+
+# Cortex version
+MCU = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+
+USE_FPU = yes
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+# comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
+## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover
+CUSTOM_MATRIX = yes # Custom matrix file
+AUDIO_ENABLE = yes
+RGBLIGHT_ENABLE = no
+HAPTIC_ENABLE = DRV2605L
+QWIIC_ENABLE += MICRO_OLED
+# SERIAL_LINK_ENABLE = yes
diff --git a/keyboards/hadron/ver3/ver3.c b/keyboards/hadron/ver3/ver3.c
new file mode 100644
index 000000000..5e5e3e009
--- /dev/null
+++ b/keyboards/hadron/ver3/ver3.c
@@ -0,0 +1,196 @@
+/* Copyright 2018 Jack Humbert <jack.humb@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "ver3.h"
+#include "qwiic.h"
+#include "action_layer.h"
+#include "matrix.h"
+#include "DRV2605L.h"
+
+#ifdef QWIIC_MICRO_OLED_ENABLE
+
+/* screen off after this many milliseconds */
+#include "timer.h"
+#define ScreenOffInterval 60000 /* milliseconds */
+static uint16_t last_flush;
+
+volatile uint8_t led_numlock = false;
+volatile uint8_t led_capslock = false;
+volatile uint8_t led_scrolllock = false;
+
+static uint8_t layer;
+static bool queue_for_send = false;
+static uint8_t encoder_value = 32;
+
+__attribute__ ((weak))
+void draw_ui(void) {
+ clear_buffer();
+ last_flush = timer_read();
+ send_command(DISPLAYON);
+
+/* Layer indicator is 41 x 10 pixels */
+#define LAYER_INDICATOR_X 0
+#define LAYER_INDICATOR_Y 0
+
+ draw_string(LAYER_INDICATOR_X + 1, LAYER_INDICATOR_Y + 2, "LAYER", PIXEL_ON, NORM, 0);
+ draw_rect_filled_soft(LAYER_INDICATOR_X + 32, LAYER_INDICATOR_Y + 1, 9, 9, PIXEL_ON, NORM);
+ draw_char(LAYER_INDICATOR_X + 34, LAYER_INDICATOR_Y + 2, layer + 0x30, PIXEL_ON, XOR, 0);
+
+/* Matrix display is 19 x 9 pixels */
+#define MATRIX_DISPLAY_X 0
+#define MATRIX_DISPLAY_Y 18
+
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ for (uint8_t y = 0; y < MATRIX_COLS; y++) {
+ draw_pixel(MATRIX_DISPLAY_X + y + 2, MATRIX_DISPLAY_Y + x + 2,(matrix_get_row(x) & (1 << y)) > 0, NORM);
+ }
+ }
+ draw_rect_soft(MATRIX_DISPLAY_X, MATRIX_DISPLAY_Y, 19, 9, PIXEL_ON, NORM);
+ /* hadron oled location on thumbnail */
+ draw_rect_filled_soft(MATRIX_DISPLAY_X + 14, MATRIX_DISPLAY_Y + 2, 3, 1, PIXEL_ON, NORM);
+/*
+ draw_rect_soft(0, 13, 64, 6, PIXEL_ON, NORM);
+ draw_line_vert(encoder_value, 13, 6, PIXEL_ON, NORM);
+
+*/
+
+/* Mod display is 41 x 16 pixels */
+#define MOD_DISPLAY_X 30
+#define MOD_DISPLAY_Y 18
+
+ uint8_t mods = get_mods();
+ if (mods & MOD_LSFT) {
+ draw_rect_filled_soft(MOD_DISPLAY_X + 0, MOD_DISPLAY_Y, 5 + (1 * 6), 11, PIXEL_ON, NORM);
+ draw_string(MOD_DISPLAY_X + 3, MOD_DISPLAY_Y + 2, "S", PIXEL_OFF, NORM, 0);
+ } else {
+ draw_string(MOD_DISPLAY_X + 3, MOD_DISPLAY_Y + 2, "S", PIXEL_ON, NORM, 0);
+ }
+ if (mods & MOD_LCTL) {
+ draw_rect_filled_soft(MOD_DISPLAY_X + 10, MOD_DISPLAY_Y, 5 + (1 * 6), 11, PIXEL_ON, NORM);
+ draw_string(MOD_DISPLAY_X + 13, MOD_DISPLAY_Y + 2, "C", PIXEL_OFF, NORM, 0);
+ } else {
+ draw_string(MOD_DISPLAY_X + 13, MOD_DISPLAY_Y + 2, "C", PIXEL_ON, NORM, 0);
+ }
+ if (mods & MOD_LALT) {
+ draw_rect_filled_soft(MOD_DISPLAY_X + 20, MOD_DISPLAY_Y, 5 + (1 * 6), 11, PIXEL_ON, NORM);
+ draw_string(MOD_DISPLAY_X + 23, MOD_DISPLAY_Y + 2, "A", PIXEL_OFF, NORM, 0);
+ } else {
+ draw_string(MOD_DISPLAY_X + 23, MOD_DISPLAY_Y + 2, "A", PIXEL_ON, NORM, 0);
+ }
+ if (mods & MOD_LGUI) {
+ draw_rect_filled_soft(MOD_DISPLAY_X + 30, MOD_DISPLAY_Y, 5 + (1 * 6), 11, PIXEL_ON, NORM);
+ draw_string(MOD_DISPLAY_X + 33, MOD_DISPLAY_Y + 2, "G", PIXEL_OFF, NORM, 0);
+ } else {
+ draw_string(MOD_DISPLAY_X + 33, MOD_DISPLAY_Y + 2, "G", PIXEL_ON, NORM, 0);
+ }
+
+/* Lock display is 23 x 32 */
+#define LOCK_DISPLAY_X 100
+#define LOCK_DISPLAY_Y 0
+
+ if (led_numlock == true) {
+ draw_rect_filled_soft(LOCK_DISPLAY_X, LOCK_DISPLAY_Y, 5 + (3 * 6), 9, PIXEL_ON, NORM);
+ draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 1, "NUM", PIXEL_OFF, NORM, 0);
+ } else if (led_numlock == false) {
+ draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 1, "NUM", PIXEL_ON, NORM, 0);
+ }
+ if (led_capslock == true) {
+ draw_rect_filled_soft(LOCK_DISPLAY_X + 0, LOCK_DISPLAY_Y + 11, 5 + (3 * 6), 9, PIXEL_ON, NORM);
+ draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 11 +1, "CAP", PIXEL_OFF, NORM, 0);
+ } else if (led_capslock == false) {
+ draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 11 +1, "CAP", PIXEL_ON, NORM, 0);
+ }
+
+ if (led_scrolllock == true) {
+ draw_rect_filled_soft(LOCK_DISPLAY_X + 0, LOCK_DISPLAY_Y + 22, 5 + (3 * 6), 9, PIXEL_ON, NORM);
+ draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 22 +1, "SCR", PIXEL_OFF, NORM, 0);
+ } else if (led_scrolllock == false) {
+ draw_string(LOCK_DISPLAY_X + 3, LOCK_DISPLAY_Y + 22 +1, "SCR", PIXEL_ON, NORM, 0);
+ }
+ send_buffer();
+}
+
+void read_host_led_state(void) {
+ uint8_t leds = host_keyboard_leds();
+ if (leds & (1 << USB_LED_NUM_LOCK)) {
+ if (led_numlock == false){
+ led_numlock = true;}
+ } else {
+ if (led_numlock == true){
+ led_numlock = false;}
+ }
+ if (leds & (1 << USB_LED_CAPS_LOCK)) {
+ if (led_capslock == false){
+ led_capslock = true;}
+ } else {
+ if (led_capslock == true){
+ led_capslock = false;}
+ }
+ if (leds & (1 << USB_LED_SCROLL_LOCK)) {
+ if (led_scrolllock == false){
+ led_scrolllock = true;}
+ } else {
+ if (led_scrolllock == true){
+ led_scrolllock = false;}
+ }
+}
+
+uint32_t layer_state_set_kb(uint32_t state) {
+ state = layer_state_set_user(state);
+ layer = biton32(state);
+ queue_for_send = true;
+ return state;
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ queue_for_send = true;
+ return process_record_user(keycode, record);
+}
+
+void encoder_update_kb(uint8_t index, bool clockwise) {
+ encoder_value = (encoder_value + (clockwise ? 1 : -1)) % 64;
+ queue_for_send = true;
+}
+
+#endif
+
+void matrix_init_kb(void) {
+#ifdef DRV2605L
+ DRV_init();
+#endif
+ queue_for_send = true;
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+
+if (queue_for_send) {
+ #ifdef DRV2605L
+ DRV_EFFECT play_eff = strong_click;
+ DRV_pulse(play_eff);
+ #endif
+#ifdef QWIIC_MICRO_OLED_ENABLE
+ read_host_led_state();
+ draw_ui();
+#endif
+ queue_for_send = false;
+ }
+#ifdef QWIIC_MICRO_OLED_ENABLE
+ if (timer_elapsed(last_flush) > ScreenOffInterval) {
+ send_command(DISPLAYOFF); /* 0xAE */
+ }
+#endif
+ matrix_scan_user();
+}
diff --git a/keyboards/hadron/ver3/ver3.h b/keyboards/hadron/ver3/ver3.h
new file mode 100644
index 000000000..516f7b9a1
--- /dev/null
+++ b/keyboards/hadron/ver3/ver3.h
@@ -0,0 +1,21 @@
+/* Copyright 2018 Jack Humbert <jack.humb@gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef VER3_H
+#define VER3_H
+
+#include "hadron.h"
+
+#endif \ No newline at end of file
diff --git a/keyboards/handwired/108key_trackpoint/108key_trackpoint.c b/keyboards/handwired/108key_trackpoint/108key_trackpoint.c
new file mode 100644
index 000000000..3834f8961
--- /dev/null
+++ b/keyboards/handwired/108key_trackpoint/108key_trackpoint.c
@@ -0,0 +1 @@
+#include "108key_trackpoint.h"
diff --git a/keyboards/handwired/108key_trackpoint/108key_trackpoint.h b/keyboards/handwired/108key_trackpoint/108key_trackpoint.h
new file mode 100644
index 000000000..100f4cb93
--- /dev/null
+++ b/keyboards/handwired/108key_trackpoint/108key_trackpoint.h
@@ -0,0 +1,23 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K000, K002, K003, K004, K005, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, K019, K020, K021, K022, \
+ \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, K217, K219, K220, K221, K222, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, K319, K320, K321, \
+ K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K419, K420, K421, K422, \
+ K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511, K513, K516, K519, K520, K521, \
+ K600, K601, K603, K606, K610, K611, K613, K614, K615, K616, K617, K619, K621, K622, \
+ K705, K706, K707 \
+) { \
+ { K000, KC_NO, K002, K003, K004, K005, KC_NO, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, KC_NO, K019, K020, K021, K022 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO, K214, K215, K216, K217, KC_NO, K219, K220, K221, K222 }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, KC_NO, K319, K320, K321, KC_NO }, \
+ { K400, KC_NO, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K419, K420, K421, K422 }, \
+ { KC_NO, K501, K502, K503, K504, K505, K506, K507, K508, K509, K510, K511, KC_NO, K513, KC_NO, KC_NO, K516, KC_NO, KC_NO, K519, K520, K521, KC_NO }, \
+ { K600, K601, KC_NO, K603, KC_NO, KC_NO, K606, KC_NO, KC_NO, KC_NO, K610, K611, KC_NO, K613, K614, K615, K616, K617, KC_NO, K619, KC_NO, K621, K622 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K705, K706, K707, KC_NO, KC_NO, KC_NO, 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/handwired/108key_trackpoint/config.h b/keyboards/handwired/108key_trackpoint/config.h
new file mode 100644
index 000000000..7a63fe262
--- /dev/null
+++ b/keyboards/handwired/108key_trackpoint/config.h
@@ -0,0 +1,73 @@
+#pragma once
+
+#include "config_common.h"
+
+#define VENDOR_ID 0x1234
+#define PRODUCT_ID 0x5678
+#define DEVICE_VER 0x0001
+#define MANUFACTURER QMK
+#define PRODUCT 108Key-Trackpoint
+#define DESCRIPTION A 108 key ANSI keyboard with a trackpoint and three mouse buttons
+
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 23
+
+#ifdef PS2_USE_USART
+ #define PS2_CLOCK_PORT PORTD
+ #define PS2_CLOCK_PIN PIND
+ #define PS2_CLOCK_DDR DDRD
+ #define PS2_CLOCK_BIT 5
+ #define PS2_DATA_PORT PORTD
+ #define PS2_DATA_PIN PIND
+ #define PS2_DATA_DDR DDRD
+ #define PS2_DATA_BIT 2
+
+ /* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */
+ /* set DDR of CLOCK as input to be slave */
+ #define PS2_USART_INIT() do { \
+ PS2_CLOCK_DDR &= ~(1<<PS2_CLOCK_BIT); \
+ PS2_DATA_DDR &= ~(1<<PS2_DATA_BIT); \
+ UCSR1C = ((1 << UMSEL10) | \
+ (3 << UPM10) | \
+ (0 << USBS1) | \
+ (3 << UCSZ10) | \
+ (0 << UCPOL1)); \
+ UCSR1A = 0; \
+ UBRR1H = 0; \
+ UBRR1L = 0; \
+ } while (0)
+ #define PS2_USART_RX_INT_ON() do { \
+ UCSR1B = ((1 << RXCIE1) | \
+ (1 << RXEN1)); \
+ } while (0)
+ #define PS2_USART_RX_POLL_ON() do { \
+ UCSR1B = (1 << RXEN1); \
+ } while (0)
+ #define PS2_USART_OFF() do { \
+ UCSR1C = 0; \
+ UCSR1B &= ~((1 << RXEN1) | \
+ (1 << TXEN1)); \
+ } while (0)
+ #define PS2_USART_RX_READY (UCSR1A & (1<<RXC1))
+ #define PS2_USART_RX_DATA UDR1
+ #define PS2_USART_ERROR (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
+ #define PS2_USART_RX_VECT USART1_RX_vect
+#endif
+
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4, B5, B6, B7 }
+#define MATRIX_COL_PINS { C0, C1, C2, C3, C4, C5, C6, C7, D0, D1, F0, D3, D4, F1, D6, D7, E0, E1, E2, E3, E4, E5, E6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define DEBOUNCING_DELAY 5
+
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for commkand */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
diff --git a/keyboards/handwired/108key_trackpoint/info.json b/keyboards/handwired/108key_trackpoint/info.json
new file mode 100644
index 000000000..bd221892b
--- /dev/null
+++ b/keyboards/handwired/108key_trackpoint/info.json
@@ -0,0 +1,125 @@
+{
+ "keyboard_name": "108 Key with TrackPoint",
+ "url": "",
+ "maintainer": "mkem114",
+ "width": 22.5,
+ "height": 7.5,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 111,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"Mute", "x":18.5, "y":0},
+ {"label":"Previous", "x":19.5, "y":0},
+ {"label":"Next", "x":20.5, "y":0},
+ {"label":"Play", "x":21.5, "y":0},
+ {"label":"`", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"-", "x":11, "y":1.5},
+ {"label":"=", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"Page Up", "x":17.25, "y":1.5},
+ {"label":"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":"Page Down", "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":"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":"+", "x":21.5, "y":2.5, "h":2},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":",", "x":9.25, "y":4.5},
+ {"label":".", "x":10.25, "y":4.5},
+ {"label":"/", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"1", "x":18.5, "y":4.5},
+ {"label":"2", "x":19.5, "y":4.5},
+ {"label":"3", "x":20.5, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"LGUI", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"Alt", "x":10, "y":5.5, "w":1.25},
+ {"label":"RGUI", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5},
+ {"label":"0", "x":18.5, "y":5.5, "w":2},
+ {"label":".", "x":20.5, "y":5.5},
+ {"label":"Enter", "x":21.5, "y":4.5, "h":2},
+ {"label":"Mouse1", "x":5.25, "y":6.5},
+ {"label":"Mouse3", "x":6.25, "y":6.5},
+ {"label":"Mouse2", "x":7.25, "y":6.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/108key_trackpoint/keymaps/default/keymap.c b/keyboards/handwired/108key_trackpoint/keymaps/default/keymap.c
new file mode 100644
index 000000000..3345aca16
--- /dev/null
+++ b/keyboards/handwired/108key_trackpoint/keymaps/default/keymap.c
@@ -0,0 +1,14 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT (
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_APP, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT,
+ KC_BTN1, KC_BTN3, KC_BTN2
+ )
+};
diff --git a/keyboards/handwired/108key_trackpoint/keymaps/dvorak/keymap.c b/keyboards/handwired/108key_trackpoint/keymaps/dvorak/keymap.c
new file mode 100644
index 000000000..0181ad9f7
--- /dev/null
+++ b/keyboards/handwired/108key_trackpoint/keymaps/dvorak/keymap.c
@@ -0,0 +1,14 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT (
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9,
+ KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_LSFT, KC_UP, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_APP, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT,
+ KC_BTN1, KC_BTN3, KC_BTN2
+ )
+};
diff --git a/keyboards/handwired/108key_trackpoint/keymaps/dvorak_media/keymap.c b/keyboards/handwired/108key_trackpoint/keymaps/dvorak_media/keymap.c
new file mode 100644
index 000000000..d6223c496
--- /dev/null
+++ b/keyboards/handwired/108key_trackpoint/keymaps/dvorak_media/keymap.c
@@ -0,0 +1,14 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT (
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MNXT,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9,
+ KC_MPLY, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_LSFT, KC_UP, KC_P1, KC_P2, KC_P3,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI, KC_APP, KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT,
+ KC_BTN1, KC_BTN3, KC_BTN2
+ )
+};
diff --git a/keyboards/handwired/108key_trackpoint/readme.md b/keyboards/handwired/108key_trackpoint/readme.md
new file mode 100644
index 000000000..468fdf94d
--- /dev/null
+++ b/keyboards/handwired/108key_trackpoint/readme.md
@@ -0,0 +1,23 @@
+# 108 Key with TrackPoint
+
+![wiring](https://raw.githubusercontent.com/qmk/qmk.fm/gh-pages/keyboards/handwired/108key_trackpoint/wiring.JPG)
+
+This is based off the handwired/trackpoint keyboard and generated code from [Keyboard Firmware Builder](https://kbfirmware.com/).
+
+Keyboard Maintainer: [mkem114](https://github.com/mkem114)
+Hardware Supported (tested): Teensy++ 2.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/108key_trackpoint: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).
+
+You may have to modify the source code to suit 104 keys, RGB back-lights, different micro-controllers, or big ass enter.
+
+There are three keymaps:
+* qwerty with the four extra keys being: mute, media prev, media next, and media play
+* dvorak with the four extra keys being: mute, media prev, media next, and media play
+* dvorak_media with the caps lock being media play and the four extra keys being: mute, volume down, volume up, and media next
+
+To figure out how to wire your specific TrackPoint have a look out: [How to integrate a trackpoint in a mechanical keyboard](https://github.com/alonswartz/trackpoint).
diff --git a/keyboards/handwired/108key_trackpoint/rules.mk b/keyboards/handwired/108key_trackpoint/rules.mk
new file mode 100644
index 000000000..84ec52eee
--- /dev/null
+++ b/keyboards/handwired/108key_trackpoint/rules.mk
@@ -0,0 +1,82 @@
+# MCU name
+MCU = at90usb1286
+#MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = halfkay
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+PS2_MOUSE_ENABLE = yes
+PS2_USE_USART = yes
diff --git a/keyboards/handwired/CMD60/CMD60.c b/keyboards/handwired/CMD60/CMD60.c
deleted file mode 100644
index 799848e34..000000000
--- a/keyboards/handwired/CMD60/CMD60.c
+++ /dev/null
@@ -1,8 +0,0 @@
-#include "CMD60.h"
-
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
-
- matrix_init_user();
-}
diff --git a/keyboards/handwired/CMD60/CMD60.h b/keyboards/handwired/CMD60/CMD60.h
deleted file mode 100644
index f90871fc7..000000000
--- a/keyboards/handwired/CMD60/CMD60.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef CMD60_H
-#define CMD60_H
-
-#include "quantum.h"
-
-#define KEYMAP( \
- 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, 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, KC_NO,K4A, K4B, K4C, K4D } \
-}
-
-#endif \ No newline at end of file
diff --git a/keyboards/handwired/CMD60/README.md b/keyboards/handwired/CMD60/README.md
deleted file mode 100644
index 8b0dd109f..000000000
--- a/keyboards/handwired/CMD60/README.md
+++ /dev/null
@@ -1,35 +0,0 @@
-CMD60 keyboard firmware
-======================
-
-##CMD60
-
-This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work
-with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2
-and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to
-achieve a higher level of productivity if you take the time to learn its function layers.
-
-## Quantum MK Firmware
-
-For the full Quantum feature list, see [the parent readme.md](/docs/README.md).
-
-## Building
-
-Download or clone the whole firmware and navigate to the keyboards/handwired/CMD60 folder.
-Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use
-the Teensy Loader to program your .hex file.
-
-Depending on which keymap you would like to use, you will have to compile slightly differently.
-
-### Default
-
-To build with the default keymap, simply run `make`.
-
-### Other Keymaps
-
-To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
-
-```
-$ make keymap=[default|jack|<name>]
-```
-
-Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/handwired/CMD60/keymaps/default/keymap.c b/keyboards/handwired/CMD60/keymaps/default/keymap.c
deleted file mode 100644
index 9f9cbcd66..000000000
--- a/keyboards/handwired/CMD60/keymaps/default/keymap.c
+++ /dev/null
@@ -1,66 +0,0 @@
-#include "CMD60.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = KEYMAP( /* CMD60 - QWERTY */
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
- LT(3, KC_ENT), 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, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_NO, KC_RSFT, \
- KC_LCTL, KC_LGUI, KC_LALT, LT(2, KC_SPC), MO(3), MO(4), MO(5), TG(1) \
- ),
- [1] = KEYMAP( /* CMD60 - GameMode */
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
- KC_LSFT, 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_RSFT, \
- KC_TRNS, KC_NO, KC_TRNS, KC_SPC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
- ),
- [2] = KEYMAP( /* CMD60 - Arrows */
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
- KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSPC, KC_UP, KC_DEL, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, \
- KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_NO, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
- ),
- [3] = KEYMAP( /* CMD60 - Functions */
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
- KC_AUDIO_MUTE, KC_BSPC, KC_PGUP, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDN, KC_TRNS, KC_PAUSE, KC_SLCK, KC_PSCREEN, \
- KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_INSERT, KC_NO, 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_NO, KC_NO, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
- ),
- [4] = KEYMAP( /* CMD60 - Mouse */
- KC_SYSTEM_SLEEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_TRNS, KC_NO, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_WH_UP, KC_MS_BTN3, KC_MS_WH_DOWN, KC_NO, KC_NO, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
- ),
- [5] = KEYMAP( /* CMD60 - Media */
- KC_SYSTEM_WAKE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_AUDIO_MUTE, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MEDIA_PREV_TRACK, KC_MEDIA_NEXT_TRACK, KC_MEDIA_PLAY_PAUSE, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WWW_BACK, KC_WWW_FORWARD, KC_NO, KC_NO, KC_WWW_REFRESH, \
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- 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/handwired/MS_sculpt_mobile/MS_sculpt_mobile.c b/keyboards/handwired/MS_sculpt_mobile/MS_sculpt_mobile.c
deleted file mode 100644
index 64982fb62..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/MS_sculpt_mobile.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "MS_sculpt_mobile.h"
diff --git a/keyboards/handwired/MS_sculpt_mobile/MS_sculpt_mobile.h b/keyboards/handwired/MS_sculpt_mobile/MS_sculpt_mobile.h
deleted file mode 100644
index 1583dea6e..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/MS_sculpt_mobile.h
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef MICROSOFT_SCULPT_MOBILE_H
-#define MICROSOFT_SCULPT_MOBILE_H
-
-#include "quantum.h"
-
-
-#define KEYMAP( \
- k7Q, k6O, k6P, k6Q, k5O, k5P, k5Q, k7A, k7B, k7C, k7D, k7E, k7F, k1O, k1K, k1L, \
- k5A, k5K, k5L, k5M, k5N, k5H, k5I, k2A, k2B, k2C, k2D, k5B, k5C, k5J, k2E, \
- k6R, k6D, k6E, k6F, k7I, k7J, k4A, k4B, k4C, k4D, k3A, k3B, k3C, k3D, \
- k0J, k6A, k6B, k6C, k7H, k1A, k1B, k5D, k5E, k5F, k5G, k1C, k7P, k2G, \
- k2P, k7K, k7L, k7M, k7O, k0A, k0B, k0C, k0D, k0E, k0F, k2L, k6G, k1P,\
- k1Q, k4N, k3O,k6N, k3K, k0R, k1M, k6H, k6I, k6J \
-) \
-{ \
- {k0A, k0B, k0C, k0D, k0E, k0F, KC_NO, KC_NO, KC_NO, k0J, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,KC_NO, KC_NO, k0R},\
- {k1A, k1B, k1C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, k1K, k1L, k1M, KC_NO, k1O, k1P, k1Q, KC_NO},\
- {k2A, k2B, k2C, k2D, k2E, KC_NO, k2G, KC_NO, KC_NO, KC_NO, KC_NO, k2L, KC_NO, KC_NO, KC_NO, k2P, KC_NO, KC_NO},\
- {k3A, k3B, k3C, k3D, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, k3K, KC_NO, KC_NO, KC_NO, k3O, KC_NO, KC_NO, KC_NO},\
- {k4A, k4B, k4C, k4D, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, k4N, KC_NO,KC_NO, KC_NO, KC_NO},\
- {k5A, k5B, k5C, k5D, k5E, k5F, k5G, k5H, k5I, k5J, k5K, k5L, k5M, k5N, k5O, k5P, k5Q, KC_NO },\
- {k6A, k6B, k6C, k6D, k6E, k6F, k6G, k6H, k6I, k6J, KC_NO, KC_NO, KC_NO, k6N, k6O, k6P, k6Q, k6R},\
- {k7A, k7B, k7C, k7D, k7E, k7F, KC_NO, k7H, k7I, k7J, k7K, k7L, k7M, KC_NO, k7O, k7P, k7Q, KC_NO},\
-}
-
-
-#define MATRIX_TESTING_KEYMAP( \
- k0A, k0B, k0C, k0D, k0E, k0F, k0G, k0H, k0I, k0, k0J, k0K, k0L, k0M, k0N, k0O, k0P, k0Q,\
- k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, k1, k1J, k1K, k1L, k1M, k1N, k1O, k1P, k1Q,\
- k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, k2, k2J, k2K, k2L, k2M, k2N, k2O, k2P, k2Q,\
- k3A, k3B, k3C, k3D, k3E, k3F, k3G, k3H, k3I, k3, k3J, k3K, k3L, k3M, k3N, k3O, k3P, k3Q,\
- k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, k4I, k4, k4J, k4K, k4L, k4M, k4N, k4O, k4P, k4Q,\
- k5A, k5B, k5C, k5D, k5E, k5F, k5G, k5H, k5I, k5, k5J, k5K, k5L, k5M, k5N, k5O, k5P, k5Q,\
- k6A, k6B, k6C, k6D, k6E, k6F, k6G, k6H, k6I, k6, k6J, k6K, k6L, k6M, k6N, k6O, k6P, k6Q,\
- k7A, k7B, k7C, k7D, k7E, k7F, k7G, k7H, k7I, k7, k7J, k7K, k7L, k7M, k7N, k7O, k7P, k7Q\
-) \
-{ \
- {k0A, k0B, k0C, k0D, k0E, k0F, k0G, k0H, k0I, k0, k0J, k0K, k0L, k0M, k0N, k0O, k0P, k0Q},\
- {k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, k1, k1J, k1K, k1L, k1M, k1N, k1O, k1P, k1Q},\
- {k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, k2, k2J, k2K, k2L, k2M, k2N, k2O, k2P, k2Q},\
- {k3A, k3B, k3C, k3D, k3E, k3F, k3G, k3H, k3I, k3, k3J, k3K, k3L, k3M, k3N, k3O, k3P, k3Q},\
- {k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, k4I, k4, k4J, k4K, k4L, k4M, k4N, k4O, k4P, k4Q},\
- {k5A, k5B, k5C, k5D, k5E, k5F, k5G, k5H, k5I, k5, k5J, k5K, k5L, k5M, k5N, k5O, k5P, k5Q},\
- {k6A, k6B, k6C, k6D, k6E, k6F, k6G, k6H, k6I, k6, k6J, k6K, k6L, k6M, k6N, k6O, k6P, k6Q},\
- {k7A, k7B, k7C, k7D, k7E, k7F, k7G, k7H, k7I, k7, k7J, k7K, k7L, k7M, k7N, k7O, k7P, k7Q},\
-}
-
-#endif
diff --git a/keyboards/handwired/MS_sculpt_mobile/config.h b/keyboards/handwired/MS_sculpt_mobile/config.h
deleted file mode 100644
index f89514278..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/config.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER Microsoftplus
-#define DESCRIPTION 6000
-
-/* key matrix size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 18
-
-#ifdef ASTAR
-#define PRODUCT sculpt mobile astar
- /*0 1 2 3 4 5 6 7 8 */
-#define MATRIX_ROW_PINS {D7, C6, D4, D0, D1, D3, D2, E2}
-/* A B C D E F G H I J K L M N O P Q R */
-#define MATRIX_COL_PINS {B4, B5, E6, B7, B6, D6, C7, F7, F6, F4,F5, F1,F0, D5, B0, B1, B2, B3}
-
-#else
-#define PRODUCT sculpt mobile teensypp
-/* 0 1 2 3 4 5 6 7 */
-#define MATRIX_ROW_PINS { F7,F6,F4,F5,F3,F2,F1,F0}
-/* A B C D E F G H I J K L M N O P Q R */
-#define MATRIX_COL_PINS { B7, D0, D1, D2, D3, D4, D5, D6, D7, E0,E1,C1, C0, C3, C2, C5, C4,C7}
-#define UNUSED_PINS { B6,B5,B4,B3,B2,B1,B0 }
-
-
-#endif
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION ROW2COL
-
-/* 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
-
-
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
-/* key combination for magic key command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#define PREVENT_STUCK_MODIFIERS
-
-#endif
diff --git a/keyboards/handwired/MS_sculpt_mobile/keymaps/default/config.h b/keyboards/handwired/MS_sculpt_mobile/keymaps/default/config.h
deleted file mode 100644
index 4f3a425b7..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/keymaps/default/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../../MS_sculpt_mobile/config.h"
-
-// place overrides here
-
-#endif
diff --git a/keyboards/handwired/MS_sculpt_mobile/keymaps/default/keymap.c b/keyboards/handwired/MS_sculpt_mobile/keymaps/default/keymap.c
deleted file mode 100644
index a8802c99a..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/keymaps/default/keymap.c
+++ /dev/null
@@ -1,64 +0,0 @@
-#include "../../MS_sculpt_mobile.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/*
-*
-* |ESC | F1 | F2 | F3 | F4 | F5 | F6 | f7 | F8 | F9 | F10| F11| F12|Vol-|Vol+|Mute|
-* -------------------------------------------------------------------------------'
-* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace| Del |
-* --------------------------------------------------------------------------
-* | tab | q | w | e | r | t | y | u | i | o | p | [ | ] | \ | |
-* -------------------------------------------------------------------------------'
-* | caps | a | s | d | f | g | h | j | k | l | ; | ' | enter |PgUp|
-* --------------------------------------------------------------------------------
-* |Lsft | z | x | c | v | b | n | m | , | . | / | Rsft| Up| PgDn|
-* ---------------------------------------------------------------------------------
-* |Lctl |Lgui |Lalt | Space |Ralt | FN | Rctl |Left|Down|Rght|
-* ---------------------------------------------------------------------------------
-*/
-
-[0] = KEYMAP( \
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLD, KC_VOLU, KC_MUTE,\
- 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_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_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_SPACE, KC_RALT, RSFT(KC_1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
-)
-
-};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
-
-void matrix_init_user(void) {
-
-}
-
-void matrix_scan_user(void) {
-
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-void led_set_user(uint8_t usb_led) {
-
-}
diff --git a/keyboards/handwired/MS_sculpt_mobile/keymaps/default/readme.md b/keyboards/handwired/MS_sculpt_mobile/keymaps/default/readme.md
deleted file mode 100644
index e67ddc6fe..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/keymaps/default/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# The default keymap for microsoft-sculpt-mobile
diff --git a/keyboards/handwired/MS_sculpt_mobile/keymaps/default/rules.mk b/keyboards/handwired/MS_sculpt_mobile/keymaps/default/rules.mk
deleted file mode 100644
index b3c01678f..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/keymaps/default/rules.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/config.h b/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/config.h
deleted file mode 100644
index 5c04f647c..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/config.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../../MS_sculpt_mobile/config.h"
-
-#define USE_BABLPASTE
-
-// Expect to get errors if you comment a feature out and leave it in your keymap.
-
-#ifdef USE_BABLPASTE
-//define BabblePaste maps
-// Windows.
-#define MAC_MODE 0
-#define MS_MODE 1
-//aka gnome+KDE
-//#define LINUX_MODE 2
-//#define EMACS_MODE 3
-#define VI_MODE 3
-// Readline and tmux
-#define READMUX_MODE 2
-//#define WORDSTAR_MODE 5
-#endif
-
-// Uncomment if you need more free flash space
-
-// This removes everything but cursor movement
-//#define BABL_MOVEMENTONLY
-// and this just removes browser shortcuts
-//#define BABL_NOBROWSER
-
-// place overrides here
-#endif
diff --git a/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/keymap.c b/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/keymap.c
deleted file mode 100644
index c9b16e75e..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/keymap.c
+++ /dev/null
@@ -1,272 +0,0 @@
-#include "../../../MS_sculpt_mobile/babblePaste.h"
-#include "../../MS_sculpt_mobile.h"
-#include "action_layer.h"
-#include "action_util.h"
-
-#ifdef AUDIO_ENABLE
- #include "audio.h"
-#endif
-
-#define _QWR 0
-#define _CDH 2
-#define _SYM 3
-#define _MOV 4
-#define _TRAN 5
-
-
-enum layer_keycodes {
-QWR,
-CDH,
-SYM,
-MOV,
-NUM,
-TRAN
-};
-
-
-// Shorter spacing
-#define XXXX KC_NO
-#define ____ KC_TRNS
-
-// Custom macros
-
-/* Fn Keys */
-#define TT_SYM MO(_SYM)
-#define TT_MOV KC_FN2
-#define TT_NUM MO(_NUM)
-#define SSFT ACTION_MODS_ONESHOT(MOD_LSFT)
-
-enum macro_keycodes {
-DHPASTE=1,
-VIBRK,
-};
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* QWERTY
-*
-* |ESC | F1 | F2 | F3 | F4 | F5 | F6 | f7 | F8 | F9 | F10| F11| F12|Vol-|Vol+|_CDH|
-* -------------------------------------------------------------------------------'
-* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace| Del|
-* ---------------------------------------------------------------------------
-* | tab | q | w | e | r | t | y | u | i | o | p | [ | ] | \ | |
-* -------------------------------------------------------------------------------'
-* |Bak/Mov| a | s | d | f | g | h | j | k | l | ; | ' | enter |PgUp|
-* --------------------------------------------------------------------------------
-* |Lsft | z | x | c | v | b | n | m | , | . | / | Rsft| Up| PgDn|
-* ---------------------------------------------------------------------------------
-* |Lctl |Lgui |Lalt | Space/Sym | GUI | Sym | Rctl |Left|Down|Rght|
-* ---------------------------------------------------------------------------------
-*/
-
-[_QWR] = KEYMAP( \
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_VOLD, KC_VOLU, CDH,\
- 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_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,\
- TT_MOV, KC_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_FN1, KC_RGUI,TT_SYM,KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
-),
-
-[_CDH] = KEYMAP (\
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, QWR, \
- KC_ESC, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
- KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, ____, ____, ____,\
- TT_MOV, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_2,\
- KC_LSFT, KC_Z, KC_X, KC_C, M(DHPASTE), KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, ____, KC_1,\
- ____, ____, ____ , KC_FN1, ____, ____, ____, ____, ____, ____
-
-),
-
-
-/* SYM
-*
-* |ESC | F1 | F2 | F3 | F4 | F5 | F6 | f7 | F8 | F9 | F10| F11| F12|Vol-|Vol+|_CDH|
-* -------------------------------------------------------------------------------'
-* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace|Del |
-* --------------------------------------------------------------------------
-* | ESC: | ^ | { | } | @ | % | | [ | ( | ) | _ | [ | ] | \ | |
-* -------------------------------------------------------------------------------'
-* |Bak/Mov| ! | # | 0 | = | { | } | - | 1 | + | ] | ` | enter |PgUp|
-* --------------------------------------------------------------------------------
-* |Lsft | ; | ~ | : | ~ | "|"| $ | * | | . | / | Rsft| Up| PgDn|
-* ---------------------------------------------------------------------------------
-* |Lctl |Lgui |Lalt | Space/Sym | GUI | Sym | Rctl |Left|Down|Rght|
-* ---------------------------------------------------------------------------------
-*/
-
-[_SYM] = KEYMAP (\
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
- M(VIBRK), KC_CIRC, KC_LCBR, KC_RCBR,KC_AT, KC_PERC, ____, KC_LBRC,KC_LPRN,KC_RPRN,KC_UNDS, ____, ____, ____,\
- ____, KC_EXLM, KC_HASH, KC_0, KC_EQL, KC_LCBR, KC_RCBR,KC_MINS,KC_1, KC_PLUS,KC_RBRC, KC_GRV, ____, ____,\
- ____, KC_SCLN, KC_TILDE, KC_COLN, KC_TILDE, KC_PIPE, KC_DLR, KC_ASTR, ____, KC_DOT , KC_SLSH, ____, ____, ____,\
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
-),
-/*
-* |ESC | MAC| Win|RdLn| VI | | | | | | | | | | | |
-* -------------------------------------------------------------------------------'
-* | | | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace| Del|
-* ---------------------------------------------------------------------------
-* | tab | | |Find| |pTab |DSOL|DelW| Up |DelW|DEOL| [ | ] | \ | |
-* -------------------------------------------------------------------------------'
-* |Bak/Mov| | | | |nTab |GSOL| <- | Dwn | -> | EOL | ' | enter |PgUp|
-* --------------------------------------------------------------------------------
-* |Lsft |Undo| Cut|Copy|Pste| | | | | | / | Rsft| Up| PgDn|
-* ---------------------------------------------------------------------------------
-* |Lctl |Lgui |Lalt | Space/Sym | GUI | Sym | Rctl |Left|Down|Rght|
-* ---------------------------------------------------------------------------------
-*/
-
-[_MOV] = KEYMAP (\
- ____, B_MAC,B_WIN,B_READ, B_VI, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
- ____, ____, B_PAPP, B_NAPP, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
- ____, B_UNDO, ____, B_BFND, ____, B_PTAB, B_DSOL, B_DLW, B_UP, B_DRW, B_DEOL, ____, ____, ____, \
- ____, B_SELA, B_BRLD, ____, ____, B_NXTB, B_GSOL, B_L1C, B_DOWN, B_R1C,B_GEOL, ____, ____, ____,\
- ____, B_UNDO,B_CUT, B_COPY, B_PAST, B_PAST, ____, ____, ____, ____, ____, ____, ____, ____, \
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
-),
-
-[_TRAN] = KEYMAP (\
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
- ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
-)
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-[1] = ACTION_LAYER_TAP_KEY(_SYM,KC_SPACE),
-[2] = ACTION_LAYER_TAP_KEY(_MOV,KC_BSPC)
-};
-
-#ifdef AUDIO_ENABLE
-
-float tone_startup[][2] = SONG(STARTUP_SOUND);
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float tone_colemak[][2] = SONG(COLEMAK_SOUND);
-#endif
-
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWR:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_qwerty);
- #endif
- layer_off(_CDH);
- }
- return false;
- break;
-
- case CDH:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_colemak);
- #endif
- layer_on(_CDH);
- }
- return false;
- break;
-
- case SYM:
- if (record->event.pressed) {
- layer_on(_SYM);
- } else {
- layer_off(_SYM);
- }
- return false;
- break;
-
- }
- return true;
-
-}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-
-/* If id is in the range of BABL macros, call the babl function */
-/* Any clever remapping with modifiers should happen here e.g. shift bablkey does opposite*/
-#ifdef USE_BABLPASTE
-
- if( id >= BABL_START_NUM && id < (BABL_START_NUM + BABL_NUM_MACROS ) ) {
- if (record->event.pressed) { // is there a case where this isn't desired?
-
- babblePaste ( record, id );
- return MACRO_NONE;
- }
- }
-#endif
-
-
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
-
- /* Colemak mod-dh moves the D key to the qwerty V position
- This hack makes apple-V_position do what I mean */
- case DHPASTE:
- if(keyboard_report->mods & MOD_BIT(KC_LGUI) ) {
- if (record->event.pressed) {
- clear_keyboard_but_mods();
- register_code(KC_V);
- } else {
- unregister_code(KC_V);
- }
- } else {
- if (record->event.pressed) {
- register_code(KC_D);
- } else {
- unregister_code(KC_D);
- }
- }
- break;
-
- case VIBRK: // vi esc:
- if (record->event.pressed) {
- return MACRO( T(ESC),D(LSFT),T(SCLN),U(LSFT), END );
- }
- break;
-
-
-
-
- default:
- return MACRO_NONE;
- }
-
-
-return MACRO_NONE;
-};
-
-
-
-
-
-void matrix_init_user(void) {
-}
-
-void matrix_scan_user(void) {
-
-}
-
-
-void led_set_user(uint8_t usb_led) {
-
-}
-
-
-
-
-
-
diff --git a/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/readme.md b/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/readme.md
deleted file mode 100644
index 96ee0e77a..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/readme.md
+++ /dev/null
@@ -1 +0,0 @@
-# A more programmer oriented keymap for microsoft-sculpt-mobile
diff --git a/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/rules.mk b/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/rules.mk
deleted file mode 100644
index 4f62657b3..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/keymaps/milestogo/rules.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/MS_sculpt_mobile/readme.md b/keyboards/handwired/MS_sculpt_mobile/readme.md
deleted file mode 100644
index d435b449f..000000000
--- a/keyboards/handwired/MS_sculpt_mobile/readme.md
+++ /dev/null
@@ -1,58 +0,0 @@
-
-This is a way to take a Microsoft ergonomic bluetooth keyboard, and make it
-into a hard-wired keyboard running QMK.
-
-The keyboard is known under several different names:
-Mobile Bluetooth 5000, Mobile 6000, Sculpt mobile, and Asus rebranded
-
-I had a stack of them,since they're cheap on ebay, travel well, and are just ergo enough.
-
-The ribbon cable is 1mm pitch, which is hard to hand solder. I bought a cheap set of
-"pitch adapter" boards https://www.amazon.com/Double-Sided-0-4mm-1-0-Adapter-60mmx38mm/dp/B00OK42118
-
-Cut the original ribbon cable sockets off the bluetooth board using a razor, they're hard to desolder.
-They're also allow the cable to be inserted on top or bottom.
-
-If I was going to do it again, I'd make the MCU connection come out the top of the keyboard
-and avoid the wires dangling out the bottom.
-
-As I was debugging the matrix, I started to get random failures. In desparation I tried a second MCU,
-but had the same problems. It turns out that the ribbon cable connections can get worn. Shave a
-half millimeter off the end of the ribbon cable & the errors go away.
-
-My method for discovering the matrix was to set up a KEYMAP macro that included all pins.
-See MATRIX_TESTING_KEYMAP if you need it. Then set up a keymap that has all printable symbols
-in the first 4 rows. test each key & record output. Then switch the printable symbols to the
-bottom 4 rows & repeat. This was enough to show the matrix.
-
-
-The full original keymap for the sculpt is
- A B C D E F G H --->
-0 b n m , . /
-1 g h "
-2 7 8 9 0 Del PgUp
-3 p [ ] \
-4 y u i o
-5 ~ - += j k l ; 5
-6 a s d q w e, Up left
-7 F7 F8 F9 F10 F11 F12 f
-
------> I J K L M N O P Q R
-0 Caps FN
-1 Vol+ mute Rctl vol- pgdn LCTL
-2 Rshift LShift
-3 Ralt LAlt
-4 LGUI
-5 6 bakspc 1 2 3 4 F4 F5 F6
-6 Down right spc F1 F2 F3 tab
-7 r t z x c v enter Esc
-
-This works with 18 cols + 8 rows on a Teensy++, or Arm based Teensy.
-
-The Astar mini has all pins exposed , so you can do 18x8
-If you want a speaker, LEDs &etc, you'll need to free up a pin. I recommend joining columns
-R and L to the same pin.
-
-Building - add ASTAR=1 to the compile line or leave out for teensy2++
-
-
diff --git a/keyboards/handwired/arrow_pad/arrow_pad.h b/keyboards/handwired/arrow_pad/arrow_pad.h
index 62882b9b5..b93fd113f 100644
--- a/keyboards/handwired/arrow_pad/arrow_pad.h
+++ b/keyboards/handwired/arrow_pad/arrow_pad.h
@@ -10,4 +10,34 @@
#include <avr/io.h>
#include <stddef.h>
+// This is the 21-key keypad to 4x6 element matrix mapping
+#define LAYOUT( \
+ KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
+ KM_NUM, KM_FSL, KM_AST, KM_MIN, \
+ KM___7, KM___8, KM___9, KM_EQU, \
+ KM___4, KM___5, KM___6, KM_PLS, \
+ KM___1, KM___2, KM___3, ___ENT, \
+ KM___0, _____0, KM_DOT, KM_ENT \
+) { \
+ { KM_ESC, KM_TAB, KM_BSL, KM_ARR }, \
+ { KM_NUM, KM_FSL, KM_AST, KM_MIN }, \
+ { KM___7, KM___8, KM___9, KM_EQU }, \
+ { KM___4, KM___5, KM___6, KM_PLS }, \
+ { KM___1, KM___2, KM___3, KC_NO }, \
+ { KM___0, KC_NO, KM_DOT, KM_ENT } \
+}
+
+// This is the 21-key keypad to 2x11 element matrix mapping
+#define LAYOUT_pad21( \
+ KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
+ KM_NUM, KM_FSL, KM_AST, KM_MIN, \
+ KM___7, KM___8, KM___9, \
+ KM___4, KM___5, KM___6, KM_PLS, \
+ KM___1, KM___2, KM___3, \
+ KM___0, KM_DOT, KM_ENT \
+) { \
+ { KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
+ { KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
+}
+
#endif
diff --git a/keyboards/handwired/arrow_pad/info.json b/keyboards/handwired/arrow_pad/info.json
new file mode 100644
index 000000000..ad15e8e74
--- /dev/null
+++ b/keyboards/handwired/arrow_pad/info.json
@@ -0,0 +1,62 @@
+{
+ "keyboard_name": "arrow_pad",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"KM_ESC", "x":0, "y":0},
+ {"label":"KM_TAB", "x":1, "y":0},
+ {"label":"KM_BSL", "x":2, "y":0},
+ {"label":"KM_ARR", "x":3, "y":0},
+ {"label":"KM_NUM", "x":0, "y":1},
+ {"label":"KM_FSL", "x":1, "y":1},
+ {"label":"KM_AST", "x":2, "y":1},
+ {"label":"KM_MIN", "x":3, "y":1},
+ {"label":"KM___7", "x":0, "y":2},
+ {"label":"KM___8", "x":1, "y":2},
+ {"label":"KM___9", "x":2, "y":2},
+ {"label":"KM_EQU", "x":3, "y":2},
+ {"label":"KM___4", "x":0, "y":3},
+ {"label":"KM___5", "x":1, "y":3},
+ {"label":"KM___6", "x":2, "y":3},
+ {"label":"KM_PLS", "x":3, "y":3},
+ {"label":"KM___1", "x":0, "y":4},
+ {"label":"KM___2", "x":1, "y":4},
+ {"label":"KM___3", "x":2, "y":4},
+ {"label":"___ENT", "x":3, "y":4},
+ {"label":"KM___0", "x":0, "y":5},
+ {"label":"_____0", "x":1, "y":5},
+ {"label":"KM_DOT", "x":2, "y":5},
+ {"label":"KM_ENT", "x":3, "y":5}
+ ]
+ },
+ "LAYOUT_pad21": {
+ "layout": [
+ {"label":"KM_ESC", "x":0, "y":0},
+ {"label":"KM_TAB", "x":1, "y":0},
+ {"label":"KM_BSL", "x":2, "y":0},
+ {"label":"KM_ARR", "x":3, "y":0},
+ {"label":"KM_NUM", "x":0, "y":1},
+ {"label":"KM_FSL", "x":1, "y":1},
+ {"label":"KM_AST", "x":2, "y":1},
+ {"label":"KM_MIN", "x":3, "y":1},
+ {"label":"KM___7", "x":0, "y":2},
+ {"label":"KM___8", "x":1, "y":2},
+ {"label":"KM___9", "x":2, "y":2},
+ {"label":"KM___4", "x":0, "y":3},
+ {"label":"KM___5", "x":1, "y":3},
+ {"label":"KM___6", "x":2, "y":3},
+ {"label":"KM_PLS", "x":3, "y":2, "h":2},
+ {"label":"KM___1", "x":0, "y":4},
+ {"label":"KM___2", "x":1, "y":4},
+ {"label":"KM___3", "x":2, "y":4},
+ {"label":"KM___0", "x":0, "y":5, "w":2},
+ {"label":"KM_DOT", "x":2, "y":5},
+ {"label":"KM_ENT", "x":3, "y":4, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/arrow_pad/keymaps/default/keymap.c b/keyboards/handwired/arrow_pad/keymaps/default/keymap.c
index b5d304708..dd729c59a 100644
--- a/keyboards/handwired/arrow_pad/keymaps/default/keymap.c
+++ b/keyboards/handwired/arrow_pad/keymaps/default/keymap.c
@@ -1,35 +1,18 @@
-#include "arrow_pad.h"
+#include QMK_KEYBOARD_H
#include "led.h"
-// This is the 21-key keypad to 2x11 element matrix mapping
-#define LAYOUT( \
- KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
- KM_NUM, KM_FSL, KM_AST, KM_MIN, \
- KM___7, KM___8, KM___9, KM_EQU, \
- KM___4, KM___5, KM___6, KM_PLS, \
- KM___1, KM___2, KM___3, ___ENT, \
- KM___0, _____0, KM_DOT, KM_ENT \
-) { \
- { KM_ESC, KM_TAB, KM_BSL, KM_ARR }, \
- { KM_NUM, KM_FSL, KM_AST, KM_MIN }, \
- { KM___7, KM___8, KM___9, KM_EQU }, \
- { KM___4, KM___5, KM___6, KM_PLS }, \
- { KM___1, KM___2, KM___3, KC_NO }, \
- { KM___0, KC_NO, KM_DOT, KM_ENT } \
-}
-
-#define LAYER_BASE 0
-#define LAYER_EDIT 1
-#define LAYER_FUNCTION 2
-
-#define MACRO_COPY_CUT 0
-#define MACRO_SHIFT_CONTROL 1
-#define MACRO_CONTROL_ALT 2
+enum layers {
+ LAYER_BASE,
+ LAYER_EDIT,
+ LAYER_FUNCTION
+};
-#define M_COPY KC_FN5
-#define M_SHFCT KC_FN6
-#define M_CTALT KC_FN7
+enum custom_keycodes {
+ M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT
+ M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL
+ M_CTALT // KC_FN7: MACRO_CONTROL_ALT
+};
#define SC_UNDO LCTL(KC_Z)
#define SC_REDO LCTL(KC_Y)
@@ -42,13 +25,10 @@
#define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4)
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_BASE] = LAYOUT( \
- KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \
+ KC_ESC, KC_TAB, KC_BSLS, MO(2), \
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
KC_P7, KC_P8, KC_P9, KC_PEQL, \
KC_P4, KC_P5, KC_P6, KC_PPLS, \
@@ -57,15 +37,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_EDIT] = LAYOUT( \
KC_ESC, KC_TAB, KC_SPC, _______, \
- KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \
+ TG(1), SC_PSTE, SC_REDO, SC_UNDO, \
KC_HOME, KC_UP, KC_PGUP, KC_LALT, \
KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \
KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \
- KC_BSPC, KC_PENT, KC_DEL, M_SHFCT),
+ KC_BSPC, KC_PENT, KC_DEL, M_SHFCT ),
[LAYER_FUNCTION] = LAYOUT( \
- KC_FN2, KC_FN3, KC_FN4, _______, \
- KC_FN1, _______, _______, _______, \
+ BL_TOGG, BL_INC, BL_DEC, _______, \
+ TG(1), _______, _______, _______, \
_______, _______, _______, _______, \
_______, _______, _______, _______, \
_______, _______, _______, XXXXXXX, \
@@ -74,68 +54,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION),
- [1] = ACTION_LAYER_TOGGLE(LAYER_EDIT),
- [2] = ACTION_BACKLIGHT_TOGGLE(),
- [3] = ACTION_BACKLIGHT_INCREASE(),
- [4] = ACTION_BACKLIGHT_DECREASE(),
- [5] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
- [6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL),
- [7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT),
-
-};
-
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-}
+bool process_record_user(uint16_t keycode, keyrecord_t * record) {
+ // MACRODOWN only works in this function
+ switch (keycode) {
+
+ case M_COPY:
+ 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) {
+ register_code(KC_X);
+ unregister_code(KC_X);
+ }
+ unregister_code(KC_LCTL);
+ }
+ break;
+ case M_SHFCT:
+ if (record->event.pressed) {
+ if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
+ if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count == 3) register_code(KC_PENT);;
+ } else {
+ unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
+ unregister_code(KC_PENT);
+ }
+ break;
-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:
- 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) {
- register_code(KC_X);
- unregister_code(KC_X);
- }
- unregister_code(KC_LCTL);
- }
- break;
-
- case MACRO_SHIFT_CONTROL:
- if (record->event.pressed) {
- if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
- if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
- if (record->tap.count == 3) register_code(KC_PENT);;
- }
- else {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
- unregister_code(KC_PENT);
- }
- break;
-
- case MACRO_CONTROL_ALT:
- if (record->event.pressed) {
- if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
- if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
- }
- else {
- unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
- }
- break;
+ case M_CTALT:
+ if (record->event.pressed) {
+ if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
+ } else {
+ unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
}
+ break;
+ }
- return MACRO_NONE;
+ return true;
}
void led_set_user(uint8_t usb_led)
diff --git a/keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c b/keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c
index a29f9e101..169297635 100644
--- a/keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c
+++ b/keyboards/handwired/arrow_pad/keymaps/pad_21/keymap.c
@@ -1,32 +1,18 @@
-#include "arrow_pad.h"
+#include QMK_KEYBOARD_H
#include "led.h"
-// This is the 21-key keypad to 2x11 element matrix mapping
-#define LAYOUT( \
- KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
- KM_NUM, KM_FSL, KM_AST, KM_MIN, \
- KM___7, KM___8, KM___9, ___PLS, \
- KM___4, KM___5, KM___6, KM_PLS, \
- KM___1, KM___2, KM___3, ___ENT, \
- KM___0, _____0, KM_DOT, KM_ENT \
-) { \
- { KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
- { KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
-}
-
-
-#define LAYER_BASE 0
-#define LAYER_EDIT 1
-#define LAYER_FUNCTION 2
-
-#define MACRO_COPY_CUT 0
-#define MACRO_SHIFT_CONTROL 1
-#define MACRO_CONTROL_ALT 2
+enum layers {
+ LAYER_BASE,
+ LAYER_EDIT,
+ LAYER_FUNCTION
+};
-#define M_COPY KC_FN5
-#define M_SHFCT KC_FN6
-#define M_CTALT KC_FN7
+enum custom_keycodes {
+ M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT
+ M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL
+ M_CTALT // KC_FN7: MACRO_CONTROL_ALT
+};
#define SC_UNDO LCTL(KC_Z)
#define SC_REDO LCTL(KC_Y)
@@ -39,100 +25,75 @@
#define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4)
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[LAYER_BASE] = LAYOUT( \
- KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \
+[LAYER_BASE] = LAYOUT_pad21( \
+ KC_ESC, KC_TAB, KC_BSLS, MO(2), \
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
- KC_P7, KC_P8, KC_P9, XXXXXXX, \
+ KC_P7, KC_P8, KC_P9, \
KC_P4, KC_P5, KC_P6, KC_PPLS, \
- KC_P1, KC_P2, KC_P3, XXXXXXX, \
- KC_P0, XXXXXXX, KC_PDOT, KC_PENT ),
+ KC_P1, KC_P2, KC_P3, \
+ KC_P0, KC_PDOT, KC_PENT ),
-[LAYER_EDIT] = LAYOUT( \
+[LAYER_EDIT] = LAYOUT_pad21( \
KC_ESC, KC_TAB, KC_SPC, _______, \
- KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \
- KC_HOME, KC_UP, KC_PGUP, XXXXXXX, \
+ TG(1), SC_PSTE, SC_REDO, SC_UNDO, \
+ KC_HOME, KC_UP, KC_PGUP, \
KC_LEFT, M_COPY, KC_RGHT, M_CTALT, \
- KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \
- KC_BSPC, XXXXXXX, KC_DEL, M_SHFCT),
+ KC_END, KC_DOWN, KC_PGDN, \
+ KC_BSPC, KC_DEL, M_SHFCT),
-[LAYER_FUNCTION] = LAYOUT( \
- KC_FN2, KC_FN3, KC_FN4, _______, \
- KC_FN1, _______, _______, _______, \
- _______, _______, _______, XXXXXXX, \
+[LAYER_FUNCTION] = LAYOUT_pad21( \
+ BL_TOGG, BL_INC, BL_DEC, _______, \
+ TG(1), _______, _______, _______, \
+ _______, _______, _______, \
_______, _______, _______, _______, \
- _______, _______, _______, XXXXXXX, \
- RESET, XXXXXXX, _______, _______ ),
-
-};
-
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION),
- [1] = ACTION_LAYER_TOGGLE(LAYER_EDIT),
- [2] = ACTION_BACKLIGHT_TOGGLE(),
- [3] = ACTION_BACKLIGHT_INCREASE(),
- [4] = ACTION_BACKLIGHT_DECREASE(),
- [5] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
- [6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL),
- [7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT),
+ _______, _______, _______, \
+ RESET, _______, _______ ),
};
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-}
+bool process_record_user(uint16_t keycode, keyrecord_t * record) {
+ // MACRODOWN only works in this function
+ switch (keycode) {
+
+ case M_COPY:
+ 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) {
+ register_code(KC_X);
+ unregister_code(KC_X);
+ }
+ unregister_code(KC_LCTL);
+ }
+ break;
+ case M_SHFCT:
+ if (record->event.pressed) {
+ if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
+ if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count == 3) register_code(KC_PENT);;
+ } else {
+ unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
+ unregister_code(KC_PENT);
+ }
+ break;
-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:
- 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) {
- register_code(KC_X);
- unregister_code(KC_X);
- }
- unregister_code(KC_LCTL);
- }
- break;
-
- case MACRO_SHIFT_CONTROL:
- if (record->event.pressed) {
- if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
- if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
- if (record->tap.count == 3) register_code(KC_PENT);;
- }
- else {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
- unregister_code(KC_PENT);
- }
- break;
-
- case MACRO_CONTROL_ALT:
- if (record->event.pressed) {
- if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
- if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
- }
- else {
- unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
- }
- break;
+ case M_CTALT:
+ if (record->event.pressed) {
+ if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
+ } else {
+ unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
}
+ break;
+ }
- return MACRO_NONE;
+ return true;
}
void led_set_user(uint8_t usb_led)
diff --git a/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk b/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk
index af51976a8..d2403c9ec 100644
--- a/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk
+++ b/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk
@@ -9,7 +9,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. Do not enable this with audio at the same time.
+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/handwired/arrow_pad/keymaps/pad_24/keymap.c b/keyboards/handwired/arrow_pad/keymaps/pad_24/keymap.c
index b5d304708..dd729c59a 100644
--- a/keyboards/handwired/arrow_pad/keymaps/pad_24/keymap.c
+++ b/keyboards/handwired/arrow_pad/keymaps/pad_24/keymap.c
@@ -1,35 +1,18 @@
-#include "arrow_pad.h"
+#include QMK_KEYBOARD_H
#include "led.h"
-// This is the 21-key keypad to 2x11 element matrix mapping
-#define LAYOUT( \
- KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
- KM_NUM, KM_FSL, KM_AST, KM_MIN, \
- KM___7, KM___8, KM___9, KM_EQU, \
- KM___4, KM___5, KM___6, KM_PLS, \
- KM___1, KM___2, KM___3, ___ENT, \
- KM___0, _____0, KM_DOT, KM_ENT \
-) { \
- { KM_ESC, KM_TAB, KM_BSL, KM_ARR }, \
- { KM_NUM, KM_FSL, KM_AST, KM_MIN }, \
- { KM___7, KM___8, KM___9, KM_EQU }, \
- { KM___4, KM___5, KM___6, KM_PLS }, \
- { KM___1, KM___2, KM___3, KC_NO }, \
- { KM___0, KC_NO, KM_DOT, KM_ENT } \
-}
-
-#define LAYER_BASE 0
-#define LAYER_EDIT 1
-#define LAYER_FUNCTION 2
-
-#define MACRO_COPY_CUT 0
-#define MACRO_SHIFT_CONTROL 1
-#define MACRO_CONTROL_ALT 2
+enum layers {
+ LAYER_BASE,
+ LAYER_EDIT,
+ LAYER_FUNCTION
+};
-#define M_COPY KC_FN5
-#define M_SHFCT KC_FN6
-#define M_CTALT KC_FN7
+enum custom_keycodes {
+ M_COPY = SAFE_RANGE, // KC_FN5: MACRO_COPY_CUT
+ M_SHFCT, // KC_FN6: MACRO_SHIFT_CONTROL
+ M_CTALT // KC_FN7: MACRO_CONTROL_ALT
+};
#define SC_UNDO LCTL(KC_Z)
#define SC_REDO LCTL(KC_Y)
@@ -42,13 +25,10 @@
#define SC_ACLS LALT(KC_F4)
#define SC_CCLS LCTL(KC_F4)
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_BASE] = LAYOUT( \
- KC_ESC, KC_TAB, KC_BSLS, KC_FN0, \
+ KC_ESC, KC_TAB, KC_BSLS, MO(2), \
KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
KC_P7, KC_P8, KC_P9, KC_PEQL, \
KC_P4, KC_P5, KC_P6, KC_PPLS, \
@@ -57,15 +37,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[LAYER_EDIT] = LAYOUT( \
KC_ESC, KC_TAB, KC_SPC, _______, \
- KC_FN1, SC_PSTE, SC_REDO, SC_UNDO, \
+ TG(1), SC_PSTE, SC_REDO, SC_UNDO, \
KC_HOME, KC_UP, KC_PGUP, KC_LALT, \
KC_LEFT, M_COPY, KC_RGHT, KC_LCTL, \
KC_END, KC_DOWN, KC_PGDN, XXXXXXX, \
- KC_BSPC, KC_PENT, KC_DEL, M_SHFCT),
+ KC_BSPC, KC_PENT, KC_DEL, M_SHFCT ),
[LAYER_FUNCTION] = LAYOUT( \
- KC_FN2, KC_FN3, KC_FN4, _______, \
- KC_FN1, _______, _______, _______, \
+ BL_TOGG, BL_INC, BL_DEC, _______, \
+ TG(1), _______, _______, _______, \
_______, _______, _______, _______, \
_______, _______, _______, _______, \
_______, _______, _______, XXXXXXX, \
@@ -74,68 +54,46 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(LAYER_FUNCTION),
- [1] = ACTION_LAYER_TOGGLE(LAYER_EDIT),
- [2] = ACTION_BACKLIGHT_TOGGLE(),
- [3] = ACTION_BACKLIGHT_INCREASE(),
- [4] = ACTION_BACKLIGHT_DECREASE(),
- [5] = ACTION_MACRO_TAP(MACRO_COPY_CUT),
- [6] = ACTION_MACRO_TAP(MACRO_SHIFT_CONTROL),
- [7] = ACTION_MACRO_TAP(MACRO_CONTROL_ALT),
-
-};
-
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
-}
+bool process_record_user(uint16_t keycode, keyrecord_t * record) {
+ // MACRODOWN only works in this function
+ switch (keycode) {
+
+ case M_COPY:
+ 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) {
+ register_code(KC_X);
+ unregister_code(KC_X);
+ }
+ unregister_code(KC_LCTL);
+ }
+ break;
+ case M_SHFCT:
+ if (record->event.pressed) {
+ if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
+ if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count == 3) register_code(KC_PENT);;
+ } else {
+ unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
+ unregister_code(KC_PENT);
+ }
+ break;
-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:
- 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) {
- register_code(KC_X);
- unregister_code(KC_X);
- }
- unregister_code(KC_LCTL);
- }
- break;
-
- case MACRO_SHIFT_CONTROL:
- if (record->event.pressed) {
- if (record->tap.count <= 2) register_mods(MOD_BIT(KC_LSFT));
- if (record->tap.count == 2) register_mods(MOD_BIT(KC_LCTL));
- if (record->tap.count == 3) register_code(KC_PENT);;
- }
- else {
- unregister_mods(MOD_BIT(KC_LSFT) | MOD_BIT(KC_LCTL));
- unregister_code(KC_PENT);
- }
- break;
-
- case MACRO_CONTROL_ALT:
- if (record->event.pressed) {
- if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
- if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
- }
- else {
- unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
- }
- break;
+ case M_CTALT:
+ if (record->event.pressed) {
+ if (record->tap.count < 2) register_mods(MOD_BIT(KC_LCTL));
+ if (record->tap.count >= 2) register_mods(MOD_BIT(KC_LALT));
+ } else {
+ unregister_mods(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LALT));
}
+ break;
+ }
- return MACRO_NONE;
+ return true;
}
void led_set_user(uint8_t usb_led)
diff --git a/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk b/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk
index e31bfe1af..b305f8482 100644
--- a/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk
+++ b/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk
@@ -9,7 +9,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. Do not enable this with audio at the same time.
+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/handwired/arrow_pad/readme.md b/keyboards/handwired/arrow_pad/readme.md
index d0d172272..43a0e33c4 100644
--- a/keyboards/handwired/arrow_pad/readme.md
+++ b/keyboards/handwired/arrow_pad/readme.md
@@ -94,13 +94,13 @@ More info can be found on [GeekHack](https://geekhack.org/index.php?topic=73632.
The second ArrowPad was a conversion from a 21-key Genovation keypad. It used a 2 row x 11 column matrix.
```
-#define KEYMAP( \
+#define LAYOUT_pad21( \
KM_ESC, KM_TAB, KM_BSL, KM_ARR, \
KM_NUM, KM_FSL, KM_AST, KM_MIN, \
- KM___7, KM___8, KM___9, ___PLS, \
+ KM___7, KM___8, KM___9, \
KM___4, KM___5, KM___6, KM_PLS, \
- KM___1, KM___2, KM___3, ___ENT, \
- KM___0, _____0, KM_DOT, KM_ENT \
+ KM___1, KM___2, KM___3, \
+ KM___0, KM_DOT, KM_ENT \
) { \
{ KM_ESC, KM_TAB, KM_BSL, KM_ARR, KM___7, KM___8, KM___9, KM_PLS, KM___1, KM___2, KM___3, }, \
{ KM_NUM, KM_FSL, KM_AST, KM_MIN, KM___4, KM___5, KM___6, KM_ENT, KC_NO, KM___0, KM_DOT, }, \
@@ -119,7 +119,7 @@ Download or clone the whole firmware and navigate to the keyboards/arrow_pad fol
Depending on which keymap you would like to use, you will have to compile slightly differently.
### Default
-To build with the default keymap, simply run `make default`.
+To build with the default keymap, simply run `make handwired/arrow_pad:default`.
### Other Keymaps
Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
@@ -127,7 +127,7 @@ Several version of keymap are available in advance but you are recommended to de
To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
```
-$ make [default|pad_21|pad_24|<name>]
+$ make handwired/arrow_pad:[default|pad_21|pad_24|<name>]
```
Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
diff --git a/keyboards/handwired/atreus50/atreus50.h b/keyboards/handwired/atreus50/atreus50.h
index de06f255e..eb31ca1b8 100644
--- a/keyboards/handwired/atreus50/atreus50.h
+++ b/keyboards/handwired/atreus50/atreus50.h
@@ -5,7 +5,7 @@
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
-#define KEYMAP( \
+#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
@@ -18,7 +18,7 @@
{ k30, k31, k32, k33, k34, k35, km1, k36, k37, k38, k39, k3a, k3b } \
}
-#define COMPACT_KEYMAP( \
+#define LAYOUT_kc( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
diff --git a/keyboards/handwired/atreus50/info.json b/keyboards/handwired/atreus50/info.json
new file mode 100644
index 000000000..4e3b4ac49
--- /dev/null
+++ b/keyboards/handwired/atreus50/info.json
@@ -0,0 +1,70 @@
+{
+ "keyboard_name": "Atreus50",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 4.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Tab", "x":0, "y":0.5},
+ {"label":"Q", "x":1, "y":0.5},
+ {"label":"W", "x":2, "y":0.25},
+ {"label":"E", "x":3, "y":0},
+ {"label":"R", "x":4, "y":0.25},
+ {"label":"T", "x":5, "y":0.5},
+
+ {"label":"Y", "x":9, "y":0.5},
+ {"label":"U", "x":10, "y":0.25},
+ {"label":"I", "x":11, "y":0},
+ {"label":"O", "x":12, "y":0.25},
+ {"label":"P", "x":13, "y":0.5},
+ {"label":"-", "x":14, "y":0.5},
+
+ {"label":"Ctrl/Esc", "x":0, "y":1.5},
+ {"label":"A", "x":1, "y":1.5},
+ {"label":"S", "x":2, "y":1.25},
+ {"label":"D", "x":3, "y":1},
+ {"label":"F", "x":4, "y":1.25},
+ {"label":"G", "x":5, "y":1.5},
+
+ {"label":"H", "x":9, "y":1.5},
+ {"label":"J", "x":10, "y":1.25},
+ {"label":"K", "x":11, "y":1},
+ {"label":"L", "x":12, "y":1.25},
+ {"label":";", "x":13, "y":1.5},
+ {"label":"'", "x":14, "y":1.5},
+
+ {"label":"LShift", "x":0, "y":2.5},
+ {"label":"Z", "x":1, "y":2.5},
+ {"label":"X", "x":2, "y":2.25},
+ {"label":"C", "x":3, "y":2},
+ {"label":"V", "x":4, "y":2.25},
+ {"label":"B", "x":5, "y":2.5},
+
+ {"label":"N", "x":9, "y":2.5},
+ {"label":"M", "x":10, "y":2.25},
+ {"label":",", "x":11, "y":2},
+ {"label":".", "x":12, "y":2.25},
+ {"label":"/", "x":13, "y":2.5},
+ {"label":"Shift/Enter", "x":14, "y":2.5},
+
+ {"label":"`", "x":0, "y":3.5},
+ {"label":"LCtrl", "x":1, "y":3.5},
+ {"label":"LAlt", "x":2, "y":3.25},
+ {"label":"LGUI", "x":3, "y":3},
+ {"label":"Lower", "x":4, "y":3.25},
+ {"label":"Space", "x":5, "y":3.5},
+ {"label":"Fn", "x":6, "y":2.75, "h":1.5},
+
+ {"label":"RShift", "x":8, "y":2.75, "h":1.5},
+ {"label":"Back Space", "x":9, "y":3.5},
+ {"label":"Raise", "x":10, "y":3.25},
+ {"label":"Left", "x":11, "y":3},
+ {"label":"Down", "x":12, "y":3.25},
+ {"label":"Up", "x":13, "y":3.5},
+ {"label":"Right", "x":14, "y":3.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/atreus50/keymaps/ajp10304/config.h b/keyboards/handwired/atreus50/keymaps/ajp10304/config.h
index 6916d1a7d..f5e6bbabe 100644
--- a/keyboards/handwired/atreus50/keymaps/ajp10304/config.h
+++ b/keyboards/handwired/atreus50/keymaps/ajp10304/config.h
@@ -3,8 +3,6 @@
#include "../../config.h"
-#define PREVENT_STUCK_MODIFIERS
-
#undef MATRIX_ROW_PINS
#undef MATRIX_COL_PINS
diff --git a/keyboards/handwired/atreus50/keymaps/ajp10304/keymap.c b/keyboards/handwired/atreus50/keymaps/ajp10304/keymap.c
index 5b13224b0..1e53d050b 100644
--- a/keyboards/handwired/atreus50/keymaps/ajp10304/keymap.c
+++ b/keyboards/handwired/atreus50/keymaps/ajp10304/keymap.c
@@ -1,6 +1,4 @@
-#include "atreus50.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
#include "keymap_uk.h"
extern keymap_config_t keymap_config;
@@ -37,10 +35,6 @@ enum planck_keycodes {
#include "dynamic_macro.h"
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
@@ -54,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Fn | Ctrl | Alt | GUI |Lower | Bksp | Ctrl | Alt |Space |Raise | Shift| MENU | Ctrl | Fn2 |
* `-------------------------------------------------------------------------------------------------'
*/
-[_QWERTY] = KEYMAP(
+[_QWERTY] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
MT(MOD_LSFT, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT) ,
KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT ,
@@ -72,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Fn | Ctrl | Alt | GUI |Lower | Bksp | Ctrl | Alt |Space |Mouse | MENU | Alt | Ctrl | Fn |
* `-------------------------------------------------------------------------------------------------'
*/
-[_FUNC] = KEYMAP(
+[_FUNC] = LAYOUT(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 ,
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, UK_TILD, KC_INSERT ,
KC_LSHIFT, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_PAST, KC_MINS, KC_EQL, KC_BSLASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,
@@ -90,7 +84,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | |Lower | Del | Ctrl | Alt |Space | | Next | Vol- | Vol+ | Play |
* `-------------------------------------------------------------------------------------------------'
*/
-[_LOWER] = KEYMAP(
+[_LOWER] = LAYOUT(
KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_BSPC ,
LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), LCTL(KC_DEL), LCTL(KC_BSPC) ,
KC_LSPO, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_QUOT, KC_MINS, KC_EQL, KC_NONUS_HASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) ,
@@ -108,7 +102,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Mouse| | | | | Alt | Ctrl | Alt |Enter |Raise | | | | |
* `-------------------------------------------------------------------------------------------------'
*/
-[_RAISE] = KEYMAP(
+[_RAISE] = LAYOUT(
KC_GRV, XXXXXXX, M(1), KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_PGDOWN, XXXXXXX, KC_PSCREEN ,
KC_GRV, XXXXXXX, XXXXXXX, LSFT(KC_9), LSFT(KC_0), XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, LCTL(LSFT(KC_EQL)) ,
_______, XXXXXXX, XXXXXXX, LSFT(KC_LBRC), LSFT(KC_RBRC), XXXXXXX, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), LCTL(KC_MINS) ,
@@ -126,11 +120,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | | |
* `-------------------------------------------------------------------------------------------------'
*/
-[_ADJUST] = KEYMAP(
+[_ADJUST] = LAYOUT(
M(0), RESET, QWERTY, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, KC_DEL ,
KC_CAPS, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, _______, _______ ,
TG(_MAC), _______, _______, _______, _______, DYN_REC_STOP, DYN_REC_STOP, KC_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_MEDIA_NEXT_TRACK, _______, _______ ,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
/* Mouse
@@ -144,7 +138,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | | |
* `-------------------------------------------------------------------------------------------------'
*/
-[_MOUSE] = KEYMAP(
+[_MOUSE] = LAYOUT(
KC_ESC , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, _______, _______ ,
KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______, _______ ,
@@ -162,42 +156,42 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | | |
* `-------------------------------------------------------------------------------------------------'
*/
-[_FUNC2] = KEYMAP(
+[_FUNC2] = LAYOUT(
_______, _______, M(1), _______, _______, _______, M(5), _______, _______, _______, _______, _______,
_______, _______, M(3), M(7), _______, _______, _______, M(10), _______, _______, _______, _______,
_______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, _______, _______, _______, _______, M(98) ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-[_MAC] = KEYMAP(
+[_MAC] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
MFNC, _______, _______, _______, MLWR, _______, _______, _______, _______, MRSE, _______, _______, _______, MFNC2
),
-[_MLWR] = KEYMAP(
+[_MLWR] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-[_MRSE] = KEYMAP(
+[_MRSE] = LAYOUT(
_______, _______, M(2), _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
_______, _______, _______, _______, _______, _______, _______, LCTL(KC_A), _______, LCTL(KC_E), _______, LGUI(KC_EQL) ,
_______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS) ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-[_MFNC] = KEYMAP(
+[_MFNC] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_PENT) ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-[_MFNC2] = KEYMAP(
+[_MFNC2] = LAYOUT(
_______, _______, M(2), _______, _______, _______, M(6), _______, _______, _______, _______, _______,
_______, _______, M(4), M(8), _______, _______, _______, M(10), _______, _______, _______, _______,
_______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), _______, _______, _______, _______, _______, _______, M(99) ,
diff --git a/keyboards/handwired/atreus50/keymaps/default/keymap.c b/keyboards/handwired/atreus50/keymaps/default/keymap.c
index 21d91a879..97b90a6db 100644
--- a/keyboards/handwired/atreus50/keymaps/default/keymap.c
+++ b/keyboards/handwired/atreus50/keymaps/default/keymap.c
@@ -1,9 +1,4 @@
-#include "atreus50.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-#ifdef AUDIO_ENABLE
- #include "audio.h"
-#endif
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -28,86 +23,52 @@ enum custom_keycodes {
};
// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-#define KC_X0 MT(MOD_LCTL, KC_ESC) // Hold for Left Ctrl, Tap for ESC
-#define KC_X1 LOWER
-#define KC_X2 RAISE
-#define KC_X3 MO(_MOVEMENT)
-#define KC_X4 MT(MOD_LSFT, KC_ENT) // Hold for Left Shift, Tap for Enter
+#define X0 MT(MOD_LCTL, KC_ESC) // Hold for Left Ctrl, Tap for ESC
+#define X3 MO(_MOVEMENT)
+#define X4 MT(MOD_LSFT, KC_ENT) // Hold for Left Shift, Tap for Enter
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = COMPACT_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 ,
- //|----+----+----+----+----+----|----+----|----+----+----+----+----+----|
- GRV ,LCTL,LALT,LGUI, X1 ,SPC , X3 ,RSFT,BSPC, X2 ,LEFT,DOWN, UP ,RGHT
- //`----+----+----+----+----+----+----+----+----+----+----+----+----+----'
+ [_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_MINS,
+ X0, 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, X4,
+ KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, X3, KC_RSFT, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
- [_COLEMAK] = COMPACT_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,MINS,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- X0 , A , R , S , T , D , H , N , E , I , O ,QUOT,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- LSFT, Z , X , C , V , B , K , M ,COMM,DOT ,SLSH, X4 ,
- //|----+----+----+----+----+----|----+----|----+----+----+----+----+----|
- GRV ,LCTL,LALT,LGUI, X1 ,SPC , X3 ,RSFT,BSPC, X2 ,LEFT,DOWN, UP ,RGHT
- //`----+----+----+----+----+----+----+----+----+----+----+----+----+----'
+ [_COLEMAK] = LAYOUT(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_MINS,
+ X0, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, X4,
+ KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, X3, KC_RSFT, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
- [_DVORAK] = COMPACT_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,MINS,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- X0 , A , O , E , U , I , D , H , T , N , S ,SLSH,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- LSFT,SCLN, Q , J , K , X , B , M , W , V , Z , X4 ,
- //|----+----+----+----+----+----|----+----|----+----+----+----+----+----|
- GRV ,LCTL,LALT,LGUI, X1 ,SPC , X3 ,RSFT,BSPC, X2 ,LEFT,DOWN, UP ,RGHT
- //`----+----+----+----+----+----+----+----+----+----+----+----+----+----'
+ [_DVORAK] = LAYOUT(
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_MINS,
+ X0, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, X4,
+ KC_GRV, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, X3, KC_RSFT, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
- [_LOWER] = COMPACT_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,DEL ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- DEL , F1 , F2 , F3 , F4 , F5 , F6 ,UNDS,PLUS,LCBR,RCBR,PIPE,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , F7 , F8 , F9 ,F10 ,F11 , F12 ,END , , , , ,
- //|----+----+----+----+----+----|----+----|----+----+----+----+----+----|
- , , , , , , , , , ,MNXT,VOLD,VOLU,MPLY
- //`----+----+----+----+----+----+----+----+----+----+----+----+----+----'
+ [_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_END, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
- [_RAISE] = COMPACT_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,DEL ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- DEL , F1 , F2 , F3 , F4 , F5 , F6 ,MINS,EQL ,LBRC,RBRC,BSLS,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , F7 , F8 , F9 ,F10 ,F11 , F12 ,NUHS,NUBS, , , ,
- //|----+----+----+----+----+----|----+----|----+----+----+----+----+----|
- , , , , , , , , , ,MNXT,VOLD,VOLU,MPLY
- //`----+----+----+----+----+----+----+----+----+----+----+----+----+----'
+ [_RAISE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_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
),
- [_MOVEMENT] = COMPACT_KEYMAP(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR, UP ,LPRN,RPRN,DEL ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- DEL , F1 , F2 , F3 , F4 , F5 , F6 ,LEFT,DOWN,RGHT,RCBR,PIPE,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- , F7 , F8 , F9 ,F10 ,F11 , F12 ,END , , , , ,
- //|----+----+----+----+----+----|----+----|----+----+----+----+----+----|
- , , , , , , , ,PGDN,PGUP,MNXT,VOLD,VOLU,MPLY
- //`----+----+----+----+----+----+----+----+----+----+----+----+----+----'
+ [_MOVEMENT] = LAYOUT(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_UP, KC_LPRN, KC_RPRN, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_LEFT, KC_DOWN, KC_RGHT, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_END, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_PGUP, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
/* Adjust (Lower + Raise)
@@ -121,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | | |
* `-------------------------------------------------------------------------------------------------'
*/
- [_ADJUST] = KEYMAP( \
+ [_ADJUST] = LAYOUT( \
_______, RESET, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, KC_DEL, \
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, \
diff --git a/keyboards/handwired/atreus50/readme.md b/keyboards/handwired/atreus50/readme.md
index 0c24f67db..9449d66e5 100644
--- a/keyboards/handwired/atreus50/readme.md
+++ b/keyboards/handwired/atreus50/readme.md
@@ -1,7 +1,9 @@
-Handwired Atreus50
-==================
+# Handwired Atreus50
-This firmware is for a Handwired Atreus50 using an Arduino Pro Micro.
+This firmware is for a handwired Atreus50 using an Arduino Pro Micro.
+
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: Arduino Pro Micro
## Pinout
@@ -11,6 +13,12 @@ The following pins are used:
## Compiling and loading the firmware
-To build the firmware, run `make`.
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/atreus50:default
+
+To flash the firmware onto the microcontroller, run `make avrdude`, and press the reset button.
+
+ make handwired/atreus50:default:avrdude
-To flash the firemware onto the microcontroller, run `make avrdude`, and press the reset button.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.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/atreus50/rules.mk b/keyboards/handwired/atreus50/rules.mk
index 2e2d48f6a..21c4704e0 100644
--- a/keyboards/handwired/atreus50/rules.mk
+++ b/keyboards/handwired/atreus50/rules.mk
@@ -63,7 +63,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. Do not enable this with audio at the same time.
+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/handwired/bluepill/bluepill.c b/keyboards/handwired/bluepill/bluepill.c
new file mode 100644
index 000000000..85c92dfe9
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill.c
@@ -0,0 +1 @@
+#include "bluepill.h" \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/bluepill.h b/keyboards/handwired/bluepill/bluepill.h
new file mode 100644
index 000000000..a686d155c
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill.h
@@ -0,0 +1,54 @@
+#pragma once
+
+#include "quantum.h"
+#include "led.h"
+
+/* ANSI LAYOUT
+ ESC| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10| F11| F12| PSC| PGU| PGD
+ GRA| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ' | ¡ | BCKS | DEL
+ TAB| Q | W | E | R | T | Y | U | I | O | P | ` | + | | HOM
+ CAP| A | S | D | F | G | H | J | K | L | Ñ | ´ | Ç | ENTER | END
+ LSI| (<)| Z | X | C | V | B | N | M | , | . | - | RSHIF | UP | FNL
+ LCT| WIN| ALT| ESPACE | ALG| FN | RCT| LEF| DOW| RIG
+*/
+
+#define LAYOUT_seventy_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, \
+ K50, K51, K52, K53, K54, K55, K56, K57, K58, K59 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K0E, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K1D, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \
+ { K50, K51, K52, KC_NO, KC_NO, KC_NO, K53, KC_NO, KC_NO,K54, K55, K56, K57, K58, K59 } \
+}
+
+/* ISO LAYOUT
+ ESC| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10| F11| F12| PSC| PGU| PGD
+ GRA| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ' | ¡ | BCKS | DEL
+ TAB| Q | W | E | R | T | Y | U | I | O | P | ` | + | | HOM
+ CAP| A | S | D | F | G | H | J | K | L | Ñ | ´ | Ç | ENTER | END
+ LSI| < | Z | X | C | V | B | N | M | , | . | - | RSHIF | UP | FNL
+ LCT| WIN| ALT| ESPACE | ALG| FN | RCT| LEF| DOW| RIG
+*/
+
+#define LAYOUT_seventy_iso( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, \
+ K50, K51, K52, K53, K54, K55, K56, K57, K58, K59 \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K0E, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K1D, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \
+ { K50, K51, K52, KC_NO, KC_NO, KC_NO, K53, KC_NO, KC_NO,K54, K55, K56, K57, K58, K59 } \
+}
diff --git a/keyboards/handwired/bluepill/bluepill70/bluepill70.c b/keyboards/handwired/bluepill/bluepill70/bluepill70.c
new file mode 100644
index 000000000..511c602d4
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/bluepill70.c
@@ -0,0 +1 @@
+#include "bluepill70.h" \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/bluepill70/bluepill70.h b/keyboards/handwired/bluepill/bluepill70/bluepill70.h
new file mode 100644
index 000000000..8a313cc50
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/bluepill70.h
@@ -0,0 +1,4 @@
+#pragma once
+#include "bluepill.h"
+// Modified by Xydane
+// #define LAYOUT(k00) {{ k00 }} \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/bluepill70/bootloader_defs.h b/keyboards/handwired/bluepill/bluepill70/bootloader_defs.h
new file mode 100644
index 000000000..0f45203cb
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/bootloader_defs.h
@@ -0,0 +1,10 @@
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here (page 175):
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ * This also requires a patch to chibios:
+ * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+ */
+
+// STM32F103* does NOT have an USB bootloader in ROM (only serial),
+// so setting anything here does not make much sense
+// #define STM32_BOOTLOADER_ADDRESS 0x1FFFC800
diff --git a/keyboards/handwired/bluepill/bluepill70/chconf.h b/keyboards/handwired/bluepill/bluepill70/chconf.h
new file mode 100644
index 000000000..dfb1f9dfb
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/chconf.h
@@ -0,0 +1,524 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION 16
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY 2000
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#define CH_CFG_ST_TIMEDELTA 2
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM 0
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE 0
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD FALSE
+
+/* Use __WFI in the idle thread for waiting. Does lower the power
+ * consumption. */
+#define CORTEX_ENABLE_WFI_IDLE TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM FALSE
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY TRUE
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT TRUE
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES TRUE
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES TRUE
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS TRUE
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS TRUE
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES TRUE
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES TRUE
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE TRUE
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP TRUE
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS FALSE
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS FALSE
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS FALSE
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS FALSE
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS FALSE
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note It is invoked from within @p chThdInit() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/handwired/bluepill/bluepill70/config.h b/keyboards/handwired/bluepill/bluepill70/config.h
new file mode 100644
index 000000000..87fd74633
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/config.h
@@ -0,0 +1,25 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6464
+#define DEVICE_VER 0x0001
+/* in python2: list(u"whatever".encode('utf-16-le')) */
+/* at most 32 characters or the ugly hack in usb_main.c works */
+
+// Modified by Xydane
+#define MANUFACTURER "QMK"
+#define USBSTR_MANUFACTURER 'T', '\x00', 'M', '\x00', 'K', '\x00', ' ', '\x00', '\xc6', '\x00'
+#define PRODUCT "BluePill70"
+#define USBSTR_PRODUCT 'C', '\x00', 'h', '\x00', 'i', '\x00', 'b', '\x00', 'i', '\x00', 'O', '\x00', 'S', '\x00', ' ', '\x00', 'Q', '\x00', 'M', '\x00', 'K', '\x00'
+#define DESCRIPTION "QMK keyboard firmware with ChibiOS"
+
+/* key matrix size */
+// Modified by Xydane
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 15
+#define DIODE_DIRECTION COL2ROW
+
+// Iso fix for Space Cadet, comment for ANSI layouts
+#define LSPO_KEY KC_8
+#define RSPC_KEY KC_9 \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/bluepill70/flash.sh b/keyboards/handwired/bluepill/bluepill70/flash.sh
new file mode 100644
index 000000000..d001ff007
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/flash.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+Arduino_STM32_usb_hid/tools/linux/maple_upload ttyACM0 2 1EAF:0003 build/ch.bin \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/bluepill70/halconf.h b/keyboards/handwired/bluepill/bluepill70/halconf.h
new file mode 100644
index 000000000..5be284cd3
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/halconf.h
@@ -0,0 +1,354 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef _HALCONF_H_
+#define _HALCONF_H_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C FALSE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM TRUE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+// Modified by Xydane
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 256
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+#endif /* _HALCONF_H_ */
+
+/** @} */
diff --git a/keyboards/handwired/bluepill/bluepill70/info.json b/keyboards/handwired/bluepill/bluepill70/info.json
new file mode 100644
index 000000000..3f08b50e5
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/info.json
@@ -0,0 +1,187 @@
+{
+ "keyboard_name": "BluePill 70",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 6,
+ "layouts": {
+ "LAYOUT_seventy_ansi": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":1, "y":0},
+ {"label":"F2", "x":2, "y":0},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0},
+ {"label":"F5", "x":5, "y":0},
+ {"label":"F6", "x":6, "y":0},
+ {"label":"F7", "x":7, "y":0},
+ {"label":"F8", "x":8, "y":0},
+ {"label":"F9", "x":9, "y":0},
+ {"label":"F10", "x":10, "y":0},
+ {"label":"F11", "x":11, "y":0},
+ {"label":"F12", "x":12, "y":0},
+ {"label":"Print Screen", "x":13, "y":0},
+ {"label":"Home", "x":14, "y":0},
+ {"label":"End", "x":15, "y":0},
+ {"label":"`", "x":0, "y":1},
+ {"label":"1", "x":1, "y":1},
+ {"label":"2", "x":2, "y":1},
+ {"label":"3", "x":3, "y":1},
+ {"label":"4", "x":4, "y":1},
+ {"label":"5", "x":5, "y":1},
+ {"label":"6", "x":6, "y":1},
+ {"label":"7", "x":7, "y":1},
+ {"label":"8", "x":8, "y":1},
+ {"label":"9", "x":9, "y":1},
+ {"label":"0", "x":10, "y":1},
+ {"label":"-", "x":11, "y":1},
+ {"label":"=", "x":12, "y":1},
+ {"label":"Backspace", "x":13, "y":1, "w":2},
+ {"label":"Delete", "x":15, "y":1},
+ {"label":"Tab", "x":0, "y":2, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2},
+ {"label":"W", "x":2.5, "y":2},
+ {"label":"E", "x":3.5, "y":2},
+ {"label":"R", "x":4.5, "y":2},
+ {"label":"T", "x":5.5, "y":2},
+ {"label":"Y", "x":6.5, "y":2},
+ {"label":"U", "x":7.5, "y":2},
+ {"label":"I", "x":8.5, "y":2},
+ {"label":"O", "x":9.5, "y":2},
+ {"label":"P", "x":10.5, "y":2},
+ {"label":"[", "x":11.5, "y":2},
+ {"label":"]", "x":12.5, "y":2},
+ {"label":"Page Up", "x":15, "y":2},
+ {"label":"Caps Lock", "x":0, "y":3, "w":1.75},
+ {"label":"A", "x":1.75, "y":3},
+ {"label":"S", "x":2.75, "y":3},
+ {"label":"D", "x":3.75, "y":3},
+ {"label":"F", "x":4.75, "y":3},
+ {"label":"G", "x":5.75, "y":3},
+ {"label":"H", "x":6.75, "y":3},
+ {"label":"J", "x":7.75, "y":3},
+ {"label":"K", "x":8.75, "y":3},
+ {"label":"L", "x":9.75, "y":3},
+ {"label":";", "x":10.75, "y":3},
+ {"label":"'", "x":11.75, "y":3},
+ {"label":"Enter", "x":12.75, "y":3, "w":2.25},
+ {"label":"\\", "x":13.5, "y":2, "w":1.5},
+ {"label":"Page Down", "x":15, "y":3},
+ {"label":"Shift", "x":0, "y":4, "w":1.25},
+ {"label":"ISO \\", "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":"Up", "x":14, "y":4},
+ {"label":"TT(2)", "x":15, "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}
+ ]
+ },
+ "LAYOUT_seventy_iso": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":1, "y":0},
+ {"label":"F2", "x":2, "y":0},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0},
+ {"label":"F5", "x":5, "y":0},
+ {"label":"F6", "x":6, "y":0},
+ {"label":"F7", "x":7, "y":0},
+ {"label":"F8", "x":8, "y":0},
+ {"label":"F9", "x":9, "y":0},
+ {"label":"F10", "x":10, "y":0},
+ {"label":"F11", "x":11, "y":0},
+ {"label":"F12", "x":12, "y":0},
+ {"label":"Print Screen", "x":13, "y":0},
+ {"label":"Home", "x":14, "y":0},
+ {"label":"End", "x":15, "y":0},
+ {"label":"`", "x":0, "y":1},
+ {"label":"1", "x":1, "y":1},
+ {"label":"2", "x":2, "y":1},
+ {"label":"3", "x":3, "y":1},
+ {"label":"4", "x":4, "y":1},
+ {"label":"5", "x":5, "y":1},
+ {"label":"6", "x":6, "y":1},
+ {"label":"7", "x":7, "y":1},
+ {"label":"8", "x":8, "y":1},
+ {"label":"9", "x":9, "y":1},
+ {"label":"0", "x":10, "y":1},
+ {"label":"-", "x":11, "y":1},
+ {"label":"=", "x":12, "y":1},
+ {"label":"Backspace", "x":13, "y":1, "w":2},
+ {"label":"Delete", "x":15, "y":1},
+ {"label":"Tab", "x":0, "y":2, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2},
+ {"label":"W", "x":2.5, "y":2},
+ {"label":"E", "x":3.5, "y":2},
+ {"label":"R", "x":4.5, "y":2},
+ {"label":"T", "x":5.5, "y":2},
+ {"label":"Y", "x":6.5, "y":2},
+ {"label":"U", "x":7.5, "y":2},
+ {"label":"I", "x":8.5, "y":2},
+ {"label":"O", "x":9.5, "y":2},
+ {"label":"P", "x":10.5, "y":2},
+ {"label":"[", "x":11.5, "y":2},
+ {"label":"]", "x":12.5, "y":2},
+ {"label":"Page Up", "x":15, "y":2},
+ {"label":"Caps Lock", "x":0, "y":3, "w":1.75},
+ {"label":"A", "x":1.75, "y":3},
+ {"label":"S", "x":2.75, "y":3},
+ {"label":"D", "x":3.75, "y":3},
+ {"label":"F", "x":4.75, "y":3},
+ {"label":"G", "x":5.75, "y":3},
+ {"label":"H", "x":6.75, "y":3},
+ {"label":"J", "x":7.75, "y":3},
+ {"label":"K", "x":8.75, "y":3},
+ {"label":"L", "x":9.75, "y":3},
+ {"label":";", "x":10.75, "y":3},
+ {"label":",", "x":11.75, "y":3},
+ {"label":"ISO #", "x":12.75, "y":3},
+ {"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2},
+ {"label":"Page Down", "x":15, "y":3},
+ {"label":"Shift", "x":0, "y":4, "w":1.25},
+ {"label":"ISO \\", "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":"Up", "x":14, "y":4},
+ {"label":"TT(2)", "x":15, "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}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/bluepill/bluepill70/led.c b/keyboards/handwired/bluepill/bluepill70/led.c
new file mode 100644
index 000000000..5c557bbee
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/led.c
@@ -0,0 +1,38 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "hal.h"
+#include "led.h"
+
+
+void led_set(uint8_t usb_led){
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ /* generic STM32F103C8T6 board */
+ #ifdef BOARD_GENERIC_STM32_F103
+ palClearPad(GPIOC, 13);
+ #endif
+ } else {
+ /* generic STM32F103C8T6 board */
+ #ifdef BOARD_GENERIC_STM32_F103
+ palSetPad(GPIOC, 13);
+ #endif
+ }
+}
+
+// inline void gh60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
+
+// inline void gh60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); } \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/bluepill70/matrix.c b/keyboards/handwired/bluepill/bluepill70/matrix.c
new file mode 100644
index 000000000..b2c38e522
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/matrix.c
@@ -0,0 +1,225 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "ch.h"
+#include "hal.h"
+
+/*
+ * scan matrix
+ */
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "wait.h"
+
+//#include "pwm.c"
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+static uint8_t debouncing = DEBOUNCE;
+
+/* 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);
+
+inline uint8_t matrix_rows(void){
+ return MATRIX_ROWS;
+}
+
+inline uint8_t matrix_cols(void){
+ return MATRIX_COLS;
+}
+
+/* generic STM32F103C8T6 board */
+#ifdef BOARD_GENERIC_STM32_F103
+// This could be removed, only used now in matrix_init()
+#define LED_ON() do { palClearPad(GPIOA, 1) ;} while (0)
+#define LED_OFF() do { palSetPad(GPIOA, 1); } while (0)
+#endif
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void matrix_init(void)
+{
+ // initialize row and col
+ unselect_rows();
+ init_cols();
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+ //debug
+ debug_matrix = true;
+ LED_ON();
+ wait_ms(500);
+ LED_OFF();
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void){
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ select_row(i);
+ wait_us(30); // without this wait read unstable value.
+ matrix_row_t cols = read_cols();
+ if (matrix_debouncing[i] != cols) {
+ matrix_debouncing[i] = cols;
+ if (debouncing) {
+ debug("bounce!: "); debug_hex(debouncing); debug("\n");
+ }
+ debouncing = DEBOUNCE;
+ }
+ unselect_rows();
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ wait_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+ matrix_scan_quantum();
+ return 1;
+}
+
+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");
+ }
+}
+
+/* Column pin configuration
+ */
+// Modified by Xydane
+static void init_cols(void){
+ palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOA, 15, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOA, 10, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOA, 9, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOA, 8, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOB, 15, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOB, 14, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOB, 13, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOB, 12, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOB, 11, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOB, 10, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOB, 1, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOB, 0, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOA, 7, PAL_MODE_INPUT_PULLUP);
+ palSetPadMode(GPIOA, 6, PAL_MODE_INPUT_PULLUP);
+}
+
+/* Returns status of switches(1:on, 0:off) */
+// Modified by Xydane
+static matrix_row_t read_cols(void){
+ return ((palReadPad(GPIOA, 5)==PAL_HIGH) ? 0 : (1<<0))
+ | ((palReadPad(GPIOA, 15)==PAL_HIGH) ? 0 : (1<<1))
+ | ((palReadPad(GPIOA, 10)==PAL_HIGH) ? 0 : (1<<2))
+ | ((palReadPad(GPIOA, 9)==PAL_HIGH) ? 0 : (1<<3))
+ | ((palReadPad(GPIOA, 8)==PAL_HIGH) ? 0 : (1<<4))
+ | ((palReadPad(GPIOB, 15)==PAL_HIGH) ? 0 : (1<<5))
+ | ((palReadPad(GPIOB, 14)==PAL_HIGH) ? 0 : (1<<6))
+ | ((palReadPad(GPIOB, 13)==PAL_HIGH) ? 0 : (1<<7))
+ | ((palReadPad(GPIOB, 12)==PAL_HIGH) ? 0 : (1<<8))
+ | ((palReadPad(GPIOB, 11)==PAL_HIGH) ? 0 : (1<<9))
+ | ((palReadPad(GPIOB, 10)==PAL_HIGH) ? 0 : (1<<10))
+ | ((palReadPad(GPIOB, 1)==PAL_HIGH) ? 0 : (1<<11))
+ | ((palReadPad(GPIOB, 0)==PAL_HIGH) ? 0 : (1<<12))
+ | ((palReadPad(GPIOA, 7)==PAL_HIGH) ? 0 : (1<<13))
+ | ((palReadPad(GPIOA, 6)==PAL_HIGH) ? 0 : (1<<14));
+}
+
+/* Row pin configuration
+ */
+// Modified by Xydane
+static void unselect_rows(void){
+ palSetPadMode(GPIOB, 9, PAL_MODE_INPUT);
+ palSetPadMode(GPIOB, 8, PAL_MODE_INPUT);
+ palSetPadMode(GPIOB, 7, PAL_MODE_INPUT);
+ palSetPadMode(GPIOB, 6, PAL_MODE_INPUT);
+ palSetPadMode(GPIOB, 5, PAL_MODE_INPUT);
+ palSetPadMode(GPIOA, 4, PAL_MODE_INPUT);
+}
+
+// Modified by Xydane
+static void select_row(uint8_t row){
+ (void)row;
+ switch (row) {
+ case 0:
+ palSetPadMode(GPIOB, 9, PAL_MODE_OUTPUT_PUSHPULL);
+ palClearPad(GPIOB, 9);
+ break;
+ case 1:
+ palSetPadMode(GPIOB, 8, PAL_MODE_OUTPUT_PUSHPULL);
+ palClearPad(GPIOB, 8);
+ break;
+ case 2:
+ palSetPadMode(GPIOB, 7, PAL_MODE_OUTPUT_PUSHPULL);
+ palClearPad(GPIOB, 7);
+ break;
+ case 3:
+ palSetPadMode(GPIOB, 6, PAL_MODE_OUTPUT_PUSHPULL);
+ palClearPad(GPIOB, 6);
+ break;
+ case 4:
+ palSetPadMode(GPIOB, 5, PAL_MODE_OUTPUT_PUSHPULL);
+ palClearPad(GPIOB, 5);
+ break;
+ case 5:
+ palSetPadMode(GPIOA, 4, PAL_MODE_OUTPUT_PUSHPULL);
+ palClearPad(GPIOA, 4);
+ break;
+ }
+}
diff --git a/keyboards/handwired/bluepill/bluepill70/mcuconf.h b/keyboards/handwired/bluepill/bluepill70/mcuconf.h
new file mode 100644
index 000000000..60d9931c3
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/mcuconf.h
@@ -0,0 +1,209 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define STM32F103_MCUCONF
+
+/*
+ * STM32F103 drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED FALSE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
+#define STM32_PLLMUL_VALUE 9
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV2
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_USB_CLOCK_REQUIRED TRUE
+#define STM32_USBPRE STM32_USBPRE_DIV1P5
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_ADC1_IRQ_PRIORITY 6
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1 FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY 11
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM5 FALSE
+#define STM32_GPT_USE_TIM8 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM5_IRQ_PRIORITY 7
+#define STM32_GPT_TIM8_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 5
+#define STM32_I2C_I2C2_IRQ_PRIORITY 5
+#define STM32_I2C_I2C1_DMA_PRIORITY 3
+#define STM32_I2C_I2C2_DMA_PRIORITY 3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM5 FALSE
+#define STM32_ICU_USE_TIM8 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM5_IRQ_PRIORITY 7
+#define STM32_ICU_TIM8_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_USE_TIM4 TRUE
+#define STM32_PWM_USE_TIM5 FALSE
+#define STM32_PWM_USE_TIM8 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM5_IRQ_PRIORITY 7
+#define STM32_PWM_TIM8_IRQ_PRIORITY 7
+
+/*
+ * RTC driver system settings.
+ */
+#define STM32_RTC_IRQ_PRIORITY 15
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USE_USART3 FALSE
+#define STM32_SERIAL_USE_UART4 FALSE
+#define STM32_SERIAL_USE_UART5 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART3_PRIORITY 12
+#define STM32_SERIAL_UART4_PRIORITY 12
+#define STM32_SERIAL_UART5_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USE_USART3 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART3_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART3_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
+
+#endif /* _MCUCONF_H_ */ \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/bluepill70/rules.mk b/keyboards/handwired/bluepill/bluepill70/rules.mk
new file mode 100644
index 000000000..e89abca8c
--- /dev/null
+++ b/keyboards/handwired/bluepill/bluepill70/rules.mk
@@ -0,0 +1,47 @@
+# project specific files
+SRC = matrix.c \
+ led.c
+
+# GENERIC STM32F103C8T6 board - stm32duino bootloader
+#OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
+#MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
+#BOARD = GENERIC_STM32_F103
+
+# GENERIC STM32F103C8T6 board - no bootloader (programmer over serial or SWD) // Modified by Xydane
+OPT_DEFS =
+MCU_LDSCRIPT = STM32F103x8
+BOARD = GENERIC_STM32_F103
+
+# MAPLE MINI
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x5000
+# MCU_LDSCRIPT = STM32F103xB_maplemini_bootloader
+# BOARD = MAPLEMINI_STM32_F103
+
+## chip/board settings
+# the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F1xx
+# linker script to use
+# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+# startup code to use
+# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f1xx
+# it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+# Cortex version
+# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
+MCU = cortex-m3
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
+# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
+# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
+# a custom board definition that you plan to reuse).
+# If you're not setting it here, leave it commented out.
+# It is chip dependent, the correct number can be looked up here (page 175):
+# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+# This also requires a patch to chibios:
+# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800 \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.c b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.c
new file mode 100644
index 000000000..2809c9d18
--- /dev/null
+++ b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.c
@@ -0,0 +1,49 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#include "hal.h"
+
+/**
+ * @brief PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ * This variable is used by the HAL when initializing the PAL driver.
+ */
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+const PALConfig pal_default_config =
+{
+ {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
+ {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
+ {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
+ {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
+ {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
+};
+#endif
+
+/*
+ * Early initialization code.
+ * This initialization must be performed just after stack setup and before
+ * any other initialization.
+ */
+void __early_init(void) {
+
+ stm32_clock_init();
+}
+
+/*
+ * Board-specific initialization code.
+ */
+void boardInit(void) {
+}
diff --git a/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.h b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.h
new file mode 100644
index 000000000..75bb848fd
--- /dev/null
+++ b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.h
@@ -0,0 +1,170 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+/*
+ * Setup for a Generic STM32F103 board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_GENERIC_STM32_F103
+#define BOARD_NAME "Generic STM32F103x board"
+
+/*
+ * Board frequencies.
+ */
+#define STM32_LSECLK 32768
+#define STM32_HSECLK 8000000
+
+/*
+ * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
+ */
+#define STM32F103xB
+
+/*
+ * IO pins assignments
+ */
+
+/* on-board */
+
+#define GPIOC_LED 13
+#define GPIOD_OSC_IN 0
+#define GPIOD_OSC_OUT 1
+
+/* Backlighting */
+
+/*#define GPIOC_BACKLIGHT_PIN 15*/
+
+/* In case your board has a "USB enable" hardware
+ controlled by a pin, define it here. (It could be just
+ a 1.5k resistor connected to D+ line.)
+*/
+/*
+#define GPIOB_USB_DISC 10
+*/
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ *
+ * The digits have the following meaning:
+ * 0 - Analog input.
+ * 1 - Push Pull output 10MHz.
+ * 2 - Push Pull output 2MHz.
+ * 3 - Push Pull output 50MHz.
+ * 4 - Digital input.
+ * 5 - Open Drain output 10MHz.
+ * 6 - Open Drain output 2MHz.
+ * 7 - Open Drain output 50MHz.
+ * 8 - Digital input with PullUp or PullDown resistor depending on ODR.
+ * 9 - Alternate Push Pull output 10MHz.
+ * A - Alternate Push Pull output 2MHz.
+ * B - Alternate Push Pull output 50MHz.
+ * C - Reserved.
+ * D - Alternate Open Drain output 10MHz.
+ * E - Alternate Open Drain output 2MHz.
+ * F - Alternate Open Drain output 50MHz.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+
+/*
+ * Port A setup.
+ * Everything input with pull-up except:
+ * PA2 - Alternate output (USART2 TX).
+ * PA3 - Normal input (USART2 RX).
+ * PA9 - Alternate output (USART1 TX).
+ * PA10 - Normal input (USART1 RX).
+ */
+#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */
+#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */
+#define VAL_GPIOAODR 0xFFFFFFFF
+
+/*
+ * Port B setup.
+ * Everything input with pull-up except:
+ * PB10 - Push Pull output (USB switch).
+ */
+#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */
+#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */
+#define VAL_GPIOBODR 0xFFFFFFFF
+
+/*
+ * Port C setup.
+ * Everything input with pull-up except:
+ * PC13 - Push Pull output (LED).
+ */
+#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */
+#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */
+#define VAL_GPIOCODR 0xFFFFFFFF
+
+/*
+ * Port D setup.
+ * Everything input with pull-up except:
+ * PD0 - Normal input (XTAL).
+ * PD1 - Normal input (XTAL).
+ */
+#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */
+#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */
+#define VAL_GPIODODR 0xFFFFFFFF
+
+/*
+ * Port E setup.
+ * Everything input with pull-up except:
+ */
+#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */
+#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */
+#define VAL_GPIOEODR 0xFFFFFFFF
+
+/*
+ * USB bus activation macro, required by the USB driver.
+ */
+/* The point is that most of the generic STM32F103* boards
+ have a 1.5k resistor connected on one end to the D+ line
+ and on the other end to some pin. Or even a slightly more
+ complicated "USB enable" circuit, controlled by a pin.
+ That should go here.
+
+ However on some boards (e.g. one that I have), there's no
+ such hardware. In which case it's better to not do anything.
+*/
+/*
+#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC)
+*/
+#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);
+
+/*
+ * USB bus de-activation macro, required by the USB driver.
+ */
+/*
+#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC)
+*/
+#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12);
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* _BOARD_H_ */
diff --git a/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.mk b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.mk
new file mode 100644
index 000000000..6b8b312fd
--- /dev/null
+++ b/keyboards/handwired/bluepill/boards/GENERIC_STM32_F103/board.mk
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F103/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F103
diff --git a/keyboards/handwired/bluepill/config.h b/keyboards/handwired/bluepill/config.h
new file mode 100644
index 000000000..aeab1808a
--- /dev/null
+++ b/keyboards/handwired/bluepill/config.h
@@ -0,0 +1,58 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+// Modified by Xydane
+#define DEBOUNCE 1
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Backlighting include */
+/*#define BACKLIGHT_PIN 19
+#define BACKLIGHT_LEVELS 5
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 6*/
+/*
+ * 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 \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/keymaps/default/keymap.c b/keyboards/handwired/bluepill/keymaps/default/keymap.c
new file mode 100644
index 000000000..8a3493039
--- /dev/null
+++ b/keyboards/handwired/bluepill/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+// Define layer names
+#define _NORMAL 0
+#define _FNONE 1
+#define _FNTWO 2
+
+// Highly Modified by Xydane
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_NORMAL] = LAYOUT_seventy_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCREEN,KC_HOME, KC_END, \
+KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DELETE, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_SLASH,KC_PGDOWN, \
+ KC_LSPO, XXXXXXX,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSPC,KC_UP, TT(2), \
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ),
+
+ [_FNONE] = LAYOUT_seventy_ansi(
+ KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,KC_MUTE,KC_VOLD,KC_VOLU, KC_TRNS,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P7, KC_P8, KC_P9, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P1, KC_P2, KC_P3, KC_PAST, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \
+ KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_P0, KC_PDOT,KC_PENT, KC_PSLS, KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS ),
+
+ [_FNTWO] = LAYOUT_seventy_ansi(
+ KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS, KC_MUTE,KC_VOLD,KC_VOLU,KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P7, KC_P8, KC_P9, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P1, KC_P2, KC_P3, KC_PAST, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \
+ KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_P0, KC_PDOT,KC_PENT, KC_PSLS, KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS ),
+};
+
+/* Layer based ilumination, just binary */
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case _FNONE:
+ palSetPad(GPIOA, 0); //OFF Color A
+ palClearPad(GPIOA, 1); //ON Color B
+ break;
+ case _FNTWO:
+ palClearPad(GPIOA, 0); //ON Color A
+ palClearPad(GPIOA, 1); //ON Color B
+ break;
+ default: // for any other layers, or the default layer
+ palClearPad(GPIOA, 0); //ON Color A
+ palSetPad(GPIOA, 1); //OFF Color B
+ break;
+ }
+ return state;
+} \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/keymaps/iso/keymap.c b/keyboards/handwired/bluepill/keymaps/iso/keymap.c
new file mode 100644
index 000000000..a6aedde7a
--- /dev/null
+++ b/keyboards/handwired/bluepill/keymaps/iso/keymap.c
@@ -0,0 +1,69 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+// Define layer names
+#define _NORMAL 0
+#define _FNONE 1
+#define _FNTWO 2
+
+// Highly Modified by Xydane
+const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_NORMAL] = LAYOUT_seventy_iso(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCREEN,KC_HOME, KC_END, \
+KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DELETE, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGUP, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT,KC_PGDOWN, \
+ KC_LSPO, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSPC,KC_UP, TT(2), \
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT ),
+
+ [_FNONE] = LAYOUT_seventy_iso(
+ KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,KC_MUTE,KC_VOLD,KC_VOLU, KC_TRNS,KC_TRNS,KC_NLCK, KC_CALC, KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P7, KC_P8, KC_P9, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P1, KC_P2, KC_P3, KC_PAST, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_P0, KC_PDOT,KC_PENT, KC_PSLS, KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS ),
+
+ [_FNTWO] = LAYOUT_seventy_iso(
+ KC_TRNS, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, KC_TRNS,KC_MUTE,KC_VOLD,KC_VOLU, KC_TRNS,KC_TRNS,KC_NLCK, KC_CALC, KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P7, KC_P8, KC_P9, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_P1, KC_P2, KC_P3, KC_PAST, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_P0, KC_PDOT,KC_PENT, KC_PSLS, KC_TRNS,KC_TRNS,KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS ),
+};
+
+/* Layer based ilumination, just binary */
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case _FNONE:
+ palSetPad(GPIOA, 0); //OFF Color A
+ palClearPad(GPIOA, 1); //ON Color B
+ break;
+ case _FNTWO:
+ palClearPad(GPIOA, 0); //ON Color A
+ palClearPad(GPIOA, 1); //ON Color B
+ break;
+ default: // for any other layers, or the default layer
+ palClearPad(GPIOA, 0); //ON Color A
+ palSetPad(GPIOA, 1); //OFF Color B
+ break;
+ }
+ return state;
+} \ No newline at end of file
diff --git a/keyboards/handwired/bluepill/ld/MKL26Z64.ld b/keyboards/handwired/bluepill/ld/MKL26Z64.ld
new file mode 100644
index 000000000..c4ca8b874
--- /dev/null
+++ b/keyboards/handwired/bluepill/ld/MKL26Z64.ld
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com
+ * (C) 2016 flabbergast <s3+flabbergast@sdfeu.org>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * KL26Z64 memory setup.
+ */
+MEMORY
+{
+ flash0 : org = 0x00000000, len = 0x100
+ flash1 : org = 0x00000400, len = 0x10
+ flash2 : org = 0x00000410, len = 62k - 0x410
+ flash3 : org = 0x0000F800, len = 2k
+ flash4 : org = 0x00000000, len = 0
+ flash5 : org = 0x00000000, len = 0
+ flash6 : org = 0x00000000, len = 0
+ flash7 : org = 0x00000000, len = 0
+ ram0 : org = 0x1FFFF800, len = 8k
+ ram1 : org = 0x00000000, len = 0
+ ram2 : org = 0x00000000, len = 0
+ ram3 : org = 0x00000000, len = 0
+ ram4 : org = 0x00000000, len = 0
+ ram5 : org = 0x00000000, len = 0
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
+}
+
+/* Flash region for the configuration bytes.*/
+SECTIONS
+{
+ .cfmprotect : ALIGN(4) SUBALIGN(4)
+ {
+ KEEP(*(.cfmconfig))
+ } > flash1
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash2);
+REGION_ALIAS("XTORS_FLASH_LMA", flash2);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash2);
+REGION_ALIAS("TEXT_FLASH_LMA", flash2);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash2);
+REGION_ALIAS("RODATA_FLASH_LMA", flash2);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash2);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash2);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+__eeprom_workarea_start__ = ORIGIN(flash3);
+__eeprom_workarea_size__ = LENGTH(flash3);
+__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__;
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/handwired/bluepill/ld/STM32F103x8_stm32duino_bootloader.ld b/keyboards/handwired/bluepill/ld/STM32F103x8_stm32duino_bootloader.ld
new file mode 100644
index 000000000..f9bfe9c00
--- /dev/null
+++ b/keyboards/handwired/bluepill/ld/STM32F103x8_stm32duino_bootloader.ld
@@ -0,0 +1,88 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/*
+ * ST32F103xB memory setup for use with the maplemini bootloader.
+ * You will have to
+ * #define CORTEX_VTOR_INIT 0x5000
+ * in your projects chconf.h
+ */
+MEMORY
+{
+ flash0 : org = 0x08002000, len = 128k - 0x2000
+ flash1 : org = 0x00000000, len = 0
+ flash2 : org = 0x00000000, len = 0
+ flash3 : org = 0x00000000, len = 0
+ flash4 : org = 0x00000000, len = 0
+ flash5 : org = 0x00000000, len = 0
+ flash6 : org = 0x00000000, len = 0
+ flash7 : org = 0x00000000, len = 0
+ ram0 : org = 0x20000000, len = 20k
+ ram1 : org = 0x00000000, len = 0
+ ram2 : org = 0x00000000, len = 0
+ ram3 : org = 0x00000000, len = 0
+ ram4 : org = 0x00000000, len = 0
+ ram5 : org = 0x00000000, len = 0
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash0);
+REGION_ALIAS("XTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash0);
+REGION_ALIAS("TEXT_FLASH_LMA", flash0);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash0);
+REGION_ALIAS("RODATA_FLASH_LMA", flash0);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash0);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash0);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/handwired/bluepill/readme.md b/keyboards/handwired/bluepill/readme.md
new file mode 100644
index 000000000..b8ca96992
--- /dev/null
+++ b/keyboards/handwired/bluepill/readme.md
@@ -0,0 +1,60 @@
+
+# BluePill handwired
+
+Keyboards using a BluePill controller (generic Chinese STM32F103C8T6) and based on the [KC64 of Xydane](https://github.com/Xydane/qmk_firmware).
+
+Keyboard Maintainer: [FPazos](https://github.com/fpazos), but I hope to leave the project in better hands.
+Hardware Supported: Bluepill STM32F103C8T6
+Hardware Availability: Everywhere
+
+Make example for BluePill70 (after setting up your build environment):
+
+ make handwired/bluepill/bluepill70: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).
+
+Read everything before using it.
+
+## Introduction
+
+First of all thanks to [Xydane](https://github.com/Xydane) at [GeekHack](https://geekhack.org/) for his advice and his repository, without it you couldn't be reading this.
+
+That's was an attempt to create a firmware using an STM32F103C8T6, and in a "future", also developing a revision for split keyboards. But...
+As I'm mainly a web developer I didn't even get to debug the controller, not to speak about ChibiOS. So I just structured everything, created a working 70% layout and leave the project to someone with more knowledge and patience.
+
+## Resistor fix
+
+If you want to use the Bluepill USB port, it's very likely that you need to solder a 1.8 kΩ between PA12 and 3.3V. That depends on the PC's motherboard but I needed, more info [here](https://wiki.stm32duino.com/index.php?title=Blue_Pill).
+
+## No bootloader
+
+Neither Xydane or I used the bootloader, the code for it is commented and you can use it if you want. I didn't achieve to run it and just used a serial programmer (FTDI, ST-LINK).
+
+## Adding layouts and revisions
+
+If you want to create new layouts just add them to the keymaps folder. If you prefer to develop a more complex revision just copy the bluepill70 folder, rename it and create a new keymap in /keymap.c (I tried to divide the project even more but it didn't worked).
+
+## Pinout
+
+That's the pinout;
+
+ A5 A15 A10 A9 A8 B15 B14 B13 B12 B11 B10 B1 B0 A7 A6
+ B9 ESC| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10| F11| F12| PSC| PGU| PGD
+ B8 GRA| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ' | ¡ | BCKS | DEL
+ B7 TAB| Q | W | E | R | T | Y | U | I | O | P | ` | + | | HOM
+ B6 CAP| A | S | D | F | G | H | J | K | L | Ñ | ´ | Ç | ENTER | END
+ B5 LSI| < | Z | X | C | V | B | N | M | , | . | - | RSHIF | UP | FNT
+ A4 LCT| WIN| ALT| ESPACE | ALG| FN | RCT| LEF| DOW| RIG
+
+And the wiring:
+ISO
+![Wiring](https://i.imgur.com/ZCaxVzs.jpg)
+ANSI
+![Wiring](https://i.imgur.com/dBUJCdD.jpg)
+
+It also uses:
+PC13: Caps Lock led.
+
+Backlight dual color leds, my version is for common anode that's more common, for leds with common anode just replace the palSetPad with palClearPad and viceversa.
+PA1: Backlight color A.
+PA0: Backlight color B.
diff --git a/keyboards/handwired/bluepill/rules.mk b/keyboards/handwired/bluepill/rules.mk
new file mode 100644
index 000000000..38bacae34
--- /dev/null
+++ b/keyboards/handwired/bluepill/rules.mk
@@ -0,0 +1,10 @@
+#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover
+CUSTOM_MATRIX = yes # Custom matrix file
+MOUSEKEY_ENABLE = no
+
+DEFAULT_FOLDER = handwired/bluepill/bluepill70 \ No newline at end of file
diff --git a/keyboards/handwired/cmd60/cmd60.c b/keyboards/handwired/cmd60/cmd60.c
new file mode 100644
index 000000000..91bbbd453
--- /dev/null
+++ b/keyboards/handwired/cmd60/cmd60.c
@@ -0,0 +1,8 @@
+#include "cmd60.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
diff --git a/keyboards/handwired/cmd60/cmd60.h b/keyboards/handwired/cmd60/cmd60.h
new file mode 100644
index 000000000..2e0baa999
--- /dev/null
+++ b/keyboards/handwired/cmd60/cmd60.h
@@ -0,0 +1,20 @@
+#ifndef CMD60_H
+#define CMD60_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, 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, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, KC_NO, KC_NO, 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/handwired/CMD60/config.h b/keyboards/handwired/cmd60/config.h
index 27eb400b8..27eb400b8 100644
--- a/keyboards/handwired/CMD60/config.h
+++ b/keyboards/handwired/cmd60/config.h
diff --git a/keyboards/handwired/cmd60/info.json b/keyboards/handwired/cmd60/info.json
new file mode 100644
index 000000000..8d555dc07
--- /dev/null
+++ b/keyboards/handwired/cmd60/info.json
@@ -0,0 +1,74 @@
+{
+ "keyboard_name": "CMD60",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"\\", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/cmd60/keymaps/default/keymap.c b/keyboards/handwired/cmd60/keymaps/default/keymap.c
new file mode 100644
index 000000000..448d81dc1
--- /dev/null
+++ b/keyboards/handwired/cmd60/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT( /* CMD60 - QWERTY */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ LT(3, KC_ENT), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, LT(2, KC_SPC), MO(3), MO(4), MO(5), TG(1) \
+ ),
+ [1] = LAYOUT( /* CMD60 - GameMode */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT, \
+ _______, XXXXXXX, _______, KC_SPC, _______, _______, _______, _______ \
+ ),
+ [2] = LAYOUT( /* CMD60 - Arrows */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ _______, KC_BSPC, KC_UP, KC_DEL, _______, _______, _______, KC_BSPC, KC_UP, KC_DEL, KC_PSCR, KC_SLCK, KC_PAUS, _______, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, \
+ _______, _______, _______, _______, KC_SPC, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [3] = LAYOUT( /* CMD60 - Functions */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_MUTE, KC_BSPC, KC_PGUP, KC_DEL, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, _______, KC_PAUS, KC_SLCK, KC_PSCR, \
+ _______, KC_HOME, KC_PGDN, KC_END, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_INS, _______, \
+ _______, _______, _______, _______, _______, _______, KC_END, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [4] = LAYOUT( /* CMD60 - Mouse */
+ KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_U, KC_BTN3, KC_WH_D, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [5] = LAYOUT( /* CMD60 - Media */
+ KC_WAKE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_MPLY, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WBAK, KC_WFWD, KC_WREF, \
+ _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+};
diff --git a/keyboards/handwired/cmd60/readme.md b/keyboards/handwired/cmd60/readme.md
new file mode 100644
index 000000000..933ac16d5
--- /dev/null
+++ b/keyboards/handwired/cmd60/readme.md
@@ -0,0 +1,19 @@
+# CMD60
+
+![CMD60](https://i.imgur.com/r9LA6Lx.jpg)
+
+This layout has been designed to optimize use of the left-hand, and it focussed specifically on programmers who work
+with text editors like SublimeText and Atom. It utilizes the power of Space_fn, and features a caps lock swap for Fn2
+and enter key on tap. These features allow you to keep your right hand on the mouse more and should enable you to
+achieve a higher level of productivity if you take the time to learn its function layers.
+
+[Build Log](https://redd.it/4mkuu8)
+
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: CMD60 handwired, Teensy 2.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/cmd60: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/CMD60/rules.mk b/keyboards/handwired/cmd60/rules.mk
index d980716ea..d980716ea 100644
--- a/keyboards/handwired/CMD60/rules.mk
+++ b/keyboards/handwired/cmd60/rules.mk
diff --git a/keyboards/handwired/dactyl/config.h b/keyboards/handwired/dactyl/config.h
index a990cc720..08931ecd3 100644
--- a/keyboards/handwired/dactyl/config.h
+++ b/keyboards/handwired/dactyl/config.h
@@ -63,8 +63,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 15
-#define PREVENT_STUCK_MODIFIERS
-
#define USB_MAX_POWER_CONSUMPTION 500
#endif
diff --git a/keyboards/handwired/dactyl/matrix.c b/keyboards/handwired/dactyl/matrix.c
index 52c76fadd..f63cf1188 100644
--- a/keyboards/handwired/dactyl/matrix.c
+++ b/keyboards/handwired/dactyl/matrix.c
@@ -48,8 +48,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
static const uint8_t onboard_row_pins[MATRIX_ROWS] = MATRIX_ONBOARD_ROW_PINS;
static const uint8_t onboard_col_pins[MATRIX_COLS] = MATRIX_ONBOARD_COL_PINS;
static const bool col_expanded[MATRIX_COLS] = COL_EXPANDED;
-static const uint8_t expander_row_pins[MATRIX_ROWS] = MATRIX_EXPANDER_ROW_PINS;
-static const uint8_t expander_col_pins[MATRIX_COLS] = MATRIX_EXPANDER_COL_PINS;
#endif
/* matrix state(1:on, 0:off) */
@@ -58,12 +56,14 @@ static matrix_row_t matrix[MATRIX_ROWS];
static matrix_row_t matrix_debouncing[MATRIX_ROWS];
#if (DIODE_DIRECTION == COL2ROW)
+ static const uint8_t expander_col_pins[MATRIX_COLS] = MATRIX_EXPANDER_COL_PINS;
static void init_cols(void);
static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
static void unselect_rows(void);
static void select_row(uint8_t row);
static void unselect_row(uint8_t row);
#elif (DIODE_DIRECTION == ROW2COL)
+ static const uint8_t expander_row_pins[MATRIX_ROWS] = MATRIX_EXPANDER_ROW_PINS;
static void init_rows(void);
static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
static void unselect_cols(void);
diff --git a/keyboards/handwired/dactyl_manuform/4x5/4x5.c b/keyboards/handwired/dactyl_manuform/4x5/4x5.c
new file mode 100644
index 000000000..78c0fee81
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x5/4x5.c
@@ -0,0 +1,23 @@
+#include "4x5.h"
+
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
+
diff --git a/keyboards/handwired/dactyl_manuform/4x5/4x5.h b/keyboards/handwired/dactyl_manuform/4x5/4x5.h
new file mode 100644
index 000000000..b34d97adb
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x5/4x5.h
@@ -0,0 +1,70 @@
+#pragma once
+
+#include "dactyl_manuform.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+#ifndef FLIP_HALF
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
+ L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
+ L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
+ L31, L32, R32, R33, \
+ L33, L34, R30, R31, \
+ L44, L43, R41, R40, \
+ L42, L41, R43, R42 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04 }, \
+ { L10, L11, L12, L13, L14 }, \
+ { L20, L21, L22, L23, L24 }, \
+ { KC_NO, L31, L32, L33, L34 }, \
+ { KC_NO, L41, L42, L43, L44 }, \
+\
+ { R04, R03, R02, R01, R00 }, \
+ { R14, R13, R12, R11, R10 }, \
+ { R24, R23, R22, R21, R20 }, \
+ { KC_NO, R33, R32, R31, R30 }, \
+ { KC_NO, R43, R42, R41, R40 } \
+ }
+#else
+
+
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
+ L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
+ L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
+ L31, L32, R32, R33, \
+ L33, L34, R30, R31, \
+ L44, L43, R41, R40, \
+ L42, L41, R43, R42 \
+ ) \
+ { \
+ { R04, R03, R02, R01, R00 }, \
+ { R14, R13, R12, R11, R10 }, \
+ { R24, R23, R22, R21, R20 }, \
+ { KC_NO, R33, R32, R31, R30 }, \
+ { KC_NO, R43, R42, R41, R40 }, \
+\
+ { L00, L01, L02, L03, L04 }, \
+ { L10, L11, L12, L13, L14 }, \
+ { L20, L21, L22, L23, L24 }, \
+ { KC_NO, L31, L32, L33, L34 }, \
+ { KC_NO, L41, L42, L43, L44 } \
+\
+ }
+#endif
+
diff --git a/keyboards/handwired/dactyl_manuform/4x5/config.h b/keyboards/handwired/dactyl_manuform/4x5/config.h
new file mode 100644
index 000000000..c8417a2f0
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x5/config.h
@@ -0,0 +1,46 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER tshort
+#define DESCRIPTION A split keyboard for the cheap makers
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 5
+
+// wiring of each half
+#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
+// #define MATRIX_COL_PINS { B5, B4, E6, D7, C6 }
+#define MATRIX_COL_PINS { C6, D7, E6, B4, B5 }
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+
diff --git a/keyboards/handwired/dactyl_manuform/4x5/info.json b/keyboards/handwired/dactyl_manuform/4x5/info.json
new file mode 100644
index 000000000..4ee52e164
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x5/info.json
@@ -0,0 +1,59 @@
+{
+ "keyboard_name": "Dactyl Manuform 4x5",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 7,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"R00", "x":10, "y":0},
+ {"label":"R01", "x":11, "y":0},
+ {"label":"R02", "x":12, "y":0},
+ {"label":"R03", "x":13, "y":0},
+ {"label":"R04", "x":14, "y":0},
+ {"label":"L10", "x":0, "y":1},
+ {"label":"L11", "x":1, "y":1},
+ {"label":"L12", "x":2, "y":1},
+ {"label":"L13", "x":3, "y":1},
+ {"label":"L14", "x":4, "y":1},
+ {"label":"R10", "x":10, "y":1},
+ {"label":"R11", "x":11, "y":1},
+ {"label":"R12", "x":12, "y":1},
+ {"label":"R13", "x":13, "y":1},
+ {"label":"R14", "x":14, "y":1},
+ {"label":"L20", "x":0, "y":2},
+ {"label":"L21", "x":1, "y":2},
+ {"label":"L22", "x":2, "y":2},
+ {"label":"L23", "x":3, "y":2},
+ {"label":"L24", "x":4, "y":2},
+ {"label":"R20", "x":10, "y":2},
+ {"label":"R21", "x":11, "y":2},
+ {"label":"R22", "x":12, "y":2},
+ {"label":"R23", "x":13, "y":2},
+ {"label":"R24", "x":14, "y":2},
+ {"label":"L31", "x":1, "y":3},
+ {"label":"L32", "x":2, "y":3},
+ {"label":"R32", "x":12, "y":3},
+ {"label":"R33", "x":13, "y":3},
+ {"label":"L33", "x":3, "y":4},
+ {"label":"L34", "x":4, "y":4},
+ {"label":"R30", "x":10, "y":4},
+ {"label":"R31", "x":11, "y":4},
+ {"label":"L44", "x":5, "y":5},
+ {"label":"L43", "x":6, "y":5},
+ {"label":"R41", "x":8, "y":5},
+ {"label":"R40", "x":9, "y":5},
+ {"label":"L42", "x":5, "y":6},
+ {"label":"L41", "x":6, "y":6},
+ {"label":"R43", "x":8, "y":6},
+ {"label":"R42", "x":9, "y":6}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/config.h b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/config.h
new file mode 100644
index 000000000..682c7a868
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/config.h
@@ -0,0 +1,34 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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.h"
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
diff --git a/keyboards/handwired/dactyl_manuform/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/keymap.c
index 24c02215e..24c02215e 100644
--- a/keyboards/handwired/dactyl_manuform/keymaps/default/keymap.c
+++ b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/keymap.c
diff --git a/keyboards/ergo42/keymaps/biacco-macOS/rules.mk b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/rules.mk
index 457a3d01d..457a3d01d 100644
--- a/keyboards/ergo42/keymaps/biacco-macOS/rules.mk
+++ b/keyboards/handwired/dactyl_manuform/4x5/keymaps/default/rules.mk
diff --git a/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/config.h b/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/config.h
new file mode 100644
index 000000000..682c7a868
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/config.h
@@ -0,0 +1,34 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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.h"
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
diff --git a/keyboards/handwired/dactyl_manuform/keymaps/dvorak/keymap.c b/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/keymap.c
index 0a1c90b6b..0a1c90b6b 100644
--- a/keyboards/handwired/dactyl_manuform/keymaps/dvorak/keymap.c
+++ b/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/keymap.c
diff --git a/keyboards/ergo42/keymaps/biacco/rules.mk b/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/rules.mk
index 457a3d01d..457a3d01d 100644
--- a/keyboards/ergo42/keymaps/biacco/rules.mk
+++ b/keyboards/handwired/dactyl_manuform/4x5/keymaps/dvorak/rules.mk
diff --git a/keyboards/handwired/dactyl_manuform/4x5/rules.mk b/keyboards/handwired/dactyl_manuform/4x5/rules.mk
new file mode 100644
index 000000000..750807051
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x5/rules.mk
@@ -0,0 +1,20 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/dactyl_manuform/4x6/4x6.c b/keyboards/handwired/dactyl_manuform/4x6/4x6.c
new file mode 100644
index 000000000..1d305c854
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6/4x6.c
@@ -0,0 +1,14 @@
+#include "4x6.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/handwired/dactyl_manuform/4x6/4x6.h b/keyboards/handwired/dactyl_manuform/4x6/4x6.h
new file mode 100644
index 000000000..25741be57
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6/4x6.h
@@ -0,0 +1,36 @@
+#pragma once
+
+#include "dactyl_manuform.h"
+#include "quantum.h"
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+#define LAYOUT(\
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L32, L33, R32, R33, \
+ L34, L35, R30, R31, \
+ L44, L45, R40, R41, \
+ L42, L43, R42, R43 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { KC_NO, KC_NO, L32, L33, L34, L35 }, \
+ { KC_NO, KC_NO, L42, L43, L44, L45 }, \
+\
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, KC_NO, KC_NO }, \
+ { R40, R41, R42, R43, KC_NO, KC_NO } \
+\
+ }
diff --git a/keyboards/handwired/dactyl_manuform/4x6/config.h b/keyboards/handwired/dactyl_manuform/4x6/config.h
new file mode 100644
index 000000000..d4a192287
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6/config.h
@@ -0,0 +1,40 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER tshort
+#define DESCRIPTION A split keyboard for the cheap makers
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 6
+
+// row-driven
+#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
+#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B5 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
diff --git a/keyboards/handwired/dactyl_manuform/4x6/info.json b/keyboards/handwired/dactyl_manuform/4x6/info.json
new file mode 100644
index 000000000..ba358a703
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6/info.json
@@ -0,0 +1,65 @@
+{
+ "keyboard_name": "Dactyl Manuform 4x6",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 17,
+ "height": 7,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"R00", "x":11, "y":0},
+ {"label":"R01", "x":12, "y":0},
+ {"label":"R02", "x":13, "y":0},
+ {"label":"R03", "x":14, "y":0},
+ {"label":"R04", "x":15, "y":0},
+ {"label":"R05", "x":16, "y":0},
+ {"label":"L10", "x":0, "y":1},
+ {"label":"L11", "x":1, "y":1},
+ {"label":"L12", "x":2, "y":1},
+ {"label":"L13", "x":3, "y":1},
+ {"label":"L14", "x":4, "y":1},
+ {"label":"L15", "x":5, "y":1},
+ {"label":"R10", "x":11, "y":1},
+ {"label":"R11", "x":12, "y":1},
+ {"label":"R12", "x":13, "y":1},
+ {"label":"R13", "x":14, "y":1},
+ {"label":"R14", "x":15, "y":1},
+ {"label":"R15", "x":16, "y":1},
+ {"label":"L20", "x":0, "y":2},
+ {"label":"L21", "x":1, "y":2},
+ {"label":"L22", "x":2, "y":2},
+ {"label":"L23", "x":3, "y":2},
+ {"label":"L24", "x":4, "y":2},
+ {"label":"L25", "x":5, "y":2},
+ {"label":"R20", "x":11, "y":2},
+ {"label":"R21", "x":12, "y":2},
+ {"label":"R22", "x":13, "y":2},
+ {"label":"R23", "x":14, "y":2},
+ {"label":"R24", "x":15, "y":2},
+ {"label":"R25", "x":16, "y":2},
+ {"label":"L32", "x":2, "y":3},
+ {"label":"L33", "x":3, "y":3},
+ {"label":"R32", "x":13, "y":3},
+ {"label":"R33", "x":14, "y":3},
+ {"label":"L34", "x":4, "y":4},
+ {"label":"L35", "x":5, "y":4},
+ {"label":"R30", "x":11, "y":4},
+ {"label":"R31", "x":12, "y":4},
+ {"label":"L44", "x":6, "y":5},
+ {"label":"L45", "x":7, "y":5},
+ {"label":"R40", "x":9, "y":5},
+ {"label":"R41", "x":10, "y":5},
+ {"label":"L42", "x":6, "y":6},
+ {"label":"L43", "x":7, "y":6},
+ {"label":"R42", "x":9, "y":6},
+ {"label":"R43", "x":10, "y":6}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/config.h b/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/config.h
new file mode 100644
index 000000000..1fc2c617f
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/config.h
@@ -0,0 +1,31 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
diff --git a/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c
new file mode 100644
index 000000000..ad23beef5
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6/keymaps/default/keymap.c
@@ -0,0 +1,87 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _BASE 0
+#define _RAISE 1
+#define _LOWER 2
+
+// Fillers to make layering more clear
+
+#define ____ KC_TRNS
+
+#define SFT_ESC SFT_T(KC_ESC)
+#define CTL_BSPC CTL_T(KC_BSPC)
+#define ALT_SPC ALT_T(KC_SPC)
+#define SFT_ENT SFT_T(KC_ENT)
+
+#define KC_ML KC_MS_LEFT
+#define KC_MR KC_MS_RIGHT
+#define KC_MU KC_MS_UP
+#define KC_MD KC_MS_DOWN
+#define KC_MB1 KC_MS_BTN1
+#define KC_MB2 KC_MS_BTN1
+
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Base (qwerty)
+ * +-----------------------------------------+ +-----------------------------------------+
+ * | ESC | q | w | e | r | t | | y | u | i | o | p | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | TAB | a | s | d | f | g | | h | j | k | l | ; | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | SHFT | z | x | c | v | b | | n | m | , | . | / | |
+ * +------+------+------+------+-------------+ +-------------+------+------+------+------+
+ * | [ | ] | | | |
+ * +-------------+-------------+ +-------------+-------------+
+ * | | | | | |
+ * |------+------| |------+------|
+ * | | | | | |
+ * +-------------+ +-------------+
+ * +-------------+ +-------------+
+ * | | | | | |
+ * |------+------| |------+------|
+ * | | | | | |
+ * +-------------+ +-------------+
+ */
+
+[_BASE] = LAYOUT( \
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \
+ KC_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_BSLASH, \
+ KC_LBRC,KC_RBRC, KC_PLUS,KC_EQL, \
+ RAISE, KC_SPC, KC_ENT, LOWER, \
+ KC_TAB, KC_HOME, KC_END, KC_DEL, \
+ KC_BSPC,KC_GRV, KC_LGUI,KC_LALT \
+),
+
+[_LOWER] = LAYOUT(
+ _______,_______,_______,_______,_______,KC_LBRC, KC_RBRC, KC_P7, KC_P8, KC_P9, RESET, KC_PLUS, \
+ _______,KC_HOME,KC_PGUP,KC_PGDN,KC_END ,KC_LPRN, KC_RPRN, KC_P4, KC_P5, KC_P6, KC_MINS,KC_PIPE, \
+ _______,_______,_______,_______,_______,_______, _______, KC_P1, KC_P2, KC_P3, KC_EQL, KC_UNDS, \
+ _______,KC_PSCR, _______, KC_P0, \
+ _______,_______, _______,_______, \
+ _______,_______, _______,_______, \
+ _______,_______, _______,_______ \
+),
+
+[_RAISE] = LAYOUT(
+ _______,RESET, _______,_______,_______,KC_LBRC, KC_RBRC,_______,KC_NLCK,KC_INS, KC_SLCK,KC_MUTE, \
+ _______,KC_LEFT,KC_UP ,KC_DOWN,KC_RGHT,KC_LPRN, KC_RPRN,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_VOLU, \
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,KC_VOLD, \
+ _______,_______, KC_EQL, _______, \
+ _______,_______, _______,_______, \
+ _______,_______, _______,_______, \
+ _______,_______, _______,_______ \
+)
+};
+
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
diff --git a/keyboards/handwired/dactyl_manuform/4x6/rules.mk b/keyboards/handwired/dactyl_manuform/4x6/rules.mk
new file mode 100644
index 000000000..750807051
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/4x6/rules.mk
@@ -0,0 +1,20 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/dactyl_manuform/5x6/5x6.c b/keyboards/handwired/dactyl_manuform/5x6/5x6.c
new file mode 100644
index 000000000..68fceffd9
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/5x6.c
@@ -0,0 +1,23 @@
+#include "5x6.h"
+
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
+
diff --git a/keyboards/handwired/dactyl_manuform/5x6/5x6.h b/keyboards/handwired/dactyl_manuform/5x6/5x6.h
new file mode 100644
index 000000000..72045cc29
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/5x6.h
@@ -0,0 +1,40 @@
+#pragma once
+
+#include "dactyl_manuform.h"
+#include "quantum.h"
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+#define LAYOUT_5x6(\
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
+ L42, L43, R42, R43, \
+ L44, L45, R40, R41, \
+ L54, L55, R50, R51, \
+ L52, L53, R52, R53 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { KC_NO, KC_NO, L42, L43, L44, L45 }, \
+ { KC_NO, KC_NO, L52, L53, L54, L55 }, \
+\
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ { R40, R41, R42, R43, KC_NO, KC_NO },\
+ { R50, R51, R52, R53, KC_NO, KC_NO }, \
+ }
+
+
diff --git a/keyboards/handwired/dactyl_manuform/5x6/config.h b/keyboards/handwired/dactyl_manuform/5x6/config.h
new file mode 100644
index 000000000..06ac02dfc
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/config.h
@@ -0,0 +1,41 @@
+/*
+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"
+
+
+#define PRODUCT Dactyl-Manuform (5x6)
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B5 }
+#define MATRIX_ROW_PINS { F6, F7, B1, B3, B2, B6 }
+
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
diff --git a/keyboards/handwired/dactyl_manuform/5x6/info.json b/keyboards/handwired/dactyl_manuform/5x6/info.json
new file mode 100644
index 000000000..d7aa3acee
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/info.json
@@ -0,0 +1,77 @@
+{
+ "keyboard_name": "Dactyl Manuform 5x6",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 17,
+ "height": 8,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"R00", "x":11, "y":0},
+ {"label":"R01", "x":12, "y":0},
+ {"label":"R02", "x":13, "y":0},
+ {"label":"R03", "x":14, "y":0},
+ {"label":"R04", "x":15, "y":0},
+ {"label":"R05", "x":16, "y":0},
+ {"label":"L10", "x":0, "y":1},
+ {"label":"L11", "x":1, "y":1},
+ {"label":"L12", "x":2, "y":1},
+ {"label":"L13", "x":3, "y":1},
+ {"label":"L14", "x":4, "y":1},
+ {"label":"L15", "x":5, "y":1},
+ {"label":"R10", "x":11, "y":1},
+ {"label":"R11", "x":12, "y":1},
+ {"label":"R12", "x":13, "y":1},
+ {"label":"R13", "x":14, "y":1},
+ {"label":"R14", "x":15, "y":1},
+ {"label":"R15", "x":16, "y":1},
+ {"label":"L20", "x":0, "y":2},
+ {"label":"L21", "x":1, "y":2},
+ {"label":"L22", "x":2, "y":2},
+ {"label":"L23", "x":3, "y":2},
+ {"label":"L24", "x":4, "y":2},
+ {"label":"L25", "x":5, "y":2},
+ {"label":"R20", "x":11, "y":2},
+ {"label":"R21", "x":12, "y":2},
+ {"label":"R22", "x":13, "y":2},
+ {"label":"R23", "x":14, "y":2},
+ {"label":"R24", "x":15, "y":2},
+ {"label":"R25", "x":16, "y":2},
+ {"label":"L30", "x":0, "y":3},
+ {"label":"L31", "x":1, "y":3},
+ {"label":"L32", "x":2, "y":3},
+ {"label":"L33", "x":3, "y":3},
+ {"label":"L34", "x":4, "y":3},
+ {"label":"L35", "x":5, "y":3},
+ {"label":"R30", "x":11, "y":3},
+ {"label":"R31", "x":12, "y":3},
+ {"label":"R32", "x":13, "y":3},
+ {"label":"R33", "x":14, "y":3},
+ {"label":"R34", "x":15, "y":3},
+ {"label":"R35", "x":16, "y":3},
+ {"label":"L42", "x":2, "y":4},
+ {"label":"L43", "x":3, "y":4},
+ {"label":"R42", "x":13, "y":4},
+ {"label":"R43", "x":14, "y":4},
+ {"label":"L44", "x":4, "y":5},
+ {"label":"L45", "x":5, "y":5},
+ {"label":"R40", "x":11, "y":5},
+ {"label":"R41", "x":12, "y":5},
+ {"label":"L54", "x":6, "y":6},
+ {"label":"L55", "x":7, "y":6},
+ {"label":"R50", "x":9, "y":6},
+ {"label":"R51", "x":10, "y":6},
+ {"label":"L52", "x":6, "y":7},
+ {"label":"L53", "x":7, "y":7},
+ {"label":"R52", "x":9, "y":7},
+ {"label":"R53", "x":10, "y":7}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/config.h b/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/config.h
new file mode 100644
index 000000000..10b969326
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+#include "333fred_config.h"
+
+#define USE_SERIAL
+#define EE_HANDS
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 200
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/keymap.c b/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/keymap.c
new file mode 100644
index 000000000..c37009f24
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/keymap.c
@@ -0,0 +1,80 @@
+#include QMK_KEYBOARD_H
+#include "333fred.h"
+
+enum custom_macros {
+ DLEFT,
+ DRIGHT,
+ PSCREEN_APP
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [BASE] = LAYOUT_5x6(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ OSM(MOD_LSFT), CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OSM(MOD_RSFT),
+ KC_F4, KC_F5, TG(CODEFLOW), KC_EQL,
+ KC_LALT, KC_BSPC, KC_SPC, OSL(VIM),
+ KC_TAB, TD(TD_SYM_VIM), KC_ENT, KC_RGUI,
+ KC_LCTL, KC_DEL, KC_UP, KC_DOWN
+ ),
+
+ [CODEFLOW] = LAYOUT_5x6(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_F7, KC_F8, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ ),
+
+ [SYMB] = LAYOUT_5x6(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, KC_EXLM, KC_AT, KC_LPRN, KC_RPRN, KC_PIPE, _______, KC_7, KC_8, KC_9, _______, KC_F12,
+ _______, KC_HASH, KC_DLR, KC_LCBR, KC_RCBR, KC_GRV, _______, KC_4, KC_5, KC_6, _______, _______,
+ _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, _______, KC_1, KC_2, KC_3, _______, _______,
+ KC_F7, KC_F8, KC_0, KC_ENT,
+ _______, _______, KC_MPLY, KC_MNXT,
+ _______, _______, KC_MPRV, _______,
+ _______, _______, KC_VOLU, KC_VOLD
+ ),
+
+ [VIM] = LAYOUT_5x6(
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
+ _______, _______, _______, _______, KC_LSFT, _______, _______, _______, _______, _______, _______, _______,
+ _______, M(DLEFT), M(DRIGHT), KC_LCTL, KC_LGUI, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______, _______, _______
+ ),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
+ switch(id) {
+ case DLEFT:
+ if (record->event.pressed) { // Windows move desktop left
+ return MACRO(D(LCTL), D(LGUI), T(LEFT), U(LGUI), U(LCTL), END);
+ }
+ break;
+ case DRIGHT:
+ if (record->event.pressed) { // Windows move desktop right
+ return MACRO(D(LCTL), D(LGUI), T(RIGHT), U(LGUI), U(LCTL), END);
+ }
+ break;
+ case PSCREEN_APP: if (record->event.pressed) {
+ return MACRO(D(LALT), T(PSCR), U(LALT), END);
+ }
+ break;
+ }
+ return MACRO_NONE;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ tap_dance_process_record(keycode);
+ return true;
+}
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/rules.mk b/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/rules.mk
new file mode 100644
index 000000000..79ef33e7c
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/333fred/rules.mk
@@ -0,0 +1,7 @@
+
+NKRO_ENABLE = yes
+KEY_LOCK_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+CONSOLE_ENABLE = no
+PERMISSIVE_HOLD = yes
+EXTRAFLAGS += -flto
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/default/config.h b/keyboards/handwired/dactyl_manuform/5x6/keymaps/default/config.h
new file mode 100644
index 000000000..29ab59ad6
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/default/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 USE_SERIAL
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+//#define EE_HANDS
+// Rows are doubled-up
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/5x6/keymaps/default/keymap.c
new file mode 100644
index 000000000..7be6a5bc7
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/default/keymap.c
@@ -0,0 +1,56 @@
+/* A standard layout for the Dactyl Manuform 5x6 Keyboard */
+
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+
+#define _______ KC_TRNS
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_5x6(
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_BSPC,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_MINS,
+ KC_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT,
+ KC_LCTL, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_BSLASH,
+ KC_LBRC,KC_RBRC, KC_PLUS, KC_EQL,
+ RAISE,KC_SPC, KC_ENT, LOWER,
+ KC_TAB,KC_HOME, KC_END, KC_DEL,
+ KC_BSPC, KC_GRV, KC_LGUI, KC_LALT
+ ),
+
+ [_LOWER] = LAYOUT_5x6(
+
+ KC_TILD,KC_EXLM, KC_AT ,KC_HASH,KC_DLR ,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_DEL,
+ _______,_______,_______,_______,_______,KC_LBRC, KC_RBRC, KC_P7 , KC_P8 , KC_P9 ,_______,KC_PLUS,
+ _______,KC_HOME,KC_PGUP,KC_PGDN,KC_END ,KC_LPRN, KC_RPRN, KC_P4 , KC_P5 , KC_P6 ,KC_MINS,KC_PIPE,
+ _______,_______,_______,_______,_______,_______, _______, KC_P1 , KC_P2 , KC_P3 ,KC_EQL ,KC_UNDS,
+ _______,KC_PSCR, _______, KC_P0,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+
+ ),
+
+ [_RAISE] = LAYOUT_5x6(
+ KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 ,
+ _______,_______,_______,_______,_______,KC_LBRC, KC_RBRC,_______,KC_NLCK,KC_INS ,KC_SLCK,KC_MUTE,
+ _______,KC_LEFT,KC_UP ,KC_DOWN,KC_RGHT,KC_LPRN, KC_RPRN,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_VOLU,
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,KC_VOLD,
+ _______,_______, KC_EQL ,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+ ),
+};
+
+
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/impstyle/config.h b/keyboards/handwired/dactyl_manuform/5x6/keymaps/impstyle/config.h
new file mode 100644
index 000000000..d046806ea
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/impstyle/config.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#define USE_SERIAL
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+//#define EE_HANDS
+// Rows are doubled-up
diff --git a/keyboards/handwired/dactyl_manuform/5x6/keymaps/impstyle/keymap.c b/keyboards/handwired/dactyl_manuform/5x6/keymaps/impstyle/keymap.c
new file mode 100644
index 000000000..9a89212fe
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/keymaps/impstyle/keymap.c
@@ -0,0 +1,57 @@
+
+/* A QWERTY 3 Layer layout for the Dactyl Manuform 5x6 Keyboard */
+
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+
+#define _______ KC_TRNS
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+ [_QWERTY] = LAYOUT_5x6(
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_BSPC,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_MINS,
+ KC_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT,
+ KC_LCTL, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_BSLASH,
+ KC_LBRC,KC_RBRC, KC_PLUS, KC_EQL,
+ RAISE,KC_SPC, KC_ENT, LOWER,
+ KC_TAB,KC_HOME, KC_END, KC_DEL,
+ KC_BSPC,KC_GRV, KC_LGUI, KC_LALT
+ ),
+
+
+ [_LOWER] = LAYOUT_5x6(
+ KC_TILD,KC_EXLM, KC_AT ,KC_HASH,KC_DLR ,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_DEL,
+ _______,_______,_______,_______,_______,KC_LBRC, KC_RBRC, KC_P7 , KC_P8 , KC_P9 ,_______,KC_PLUS,
+ _______,KC_HOME,KC_PGUP,KC_PGDN,KC_END ,KC_LPRN, KC_RPRN, KC_P4 , KC_P5 , KC_P6 ,KC_MINS,KC_PIPE,
+ _______,_______,_______,_______,_______,_______, _______, KC_P1 , KC_P2 , KC_P3 ,KC_EQL ,KC_UNDS,
+ _______,KC_PSCR, _______, KC_P0,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+
+),
+
+ [_RAISE] = LAYOUT_5x6(
+ KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 ,
+ _______,_______,_______,_______,_______,KC_LBRC, KC_RBRC,_______,KC_NLCK,KC_INS ,KC_SLCK,KC_MUTE,
+ _______,KC_LEFT,KC_UP ,KC_DOWN,KC_RGHT,KC_LPRN, KC_RPRN,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_VOLU,
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,KC_VOLD,
+ _______,_______, KC_EQL ,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+ ),
+
+ };
diff --git a/keyboards/handwired/dactyl_manuform/5x6/rules.mk b/keyboards/handwired/dactyl_manuform/5x6/rules.mk
new file mode 100644
index 000000000..750807051
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x6/rules.mk
@@ -0,0 +1,20 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/dactyl_manuform/5x7/5x7.c b/keyboards/handwired/dactyl_manuform/5x7/5x7.c
new file mode 100644
index 000000000..135014d65
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x7/5x7.c
@@ -0,0 +1,23 @@
+#include "5x7.h"
+
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
+
diff --git a/keyboards/handwired/dactyl_manuform/5x7/5x7.h b/keyboards/handwired/dactyl_manuform/5x7/5x7.h
new file mode 100644
index 000000000..95fd5bb10
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x7/5x7.h
@@ -0,0 +1,45 @@
+#pragma once
+
+#include "dactyl_manuform.h"
+#include "quantum.h"
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avR/io.h>
+ #include <avR/inteRRupt.h>
+#endif
+#endif
+
+#define LAYOUT_5x7( \
+ L11, L12, L13, L14, L15, L16, L17, \
+ L21, L22, L23, L24, L25, L26, L27, \
+ L31, L32, L33, L34, L35, L36, L37, \
+ L41, L42, L43, L44, L45, L46, \
+ L51, L52, L53, L54, \
+ L55, L56, \
+ L65, L66, \
+ L63, L64, \
+ R11, R12, R13, R14, R15, R16, R17, \
+ R21, R22, R23, R24, R25, R26, R27, \
+ R31, R32, R33, R34, R35, R36, R37, \
+ R42, R43, R44, R45, R46, R47, \
+ R54, R55, R56, R57, \
+ R52, R53, \
+ R62, R63, \
+ R64, R65 \
+ ) \
+ { \
+ { L11, L12, L13, L14, L15, L16, L17 }, \
+ { L21, L22, L23, L24, L25, L26, L27 }, \
+ { L31, L32, L33, L34, L35, L36, L37 }, \
+ { L41, L42, L43, L44, L45, L46, KC_NO }, \
+ { L51, L52, L53, L54, L55, L56, KC_NO }, \
+ { KC_NO, KC_NO, L63, L64, L65, L66, KC_NO }, \
+ { R11, R12, R13, R14, R15, R16, R17 }, \
+ { R21, R22, R23, R24, R25, R26, R27 }, \
+ { R31, R32, R33, R34, R35, R36, R37 }, \
+ { KC_NO, R42, R43, R44, R45, R46, R47 }, \
+ { KC_NO, R52, R53, R54, R55, R56, R57 }, \
+ { KC_NO, R62, R63, R64, R65, KC_NO, KC_NO } \
+ }
diff --git a/keyboards/handwired/dactyl_manuform/5x7/config.h b/keyboards/handwired/dactyl_manuform/5x7/config.h
new file mode 100644
index 000000000..bef48f17e
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x7/config.h
@@ -0,0 +1,33 @@
+/*
+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"
+
+
+#define PRODUCT Dactyl-Manuform (Ergodox)
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 7
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6 }
diff --git a/keyboards/handwired/dactyl_manuform/5x7/info.json b/keyboards/handwired/dactyl_manuform/5x7/info.json
new file mode 100644
index 000000000..b4b2c7b79
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x7/info.json
@@ -0,0 +1,87 @@
+{
+ "keyboard_name": "Dactyl Manuform 5x7",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 17,
+ "height": 16,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"L11", "x":0, "y":0},
+ {"label":"L12", "x":1, "y":0},
+ {"label":"L13", "x":2, "y":0},
+ {"label":"L14", "x":3, "y":0},
+ {"label":"L15", "x":4, "y":0},
+ {"label":"L16", "x":5, "y":0},
+ {"label":"L17", "x":6, "y":0},
+ {"label":"L21", "x":0, "y":1},
+ {"label":"L22", "x":1, "y":1},
+ {"label":"L23", "x":2, "y":1},
+ {"label":"L24", "x":3, "y":1},
+ {"label":"L25", "x":4, "y":1},
+ {"label":"L26", "x":5, "y":1},
+ {"label":"L27", "x":6, "y":1},
+ {"label":"L31", "x":0, "y":2},
+ {"label":"L32", "x":1, "y":2},
+ {"label":"L33", "x":2, "y":2},
+ {"label":"L34", "x":3, "y":2},
+ {"label":"L35", "x":4, "y":2},
+ {"label":"L36", "x":5, "y":2},
+ {"label":"L37", "x":6, "y":2},
+ {"label":"L41", "x":0, "y":3},
+ {"label":"L42", "x":1, "y":3},
+ {"label":"L43", "x":2, "y":3},
+ {"label":"L44", "x":3, "y":3},
+ {"label":"L45", "x":4, "y":3},
+ {"label":"L46", "x":5, "y":3},
+ {"label":"L51", "x":0, "y":4},
+ {"label":"L52", "x":1, "y":4},
+ {"label":"L53", "x":2, "y":4},
+ {"label":"L54", "x":3, "y":4},
+ {"label":"L55", "x":4, "y":5},
+ {"label":"L56", "x":5, "y":5},
+ {"label":"L65", "x":6, "y":6},
+ {"label":"L66", "x":7, "y":6},
+ {"label":"L63", "x":6, "y":7},
+ {"label":"L64", "x":7, "y":7},
+ {"label":"R11", "x":10, "y":0},
+ {"label":"R12", "x":11, "y":0},
+ {"label":"R13", "x":12, "y":0},
+ {"label":"R14", "x":13, "y":0},
+ {"label":"R15", "x":14, "y":0},
+ {"label":"R16", "x":15, "y":0},
+ {"label":"R17", "x":16, "y":0},
+ {"label":"R21", "x":10, "y":1},
+ {"label":"R22", "x":11, "y":1},
+ {"label":"R23", "x":12, "y":1},
+ {"label":"R24", "x":13, "y":1},
+ {"label":"R25", "x":14, "y":1},
+ {"label":"R26", "x":15, "y":1},
+ {"label":"R27", "x":16, "y":1},
+ {"label":"R31", "x":10, "y":2},
+ {"label":"R32", "x":11, "y":2},
+ {"label":"R33", "x":12, "y":2},
+ {"label":"R34", "x":13, "y":2},
+ {"label":"R35", "x":14, "y":2},
+ {"label":"R36", "x":15, "y":2},
+ {"label":"R37", "x":16, "y":2},
+ {"label":"R42", "x":11, "y":3},
+ {"label":"R43", "x":12, "y":3},
+ {"label":"R44", "x":13, "y":3},
+ {"label":"R45", "x":14, "y":3},
+ {"label":"R46", "x":15, "y":3},
+ {"label":"R47", "x":16, "y":3},
+ {"label":"R54", "x":13, "y":4},
+ {"label":"R55", "x":14, "y":4},
+ {"label":"R56", "x":15, "y":4},
+ {"label":"R57", "x":16, "y":4},
+ {"label":"R52", "x":11, "y":5},
+ {"label":"R53", "x":12, "y":5},
+ {"label":"R62", "x":9, "y":6},
+ {"label":"R63", "x":10, "y":6},
+ {"label":"R64", "x":9, "y":7},
+ {"label":"R65", "x":10, "y":7}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/dactyl_manuform/5x7/keymaps/default/config.h b/keyboards/handwired/dactyl_manuform/5x7/keymaps/default/config.h
new file mode 100644
index 000000000..29ab59ad6
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x7/keymaps/default/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 USE_SERIAL
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+//#define EE_HANDS
+// Rows are doubled-up
diff --git a/keyboards/handwired/dactyl_manuform/5x7/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/5x7/keymaps/default/keymap.c
new file mode 100644
index 000000000..8b83b538f
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x7/keymaps/default/keymap.c
@@ -0,0 +1,85 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _FN 1
+#define _NUMPAD 2
+
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+// Some basic macros
+#define TASK LCTL(LSFT(KC_ESC))
+#define TAB_R LCTL(KC_TAB)
+#define TAB_L LCTL(LSFT(KC_TAB))
+#define TAB_RO LCTL(LSFT(KC_T))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT_5x7(
+ // left hand
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, TAB_RO,
+ OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B,
+ KC_CAPS, KC_LGUI, TAB_L, TAB_R,
+ TT(_FN), KC_SPC,
+ KC_END, KC_HOME,
+ KC_PSCR, TASK,
+ // right hand
+ KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV,
+ KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ TG(_NUMPAD), KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, OSM(MOD_RSFT),
+ KC_LEFT, KC_UP, KC_DOWN, KC_RGHT,
+ KC_BSPC, KC_ENT,
+ KC_PGUP, KC_PGDN,
+ KC_LCTL, KC_LALT),
+
+[_FN] = LAYOUT_5x7(
+ // left hand
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ _______, _______, _______, KC_UP, _______, _______, _______,
+ _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, RESET,
+ _______, _______, _______, _______, _______, _______,
+ KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT,
+ _______, _______,
+ _______, _______,
+ _______, _______,
+ // right hand
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ KC_DEL, _______,
+ _______, _______,
+ _______, _______),
+
+[_NUMPAD] = LAYOUT_5x7(
+ // left hand
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______,
+ // right hand
+ _______, _______, KC_NLCK, _______, KC_PMNS, KC_PPLS, _______,
+ _______, _______, KC_P7, KC_P8, KC_P9, _______, _______,
+ _______, _______, KC_P4, KC_P5, KC_P6, KC_PAST, _______,
+ _______, KC_P1, KC_P2, KC_P3, KC_PSLS, _______,
+ KC_P0, KC_PDOT, _______, _______,
+ _______, KC_PENT,
+ _______, _______,
+ _______, _______),
+
+};
diff --git a/keyboards/handwired/dactyl_manuform/5x7/rules.mk b/keyboards/handwired/dactyl_manuform/5x7/rules.mk
new file mode 100644
index 000000000..750807051
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/5x7/rules.mk
@@ -0,0 +1,20 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/dactyl_manuform/6x6/6x6.c b/keyboards/handwired/dactyl_manuform/6x6/6x6.c
new file mode 100644
index 000000000..9eb27531a
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/6x6/6x6.c
@@ -0,0 +1,23 @@
+#include "6x6.h"
+
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
+
diff --git a/keyboards/handwired/dactyl_manuform/6x6/6x6.h b/keyboards/handwired/dactyl_manuform/6x6/6x6.h
new file mode 100644
index 000000000..c2980b3d3
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/6x6/6x6.h
@@ -0,0 +1,44 @@
+#pragma once
+
+#include "dactyl_manuform.h"
+#include "quantum.h"
+
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+#define LAYOUT_6x6(\
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
+ L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45, \
+ L52, L53, R52, R53, \
+ L54, L55, R50, R51, \
+ L64, L65, R60, R61, \
+ L62, L63, R62, R63 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { L40, L41, L42, L43, L44, L45 }, \
+ { KC_NO, KC_NO, L52, L53, L54, L55 }, \
+ { KC_NO, KC_NO, L62, L63, L64, L65 }, \
+\
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ { R40, R41, R42, R43, R44, R45 }, \
+ { R50, R51, R52, R53, KC_NO, KC_NO },\
+ { R60, R61, R62, R63, KC_NO, KC_NO }, \
+ }
+
+
diff --git a/keyboards/handwired/dactyl_manuform/6x6/config.h b/keyboards/handwired/dactyl_manuform/6x6/config.h
new file mode 100644
index 000000000..9bb7b07bf
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/6x6/config.h
@@ -0,0 +1,33 @@
+/*
+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"
+
+
+#define PRODUCT Dactyl-Manuform (6x6)
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 14
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_COL_PINS { D4, C6, D7, E6, B4, B5 }
+#define MATRIX_ROW_PINS { F5, F6, F7, B1, B3, B2, B6 }
diff --git a/keyboards/handwired/dactyl_manuform/6x6/info.json b/keyboards/handwired/dactyl_manuform/6x6/info.json
new file mode 100644
index 000000000..2ae91d469
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/6x6/info.json
@@ -0,0 +1,89 @@
+{
+ "keyboard_name": "Dactyl Manuform 6x6",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 17,
+ "height": 9,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"L00", "x":0, "y":0},
+ {"label":"L01", "x":1, "y":0},
+ {"label":"L02", "x":2, "y":0},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0},
+ {"label":"L05", "x":5, "y":0},
+ {"label":"R00", "x":11, "y":0},
+ {"label":"R01", "x":12, "y":0},
+ {"label":"R02", "x":13, "y":0},
+ {"label":"R03", "x":14, "y":0},
+ {"label":"R04", "x":15, "y":0},
+ {"label":"R05", "x":16, "y":0},
+ {"label":"L10", "x":0, "y":1},
+ {"label":"L11", "x":1, "y":1},
+ {"label":"L12", "x":2, "y":1},
+ {"label":"L13", "x":3, "y":1},
+ {"label":"L14", "x":4, "y":1},
+ {"label":"L15", "x":5, "y":1},
+ {"label":"R10", "x":11, "y":1},
+ {"label":"R11", "x":12, "y":1},
+ {"label":"R12", "x":13, "y":1},
+ {"label":"R13", "x":14, "y":1},
+ {"label":"R14", "x":15, "y":1},
+ {"label":"R15", "x":16, "y":1},
+ {"label":"L20", "x":0, "y":2},
+ {"label":"L21", "x":1, "y":2},
+ {"label":"L22", "x":2, "y":2},
+ {"label":"L23", "x":3, "y":2},
+ {"label":"L24", "x":4, "y":2},
+ {"label":"L25", "x":5, "y":2},
+ {"label":"R20", "x":11, "y":2},
+ {"label":"R21", "x":12, "y":2},
+ {"label":"R22", "x":13, "y":2},
+ {"label":"R23", "x":14, "y":2},
+ {"label":"R24", "x":15, "y":2},
+ {"label":"R25", "x":16, "y":2},
+ {"label":"L30", "x":0, "y":3},
+ {"label":"L31", "x":1, "y":3},
+ {"label":"L32", "x":2, "y":3},
+ {"label":"L33", "x":3, "y":3},
+ {"label":"L34", "x":4, "y":3},
+ {"label":"L35", "x":5, "y":3},
+ {"label":"R30", "x":11, "y":3},
+ {"label":"R31", "x":12, "y":3},
+ {"label":"R32", "x":13, "y":3},
+ {"label":"R33", "x":14, "y":3},
+ {"label":"R34", "x":15, "y":3},
+ {"label":"R35", "x":16, "y":3},
+ {"label":"L40", "x":0, "y":4},
+ {"label":"L41", "x":1, "y":4},
+ {"label":"L42", "x":2, "y":4},
+ {"label":"L43", "x":3, "y":4},
+ {"label":"L44", "x":4, "y":4},
+ {"label":"L45", "x":5, "y":4},
+ {"label":"R40", "x":11, "y":4},
+ {"label":"R41", "x":12, "y":4},
+ {"label":"R42", "x":13, "y":4},
+ {"label":"R43", "x":14, "y":4},
+ {"label":"R44", "x":15, "y":4},
+ {"label":"R45", "x":16, "y":4},
+ {"label":"L52", "x":2, "y":5},
+ {"label":"L53", "x":3, "y":5},
+ {"label":"R52", "x":13, "y":5},
+ {"label":"R53", "x":14, "y":5},
+ {"label":"L54", "x":4, "y":6},
+ {"label":"L55", "x":5, "y":6},
+ {"label":"R50", "x":11, "y":6},
+ {"label":"R51", "x":12, "y":6},
+ {"label":"L64", "x":6, "y":7},
+ {"label":"L65", "x":7, "y":7},
+ {"label":"R60", "x":9, "y":7},
+ {"label":"R61", "x":10, "y":7},
+ {"label":"L62", "x":6, "y":8},
+ {"label":"L63", "x":7, "y":8},
+ {"label":"R62", "x":9, "y":8},
+ {"label":"R63", "x":10, "y":8}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/dactyl_manuform/6x6/keymaps/default/config.h b/keyboards/handwired/dactyl_manuform/6x6/keymaps/default/config.h
new file mode 100644
index 000000000..29ab59ad6
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/6x6/keymaps/default/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 USE_SERIAL
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+//#define EE_HANDS
+// Rows are doubled-up
diff --git a/keyboards/handwired/dactyl_manuform/6x6/keymaps/default/keymap.c b/keyboards/handwired/dactyl_manuform/6x6/keymaps/default/keymap.c
new file mode 100644
index 000000000..1b1cbd4ae
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/6x6/keymaps/default/keymap.c
@@ -0,0 +1,57 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+
+#define RAISE MO(_RAISE)
+#define LOWER MO(_LOWER)
+
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_6x6(
+
+ KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,
+ KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_BSPC,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_MINS,
+ KC_LSFT, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT,
+ KC_LCTL, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_BSLASH,
+ KC_LBRC,KC_RBRC, KC_PLUS, KC_EQL,
+ RAISE,KC_SPC, KC_ENT, LOWER,
+ KC_TAB,KC_HOME, KC_END, KC_DEL,
+ KC_BSPC, KC_GRV, KC_LGUI, KC_LALT
+ ),
+
+ [_LOWER] = LAYOUT_6x6(
+
+ KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,
+ KC_TILD,KC_EXLM, KC_AT ,KC_HASH,KC_DLR ,KC_PERC, KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_DEL,
+ _______,_______,_______,_______,_______,KC_LBRC, KC_RBRC, KC_P7 , KC_P8 , KC_P9 ,_______,KC_PLUS,
+ _______,KC_HOME,KC_PGUP,KC_PGDN,KC_END ,KC_LPRN, KC_RPRN, KC_P4 , KC_P5 , KC_P6 ,KC_MINS,KC_PIPE,
+ _______,_______,_______,_______,_______,_______, _______, KC_P1 , KC_P2 , KC_P3 ,KC_EQL ,KC_UNDS,
+ _______,KC_PSCR, _______, KC_P0,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+ ),
+
+ [_RAISE] = LAYOUT_6x6(
+
+ KC_F12 , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 ,KC_F10 ,KC_F11 ,
+ _______,_______,_______,_______,_______,KC_LBRC, KC_RBRC,_______,KC_NLCK,KC_INS ,KC_SLCK,KC_MUTE,
+ _______,KC_LEFT,KC_UP ,KC_DOWN,KC_RGHT,KC_LPRN, KC_RPRN,KC_MPRV,KC_MPLY,KC_MNXT,_______,KC_VOLU,
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,KC_VOLD,
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
+
+ _______,_______, KC_EQL ,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______,
+ _______,_______, _______,_______
+ ),
+
+};
+
diff --git a/keyboards/handwired/dactyl_manuform/6x6/rules.mk b/keyboards/handwired/dactyl_manuform/6x6/rules.mk
new file mode 100644
index 000000000..750807051
--- /dev/null
+++ b/keyboards/handwired/dactyl_manuform/6x6/rules.mk
@@ -0,0 +1,20 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/dactyl_manuform/config.h b/keyboards/handwired/dactyl_manuform/config.h
index 8917630e4..0e6f3f98e 100644
--- a/keyboards/handwired/dactyl_manuform/config.h
+++ b/keyboards/handwired/dactyl_manuform/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
#include "config_common.h"
@@ -26,25 +25,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define PRODUCT_ID 0x3060
#define DEVICE_VER 0x0001
#define MANUFACTURER tshort
-#define PRODUCT Dactyl-Manuform
+// defined in subfolder
#define DESCRIPTION A split keyboard for the cheap makers
-/* key matrix size */
-// Rows are doubled-up
-#define MATRIX_ROWS 10
-#define MATRIX_COLS 5
-
-// wiring of each half
-#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
-// #define MATRIX_COL_PINS { B5, B4, E6, D7, C6 }
-#define MATRIX_COL_PINS { C6, D7, E6, B4, B5 }
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-// #define BACKLIGHT_LEVELS 3
-
/* mouse config */
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_DELAY 0
@@ -55,6 +38,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -70,10 +56,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
+
/*
* Feature disable options
@@ -92,6 +77,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-
-#endif
diff --git a/keyboards/handwired/dactyl_manuform/dactyl_manuform.c b/keyboards/handwired/dactyl_manuform/dactyl_manuform.c
index 17caecb4f..043bbd567 100644
--- a/keyboards/handwired/dactyl_manuform/dactyl_manuform.c
+++ b/keyboards/handwired/dactyl_manuform/dactyl_manuform.c
@@ -1,23 +1 @@
#include "dactyl_manuform.h"
-
-
-#ifdef SSD1306OLED
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
- led_set_user(usb_led);
-}
-#endif
-
-void matrix_init_kb(void) {
-
- // // green led on
- // DDRD |= (1<<5);
- // PORTD &= ~(1<<5);
-
- // // orange led on
- // DDRB |= (1<<0);
- // PORTB &= ~(1<<0);
-
- matrix_init_user();
-};
-
diff --git a/keyboards/handwired/dactyl_manuform/dactyl_manuform.h b/keyboards/handwired/dactyl_manuform/dactyl_manuform.h
index 3dc8405ff..eea0757d5 100644
--- a/keyboards/handwired/dactyl_manuform/dactyl_manuform.h
+++ b/keyboards/handwired/dactyl_manuform/dactyl_manuform.h
@@ -1,7 +1,16 @@
-#ifndef REV2_H
-#define REV2_H
+#pragma once
-#include "dactyl_manuform.h"
+#ifdef KEYBOARD_handwired_dactyl_manuform_4x5
+ #include "4x5.h"
+#elif KEYBOARD_handwired_dactyl_manuform_4x6
+ #include "4x6.h"
+#elif KEYBOARD_handwired_dactyl_manuform_5x6
+ #include "5x6.h"
+#elif KEYBOARD_handwired_dactyl_manuform_5x7
+ #include "5x7.h"
+#elif KEYBOARD_handwired_dactyl_manuform_6x6
+ #include "6x6.h"
+#endif
//void promicro_bootloader_jmp(bool program);
#include "quantum.h"
@@ -15,55 +24,4 @@
#endif
#endif
-//void promicro_bootloader_jmp(bool program);
-#ifndef FLIP_HALF
-#define LAYOUT( \
- L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
- L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
- L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
- L31, L32, R32, R33, \
- L33, L34, R30, R31, \
- L44, L43, R41, R40, \
- L42, L41, R43, R42 \
- ) \
- { \
- { L00, L01, L02, L03, L04 }, \
- { L10, L11, L12, L13, L14 }, \
- { L20, L21, L22, L23, L24 }, \
- { KC_NO, L31, L32, L33, L34 }, \
- { KC_NO, L41, L42, L43, L44 }, \
-\
- { R04, R03, R02, R01, R00 }, \
- { R14, R13, R12, R11, R10 }, \
- { R24, R23, R22, R21, R20 }, \
- { KC_NO, R33, R32, R31, R30 }, \
- { KC_NO, R43, R42, R41, R40 } \
- }
-#else
-#define LAYOUT( \
- L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
- L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
- L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
- L31, L32, R32, R33, \
- L33, L34, R30, R31, \
- L44, L43, R41, R40, \
- L42, L41, R43, R42 \
- ) \
- { \
- { R04, R03, R02, R01, R00 }, \
- { R14, R13, R12, R11, R10 }, \
- { R24, R23, R22, R21, R20 }, \
- { KC_NO, R33, R32, R31, R30 }, \
- { KC_NO, R43, R42, R41, R40 }, \
-\
- { L00, L01, L02, L03, L04 }, \
- { L10, L11, L12, L13, L14 }, \
- { L20, L21, L22, L23, L24 }, \
- { KC_NO, L31, L32, L33, L34 }, \
- { KC_NO, L41, L42, L43, L44 } \
-\
- }
-#endif
-
-#endif
diff --git a/keyboards/handwired/dactyl_manuform/eeprom-lefthand.eep b/keyboards/handwired/dactyl_manuform/eeprom-lefthand.eep
deleted file mode 100644
index bda23cdb6..000000000
--- a/keyboards/handwired/dactyl_manuform/eeprom-lefthand.eep
+++ /dev/null
@@ -1,2 +0,0 @@
-:0F000000000000000000000000000000000001F0
-:00000001FF
diff --git a/keyboards/handwired/dactyl_manuform/eeprom-righthand.eep b/keyboards/handwired/dactyl_manuform/eeprom-righthand.eep
deleted file mode 100644
index 549cd1ef0..000000000
--- a/keyboards/handwired/dactyl_manuform/eeprom-righthand.eep
+++ /dev/null
@@ -1,2 +0,0 @@
-:0F000000000000000000000000000000000000F1
-:00000001FF
diff --git a/keyboards/handwired/dactyl_manuform/i2c.c b/keyboards/handwired/dactyl_manuform/i2c.c
deleted file mode 100644
index 084c890c4..000000000
--- a/keyboards/handwired/dactyl_manuform/i2c.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <util/twi.h>
-#include <avr/io.h>
-#include <stdlib.h>
-#include <avr/interrupt.h>
-#include <util/twi.h>
-#include <stdbool.h>
-#include "i2c.h"
-
-#ifdef USE_I2C
-
-// Limits the amount of we wait for any one i2c transaction.
-// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
-// 9 bits, a single transaction will take around 90μs to complete.
-//
-// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
-// poll loop takes at least 8 clock cycles to execute
-#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
-
-#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
-
-volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-static volatile uint8_t slave_buffer_pos;
-static volatile bool slave_has_register_set = false;
-
-// Wait for an i2c operation to finish
-inline static
-void i2c_delay(void) {
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-
- // easier way, but will wait slightly longer
- // _delay_us(100);
-}
-
-// Setup twi to run at 100kHz
-void i2c_master_init(void) {
- // no prescaler
- TWSR = 0;
- // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
- // Check datasheets for more info.
- TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
-}
-
-// Start a transaction with the given i2c slave address. The direction of the
-// transfer is set with I2C_READ and I2C_WRITE.
-// returns: 0 => success
-// 1 => error
-uint8_t i2c_master_start(uint8_t address) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
-
- i2c_delay();
-
- // check that we started successfully
- if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
- return 1;
-
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
- return 1; // slave did not acknowledge
- else
- return 0; // success
-}
-
-
-// Finish the i2c transaction.
-void i2c_master_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-}
-
-// Write one byte to the i2c slave.
-// returns 0 => slave ACK
-// 1 => slave NACK
-uint8_t i2c_master_write(uint8_t data) {
- TWDR = data;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- // check if the slave acknowledged us
- return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
-}
-
-// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
-// if ack=0 the acknowledge bit is not set.
-// returns: byte read from i2c device
-uint8_t i2c_master_read(int ack) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
-
- i2c_delay();
- return TWDR;
-}
-
-void i2c_reset_state(void) {
- TWCR = 0;
-}
-
-void i2c_slave_init(uint8_t address) {
- TWAR = address << 0; // slave i2c address
- // TWEN - twi enable
- // TWEA - enable address acknowledgement
- // TWINT - twi interrupt flag
- // TWIE - enable the twi interrupt
- TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
-}
-
-ISR(TWI_vect);
-
-ISR(TWI_vect) {
- uint8_t ack = 1;
- switch(TW_STATUS) {
- case TW_SR_SLA_ACK:
- // this device has been addressed as a slave receiver
- slave_has_register_set = false;
- break;
-
- case TW_SR_DATA_ACK:
- // this device has received data as a slave receiver
- // The first byte that we receive in this transaction sets the location
- // of the read/write location of the slaves memory that it exposes over
- // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
- // slave_buffer_pos after each write.
- if(!slave_has_register_set) {
- slave_buffer_pos = TWDR;
- // don't acknowledge the master if this memory loctaion is out of bounds
- if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
- ack = 0;
- slave_buffer_pos = 0;
- }
- slave_has_register_set = true;
- } else {
- i2c_slave_buffer[slave_buffer_pos] = TWDR;
- BUFFER_POS_INC();
- }
- break;
-
- case TW_ST_SLA_ACK:
- case TW_ST_DATA_ACK:
- // master has addressed this device as a slave transmitter and is
- // requesting data.
- TWDR = i2c_slave_buffer[slave_buffer_pos];
- BUFFER_POS_INC();
- break;
-
- case TW_BUS_ERROR: // something went wrong, reset twi state
- TWCR = 0;
- default:
- break;
- }
- // Reset everything, so we are ready for the next TWI interrupt
- TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
-}
-#endif
diff --git a/keyboards/handwired/dactyl_manuform/i2c.h b/keyboards/handwired/dactyl_manuform/i2c.h
deleted file mode 100644
index c15b6bc50..000000000
--- a/keyboards/handwired/dactyl_manuform/i2c.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef I2C_H
-#define I2C_H
-
-#include <stdint.h>
-
-#ifndef F_CPU
-#define F_CPU 16000000UL
-#endif
-
-#define I2C_READ 1
-#define I2C_WRITE 0
-
-#define I2C_ACK 1
-#define I2C_NACK 0
-
-#define SLAVE_BUFFER_SIZE 0x10
-
-// i2c SCL clock frequency
-#define SCL_CLOCK 400000L
-
-extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-void i2c_master_init(void);
-uint8_t i2c_master_start(uint8_t address);
-void i2c_master_stop(void);
-uint8_t i2c_master_write(uint8_t data);
-uint8_t i2c_master_read(int);
-void i2c_reset_state(void);
-void i2c_slave_init(uint8_t address);
-
-
-static inline unsigned char i2c_start_read(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_READ);
-}
-
-static inline unsigned char i2c_start_write(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_WRITE);
-}
-
-// from SSD1306 scrips
-extern unsigned char i2c_rep_start(unsigned char addr);
-extern void i2c_start_wait(unsigned char addr);
-extern unsigned char i2c_readAck(void);
-extern unsigned char i2c_readNak(void);
-extern unsigned char i2c_read(unsigned char ack);
-
-#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
-
-#endif
diff --git a/keyboards/handwired/dactyl_manuform/keymaps/default/config.h b/keyboards/handwired/dactyl_manuform/keymaps/default/config.h
deleted file mode 100644
index 216917ed7..000000000
--- a/keyboards/handwired/dactyl_manuform/keymaps/default/config.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-/* Use I2C or Serial, not both */
-
-#define USE_SERIAL
-// #define USE_I2C
-
-/* Select hand configuration */
-
-// #define MASTER_LEFT
-// #define MASTER_RIGHT
-#define EE_HANDS
-
-#endif
diff --git a/keyboards/handwired/dactyl_manuform/keymaps/default/rules.mk b/keyboards/handwired/dactyl_manuform/keymaps/default/rules.mk
deleted file mode 100644
index 457a3d01d..000000000
--- a/keyboards/handwired/dactyl_manuform/keymaps/default/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/handwired/dactyl_manuform/keymaps/dvorak/config.h b/keyboards/handwired/dactyl_manuform/keymaps/dvorak/config.h
deleted file mode 100644
index 216917ed7..000000000
--- a/keyboards/handwired/dactyl_manuform/keymaps/dvorak/config.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-This is the c configuration file for the keymap
-
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-Copyright 2015 Jack Humbert
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-/* Use I2C or Serial, not both */
-
-#define USE_SERIAL
-// #define USE_I2C
-
-/* Select hand configuration */
-
-// #define MASTER_LEFT
-// #define MASTER_RIGHT
-#define EE_HANDS
-
-#endif
diff --git a/keyboards/handwired/dactyl_manuform/keymaps/dvorak/rules.mk b/keyboards/handwired/dactyl_manuform/keymaps/dvorak/rules.mk
deleted file mode 100644
index 457a3d01d..000000000
--- a/keyboards/handwired/dactyl_manuform/keymaps/dvorak/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/handwired/dactyl_manuform/matrix.c b/keyboards/handwired/dactyl_manuform/matrix.c
deleted file mode 100644
index 904850d4d..000000000
--- a/keyboards/handwired/dactyl_manuform/matrix.c
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "split_util.h"
-#include "pro_micro.h"
-#include "config.h"
-#include "timer.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else // USE_SERIAL
-# include "serial.h"
-#endif
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-
-#if (DEBOUNCING_DELAY > 0)
- static uint16_t debouncing_time;
- static bool debouncing = false;
-#endif
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#else
-# error "Currently only supports 8 COLS"
-#endif
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-#define ERROR_DISCONNECT_COUNT 5
-
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
-
-static uint8_t error_count = 0;
-
-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];
-
-#if (DIODE_DIRECTION == COL2ROW)
- static void init_cols(void);
- static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
- static void unselect_rows(void);
- static void select_row(uint8_t row);
- static void unselect_row(uint8_t row);
-#elif (DIODE_DIRECTION == ROW2COL)
- static void init_rows(void);
- static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
- static void unselect_cols(void);
- static void unselect_col(uint8_t col);
- static void select_col(uint8_t col);
-#endif
-
-__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)
-{
-#ifdef DISABLE_JTAG
- // JTAG disable for PORT F. write JTD bit twice within four cycles.
- MCUCR |= (1<<JTD);
- MCUCR |= (1<<JTD);
-#endif
-
- debug_enable = true;
- debug_matrix = true;
- debug_mouse = true;
- // initialize row and col
-#if (DIODE_DIRECTION == COL2ROW)
- unselect_rows();
- init_cols();
-#elif (DIODE_DIRECTION == ROW2COL)
- unselect_cols();
- init_rows();
-#endif
-
- TX_RX_LED_INIT;
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-
-}
-
-uint8_t _matrix_scan(void)
-{
- int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
-#if (DIODE_DIRECTION == COL2ROW)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
-
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-
-# else
- read_cols_on_row(matrix+offset, current_row);
-# endif
-
- }
-
-#elif (DIODE_DIRECTION == ROW2COL)
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_rows_on_col(matrix+offset, current_col);
-# endif
-
- }
-#endif
-
-# if (DEBOUNCING_DELAY > 0)
- if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- matrix[i+offset] = matrix_debouncing[i+offset];
- }
- debouncing = false;
- }
-# endif
-
- return 1;
-}
-
-#ifdef USE_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(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
-
- if (serial_update_buffers()) {
- return 1;
- }
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_slave_buffer[i];
- }
- return 0;
-}
-#endif
-
-uint8_t matrix_scan(void)
-{
- uint8_t ret = _matrix_scan();
-
-#ifdef USE_I2C
- if( i2c_transaction() ) {
-#else // USE_SERIAL
- if( serial_transaction() ) {
-#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_I2C
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- i2c_slave_buffer[i] = matrix[offset+i];
- }
-#else // USE_SERIAL
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_slave_buffer[i] = matrix[offset+i];
- }
-#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;
-}
-
-#if (DIODE_DIRECTION == COL2ROW)
-
-static void init_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin = col_pins[col_index];
- uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-static void select_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#elif (DIODE_DIRECTION == ROW2COL)
-
-static void init_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
- {
-
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[row_index];
-
- // Check row pin state
- if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
- {
- // Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-static void select_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#endif
diff --git a/keyboards/handwired/dactyl_manuform/readme.md b/keyboards/handwired/dactyl_manuform/readme.md
index 8b2875712..0d08c67a0 100644
--- a/keyboards/handwired/dactyl_manuform/readme.md
+++ b/keyboards/handwired/dactyl_manuform/readme.md
@@ -1,4 +1,4 @@
-Dactyl Manuform
+Dactyl Manuform (4x5, 5x6, 5x7, 6x6)
======
the [Dactyl-Manuform](https://github.com/tshort/dactyl-keyboard) is a split curved keyboard based on the design of [adereth dactyl](https://github.com/adereth/dactyl-keyboard) and thumb cluster design of the [manuform](https://geekhack.org/index.php?topic=46015.0) keyboard, the hardware is similar to the let's split keyboard. all information needed for making one is in the first link.
![Imgur](https://i.imgur.com/7y0Vbyd.jpg)
@@ -8,45 +8,52 @@ the [Dactyl-Manuform](https://github.com/tshort/dactyl-keyboard) is a split curv
Download or clone the `qmk_firmware` repo and navigate to its top level directory. Once your build environment is setup, you'll be able to generate the default .hex using:
-```
-$ make dactyl_manuform:dvorak
-```
-
-You will see a lot of output and if everything worked correctly you will see the built hex file:
+Depending on your Layout chose one of the follwing commands:
```
-dactyl_manuform_dvorak.hex
+$ make handwired/dactyl_manuform/YOUR_LAYOUT:YOUR_KEYMAP_NAME
```
-If you would like to use one of the alternative keymaps, or create your own, copy one of the existing [keymaps](keymaps/) and run make like so:
-
+example:
```
-$ make dactyl_manuform:YOUR_KEYMAP_NAME
+$ make handwired/dactyl_manuform/4x5:default
```
If everything worked correctly you will see a file:
```
-dactyl_manuform_YOUR_KEYMAP_NAME.hex
+dactyl_manuform_YOUR_LAYOUT_YOUR_KEYMAP_NAME.hex
```
For more information on customizing keymaps, take a look at the primary documentation for [Customizing Your Keymap](/docs/faq_keymap.md) in the main readme.md.
+
## Keymaps
-Currently there are only two keymaps: Qwerty and Dvorak, feel free to make changes and contribute your keymap.
-### Qwerty and Dvorak
-Qwerty base layer:
-![Imgur](https://i.imgur.com/Yb5e7dS.png)
-Dvorak base layer:
-![Imgur](https://i.imgur.com/CpuZptB.png)
-Both keymaps have the same Raise and Lower layers:
-Raise Layer
-![Imgur](https://i.imgur.com/nOqePK5.png)
-Lower Layer
-![Imgur](https://i.imgur.com/WSshkYc.png)
-
-Required Hardware
------------------
+
+### [Keymaps 4x5](/keyboards/handwired/dactyl_manuform/4x5/keymaps/)
+
+#### Default
+Simple QWERTY layout with 3 Layers.
+#### Dvorak
+
+### [Keymaps 5x6](/keyboards/handwired/dactyl_manuform/5x6/keymaps/)
+
+#### Default
+Just a copy of the Impstyle keymap. Feel free to adjust it.
+
+#### Impstyle
+A simple QWERTY keymap with 3 Layers. Both sides are connected via serial and the Left ist the master.
+
+### [Keymaps 5x7 aka almost Ergodox](/keyboards/handwired/dactyl_manuform/5x7/keymaps/)
+#### Default
+Keymap of Loligagger from geekhack.
+
+### [Keymaps 6x6](/keyboards/handwired/dactyl_manuform/6x6/keymaps/)
+
+#### Default
+Simple QWERTY layout with 3 Layers.
+
+## Required Hardware
Apart from diodes and key switches for the keyboard matrix in each half, you
will need:
@@ -58,12 +65,10 @@ Alternatively, you can use any sort of cable and socket that has at least 3
wires. If you want to use I2C to communicate between halves, you will need a
cable with at least 4 wires and 2x 4.7kΩ pull-up resistors
-Optional Hardware
------------------
+## Optional Hardware
A speaker can be hooked-up to either side to the `5` (`C6`) pin and `GND`, and turned on via `AUDIO_ENABLE`.
-Wiring
-------
+## Wiring
The 3 wires of the TRS/TRRS cable need to connect GND, VCC, and digital pin 3 (i.e.
PD0 on the ATmega32u4) between the two Pro Micros.
@@ -85,19 +90,17 @@ unnecessary in simple use cases.
You can change your configuration between serial and i2c by modifying your `config.h` file.
-Notes on Software Configuration
--------------------------------
+## Notes on Software Configuration
the keymaps in here are for the 4x5 layout of the keyboard only.
-Flashing
--------
-From the top level `qmk_firmware` directory run `make KEYBOARD:KEYMAP:avrdude` for automatic serial port resolution and flashing.
-Example: `make lets_split/rev2:default:avrdude`
+## Flashing
+
+To flash your firmware take a look at: [Flashing Instructions and Bootloader Information](https://docs.qmk.fm/#/flashing)
-Choosing which board to plug the USB cable into (choosing Master)
---------
+## Choosing which board to plug the USB cable into (choosing Master)
+
Because the two boards are identical, the firmware has logic to differentiate the left and right board.
It uses two strategies to figure things out: looking at the EEPROM (memory on the chip) or looking if the current board has the usb cable.
@@ -107,15 +110,18 @@ The EEPROM approach requires additional setup (flashing the eeprom) but allows y
The USB cable approach is easier to setup and if you just want the usb cable on the left board, you do not need to do anything extra.
### Setting the left hand as master
+
If you always plug the usb cable into the left board, nothing extra is needed as this is the default. Comment out `EE_HANDS` and comment out `I2C_MASTER_RIGHT` or `MASTER_RIGHT` if for some reason it was set.
### Setting the right hand as master
+
If you always plug the usb cable into the right board, add an extra flag to your `config.h`
```
#define MASTER_RIGHT
```
### Setting EE_hands to use either hands as master
+
If you define `EE_HANDS` in your `config.h`, you will need to set the
EEPROM for the left and right halves.
@@ -125,13 +131,13 @@ file will run on both hands instead of having to flash left and right handed
versions of the firmware to each half. To flash the EEPROM file for the left
half run:
```
-avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-lefthand.eep
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-lefthand.eep"
// or the equivalent in dfu-programmer
```
and similarly for right half
```
-avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-righhand.eep
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-righthand.eep"
// or the equivalent in dfu-programmer
```
diff --git a/keyboards/handwired/dactyl_manuform/rules.mk b/keyboards/handwired/dactyl_manuform/rules.mk
index 6c0949b54..a93de3685 100644
--- a/keyboards/handwired/dactyl_manuform/rules.mk
+++ b/keyboards/handwired/dactyl_manuform/rules.mk
@@ -1,9 +1,3 @@
-SRC += matrix.c \
- i2c.c \
- split_util.c \
- serial.c \
- ssd1306.c
-
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
@@ -42,7 +36,7 @@ F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
-# different sizes, comment this out, and the correct address will be loaded
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina
@@ -64,12 +58,9 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SUBPROJECT_rev1 = yes
-USE_I2C = yes
+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
-CUSTOM_MATRIX = yes
-
-LAYOUTS = ortho_4x12
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/handwired/dactyl_manuform/serial.c b/keyboards/handwired/dactyl_manuform/serial.c
deleted file mode 100644
index 74bcbb6bf..000000000
--- a/keyboards/handwired/dactyl_manuform/serial.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * WARNING: be careful changing this code, it is very timing dependent
- */
-
-#ifndef F_CPU
-#define F_CPU 16000000
-#endif
-
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <stdbool.h>
-#include "serial.h"
-
-#ifndef USE_I2C
-
-// Serial pulse period in microseconds. Its probably a bad idea to lower this
-// value.
-#define SERIAL_DELAY 24
-
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
-
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
-
-inline static
-void serial_delay(void) {
- _delay_us(SERIAL_DELAY);
-}
-
-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(void) {
- SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-inline static
-uint8_t serial_read_pin(void) {
- return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
-}
-
-inline static
-void serial_low(void) {
- SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
-}
-
-inline static
-void serial_high(void) {
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-void serial_master_init(void) {
- serial_output();
- serial_high();
-}
-
-void serial_slave_init(void) {
- serial_input();
-
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
-}
-
-// Used by the master to synchronize timing with the slave.
-static
-void sync_recv(void) {
- serial_input();
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
- while (!serial_read_pin());
- serial_delay();
-}
-
-// Used by the slave to send a synchronization signal to the master.
-static
-void sync_send(void) {
- serial_output();
-
- serial_low();
- serial_delay();
-
- serial_high();
-}
-
-// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
- serial_input();
- for ( uint8_t i = 0; i < 8; ++i) {
- byte = (byte << 1) | serial_read_pin();
- serial_delay();
- _delay_us(1);
- }
-
- return byte;
-}
-
-// Sends a byte with MSB ordering
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 8;
- serial_output();
- while( b-- ) {
- if(data & (1 << b)) {
- serial_high();
- } else {
- serial_low();
- }
- serial_delay();
- }
-}
-
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- sync_send();
-
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_slave_buffer[i]);
- sync_send();
- checksum += serial_slave_buffer[i];
- }
- serial_write_byte(checksum);
- sync_send();
-
- // wait for the sync to finish sending
- serial_delay();
-
- // read the middle of pulses
- _delay_us(SERIAL_DELAY/2);
-
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_master_buffer[i] = serial_read_byte();
- sync_send();
- checksum_computed += serial_master_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_send();
-
- serial_input(); // end transaction
-
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
- } else {
- status &= ~SLAVE_DATA_CORRUPT;
- }
-}
-
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
-}
-
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
-//
-// Returns:
-// 0 => no error
-// 1 => slave did not respond
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
- cli();
-
- // signal to the slave that we want to start a transaction
- serial_output();
- serial_low();
- _delay_us(1);
-
- // wait for the slaves response
- serial_input();
- serial_high();
- _delay_us(SERIAL_DELAY);
-
- // check if the slave is present
- if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
- sei();
- return 1;
- }
-
- // if the slave is present syncronize with it
- sync_recv();
-
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_slave_buffer[i] = serial_read_byte();
- sync_recv();
- checksum_computed += serial_slave_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_recv();
-
- if (checksum_computed != checksum_received) {
- sei();
- return 1;
- }
-
- uint8_t checksum = 0;
- // send data to the slave
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_master_buffer[i]);
- sync_recv();
- checksum += serial_master_buffer[i];
- }
- serial_write_byte(checksum);
- sync_recv();
-
- // always, release the line when not in use
- serial_output();
- serial_high();
-
- sei();
- return 0;
-}
-
-#endif
diff --git a/keyboards/handwired/dactyl_manuform/serial.h b/keyboards/handwired/dactyl_manuform/serial.h
deleted file mode 100644
index 15fe4db7b..000000000
--- a/keyboards/handwired/dactyl_manuform/serial.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef MY_SERIAL_H
-#define MY_SERIAL_H
-
-#include "config.h"
-#include <stdbool.h>
-
-/* TODO: some defines for interrupt setup */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
-
-// Buffers for master - slave communication
-extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
-extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
-
-void serial_master_init(void);
-void serial_slave_init(void);
-int serial_update_buffers(void);
-bool serial_slave_data_corrupt(void);
-
-#endif
diff --git a/keyboards/handwired/dactyl_manuform/split_util.c b/keyboards/handwired/dactyl_manuform/split_util.c
deleted file mode 100644
index 346cbc908..000000000
--- a/keyboards/handwired/dactyl_manuform/split_util.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/power.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/eeprom.h>
-#include "split_util.h"
-#include "matrix.h"
-#include "keyboard.h"
-#include "config.h"
-#include "timer.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else
-# include "serial.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_I2C
- i2c_master_init();
-#ifdef SSD1306OLED
- matrix_master_OLED_init ();
-#endif
-#else
- serial_master_init();
-#endif
-}
-
-static void keyboard_slave_setup(void) {
- timer_init();
-#ifdef USE_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();
-}
-
-void keyboard_slave_loop(void) {
- matrix_init();
-
- while (1) {
- matrix_slave_scan();
- }
-}
-
-// this code runs before the usb and keyboard is initialized
-void matrix_setup(void) {
- split_keyboard_setup();
-
- if (!has_usb()) {
- keyboard_slave_loop();
- }
-}
diff --git a/keyboards/handwired/dactyl_manuform/split_util.h b/keyboards/handwired/dactyl_manuform/split_util.h
deleted file mode 100644
index 595a0659e..000000000
--- a/keyboards/handwired/dactyl_manuform/split_util.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef SPLIT_KEYBOARD_UTIL_H
-#define SPLIT_KEYBOARD_UTIL_H
-
-#include <stdbool.h>
-#include "eeconfig.h"
-
-#define SLAVE_I2C_ADDRESS 0x32
-
-extern volatile bool isLeftHand;
-
-// slave version of matix scan, defined in matrix.c
-void matrix_slave_scan(void);
-
-void split_keyboard_setup(void);
-bool has_usb(void);
-void keyboard_slave_loop(void);
-
-void matrix_master_OLED_init (void);
-
-#endif
diff --git a/keyboards/handwired/fivethirteen/README.md b/keyboards/handwired/fivethirteen/README.md
deleted file mode 100644
index a965650fc..000000000
--- a/keyboards/handwired/fivethirteen/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-fivethirteen keyboard firmware
-======================
-
-## Quantum MK Firmware
-
-For the full Quantum feature list, see [the parent readme.md](/doc/README.md).
-
-## Building
-
-Download or clone the whole firmware and navigate to the keyboards/handwired/fivethirteen folder.
-Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use
-the Teensy Loader to program your .hex file.
-
-Depending on which keymap you would like to use, you will have to compile slightly differently.
-
-### Default
-
-To build with the default keymap, simply run `make`.
-
-### Other Keymaps
-
-To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
-
-```
-$ make keymap=[default|jack|<name>]
-```
-
-Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
diff --git a/keyboards/handwired/fivethirteen/fivethirteen.h b/keyboards/handwired/fivethirteen/fivethirteen.h
index faa6de737..6d14b7f1c 100644
--- a/keyboards/handwired/fivethirteen/fivethirteen.h
+++ b/keyboards/handwired/fivethirteen/fivethirteen.h
@@ -3,19 +3,19 @@
#include "quantum.h"
-#define KEYMAP( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, \
- k40, k41, k42, k43, k44, k46, k47, k48, k49, k410, k411, k412 \
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312, \
+ k40, k41, k42, k43, k44, k46, k47, k48, k49, k410, k411, k412 \
) \
{ \
- { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012 }, \
- { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112 }, \
- { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212 }, \
- { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312 }, \
- { k40, k41, k42, k43, k44, KC_NO, k46, k47, k48, k49, k410, k411, k412 } \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k010, k011, k012 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k110, k111, k112 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k210, k211, k212 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k310, k311, k312 }, \
+ { k40, k41, k42, k43, k44, KC_NO, k46, k47, k48, k49, k410, k411, k412 } \
}
#endif
diff --git a/keyboards/handwired/fivethirteen/info.json b/keyboards/handwired/fivethirteen/info.json
new file mode 100644
index 000000000..f95cbbe01
--- /dev/null
+++ b/keyboards/handwired/fivethirteen/info.json
@@ -0,0 +1,77 @@
+{
+ "keyboard_name": "fivethirteen",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 13,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Tab", "x":0, "y":1},
+ {"label":"Q", "x":1, "y":1},
+ {"label":"W", "x":2, "y":1},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1},
+ {"label":"T", "x":5, "y":1},
+ {"label":"Y", "x":6, "y":1},
+ {"label":"U", "x":7, "y":1},
+ {"label":"I", "x":8, "y":1},
+ {"label":"O", "x":9, "y":1},
+ {"label":"P", "x":10, "y":1},
+ {"label":"[", "x":11, "y":1},
+ {"label":"]", "x":12, "y":1},
+ {"label":"Ctrl/Esc", "x":0, "y":2},
+ {"label":"A", "x":1, "y":2},
+ {"label":"S", "x":2, "y":2},
+ {"label":"D", "x":3, "y":2},
+ {"label":"F", "x":4, "y":2},
+ {"label":"G", "x":5, "y":2},
+ {"label":"H", "x":6, "y":2},
+ {"label":"J", "x":7, "y":2},
+ {"label":"K", "x":8, "y":2},
+ {"label":"L", "x":9, "y":2},
+ {"label":";", "x":10, "y":2},
+ {"label":"'", "x":11, "y":2},
+ {"label":"Enter", "x":12, "y":2},
+ {"label":"Shift", "x":0, "y":3},
+ {"label":"Z", "x":1, "y":3},
+ {"label":"X", "x":2, "y":3},
+ {"label":"C", "x":3, "y":3},
+ {"label":"V", "x":4, "y":3},
+ {"label":"B", "x":5, "y":3},
+ {"label":"N", "x":6, "y":3},
+ {"label":"M", "x":7, "y":3},
+ {"label":",", "x":8, "y":3},
+ {"label":".", "x":9, "y":3},
+ {"label":"/", "x":10, "y":3},
+ {"label":"Up", "x":11, "y":3},
+ {"label":"\\", "x":12, "y":3},
+ {"label":"MO(MOS)", "x":0, "y":4},
+ {"label":"Ctrl", "x":1, "y":4},
+ {"label":"Alt", "x":2, "y":4},
+ {"label":"GUI", "x":3, "y":4},
+ {"label":"MO(HDN)", "x":4, "y":4},
+ {"label":"Space", "x":5, "y":4, "w":2},
+ {"label":"Shift/Backspace", "x":7, "y":4},
+ {"label":"MO(OSY)", "x":8, "y":4},
+ {"label":"MO(HDN)", "x":9, "y":4},
+ {"label":"Left", "x":10, "y":4},
+ {"label":"Down", "x":11, "y":4},
+ {"label":"Right", "x":12, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/fivethirteen/keymaps/default/keymap.c b/keyboards/handwired/fivethirteen/keymaps/default/keymap.c
index d718510d5..d92f32e35 100644
--- a/keyboards/handwired/fivethirteen/keymaps/default/keymap.c
+++ b/keyboards/handwired/fivethirteen/keymaps/default/keymap.c
@@ -1,6 +1,4 @@
-#include "fivethirteen.h"
-
-#define _______ KC_TRNS
+#include QMK_KEYBOARD_H
#define HDN 1
#define OSY 2
@@ -9,28 +7,28 @@
#define SFT_BSP SFT_T(KC_BSPC)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = KEYMAP(
+[0] = LAYOUT(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, \
CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_BSLS, \
MO(MOS), KC_LCTL, KC_LALT, KC_LGUI, MO(HDN), KC_SPC , SFT_BSP, MO(OSY), MO(HDN), KC_LEFT, KC_DOWN, KC_RGHT \
),
-[HDN] = KEYMAP(
+[HDN] = 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_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, _______, \
_______, KC_TILD, KC_GRV, KC_BSLS, KC_PIPE, KC_MINS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_TILD, KC_GRV, _______, \
_______, _______, _______, _______, _______, _______, _______, KC_ENT, _______, _______, _______, KC_PGUP, _______, \
_______, _______, _______, _______, _______, KC_UNDS , KC_DEL, _______, _______, KC_HOME, KC_PGDN, KC_END \
),
-[OSY] = KEYMAP(
+[OSY] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, KC_VOLD, KC_VOLU, KC_MUTE, KC_PWR, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
-[MOS] = KEYMAP(
+[MOS] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R, _______, _______, _______, \
@@ -38,12 +36,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
)
};
-
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-};
diff --git a/keyboards/handwired/fivethirteen/readme.md b/keyboards/handwired/fivethirteen/readme.md
new file mode 100644
index 000000000..1a22fc9b9
--- /dev/null
+++ b/keyboards/handwired/fivethirteen/readme.md
@@ -0,0 +1,12 @@
+# fivethirteen
+
+A handwired 5x13 ortholinear keyboard with a 2U space bar.
+
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: fivethirteen handwired
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/fivethirteen: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/frenchdev/frenchdev.h b/keyboards/handwired/frenchdev/frenchdev.h
index 82121e044..82dbe18b8 100644
--- a/keyboards/handwired/frenchdev/frenchdev.h
+++ b/keyboards/handwired/frenchdev/frenchdev.h
@@ -77,7 +77,7 @@ inline void frenchdev_led_all_set(uint8_t n)
frenchdev_led_3_set(n);
}
-#define KEYMAP( \
+#define LAYOUT( \
\
k01, k02, k03, k04, k05, k06, k09, k0a, k0b, k0c, k0d, k0e, \
k10, k11, k12, k13, k14, k15, k16, k19, k1a, k1b, k1c, k1d, k1e, k1f, \
diff --git a/keyboards/handwired/frenchdev/info.json b/keyboards/handwired/frenchdev/info.json
new file mode 100644
index 000000000..0f3c0a94f
--- /dev/null
+++ b/keyboards/handwired/frenchdev/info.json
@@ -0,0 +1,114 @@
+{
+ "keyboard_name": "",
+ "url": "",
+ "maintainer": "qmk",
+ "bootloader": "",
+ "width": 20,
+ "height": 8,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"F1", "x":1, "y":0.9},
+ {"label":"F2", "x":2, "y":0.3},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0.4},
+ {"label":"F5", "x":5, "y":0.5},
+ {"label":"F6", "x":6, "y":0.5},
+ {"label":"F7", "x":13, "y":0.5},
+ {"label":"F8", "x":14, "y":0.5},
+ {"label":"F9", "x":15, "y":0.4},
+ {"label":"F10", "x":16, "y":0},
+ {"label":"F11", "x":17, "y":0.3},
+ {"label":"F12", "x":18, "y":0.9},
+
+ {"label":"Esc", "x":0, "y":1.9},
+ {"label":"\"", "x":1, "y":1.9},
+ {"label":"\u00ab", "x":2, "y":1.3},
+ {"label":"\u00bb", "x":3, "y":1},
+ {"label":"(", "x":4, "y":1.4},
+ {"label":")", "x":5, "y":1.5},
+ {"label":"\u00a8", "x":6, "y":1.5},
+ {"label":"^", "x":13, "y":1.5},
+ {"label":"@", "x":14, "y":1.5},
+ {"label":"+", "x":15, "y":1.4},
+ {"label":"-", "x":16, "y":1},
+ {"label":"/", "x":17, "y":1.3},
+ {"label":"*", "x":18, "y":1.9},
+ {"label":"Backspace", "x":19, "y":1.9},
+
+ {"label":"Tab", "x":0, "y":2.9},
+ {"label":"B", "x":1, "y":2.9},
+ {"label":"&Eacute;", "x":2, "y":2.3},
+ {"label":"P", "x":3, "y":2},
+ {"label":"O", "x":4, "y":2.4},
+ {"label":"&Egrave;", "x":5, "y":2.5},
+ {"label":"_", "x":6, "y":2.5},
+ {"label":"=", "x":13, "y":2.5},
+ {"label":"K", "x":14, "y":2.5},
+ {"label":"V", "x":15, "y":2.4},
+ {"label":"D", "x":16, "y":2},
+ {"label":"L", "x":17, "y":2.3},
+ {"label":"J", "x":18, "y":2.9},
+ {"label":"Enter", "x":19, "y":2.9},
+
+ {"label":"`", "x":0, "y":3.9},
+ {"label":"A", "x":1, "y":3.9},
+ {"label":"U", "x":2, "y":3.3},
+ {"label":"E", "x":3, "y":3},
+ {"label":"I", "x":4, "y":3.4},
+ {"label":"F", "x":5, "y":3.5},
+ {"label":";", "x":6, "y":3.5},
+ {"label":"!", "x":13, "y":3.5},
+ {"label":"C", "x":14, "y":3.5},
+ {"label":"T", "x":15, "y":3.4},
+ {"label":"S", "x":16, "y":3},
+ {"label":"R", "x":17, "y":3.3},
+ {"label":"N", "x":18, "y":3.9},
+ {"label":"'", "x":19, "y":3.9},
+
+ {"label":"Shift", "x":0, "y":4.9},
+ {"label":"Z", "x":1, "y":4.9},
+ {"label":"&Agrave;", "x":2, "y":4.3},
+ {"label":"Y", "x":3, "y":4},
+ {"label":"X", "x":4, "y":4.4},
+ {"label":"]", "x":5, "y":4.5},
+ {"label":"Shift/Space", "x":6.5, "y":5},
+ {"label":"Ctrl/Backspace", "x":7.5, "y":5},
+ {"label":"Layer 2/Insert", "x":8.5, "y":5},
+ {"label":"Layer 2 Lock", "x":10.5, "y":5},
+ {"label":"Ctrl/Delete", "x":11.5, "y":5},
+ {"label":"Shift/Space", "x":12.5, "y":5},
+ {"label":"M", "x":14, "y":4.5},
+ {"label":"G", "x":15, "y":4.4},
+ {"label":"Up", "x":16, "y":4},
+ {"label":"H", "x":17, "y":4.3},
+ {"label":"Q", "x":18, "y":4.9},
+ {"label":"Shift", "x":19, "y":4.9},
+
+ {"label":"Ctrl", "x":0, "y":5.9},
+ {"label":"GUI", "x":1, "y":5.9},
+ {"label":"Keypad /", "x":2, "y":5.3},
+ {"label":".", "x":3, "y":5},
+ {"label":",", "x":4, "y":5.4},
+ {"label":"Space", "x":5, "y":5.5},
+ {"label":"Layer 1/Space", "x":6.5, "y":6},
+ {"label":"Alt", "x":7.5, "y":6},
+ {"label":"Caps Lock", "x":11.5, "y":6},
+ {"label":"Layer 1/Space", "x":12.5, "y":6},
+ {"label":"Space", "x":14, "y":5.5},
+ {"label":"Left", "x":15, "y":5.4},
+ {"label":"Down", "x":16, "y":5},
+ {"label":"Right", "x":17, "y":5.3},
+ {"label":":", "x":18, "y":5.9},
+ {"label":"Ctrl", "x":19, "y":5.9},
+
+ {"label":"Left Pedal 1", "x":2.25, "y":7.5, "w":1.5, "h":2},
+ {"label":"Left Pedal 2", "x":3.75, "y":7.5, "w":1.5, "h":2},
+ {"label":"Left Pedal 3", "x":5.25, "y":7.5, "w":1.5, "h":2},
+ {"label":"Right Pedal 1", "x":13.25, "y":7.5, "w":1.5, "h":2},
+ {"label":"Right Pedal 2", "x":14.75, "y":7.5, "w":1.5, "h":2},
+ {"label":"Right Pedal 3", "x":16.25, "y":7.5, "w":1.5, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/frenchdev/keymaps/default/keymap.c b/keyboards/handwired/frenchdev/keymaps/default/keymap.c
index e6d72d013..635383b55 100644
--- a/keyboards/handwired/frenchdev/keymaps/default/keymap.c
+++ b/keyboards/handwired/frenchdev/keymaps/default/keymap.c
@@ -1,8 +1,6 @@
-#include "frenchdev.h"
+#include QMK_KEYBOARD_H
#include "mousekey.h"
-#include "action.h"
-#include "action_layer.h"
-#include "keymap_extras/keymap_bepo.h"
+#include "keymap_bepo.h"
// Each layer gets a name for readability, which is then used in the keymap matrix below.
@@ -67,7 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------/ \-------------/ .. \-------------/ \-------------/ *
*M(M_LP)
*/
-[_BASE] = KEYMAP(
+[_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, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, BP_DTRM, BP_DCRC, BP_AT, BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR, KC_BSPC, \
KC_TAB, BP_B, BP_ECUT, BP_O, BP_P, BP_EGRV, BP_UNDS, BP_EQL, BP_K, BP_V, BP_D, BP_L, BP_J, KC_ENT, \
@@ -99,7 +97,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------/ \-------------/ .. \-------------/ \-------------/ *
*
*/
-[_SYMBOLS] = KEYMAP(
+[_SYMBOLS] = 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, BP_DCUR, BP_PARG, BP_SECT, BP_DGRK, KC_TRNS, BP_TILD, BP_DCAR, BP_LEQL, BP_GEQL, BP_PSMS, BP_OBEL, BP_TIMS, KC_TRNS, \
KC_TRNS, BP_BSLS, BP_ASTR, BP_LCBR, BP_RCBR, BP_GRV, KC_TRNS, BP_DIFF, BP_HASH, BP_LBRC, BP_RBRC, BP_PERC, BP_PMIL, KC_TRNS, \
@@ -131,7 +129,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------/ \-------------/ .. \-------------/ \-------------/ *
*
*/
-[_MEDIA] = KEYMAP(
+[_MEDIA] = LAYOUT(
RESET, KC_SLCK, KC_PAUS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_CALC, KC_NLCK, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_MSTP, KC_MPRV, KC_MNXT, KC_MPLY, KC_MPLY, KC_MPRV, KC_MNXT, KC_MSTP, KC_TRNS, KC_PMNS, KC_TRNS, \
KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_BTN4, KC_BTN5, KC_BTN4, KC_BTN5, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_TRNS, \
@@ -163,7 +161,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*
*/
-[_TRNS] = KEYMAP(
+[_TRNS] = 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, \
diff --git a/keyboards/handwired/frenchdev/readme.md b/keyboards/handwired/frenchdev/readme.md
index 698b4befb..9d7c59e71 100644
--- a/keyboards/handwired/frenchdev/readme.md
+++ b/keyboards/handwired/frenchdev/readme.md
@@ -6,29 +6,29 @@ Concept based on
with the added possibility to connect up to 6 external switches like pedals,
and somewhat like the katy, not all keys are on the same level for easier reach.
-###Photos
+### Photos
- [default layout](http://i.imgur.com/r2Nvr4p.png)
- [editable layout on keyboard layout editor](http://www.keyboard-layout-editor.com/#/gists/4480e3ab8026eb7c710a7e22203ef4aa) (keys placement is NOT precise on this)
- [the thing when finished](http://imgur.com/a/6FY8v)
- [concept and cardboard mockup](http://imgur.com/a/R0vvs)
-##Build instructions
+## Build instructions
docker run --rm -e keymap=default -e keyboard=frenchdev --rm -v D:/Repositories/qmk:/qmk:rw edasque/qmk_firmware
-##Laser-cuttable file
+## Laser-cuttable file
There is intentionnaly no hole for the TRRS connector, you are supposed to use a drill for it.
This way if you don't want to use the pedals you don't have a useless hole. Plus it's cleaner.
http://qmk.fm/frenchdev/frenchdev_v1_lasercut_template.svg
-##Side stickers
+## Side stickers
You can find my original file here : http://qmk.fm/frenchdev/example_printable_stickers.svg
I used it when training but now I use blanks and the layout is different.
I still uploaded it because I think it can be a good jumpstart for any temporary stickers on the
side of keycaps.
-##List of parts
+## List of parts
- I2C mcp23018
- [teensy 2](https://www.pjrc.com/store/teensy.html)
- 3 LED, 5mm tall with flat head
@@ -43,13 +43,13 @@ side of keycaps.
- 20 R2 keys
- 22 R1 keys
-if you fancy adding pedals :
+If you fancy adding pedals :
[these are good enough and cheap](https://www.amazon.fr/gp/product/B00V7WITKI/ref=oh_aui_detailpage_o04_s00?ie=UTF8&psc=1). You also need a RCA connector for each of those to replace the included cable
If you (or your coworkers) find them too loud you can replace the switch inside them.
For once we don't really care about what's inside :)
-##Various indications
+## Various indications
The PHYSICAL rows and columns are connected as such :
@@ -96,7 +96,7 @@ and on left hand (main) :
We use pull up resistor for SCL and VDA, see https://github.com/ErgoDox-EZ/docs/blob/master/ErgoDox%20EZ%20Schematic.pdf for example
-the connector is a standard TRRS (jack with audio + mic)
+The connector is a standard TRRS (jack with audio + mic)
Diode direction is row to column
diff --git a/keyboards/handwired/gamenum/README.md b/keyboards/handwired/gamenum/README.md
deleted file mode 100644
index bf8045be1..000000000
--- a/keyboards/handwired/gamenum/README.md
+++ /dev/null
@@ -1,102 +0,0 @@
-GameNum firmware
-======================
-## Board overview
-
-The GameNum was designed to facilitate the use of mechanical keys for gaming even when your packing space is limited.
-It uses a standard numpad layout replacing the NumLock key with a layer toggle that allows you to cycle through the different layers.
-The standard layout features a default layer that acts as a standard numpad, a layer that was meant for simple WASD based games and a layer that was designed to be used for MOBA/RTS related games.
-The RTS layer is meant to be used rotating the device 90 degrees counterclockwise.
-
-The README.MD for this board is reasonably extensive and in-depth because the build is quite small and covers a lot of things that I feel that it would be a good starting point for getting into QMK.
-
-## Build considerations
-
-Since the GameNum is handwired and uses 2 of its pins to toggle indicator lights there are some things to keep in mind.
-Firmware was build for use with a Pro Micro based on a ATMEGA32u4 at 16mHz.
-The indicator LED's are normally assigned to `pin C6` and `pin D4`, C6 goes high when the first layer is used, D4 goes high when layer 2 is used. Both LED's are off when the default layer is enabled.
-'+' of the LED goes to the respective pins and can be joined together on the '-' into a resistor that runs to the ground pin of the pro micro. With a standard LED a resistor value of 100 ohm is fine, keep in mind that you cannot use high powered LEDS on these pins without ruining your pro micro.
-
-## schematic of the switches and diodes
-
-![schematic overview](http://i.imgur.com/fleitoA.jpg)
-
-Keep in mind that the minus of the diodes should point towards the pro micros inputs.
-
-##LED hookup
-
-![led overview](http://i.imgur.com/U6m865n.jpg)
-
-## Adding more layers
-
-Adding additional layers is pretty straight forward. Look in `keymaps/default/keymap.c` and find `#define OSY 2` add a new definition for the layer you are going to add. This can be named pretty much anything. Example: `#define NAMEHERE 3`.
-Keep in mind here that the number after the name should correspond with the number that the layer has in the stack of layers.
-
-Next thing to do is to add the actual layer for the keymap.
-
-```
-[DEF] = KEYMAP(
- KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \
- KC_7, KC_8, KC_9, KC_PLUS, \
- KC_4, KC_5, KC_6, \
- KC_1, KC_2, KC_3, \
- KC_0, KC_DOT, KC_ENT \
-)
-```
-
-This is the default layer for the gamenum. It's generally easiest to just copy this and change things as you see fit. Keep in mind that at least 1 button on the pad has to be used to switch to the next layer in the stack or you will be stuck in that layer FOREVER! D:
-In the case of DEF this is key `KC_FN0`. Also keep in mind that the last layer that you add does not have a comma after its closing bracket but any other layer does!
-
-Which brings us nicely to the next part, the layer switching logic. Under the keymaps look for `PROGMEM fn_actions[]` this function handles the switching between layers, as you might have noticed every layer in the keymap has its own KC_FNx key. This is the key responsible for switching you from layer to layer.
-The number that is at the end of the keycode corresponds with the code in the function.
-`[0] = ACTION_LAYER_SET(HDN, ON_PRESS),` When `KC_FN0` is pressed the keyboard switches layer `HDN` on when the key is pressed down. Add an extra line for your layer here as well.
-
-Now for the LEDs, if you plan on adding extra LED's to the keyboard to indicate other layers you have to first define the pin that the LED will be using in `gamenum.c`.
-Look for this piece of code:
-
-```
- DDRD |= (1<<4);
- PORTD &= ~(1<<4);
-```
-
-Copy it and change the letter after DDR and PORT to the letter of your pin. Change the 4 to the number of your pin. `DDRx |= (1<<y);` defines that pin as an output. `PORTx &= ~(1<<y);` sets the pin to LOW turning off the LED.
-
-Now go back to `keymap.c` and look for the `process_record_user` function. The function is basically a switch case that checks if you pushed one of the defined layer-switch buttons. When it sees that you pushed one of them it sets the pins of the LED's either low or high.
-
-```
- case KC_FN1:
- if (record->event.pressed) {
- PORTC &= ~(1 << 6); // PC6 goes low
- PORTD |= (1<<4); //PD4 goes high
- }
- break;
-```
-
-This is the code for the KC_FN1 button. Notice how we check against what key is pressed in the case and then set pin C6 low and pin D4 high. Adjust this as you see fit.
-
-
-## Quantum MK Firmware
-
-For the full Quantum feature list, see [the parent readme.md](/docs/README.md).
-
-## Building
-
-Download or clone the whole firmware and navigate to the keyboards/handwired/gamenum folder.
-Read the README.md for the qmk repository on how to set up your developer enviroment to build your firmware with.
-Building firmware on Windows can be a bit of a hassle. Linux is a lot easier to use if you have some experience with it. A raspberry pi will already be able to build the firmware for you.
-Once your dev env is set up, you'll be able to type `make` to generate your .hex - you can then use AVRDudess to program your .hex file.
-
-### Default
-
-To build with the default keymap, simply run `make`.
-
-### Other Keymaps
-
-To build the firmware binary hex file with a keymap just do `make` with `keymap` option like:
-
-```
-$ make keymap=[default|jack|<name>]
-```
-
-Keymaps follow the format **__keymap.c__** and are stored in folders in the `keymaps` folder, eg `keymaps/my_keymap/`
-
-
diff --git a/keyboards/handwired/gamenum/gamenum.h b/keyboards/handwired/gamenum/gamenum.h
index ea633b9bf..3a1429ff8 100644
--- a/keyboards/handwired/gamenum/gamenum.h
+++ b/keyboards/handwired/gamenum/gamenum.h
@@ -3,19 +3,19 @@
#include "quantum.h"
-#define KEYMAP( \
+#define LAYOUT( \
k00, k01, k02, k03, \
k10, k11, k12, k13, \
- k20, k21, k22, \
- k30, k31, k32, \
- k41, k42, k43 \
+ k20, k21, k22, \
+ k30, k31, k32, \
+ k41, k42, k43 \
) \
{ \
- { k00, k01, k02, k03}, \
- { k10, k11, k12, k13}, \
- { k20, k21, k22, KC_NO}, \
- { k30, k31, k32, KC_NO}, \
- { KC_NO, k41, k42, k43} \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+ { k20, k21, k22, KC_NO }, \
+ { k30, k31, k32, KC_NO }, \
+ { KC_NO, k41, k42, k43 } \
}
#endif
diff --git a/keyboards/handwired/gamenum/info.json b/keyboards/handwired/gamenum/info.json
new file mode 100644
index 000000000..dc80f027e
--- /dev/null
+++ b/keyboards/handwired/gamenum/info.json
@@ -0,0 +1,30 @@
+{
+ "keyboard_name": "gamenum",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Fn", "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, "h":2},
+ {"label":"4", "x":0, "y":2},
+ {"label":"5", "x":1, "y":2},
+ {"label":"6", "x":2, "y":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":"Ent", "x":3, "y":3, "h":2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/gamenum/keymaps/default/keymap.c b/keyboards/handwired/gamenum/keymaps/default/keymap.c
index 6950b741a..a18ffc89b 100644
--- a/keyboards/handwired/gamenum/keymaps/default/keymap.c
+++ b/keyboards/handwired/gamenum/keymaps/default/keymap.c
@@ -1,36 +1,32 @@
-#include "gamenum.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
-#define _______ KC_TRNS
-
#define DEF 0
#define HDN 1
#define OSY 2
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[DEF] = KEYMAP(
- KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \
- KC_7, KC_8, KC_9, KC_PLUS, \
- KC_4, KC_5, KC_6, \
- KC_1, KC_2, KC_3, \
- KC_0, KC_DOT, KC_ENT \
-),
-[HDN] = KEYMAP(
- KC_FN1, KC_1, KC_2, KC_3, \
- KC_Q, KC_W, KC_E, KC_R, \
- KC_A, KC_S, KC_D, \
- KC_Z, KC_X, KC_C, \
- KC_LSFT, KC_LALT, KC_SPC \
-),
-[OSY] = KEYMAP(
- KC_A, KC_Q, KC_1, KC_FN2, \
- KC_S, KC_W, KC_2, KC_LALT, \
- KC_D, KC_E, KC_3, \
- KC_F, KC_R, KC_4, \
- KC_SPC, KC_T, KC_TAB \
-)
+ [DEF] = LAYOUT(
+ KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \
+ KC_7, KC_8, KC_9, KC_PLUS, \
+ KC_4, KC_5, KC_6, \
+ KC_1, KC_2, KC_3, \
+ KC_0, KC_DOT, KC_ENT \
+ ),
+ [HDN] = LAYOUT(
+ KC_FN1, KC_1, KC_2, KC_3, \
+ KC_Q, KC_W, KC_E, KC_R, \
+ KC_A, KC_S, KC_D, \
+ KC_Z, KC_X, KC_C, \
+ KC_LSFT, KC_LALT, KC_SPC \
+ ),
+ [OSY] = LAYOUT(
+ KC_A, KC_Q, KC_1, KC_FN2, \
+ KC_S, KC_W, KC_2, KC_LALT, \
+ KC_D, KC_E, KC_3, \
+ KC_F, KC_R, KC_4, \
+ KC_SPC, KC_T, KC_TAB \
+ )
};
@@ -48,21 +44,21 @@ 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) {
switch(keycode) {
case KC_FN0:
- if (record->event.pressed) {
- PORTC |= (1 << 6); // PC6 goes high
- }
- break;
+ if (record->event.pressed) {
+ PORTC |= (1 << 6); // PC6 goes high
+ }
+ break;
case KC_FN1:
- if (record->event.pressed) {
- PORTC &= ~(1 << 6); // PC6 goes high
- PORTD |= (1<<4);
- }
- break;
+ if (record->event.pressed) {
+ PORTC &= ~(1 << 6); // PC6 goes high
+ PORTD |= (1<<4);
+ }
+ break;
case KC_FN2:
- if (record->event.pressed) {
- PORTD &= ~(1 << 4); // PC6 goes high
- }
- break;
+ if (record->event.pressed) {
+ PORTD &= ~(1 << 4); // PC6 goes high
+ }
+ break;
}
return true;
-} \ No newline at end of file
+}
diff --git a/keyboards/handwired/gamenum/readme.md b/keyboards/handwired/gamenum/readme.md
new file mode 100644
index 000000000..ee28cc182
--- /dev/null
+++ b/keyboards/handwired/gamenum/readme.md
@@ -0,0 +1,85 @@
+# GameNum
+
+A handwired standard numpad oriented toward gaming on the go.
+
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: GameNum, Pro Micro
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/gamenum: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).
+
+## Board overview
+
+The GameNum was designed to facilitate the use of mechanical keys for gaming even when your packing space is limited.
+It uses a standard numpad layout replacing the NumLock key with a layer toggle that allows you to cycle through the different layers.
+The standard layout features a default layer that acts as a standard numpad, a layer that was meant for simple WASD based games and a layer that was designed to be used for MOBA/RTS related games.
+The RTS layer is meant to be used rotating the device 90 degrees counterclockwise.
+
+The README.MD for this board is reasonably extensive and in-depth because the build is quite small and covers a lot of things that I feel that it would be a good starting point for getting into QMK.
+
+## Build considerations
+
+Since the GameNum is handwired and uses 2 of its pins to toggle indicator lights there are some things to keep in mind.
+Firmware was build for use with a Pro Micro based on a ATMEGA32u4 at 16mHz.
+The indicator LED's are normally assigned to `pin C6` and `pin D4`, C6 goes high when the first layer is used, D4 goes high when layer 2 is used. Both LED's are off when the default layer is enabled.
+'+' of the LED goes to the respective pins and can be joined together on the '-' into a resistor that runs to the ground pin of the pro micro. With a standard LED a resistor value of 100 ohm is fine, keep in mind that you cannot use high powered LEDS on these pins without ruining your pro micro.
+
+## schematic of the switches and diodes
+
+![schematic overview](http://i.imgur.com/fleitoA.jpg)
+
+Keep in mind that the minus of the diodes should point towards the pro micros inputs.
+
+## LED hookup
+
+![led overview](http://i.imgur.com/U6m865n.jpg)
+
+## Adding more layers
+
+Adding additional layers is pretty straight forward. Look in `keymaps/default/keymap.c` and find `#define OSY 2` add a new definition for the layer you are going to add. This can be named pretty much anything. Example: `#define NAMEHERE 3`.
+Keep in mind here that the number after the name should correspond with the number that the layer has in the stack of layers.
+
+Next thing to do is to add the actual layer for the keymap.
+
+```
+ [DEF] = LAYOUT(
+ KC_FN0, KC_SLSH, KC_ASTR, KC_MINS, \
+ KC_7, KC_8, KC_9, KC_PLUS, \
+ KC_4, KC_5, KC_6, \
+ KC_1, KC_2, KC_3, \
+ KC_0, KC_DOT, KC_ENT \
+ )
+```
+
+This is the default layer for the gamenum. It's generally easiest to just copy this and change things as you see fit. Keep in mind that at least 1 button on the pad has to be used to switch to the next layer in the stack or you will be stuck in that layer FOREVER! D:
+In the case of DEF this is key `KC_FN0`. Also keep in mind that the last layer that you add does not have a comma after its closing bracket but any other layer does!
+
+Which brings us nicely to the next part, the layer switching logic. Under the keymaps look for `PROGMEM fn_actions[]` this function handles the switching between layers, as you might have noticed every layer in the keymap has its own KC_FNx key. This is the key responsible for switching you from layer to layer.
+The number that is at the end of the keycode corresponds with the code in the function.
+`[0] = ACTION_LAYER_SET(HDN, ON_PRESS),` When `KC_FN0` is pressed the keyboard switches layer `HDN` on when the key is pressed down. Add an extra line for your layer here as well.
+
+Now for the LEDs, if you plan on adding extra LED's to the keyboard to indicate other layers you have to first define the pin that the LED will be using in `gamenum.c`.
+Look for this piece of code:
+
+```
+ DDRD |= (1<<4);
+ PORTD &= ~(1<<4);
+```
+
+Copy it and change the letter after DDR and PORT to the letter of your pin. Change the 4 to the number of your pin. `DDRx |= (1<<y);` defines that pin as an output. `PORTx &= ~(1<<y);` sets the pin to LOW turning off the LED.
+
+Now go back to `keymap.c` and look for the `process_record_user` function. The function is basically a switch case that checks if you pushed one of the defined layer-switch buttons. When it sees that you pushed one of them it sets the pins of the LED's either low or high.
+
+```
+ case KC_FN1:
+ if (record->event.pressed) {
+ PORTC &= ~(1 << 6); // PC6 goes low
+ PORTD |= (1<<4); //PD4 goes high
+ }
+ break;
+```
+
+This is the code for the KC_FN1 button. Notice how we check against what key is pressed in the case and then set pin C6 low and pin D4 high. Adjust this as you see fit.
diff --git a/keyboards/handwired/ibm122m/config.h b/keyboards/handwired/ibm122m/config.h
new file mode 100644
index 000000000..1c8e0587d
--- /dev/null
+++ b/keyboards/handwired/ibm122m/config.h
@@ -0,0 +1,190 @@
+/*
+Copyright 2018 REPLACE_WITH_YOUR_NAME
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER IBM
+#define PRODUCT IBM Model M 122 key
+#define DESCRIPTION Mapping by github.com/lukexorz
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 20
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_COL_PINS { E6, B7, D0, D1, D2, D3, D4, D5, D6, D7, E0, E1, C0, C1, C2, C3, C4, C5, C7, F1 }
+#define MATRIX_ROW_PINS { F0, B5, B4, B3, B2, B1, B0, E7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION ROW2COL
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 15
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define B6_AUDIO
+#define C6_AUDIO
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
diff --git a/keyboards/handwired/ibm122m/ibm122m.c b/keyboards/handwired/ibm122m/ibm122m.c
new file mode 100644
index 000000000..1c52b94ec
--- /dev/null
+++ b/keyboards/handwired/ibm122m/ibm122m.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "ibm122m.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/handwired/ibm122m/ibm122m.h b/keyboards/handwired/ibm122m/ibm122m.h
new file mode 100644
index 000000000..a52bf4bc4
--- /dev/null
+++ b/keyboards/handwired/ibm122m/ibm122m.h
@@ -0,0 +1,41 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT( \
+ k09, k19, k1A, k29, k39, k3A, k49, k59, k5A, k69, k79, k7A, \
+ k0A, k0B, k1B, k2A, k2B, k3B, k4A, k4B, k5B, k6A, k6B, k7B, \
+ k31, k32, k34, k24, k25, k26, k27, k37, k38, k28, k2C, k2D, k2E, k3E, k3C, k3F, k3G, k3H, k2G, k2F, k2H, k2I, k20, \
+ k21, k41, k42, k44, k45, k46, k47, k57, k58, k48, k4C, k4D, k4E, k5E, k5C, k6F, k1G, k5G, k4G, k4F, k4H, k4I, k40, \
+ k51, k52, k62, k14, k15, k16, k17, k07, k08, k18, k1C, k1D, k1E, k0E, k6E, k0G, k1F, k1H, k1I, k10, \
+ k11, k12, k73, k74, k64, k65, k66, k67, k77, k78, k68, k6C, k6D, k7E, k63, k60, k0J, k1J, k61, k6H, k6I, k7J, \
+ k02, k01, k00, k70, k71, k03, k72, k0F, k7H, k7I \
+) \
+{ \
+ { k00, k01, k02, k03, KC_NO, KC_NO, KC_NO, k07, k08, k09, k0A, k0B, KC_NO, KC_NO, k0E, k0F, k0G, KC_NO, KC_NO, k0J }, \
+ { k10, k11, k12, KC_NO, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, k1J }, \
+ { k20, k21, KC_NO, KC_NO, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, KC_NO }, \
+ { KC_NO, k31, k32, KC_NO, k34, KC_NO, KC_NO, k37, k38, k39, k3A, k3B, k3C, KC_NO, k3E, k3F, k3G, k3H, KC_NO, KC_NO }, \
+ { k40, k41, k42, KC_NO, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, k4I, KC_NO }, \
+ { KC_NO, k51, k52, KC_NO, KC_NO, KC_NO, KC_NO, k57, k58, k59, k5A, k5B, k5C, KC_NO, k5E, KC_NO, k5G, KC_NO, KC_NO, KC_NO }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67, k68, k69, k6A, k6B, k6C, k6D, k6E, k6F, KC_NO, k6H, k6I, KC_NO }, \
+ { k70, k71, k72, k73, k74, KC_NO, KC_NO, k77, k78, k79, k7A, k7B, KC_NO, KC_NO, k7E, KC_NO, KC_NO, k7H, k7I, k7J }, \
+}
diff --git a/keyboards/handwired/ibm122m/info.json b/keyboards/handwired/ibm122m/info.json
new file mode 100644
index 000000000..b9ce9e8f8
--- /dev/null
+++ b/keyboards/handwired/ibm122m/info.json
@@ -0,0 +1,136 @@
+{
+ "keyboard_name": "IBM Model M 122-key",
+ "url": "",
+ "maintainer": "qmk",
+ "bootloader": "",
+ "width": 24.75,
+ "height": 8,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"F13", "x":3.25, "y":0},
+ {"label":"F14", "x":4.25, "y":0},
+ {"label":"F15", "x":5.25, "y":0},
+ {"label":"F16", "x":6.25, "y":0},
+ {"label":"F17", "x":7.25, "y":0},
+ {"label":"F18", "x":8.25, "y":0},
+ {"label":"F19", "x":9.25, "y":0},
+ {"label":"F20", "x":10.25, "y":0},
+ {"label":"F21", "x":11.25, "y":0},
+ {"label":"F22", "x":12.25, "y":0},
+ {"label":"F23", "x":13.25, "y":0},
+ {"label":"F24", "x":14.25, "y":0},
+ {"label":"F1", "x":3.25, "y":1},
+ {"label":"F2", "x":4.25, "y":1},
+ {"label":"F3", "x":5.25, "y":1},
+ {"label":"F4", "x":6.25, "y":1},
+ {"label":"F5", "x":7.25, "y":1},
+ {"label":"F6", "x":8.25, "y":1},
+ {"label":"F7", "x":9.25, "y":1},
+ {"label":"F8", "x":10.25, "y":1},
+ {"label":"F9", "x":11.25, "y":1},
+ {"label":"F10", "x":12.25, "y":1},
+ {"label":"F11", "x":13.25, "y":1},
+ {"label":"F12", "x":14.25, "y":1},
+ {"label":"Esc", "x":0, "y":3},
+ {"x":1, "y":3},
+ {"label":"`", "x":2.25, "y":3},
+ {"label":"1", "x":3.25, "y":3},
+ {"label":"2", "x":4.25, "y":3},
+ {"label":"3", "x":5.25, "y":3},
+ {"label":"4", "x":6.25, "y":3},
+ {"label":"5", "x":7.25, "y":3},
+ {"label":"6", "x":8.25, "y":3},
+ {"label":"7", "x":9.25, "y":3},
+ {"label":"8", "x":10.25, "y":3},
+ {"label":"9", "x":11.25, "y":3},
+ {"label":"0", "x":12.25, "y":3},
+ {"label":"-", "x":13.25, "y":3},
+ {"label":"=", "x":14.25, "y":3},
+ {"label":"Backspace", "x":15.25, "y":3, "w":2},
+ {"label":"Insert", "x":17.5, "y":3},
+ {"label":"Home", "x":18.5, "y":3},
+ {"label":"Page Up", "x":19.5, "y":3},
+ {"label":"Num Lock", "x":20.75, "y":3},
+ {"label":"/", "x":21.75, "y":3},
+ {"label":"*", "x":22.75, "y":3},
+ {"label":"-", "x":23.75, "y":3},
+ {"x":0, "y":4},
+ {"x":1, "y":4},
+ {"label":"Tab", "x":2.25, "y":4, "w":1.5},
+ {"label":"Q", "x":3.75, "y":4},
+ {"label":"W", "x":4.75, "y":4},
+ {"label":"E", "x":5.75, "y":4},
+ {"label":"R", "x":6.75, "y":4},
+ {"label":"T", "x":7.75, "y":4},
+ {"label":"Y", "x":8.75, "y":4},
+ {"label":"U", "x":9.75, "y":4},
+ {"label":"I", "x":10.75, "y":4},
+ {"label":"O", "x":11.75, "y":4},
+ {"label":"P", "x":12.75, "y":4},
+ {"label":"[", "x":13.75, "y":4},
+ {"label":"]", "x":14.75, "y":4},
+ {"label":"Enter", "x":16, "y":4, "w":1.25, "h":2},
+ {"label":"Delete", "x":17.5, "y":4},
+ {"label":"End", "x":18.5, "y":4},
+ {"label":"Page Down", "x":19.5, "y":4},
+ {"label":"7", "x":20.75, "y":4},
+ {"label":"8", "x":21.75, "y":4},
+ {"label":"9", "x":22.75, "y":4},
+ {"label":"+", "x":23.75, "y":4},
+ {"x":0, "y":5},
+ {"x":1, "y":5},
+ {"label":"Caps Lock", "x":2.25, "y":5, "w":1.75},
+ {"label":"A", "x":4, "y":5},
+ {"label":"S", "x":5, "y":5},
+ {"label":"D", "x":6, "y":5},
+ {"label":"F", "x":7, "y":5},
+ {"label":"G", "x":8, "y":5},
+ {"label":"H", "x":9, "y":5},
+ {"label":"J", "x":10, "y":5},
+ {"label":"K", "x":11, "y":5},
+ {"label":"L", "x":12, "y":5},
+ {"label":";", "x":13, "y":5},
+ {"label":"'", "x":14, "y":5},
+ {"label":"#", "x":15, "y":5},
+ {"label":"Up", "x":18.5, "y":5},
+ {"label":"4", "x":20.75, "y":5},
+ {"label":"5", "x":21.75, "y":5},
+ {"label":"6", "x":22.75, "y":5},
+ {"x":23.75, "y":5},
+ {"x":0, "y":6},
+ {"x":1, "y":6},
+ {"label":"Shift", "x":2.25, "y":6, "w":1.25},
+ {"label":"\\", "x":3.5, "y":6},
+ {"label":"Z", "x":4.5, "y":6},
+ {"label":"X", "x":5.5, "y":6},
+ {"label":"C", "x":6.5, "y":6},
+ {"label":"V", "x":7.5, "y":6},
+ {"label":"B", "x":8.5, "y":6},
+ {"label":"N", "x":9.5, "y":6},
+ {"label":"M", "x":10.5, "y":6},
+ {"label":",", "x":11.5, "y":6},
+ {"label":".", "x":12.5, "y":6},
+ {"label":"/", "x":13.5, "y":6},
+ {"label":"Shift", "x":14.5, "y":6, "w":2.75},
+ {"label":"Left", "x":17.5, "y":6},
+ {"x":18.5, "y":6},
+ {"label":"Right", "x":19.5, "y":6},
+ {"label":"1", "x":20.75, "y":6},
+ {"label":"2", "x":21.75, "y":6},
+ {"label":"3", "x":22.75, "y":6},
+ {"label":"Enter", "x":23.75, "y":6, "h":2},
+ {"x":0, "y":7},
+ {"x":1, "y":7},
+ {"label":"Ctrl", "x":2.25, "y":7, "w":1.5},
+ {"label":"Alt", "x":4.75, "y":7, "w":1.5},
+ {"x":6.25, "y":7, "w":7},
+ {"label":"AltGr", "x":13.25, "y":7, "w":1.5},
+ {"label":"Ctrl", "x":15.75, "y":7, "w":1.5},
+ {"label":"Down", "x":18.5, "y":7},
+ {"label":"0", "x":20.75, "y":7, "w":2},
+ {"label":".", "x":22.75, "y":7}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/ibm122m/keymaps/default/config.h b/keyboards/handwired/ibm122m/keymaps/default/config.h
new file mode 100644
index 000000000..0453a7258
--- /dev/null
+++ b/keyboards/handwired/ibm122m/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides below
diff --git a/keyboards/handwired/ibm122m/keymaps/default/keymap.c b/keyboards/handwired/ibm122m/keymaps/default/keymap.c
new file mode 100644
index 000000000..fc383498a
--- /dev/null
+++ b/keyboards/handwired/ibm122m/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // Original Layer
+ [0] = LAYOUT(
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ KC_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_NO, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_NO, KC_NO, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_NO, KC_NO, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_UP, KC_P4, KC_P5, KC_P6, KC_BSPC,
+ KC_NO, KC_NO, KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_NO, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_NO, KC_NO, KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_DOWN, KC_P0, KC_PDOT
+ ),
+};
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/handwired/ibm122m/keymaps/default/readme.md b/keyboards/handwired/ibm122m/keymaps/default/readme.md
new file mode 100644
index 000000000..aa592c973
--- /dev/null
+++ b/keyboards/handwired/ibm122m/keymaps/default/readme.md
@@ -0,0 +1,2 @@
+# The default keymap for ibm122m2
+The 10 keys to the left of the alphanumerics are unbound (other than Escape on the top-left one) as I have no idea what is supposed to go there.
diff --git a/keyboards/handwired/ibm122m/keymaps/lukaus/config.h b/keyboards/handwired/ibm122m/keymaps/lukaus/config.h
new file mode 100644
index 000000000..bf338e196
--- /dev/null
+++ b/keyboards/handwired/ibm122m/keymaps/lukaus/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+// place overrides here
+
diff --git a/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c b/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c
new file mode 100644
index 000000000..9cd58c0ec
--- /dev/null
+++ b/keyboards/handwired/ibm122m/keymaps/lukaus/keymap.c
@@ -0,0 +1,586 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE,
+
+ DVP_ESC, // Grave escape basically i think
+ DVP_AMPR,
+ DVP_LBRACKET,
+ DVP_LCBR,
+ DVP_RCBR,
+ DVP_LPRN,
+ DVP_AT,
+ DVP_EQUAL,
+ DVP_ASTERISK,
+ DVP_RPRN,
+ DVP_PLUS,
+ DVP_RBRACKET,
+ DVP_EXLM,
+ DVP_HASH,
+ SHFT_DOT,
+ SHFT_COMMA
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // Programmer's Dvorak
+ [0] = LAYOUT(
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ KC_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, TO(1), DVP_ESC, DVP_AMPR, DVP_LBRACKET, DVP_LCBR, DVP_RCBR, DVP_LPRN, DVP_EQUAL,DVP_ASTERISK, DVP_RPRN, DVP_PLUS, DVP_RBRACKET, DVP_EXLM, DVP_HASH, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_NO, TO(2), KC_TAB, KC_SCOLON,KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, DVP_AT, KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_NO, KC_NO, MO(3), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS, KC_BSLS, KC_UP, KC_P4, KC_P5, KC_P6, MO(4),
+ LCTL(KC_F), KC_LALT, KC_LSHIFT,KC_ESC, KC_QUOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_LEFT, KC_BTN3, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
+ LCTL(KC_C), LCTL(KC_V), KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_DOWN, KC_P0, KC_PDOT
+ ),
+
+ // Qwerty layer + function
+ [1] = LAYOUT(
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ KC_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, TO(0), KC_GRV, 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_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_NO, KC_NO, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_NO, KC_NO, MO(3), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOT, KC_BSLS, KC_UP, KC_P4, KC_P5, KC_P6, KC_BSPC,
+ KC_NO, KC_NO, KC_LSHIFT,KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_NO, KC_LALT,KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_DOWN, KC_P0, KC_PDOT
+ ),
+
+ // Orirginal Layer
+ [2] = LAYOUT(
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ KC_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, TO(1), KC_GRV, 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_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_NO, TO(0), KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_NO, KC_NO, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOT, KC_BSLS, KC_UP, KC_P4, KC_P5, KC_P6, KC_BSPC,
+ KC_NO, KC_NO, KC_LSHIFT,KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_NO, KC_LALT,KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_DOWN, KC_P0, KC_PDOT
+ ),
+
+ // Function Layer
+ [3] = 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_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ MU_TOG, KC_NO, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ MU_MOD, KC_NO, KC_TAB, KC_NO, KC_MEDIA_PREV_TRACK, KC_MEDIA_PLAY_PAUSE, KC_MEDIA_NEXT_TRACK, KC_NO, KC_NO, KC_PGUP, KC_DEL, KC_NO, KC_NO, KC_LBRC, KC_RBRC,KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_PPLS,
+ KC_NO, KC_NO, KC_TRNS, KC_NO, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, KC_AUDIO_MUTE, KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_SCOLON, KC_QUOT, KC_BSLS, KC_UP, LSFT(KC_E), LSFT(KC_F), KC_NO, KC_BSPC,
+ KC_NO, KC_LALT, KC_LSHIFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PGDN, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, LSFT(KC_B), LSFT(KC_C), LSFT(KC_D), KC_PENT,
+ KC_NO, KC_NO, KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_CAPS, KC_DOWN, LSFT(KC_A), KC_PDOT
+ ),
+
+ // Literally just the numpad is different
+ [4] = LAYOUT(
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ KC_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, TO(1), DVP_ESC, DVP_AMPR, DVP_LBRACKET, DVP_LCBR, DVP_RCBR, DVP_LPRN, DVP_EQUAL,DVP_ASTERISK, DVP_RPRN, DVP_PLUS, DVP_RBRACKET, DVP_EXLM, DVP_HASH, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, TO(2), KC_TAB, KC_SCOLON,KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, DVP_AT, KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_BTN1, KC_MS_U, KC_BTN2, KC_NO,
+ KC_NO, KC_NO, TO(0), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINUS, KC_BSLS, KC_UP, KC_MS_L, KC_NO, KC_MS_R, KC_TRNS,
+ LCTL(KC_F), KC_LALT, KC_LSHIFT,KC_NO, KC_QUOT, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_LEFT, KC_BTN3, KC_RIGHT, KC_GT, KC_MS_D, KC_GT, KC_PENT,
+ LCTL(KC_C), LCTL(KC_V), KC_LCTRL, KC_LGUI, KC_SPC, KC_RALT, KC_RCTRL, KC_DOWN, KC_BTN1, KC_PDOT
+
+ ),
+
+ /*
+ [4] = LAYOUT(
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24,
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ MU_TOG, TO(0), KC_DLR, 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_BSPC, KC_INS, KC_HOME, KC_PGUP, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ MU_MOD, KC_NO, KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_LBRC, KC_RBRC,KC_ENTER, KC_DEL, KC_END, KC_PGDN, KC_NO, KC_NO, KC_NO, KC_PPLS,
+ KC_NO, KC_NO, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_QUOT, KC_BSLS, KC_UP, LSFT(KC_E), LSFT(KC_F), KC_NO, KC_BSPC,
+ KC_NO, KC_LALT, KC_LSHIFT,KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_COMMA, KC_DOT, KC_SLSH, KC_RSFT, KC_LEFT, KC_WH_D, KC_RIGHT, LSFT(KC_B), LSFT(KC_C), LSFT(KC_D), KC_PENT,
+ KC_NO, KC_LGUI, KC_LCTRL, KC_LALT, KC_SPC, KC_RALT, KC_RCTRL, KC_DOWN, LSFT(KC_A), KC_PDOT
+
+ ),*/
+ /*[0] = LAYOUT(
+ KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_NO,TO(1),KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1,
+ KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, TO(2),KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2, KC_2,
+ KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3, KC_3,
+ KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_4, KC_BSPC,KC_4,KC_4,KC_4, KC_4,
+ KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5, KC_5,
+ KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6, KC_6,
+ KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7, KC_7,
+ KC_8, KC_SPC,KC_8,KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, KC_8, TO(1)
+
+ ),
+ [1] = LAYOUT(
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, TO(0),KC_NO,KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_H, KC_I, KC_J, KC_K, TO(2),KC_M, KC_N, KC_O, KC_P, KC_Q, KC_R, KC_S, KC_T,
+ 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_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_BSPC,KC_Q,KC_R,KC_S, KC_T,
+ 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_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_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_A, KC_SPC,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, TO(0)
+ ),
+ [2] = LAYOUT(
+ KC_LCTRL, KC_LALT, KC_C, KC_RALT, KC_E, KC_F, KC_G, KC_G, KC_H, KC_J, TO(0), TO(1), KC_M, KC_N, KC_QUOT, KC_DOWN, KC_UP, KC_R, KC_S, KC_ENTER,
+ KC_PPLS, KC_B, KC_C, KC_D, KC_A, KC_S, KC_D, KC_F, KC_J, KC_J, KC_K, KC_NO, KC_K, KC_L, KC_SCOLON, KC_P4, KC_DEL, KC_P5, KC_P6, KC_RIGHT,
+ KC_PMNS, KC_1, KC_C, KC_D, KC_1, KC_2, KC_3, KC_4, KC_7, KC_J, KC_K, KC_L, KC_8, KC_9, KC_0, KC_NLCK, KC_PGUP,KC_PSLS, KC_PAST, KC_T,
+ KC_A, KC_ESC, TO(0),KC_D, KC_GRV, KC_F, KC_G, KC_5, KC_6, KC_J, KC_K, KC_L, KC_EQL, KC_N, KC_MINUS, KC_BSPC, KC_INS, KC_HOME, KC_S, KC_T,
+ KC_PPLS, KC_NO, KC_TAB, KC_D, KC_Q, KC_W, KC_E, KC_R, KC_U, KC_J, KC_K, KC_L, KC_I, KC_O, KC_P, KC_P7, KC_PGDN,KC_P8, KC_P9, KC_T,
+ KC_A, KC_B, KC_C, KC_D, KC_E, KC_F, KC_G, KC_T, KC_Y, KC_J, KC_K, KC_L, KC_RBRC, KC_N, KC_LBRC, KC_P, KC_END, KC_R, KC_S, KC_T,
+ KC_LEFT, KC_P1, KC_CAPS, KC_RSFT, KC_Z, KC_X, KC_C, KC_V, KC_M, KC_J, KC_K, KC_L, KC_COMMA, KC_DOT, KC_BSLS, KC_PENT, KC_Q, KC_P2, KC_P3, KC_T,
+ KC_LGUI, KC_SPACE, KC_RCTRL, KC_LSHIFT, KC_E, KC_F, KC_G, KC_B, KC_N, KC_J, KC_K, KC_L, KC_M, KC_N, KC_SLSH, KC_P, KC_Q, KC_P0, KC_PDOT, KC_KP_ENTER
+ ),*/
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool left_shift_down = false;
+bool right_shift_down = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_LSHIFT:
+ if (record->event.pressed)
+ {
+ left_shift_down = true;
+ return true;
+ }
+ else
+ {
+ left_shift_down = false;
+ return true;
+ }
+ break;
+ case KC_RSHIFT:
+
+ if (record->event.pressed)
+ {
+ right_shift_down = true;
+ return true;
+ }
+ else
+ {
+ right_shift_down = false;
+ return true;
+ }
+ break;
+
+
+ case DVP_ESC:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ SEND_STRING("~");
+ return false;
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("$");
+ return false;
+ }
+ break;
+
+ case DVP_AMPR:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ SEND_STRING("%");
+
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("&");
+ return false;
+ }
+ break;
+
+ case DVP_LBRACKET:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_7);
+ unregister_code(KC_7);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ return false;
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("[");
+ return false;
+ }
+ break;
+
+ case DVP_LCBR:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_5);
+ unregister_code(KC_5);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ return false;
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("{");
+ return false;
+ }
+ break;
+
+ case DVP_RCBR:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_3);
+ unregister_code(KC_3);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ return false;
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("}");
+ return false;
+ }
+ break;
+
+
+ case DVP_LPRN:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_1);
+ unregister_code(KC_1);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ return false;
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("(");
+ return false;
+ }
+ break;
+//
+ case DVP_AT:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_LSHIFT);
+ register_code(KC_6);
+ unregister_code(KC_6);
+ unregister_code(KC_LSHIFT);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ return false;
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("@");
+ return false;
+ }
+ break;
+
+
+ case DVP_EQUAL:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_9);
+ unregister_code(KC_9);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ return false;
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("=");
+ return false;
+ }
+ break;
+
+ case DVP_ASTERISK:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_0);
+ unregister_code(KC_0);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ return false;
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("*");
+ return false;
+ }
+ break;
+
+ case DVP_RPRN:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_2);
+ unregister_code(KC_2);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ return false;
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING(")");
+ return false;
+ }
+ break;
+
+ case DVP_PLUS:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_4);
+ unregister_code(KC_4);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("+");
+ }
+ return false;
+ break;
+
+ case DVP_RBRACKET:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_6);
+ unregister_code(KC_6);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("]");
+ }
+ return false;
+ break;
+
+ case DVP_EXLM:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_8);
+ unregister_code(KC_8);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("!");
+ }
+ return false;
+ break;
+
+ case DVP_HASH:
+ if (left_shift_down || right_shift_down)
+ {
+ if(record->event.pressed)
+ {
+ if(left_shift_down)
+ unregister_code(KC_LSHIFT);
+ if(right_shift_down)
+ unregister_code(KC_RSHIFT);
+
+ register_code(KC_GRAVE);
+ unregister_code(KC_GRAVE);
+
+ if(left_shift_down)
+ register_code(KC_LSHIFT);
+ if(right_shift_down)
+ register_code(KC_RSHIFT);
+ }
+ }
+ else
+ {
+ if(record->event.pressed)
+ SEND_STRING("#");
+ }
+ return false;
+ break;
+ case SHFT_DOT:
+ if(record->event.pressed)
+ SEND_STRING(">");
+ break;
+
+ case SHFT_COMMA:
+ if(record->event.pressed)
+ SEND_STRING("<");
+ break;
+
+ }
+
+
+
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/handwired/ibm122m/keymaps/lukaus/readme.md b/keyboards/handwired/ibm122m/keymaps/lukaus/readme.md
new file mode 100644
index 000000000..5d3f6abe1
--- /dev/null
+++ b/keyboards/handwired/ibm122m/keymaps/lukaus/readme.md
@@ -0,0 +1,2 @@
+# Lukaus' for ibm122m2
+Programmer's Dvorak as the default layer with a Qwerty layer that can access a function layer. Also includes the default layout, slightly modified
diff --git a/keyboards/handwired/ibm122m/readme.md b/keyboards/handwired/ibm122m/readme.md
new file mode 100644
index 000000000..09dac49c0
--- /dev/null
+++ b/keyboards/handwired/ibm122m/readme.md
@@ -0,0 +1,16 @@
+# ibm122m
+
+![IBM Model M 122 key](https://i.imgur.com/Oo3Ozqz.jpg)
+
+This is a keymap for the IBM Model M 122 key terminal keyboard running on a Teensy 2.0++
+I wired it to weird pins on mine (mainly to accomodate speakers), so make sure to update the pin arrays.
+
+Keyboard Maintainer: [Luke Stanley](https://github.com/lukexorz)
+Hardware Supported: Teensy 2.0++
+Hardware Availability: https://www.pjrc.com/store/teensypp.html
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/ibm122m:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/handwired/ibm122m/rules.mk b/keyboards/handwired/ibm122m/rules.mk
new file mode 100644
index 000000000..ba4be6766
--- /dev/null
+++ b/keyboards/handwired/ibm122m/rules.mk
@@ -0,0 +1,67 @@
+# MCU name
+MCU = at90usb1286
+BOOTLOADER = halfKay
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+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 = yes # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/handwired/jn68m/config.h b/keyboards/handwired/jn68m/config.h
new file mode 100644
index 000000000..22ab1158d
--- /dev/null
+++ b/keyboards/handwired/jn68m/config.h
@@ -0,0 +1,54 @@
+/*
+Copyright 2018 Jumail Mundekkat / MxBlue
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xC714
+#define PRODUCT_ID 0x1010
+#define DEVICE_VER 0x0001
+#define MANUFACTURER MxBlue
+#define PRODUCT JN68M
+#define DESCRIPTION Custom PCB for VA68M
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0, B1, D5, D3, D2 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, C6, B6, B5, B4, D7, D6, D4, E6, D1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
diff --git a/keyboards/handwired/jn68m/info.json b/keyboards/handwired/jn68m/info.json
new file mode 100644
index 000000000..ce95563e9
--- /dev/null
+++ b/keyboards/handwired/jn68m/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "JN68M",
+ "url": "",
+ "maintainer": "qmk",
+ "bootloader": "atmel-dfu",
+ "width": 17.25,
+ "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.25, "y":0}, {"x":16.25, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}]
+ },
+ "LAYOUT_splitbs": {
+ "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.25, "y":0}, {"x":16.25, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/handwired/jn68m/jn68m.c b/keyboards/handwired/jn68m/jn68m.c
new file mode 100644
index 000000000..b61b17aa9
--- /dev/null
+++ b/keyboards/handwired/jn68m/jn68m.c
@@ -0,0 +1,37 @@
+/* Copyright 2018 Jumail Mundekkat / MxBlue
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "jn68m.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);
+}
diff --git a/keyboards/handwired/jn68m/jn68m.h b/keyboards/handwired/jn68m/jn68m.h
new file mode 100644
index 000000000..d47f9f6c9
--- /dev/null
+++ b/keyboards/handwired/jn68m/jn68m.h
@@ -0,0 +1,49 @@
+/* Copyright 2018 Jumail Mundekkat / MxBlue
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef JN68M_H
+#define JN68M_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, K11, K12, K13, K14, K67, K68,\
+ K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K69, K70,\
+ 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, K63, K64, K65, K66 \
+) { \
+ { K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, K11, K12, K13, K14, K67, K68 }, \
+ { K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K69, K70 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42,KC_NO,KC_NO,KC_NO}, \
+ { K43, K44, K45, K46, K47, K48, K49, K50, K51, K52,KC_NO,K53, K54,KC_NO,K55,KC_NO}, \
+ { K56, K57, K58,KC_NO,KC_NO,K59,KC_NO,KC_NO,KC_NO,K60,KC_NO,K61, K63, K64, K65, K66} \
+}
+
+#define LAYOUT_splitbs( \
+ K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, K11, K12, K13, K14, K15, K67, K68,\
+ K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K69, K70,\
+ 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, K63, K64, K65, K66 \
+) { \
+ { K1 , K2 , K3 , K4 , K5 , K6 , K7 , K8 , K9 , K10, K11, K12, K13, K14, K67, K68 }, \
+ { K16, K17, K18, K19, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K69, K70 }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K15,KC_NO,KC_NO}, \
+ { K43, K44, K45, K46, K47, K48, K49, K50, K51, K52,KC_NO,K53, K54,KC_NO,K55,KC_NO}, \
+ { K56, K57, K58,KC_NO,KC_NO,K59,KC_NO,KC_NO,KC_NO,K60,KC_NO,K61, K63, K64, K65, K66} \
+}
+
+#endif
diff --git a/keyboards/handwired/jn68m/keymaps/default/config.h b/keyboards/handwired/jn68m/keymaps/default/config.h
new file mode 100644
index 000000000..4496c5910
--- /dev/null
+++ b/keyboards/handwired/jn68m/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/handwired/jn68m/keymaps/default/keymap.c b/keyboards/handwired/jn68m/keymaps/default/keymap.c
new file mode 100644
index 000000000..98eede94c
--- /dev/null
+++ b/keyboards/handwired/jn68m/keymaps/default/keymap.c
@@ -0,0 +1,75 @@
+/* Copyright 2018 Jumail Mundekkat / MxBlue
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#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_GESC, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_INS, KC_PGUP,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
+ KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_PSCR, KC_HOME,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS, KC_TRNS,
+ RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_APP, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/handwired/jn68m/readme.md b/keyboards/handwired/jn68m/readme.md
new file mode 100644
index 000000000..f219564ca
--- /dev/null
+++ b/keyboards/handwired/jn68m/readme.md
@@ -0,0 +1,14 @@
+# JN68M
+
+A custom replacement PCB for the VA68M and a birthday present for a mate.
+PCB designed by /u/Xelus22
+
+Keyboard Maintainer: [MxBlue](https://github.com/mxblu)
+Hardware Supported: ATMega32u4
+Hardware Availability: Unavailable unless you happen to be Justin ;)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/jn68m: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/jn68m/rules.mk b/keyboards/handwired/jn68m/rules.mk
new file mode 100644
index 000000000..42d85ada1
--- /dev/null
+++ b/keyboards/handwired/jn68m/rules.mk
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/handwired/kbod/config.h b/keyboards/handwired/kbod/config.h
index f3d0c8bf2..d3869f99e 100644
--- a/keyboards/handwired/kbod/config.h
+++ b/keyboards/handwired/kbod/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -48,7 +47,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
#define DIODE_DIRECTION COL2ROW
-
+
// #define BACKLIGHT_PIN B7
// #define BACKLIGHT_BREATHING
// #define BACKLIGHT_LEVELS 3
@@ -159,9 +158,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-#define PREVENT_STUCK_MODIFIERS
-
#undef TAPPING_TOGGLE
#define TAPPING_TOGGLE 2
-
-#endif
diff --git a/keyboards/handwired/kbod/info.json b/keyboards/handwired/kbod/info.json
new file mode 100644
index 000000000..02586164b
--- /dev/null
+++ b/keyboards/handwired/kbod/info.json
@@ -0,0 +1,74 @@
+{
+ "keyboard_name": "kbod",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"\\", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/kbod/kbod.h b/keyboards/handwired/kbod/kbod.h
index 356063624..5d9dbd05b 100644
--- a/keyboards/handwired/kbod/kbod.h
+++ b/keyboards/handwired/kbod/kbod.h
@@ -3,7 +3,7 @@
#include "quantum.h"
-#define KEYMAP( \
+#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, k0D, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, \
diff --git a/keyboards/handwired/kbod/keymaps/default/config.h b/keyboards/handwired/kbod/keymaps/default/config.h
index df06a2620..271f48d00 100644
--- a/keyboards/handwired/kbod/keymaps/default/config.h
+++ b/keyboards/handwired/kbod/keymaps/default/config.h
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
// place overrides here
-
-#endif \ No newline at end of file
diff --git a/keyboards/handwired/kbod/keymaps/default/keymap.c b/keyboards/handwired/kbod/keymaps/default/keymap.c
index 1386b742f..063a94b4d 100644
--- a/keyboards/handwired/kbod/keymaps/default/keymap.c
+++ b/keyboards/handwired/kbod/keymaps/default/keymap.c
@@ -1,6 +1,4 @@
-#include "kbod.h"
-
-#define _____ KC_TRNS
+#include QMK_KEYBOARD_H
#define MODS_PRESSED(btn) (get_mods() & (MOD_BIT(KC_L##btn)|MOD_BIT(KC_R##btn)))
@@ -25,33 +23,33 @@ if (record->event.pressed) { \
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- KEYMAP( /* Base */
- F(0), KC_1, KC_2, KC_3, F(1), KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQUAL, KC_BSPC,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLASH,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOT, KC_ENTER,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RSFT,
- TT(1), KC_LCTL, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ LAYOUT( /* Base */
+ F(0), KC_1, KC_2, KC_3, F(1), 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, \
+ TT(1), KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL \
),
- KEYMAP( /* Cursor layer */
- KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
- TT(3), _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, KC_INSERT,
- TT(2), _____, _____, _____, _____, _____, _____, _____, _____, _____, _____, KC_HOME, _____,
- _____, _____, _____, _____, _____, _____, _____, _____, KC_PGUP, KC_PGDN, KC_END, KC_UP,
- _____, _____, _____, _____, _____, KC_LEFT, KC_DOWN, KC_RIGHT
+ LAYOUT( /* Cursor layer */
+ 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, \
+ TT(3), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
+ TT(2), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, KC_END, KC_UP, \
+ _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT \
),
- KEYMAP( /* Keypad layer */
- TO(0), KC_1, KC_2, KC_3, F(1), KC_5, KC_6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, KC_BSPC,
- _____, _____, _____, _____, _____, _____, _____, KC_P4, KC_P5, KC_P6, _____, _____, _____, _____,
- _____, _____, _____, _____, _____, _____, _____, KC_P1, KC_P2, KC_P3, _____, _____, _____,
- _____, _____, _____, _____, _____, _____, _____, KC_P0, KC_PDOT, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2,
- _____, _____, _____, _____, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, KC_MS_BTN3
+ LAYOUT( /* Keypad layer */
+ TO(0), KC_1, KC_2, KC_3, F(1), KC_5, KC_6, KC_P7, KC_P8, KC_P9, KC_P0, KC_PMNS, KC_PPLS, KC_BSPC, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_BTN1, KC_MS_U, KC_BTN2, \
+ _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN3 \
),
- KEYMAP( /* Multimedia layer */
- TO(0), _____, _____, _____, _____, _____, _____, _____, _____, _____, KC_AUDIO_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, _____,
- _____, _____, KC_WAKE, _____, _____, _____, _____, _____, _____, _____, KC_MSTP, KC_MPRV, KC_MNXT, _____,
- _____, _____, KC_SLEP, _____, _____, _____, _____, _____, _____, _____, _____, _____, _____,
- _____, _____, KC_PWR, _____, _____, _____, _____, _____, _____, KC_MS_BTN1, KC_MS_WH_UP, KC_MS_BTN2,
- _____, _____, _____, KC_MPLY, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT, KC_MS_BTN3
+ LAYOUT( /* Multimedia layer */
+ TO(0), _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, \
+ _______, _______, KC_WAKE, _______, _______, _______, _______, _______, _______, _______, KC_MSTP, KC_MPRV, KC_MNXT, _______, \
+ _______, _______, KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, KC_PWR, _______, _______, _______, _______, _______, _______, KC_BTN1, KC_WH_U, KC_BTN2, \
+ _______, _______, _______, KC_MPLY, KC_WH_L, KC_WH_D, KC_WH_R, KC_BTN3 \
),
};
@@ -101,4 +99,4 @@ void matrix_scan_user(void) {
} else {
PORTC &= ~_BV(PC7);
}
-} \ No newline at end of file
+}
diff --git a/keyboards/handwired/kbod/keymaps/default/rules.mk b/keyboards/handwired/kbod/keymaps/default/rules.mk
index eb6bf940a..5b9ff0bfd 100644
--- a/keyboards/handwired/kbod/keymaps/default/rules.mk
+++ b/keyboards/handwired/kbod/keymaps/default/rules.mk
@@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/kbod/readme.md b/keyboards/handwired/kbod/readme.md
index d2f2c01ae..470ccce0e 100644
--- a/keyboards/handwired/kbod/readme.md
+++ b/keyboards/handwired/kbod/readme.md
@@ -1,21 +1,18 @@
-KBOD keyboard firmware
-======================
+# KBOD
-KBOD is a 60% Keyboard kit, hand-wired, with Arduino Micro as its controller. It's utilize 8x8 matrix and has layout similar to GH-60
+![KBOD](https://f4.fudanchii.net/shx/2017/02/IMG_20170212_224547.jpg)
-## Quantum MK Firmware
+KBOD is a 60% Keyboard kit, hand-wired, with Arduino Micro as its controller. It utilizes an 8x8 matrix and has layout similar to GH60. [More info](https://github.com/fudanchii/keyboard_of_disapproval)
-For the full Quantum feature list, see [the parent readme](/).
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: Arduino Micro
-## Building
+Make example for this keyboard (after setting up your build environment):
-Download or clone the whole firmware and use ```make handwired/kbod:default``` to generate the .hex file. You may flash it with avrdude
+ make handwired/kbod:default
-## Flashing
-Something along this line:
+Flashing your firmware may be done with avrdude. The command should be something along this line:
-```
-avrdude -p m32u4 -c avr109 -P <COM PORT> -C <avrdude conf file> -e -u flash:w:handwired_kbod_default.hex
-```
+ avrdude -p m32u4 -c avr109 -P <COM PORT> -C <avrdude conf file> -e -u flash:w:handwired_kbod_default.hex
-[More info](https://github.com/fudanchii/keyboard_of_disapproval) \ No newline at end of file
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/maartenwut/info.json b/keyboards/handwired/maartenwut/info.json
new file mode 100644
index 000000000..98720d24f
--- /dev/null
+++ b/keyboards/handwired/maartenwut/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "Maartenwut Ortho",
+ "url": "",
+ "maintainer": "maartenwut",
+ "width": 14,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0},
+ {"label":"Esc", "x":0, "y":1},
+ {"label":"Q", "x":1, "y":1},
+ {"label":"W", "x":2, "y":1},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1},
+ {"label":"T", "x":5, "y":1},
+ {"label":"Y", "x":6, "y":1},
+ {"label":"U", "x":7, "y":1},
+ {"label":"I", "x":8, "y":1},
+ {"label":"O", "x":9, "y":1},
+ {"label":"P", "x":10, "y":1},
+ {"label":"[", "x":11, "y":1},
+ {"label":"]", "x":12, "y":1},
+ {"label":"\\", "x":13, "y":1},
+ {"label":"Tab", "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":"Delete", "x":12, "y":2},
+ {"label":"Enter", "x":13, "y":2},
+ {"label":"Shift", "x":0, "y":3},
+ {"label":"Z", "x":1, "y":3},
+ {"label":"X", "x":2, "y":3},
+ {"label":"C", "x":3, "y":3},
+ {"label":"V", "x":4, "y":3},
+ {"label":"B", "x":5, "y":3},
+ {"label":"N", "x":6, "y":3},
+ {"label":"M", "x":7, "y":3},
+ {"label":",", "x":8, "y":3},
+ {"label":".", "x":9, "y":3},
+ {"label":"/", "x":10, "y":3},
+ {"label":"Shift", "x":11, "y":3},
+ {"label":"Up", "x":12, "y":3},
+ {"label":"Print Screen", "x":13, "y":3},
+ {"label":"Ctrl", "x":0, "y":4},
+ {"label":"GUI", "x":1, "y":4},
+ {"label":"Alt", "x":2, "y":4},
+ {"label":"Fn", "x":3, "y":4},
+ {"label":"Fn3 / Space", "x":4, "y":4, "w":2.25},
+ {"label":"Space", "x":6.25, "y":4, "w":2.75},
+ {"label":"Fn2", "x":9, "y":4},
+ {"label":"Alt", "x":10, "y":4},
+ {"label":"Left", "x":11, "y":4},
+ {"label":"Down", "x":12, "y":4},
+ {"label":"Right", "x":13, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/maartenwut/readme.md b/keyboards/handwired/maartenwut/readme.md
index 31fc76743..0ae738271 100644
--- a/keyboards/handwired/maartenwut/readme.md
+++ b/keyboards/handwired/maartenwut/readme.md
@@ -2,7 +2,7 @@
Custom handwired keyboard for maartenwut.
-Keyboard Maintainer: [Maarten Dekekrs](https://github.com/maartenwut)
+Keyboard Maintainer: [Maarten Dekkers](https://github.com/maartenwut)
Hardware Supported: Custom handwired
Hardware Availability:
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make handwired/maartenwut:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/minorca/info.json b/keyboards/handwired/minorca/info.json
new file mode 100644
index 000000000..dafee6345
--- /dev/null
+++ b/keyboards/handwired/minorca/info.json
@@ -0,0 +1,55 @@
+{
+ "keyboard_name": "Minorca Handwired",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"KA00", "x":0, "y":0},
+ {"label":"KA01", "x":1, "y":0},
+ {"label":"KA02", "x":2, "y":0},
+ {"label":"KA03", "x":3, "y":0},
+ {"label":"KA04", "x":4, "y":0},
+ {"label":"KA05", "x":5, "y":0},
+ {"label":"KA06", "x":6, "y":0},
+ {"label":"KA07", "x":7, "y":0},
+ {"label":"KA08", "x":8, "y":0},
+ {"label":"KA09", "x":9, "y":0},
+ {"label":"KA10", "x":10, "y":0},
+ {"label":"KA11", "x":11, "y":0},
+ {"label":"KB00", "x":0, "y":1, "w":1.25},
+ {"label":"KB01", "x":1.25, "y":1},
+ {"label":"KB02", "x":2.25, "y":1},
+ {"label":"KB03", "x":3.25, "y":1},
+ {"label":"KB04", "x":4.25, "y":1},
+ {"label":"KB05", "x":5.25, "y":1},
+ {"label":"KB06", "x":6.25, "y":1},
+ {"label":"KB07", "x":7.25, "y":1},
+ {"label":"KB08", "x":8.25, "y":1},
+ {"label":"KB09", "x":9.25, "y":1},
+ {"label":"KB11", "x":10.25, "y":1, "w":1.75},
+ {"label":"KC00", "x":0, "y":2, "w":1.75},
+ {"label":"KC02", "x":1.75, "y":2},
+ {"label":"KC03", "x":2.75, "y":2},
+ {"label":"KC04", "x":3.75, "y":2},
+ {"label":"KC05", "x":4.75, "y":2},
+ {"label":"KC06", "x":5.75, "y":2},
+ {"label":"KC07", "x":6.75, "y":2},
+ {"label":"KC08", "x":7.75, "y":2},
+ {"label":"KC09", "x":8.75, "y":2},
+ {"label":"KC10", "x":9.75, "y":2},
+ {"label":"KC11", "x":10.75, "y":2, "w":1.25},
+ {"label":"KD00", "x":0, "y":3, "w":1.25},
+ {"label":"KD02", "x":1.25, "y":3, "w":1.25},
+ {"label":"KD03", "x":2.5, "y":3, "w":1.25},
+ {"label":"KD04", "x":3.75, "y":3, "w":2.25},
+ {"label":"KD07", "x":6, "y":3, "w":2.25},
+ {"label":"KD09", "x":8.25, "y":3, "w":1.25},
+ {"label":"KD10", "x":9.5, "y":3},
+ {"label":"KD11", "x":10.5, "y":3, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/minorca/keymaps/default/keymap.c b/keyboards/handwired/minorca/keymaps/default/keymap.c
index 3392f25ef..29ed7aa03 100644
--- a/keyboards/handwired/minorca/keymaps/default/keymap.c
+++ b/keyboards/handwired/minorca/keymaps/default/keymap.c
@@ -1,7 +1,4 @@
-
-#include "minorca.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
@@ -10,33 +7,23 @@ extern keymap_config_t keymap_config;
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = { /* Base */
- {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, XXXXXXX, KC_ENT },
- {KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_QUOT, KC_FN1, KC_FN0 },
- {KC_NO, XXXXXXX, KC_NO, KC_LALT, KC_SPC, XXXXXXX, XXXXXXX, KC_SPC, XXXXXXX, KC_DOT, KC_SLSH, KC_NO }
- },
- [1] = { /* First */
- {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELT },
- {KC_TAB, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, XXXXXXX, KC_LGUI },
- {KC_LCTRL,XXXXXXX, KC_Z, KC_X, KC_C, KC_PGDN, KC_END, KC_L, KC_SCLN, KC_UP, KC_FN1, KC_FN0 },
- {KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO }
- },
- [2] = { /* Second */
- {KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DELT },
- {KC_TAB, KC_MUTE, KC_VOLD, KC_VOLU, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, XXXXXXX, KC_ENT },
- {KC_CAPS, XXXXXXX, KC_LSFT, KC_RSFT, KC_PAUSE,KC_F10, KC_F11, KC_F12, KC_NO, KC_UP, KC_FN1, KC_FN0 },
- {KC_NO, XXXXXXX, KC_NO, KC_LALT, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_DOWN, KC_RIGHT,KC_NO }
- },
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(1), // to First overlay
- [1] = ACTION_LAYER_MOMENTARY(2), // to Second overlay
-
-}; \ No newline at end of file
+ [0] = LAYOUT( /* Base */
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, \
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_QUOT, MO(2), MO(1), \
+ XXXXXXX, XXXXXXX, KC_LALT, KC_SPC, KC_SPC, KC_DOT, KC_SLSH, XXXXXXX \
+ ),
+ [1] = LAYOUT( /* First */
+ 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_TAB, KC_MPRV, KC_MPLY, KC_MNXT, KC_PGUP, KC_HOME, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_LGUI, \
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_PGDN, KC_END, KC_L, KC_SCLN, KC_UP, _______, _______, \
+ XXXXXXX, XXXXXXX, KC_LALT, _______, _______, KC_DOWN, KC_RGHT, XXXXXXX \
+ ),
+ [2] = LAYOUT( /* Second */
+ KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ KC_TAB, KC_MUTE, KC_VOLD, KC_VOLU, KC_TILD, KC_PIPE, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_ENT, \
+ KC_CAPS, KC_LSFT, KC_RSFT, KC_PAUS, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_UP, _______, _______, \
+ XXXXXXX, XXXXXXX, KC_LALT, _______, _______, KC_DOWN, KC_RGHT, XXXXXXX \
+ ),
+};
diff --git a/keyboards/handwired/minorca/keymaps/default/rules.mk b/keyboards/handwired/minorca/keymaps/default/rules.mk
index 0ea7a6935..584798d1a 100644
--- a/keyboards/handwired/minorca/keymaps/default/rules.mk
+++ b/keyboards/handwired/minorca/keymaps/default/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+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/handwired/minorca/keymaps/rgb/keymap.c b/keyboards/handwired/minorca/keymaps/rgb/keymap.c
index e1ee49dce..c99a255e4 100644
--- a/keyboards/handwired/minorca/keymaps/rgb/keymap.c
+++ b/keyboards/handwired/minorca/keymaps/rgb/keymap.c
@@ -1,7 +1,4 @@
-
-#include "minorca.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
@@ -14,50 +11,34 @@ extern keymap_config_t keymap_config;
#define _RAISE 2
#define _TB 3
-// Macro name shortcuts
-#define QWERTY M(_QWERTY)
-#define LOWER M(_LOWER)
-#define RAISE M(_RAISE)
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_QWERTY] = { /* Qwerty */
- {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
- {FUNC(0), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, XXXXXXX, KC_QUOT},
- {KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, FUNC(1)},
- {KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, FUNC(2), XXXXXXX, XXXXXXX, FUNC(3), XXXXXXX, KC_RALT, KC_APP, KC_RCTL}
-},
-
-[_RAISE] = {
- {S(KC_GRV), S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), KC_BSPC},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_PAUSE, KC_TRNS, KC_TRNS, KC_TRNS, S(KC_MINS), S(KC_EQL), S(KC_LBRC), XXXXXXX, S(KC_BSLS)},
- {KC_TRNS, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_ENT},
- {KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_MNXT, KC_MUTE, KC_MPLY}
-},
-
-[_LOWER] = {
- {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, XXXXXXX, KC_BSLS},
- {KC_TRNS, XXXXXXX, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_PGUP, KC_ENT},
- {KC_TRNS, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_HOME, KC_PGDN, KC_END}
-},
-
-[_TB] = { /* Tab */
- {KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_TRNS},
- {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, KC_TRNS},
- {KC_TRNS, XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_UP, KC_ENT},
- {BL_STEP, XXXXXXX, KC_TRNS, KC_TRNS, KC_TRNS, XXXXXXX, XXXXXXX, KC_TRNS, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT}
-}
-};
-
+ [_QWERTY] = LAYOUT( /* Qwerty */ \
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ LT(_TB, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, MT(MOD_RSFT, KC_ENT), \
+ KC_LCTL, KC_LGUI, KC_LALT, LT(_RAISE, KC_SPC), LT(_LOWER, KC_SPC), KC_RALT, KC_APP, KC_RCTL \
+ ),
+
+ [_RAISE] = LAYOUT( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ _______, _______, _______, KC_PAUS, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_PIPE, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_ENT, \
+ _______, _______, _______, _______, _______, KC_MNXT, KC_MUTE, KC_MPLY \
+ ),
+
+ [_LOWER] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_BSLS, \
+ _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_PGUP, KC_ENT, \
+ _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+ [_TB] = LAYOUT( /* Tab */ \
+ KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_UP, KC_ENT, \
+ BL_STEP, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT \
+ )
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_TAP_KEY(_TB, KC_TAB),
- [1] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
- [2] = ACTION_LAYER_TAP_KEY(_RAISE, KC_SPC),
- [3] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC),
};
diff --git a/keyboards/handwired/minorca/keymaps/rgb/rules.mk b/keyboards/handwired/minorca/keymaps/rgb/rules.mk
index da44256f9..6e430d59e 100644
--- a/keyboards/handwired/minorca/keymaps/rgb/rules.mk
+++ b/keyboards/handwired/minorca/keymaps/rgb/rules.mk
@@ -15,7 +15,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/minorca/minorca.h b/keyboards/handwired/minorca/minorca.h
index 158e5b4c5..2df4ebdc4 100644
--- a/keyboards/handwired/minorca/minorca.h
+++ b/keyboards/handwired/minorca/minorca.h
@@ -3,4 +3,16 @@
#include "quantum.h"
+#define LAYOUT( \
+ KA00, KA01, KA02, KA03, KA04, KA05, KA06, KA07, KA08, KA09, KA10, KA11, \
+ KB00, KB01, KB02, KB03, KB04, KB05, KB06, KB07, KB08, KB09, KB11, \
+ KC00, KC02, KC03, KC04, KC05, KC06, KC07, KC08, KC09, KC10, KC11, \
+ KD00, KD02, KD03, KD04, KD07, KD09, KD10, KD11 \
+) { \
+ { KA00, KA01, KA02, KA03, KA04, KA05, KA06, KA07, KA08, KA09, KA10, KA11 }, \
+ { KB00, KB01, KB02, KB03, KB04, KB05, KB06, KB07, KB08, KB09, KC_NO, KB11 }, \
+ { KC00, KC_NO, KC02, KC03, KC04, KC05, KC06, KC07, KC08, KC09, KC10, KC11 }, \
+ { KD00, KC_NO, KD02, KD03, KD04, KC_NO, KC_NO, KD07, KC_NO, KD09, KD10, KD11 } \
+}
+
#endif
diff --git a/keyboards/handwired/minorca/readme.md b/keyboards/handwired/minorca/readme.md
index 0253506e0..c91045960 100644
--- a/keyboards/handwired/minorca/readme.md
+++ b/keyboards/handwired/minorca/readme.md
@@ -1,33 +1,13 @@
-minorca keyboard firmware
-======================
-Handwired 40% keyboard
+# minorca
-http://www.panc.co/blog/minorcasebright-information-page
+A handwired 40% keyboard by panc.co.
-## Quantum MK Firmware
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: panc.co minorca
+Hardware Availability: [panc.co](https://www.panc.co/blog/minorcasebright-information-page)
-For the full Quantum feature list, see [the parent readme.md](/readme.md).
+Make example for this keyboard (after setting up your build environment):
-## Building
+ make handwired/minorca:default
-Download or clone the whole firmware and navigate to the keyboards/planck folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use `make dfu` to program your PCB once you hit the reset button.
-
-Depending on which keymap you would like to use, you will have to compile slightly differently.
-
-### Default
-To build with the default keymap, simply run `make`.
-
-### Other Keymaps
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create file named `<name>.c` in the keymaps folder, and see keymap document (you can find in top readme.md) and existent keymap files.
-
-To build the firmware binary hex file with a keymap just do `make` with `KEYMAP` option like:
-```
-$ make KEYMAP=[default|jack|<name>]
-```
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
-
-### Notable forks (which some of the keymap files are from)
-- [Shane's Fork](https://github.com/shanecelis/tmk_keyboard/tree/master/keyboard/planck)
-- [Pierre's Fork](https://github.com/pcarrier/tmk_keyboard/blob/pcarrier/planck/keyboard/gh60/keymap_planck.c)
-- [Nathan's Fork](https://github.com/nathanrosspowell/tmk_keyboard/tree/planck-jack/keyboard/planck)
-- [Matthew's Fork](https://github.com/pepers/tmk_keyboard/tree/master/keyboard/planck)
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.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/minorca/rules.mk b/keyboards/handwired/minorca/rules.mk
index ce502b820..3e408e2b9 100644
--- a/keyboards/handwired/minorca/rules.mk
+++ b/keyboards/handwired/minorca/rules.mk
@@ -61,7 +61,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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
diff --git a/keyboards/handwired/MS_sculpt_mobile/babblePaste.c b/keyboards/handwired/ms_sculpt_mobile/babblePaste.c
index 22394cc7d..e03564870 100644
--- a/keyboards/handwired/MS_sculpt_mobile/babblePaste.c
+++ b/keyboards/handwired/ms_sculpt_mobile/babblePaste.c
@@ -1,13 +1,13 @@
-/* A library to output the right key shortcut in any common app.
-Given a global variable babble_mode to show the environment and a
-key that calls the paste macro, do the right type of paste.
-Setting the context is done by another macro, or TBD interaction with the host.
+/* A library to output the right key shortcut in any common app.
+Given a global variable babble_mode to show the environment and a
+key that calls the paste macro, do the right type of paste.
+Setting the context is done by another macro, or TBD interaction with the host.
Huge thanks to https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts
-and https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/jeebak/keymap.c
+and https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/jeebak/keymap.c
*/
-#include "../MS_sculpt_mobile/babblePaste.h"
+#include "babblePaste.h"
#include "action_macro.h"
@@ -16,14 +16,14 @@ and https://github.com/qmk/qmk_firmware/blob/master/keyboards/planck/keymaps/jee
// GLOBAL variable to determine mode. Sets startup default if no eeppom
uint8_t babble_mode =0 ;
-// small function that we might also want to call from a keymap.
+// small function that we might also want to call from a keymap.
macro_t* switch_babble_mode( uint8_t id) {
babble_mode= id;
return MACRO_NONE; //less typing where called
}
-
+
// Today I learned that the preprocessor can not create a switch statement label from an argument
// And else statements have problems, see https://gcc.gnu.org/onlinedocs/gcc-3.0.1/cpp_3.html#SEC15
#define BABLM(ent, macro...) \
@@ -32,8 +32,8 @@ macro_t* switch_babble_mode( uint8_t id) {
/* this function runs the appropriate babblepaste macro, given
-the global babble_mode, and a shortcut from the ENUM in babblePaste.h
-TODO, the pointers in this function should be stored in a PROGMEM array, not ram.
+the global babble_mode, and a shortcut from the ENUM in babblePaste.h
+TODO, the pointers in this function should be stored in a PROGMEM array, not ram.
But that requires even more clever preprocessor foo.
*/
const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
@@ -43,20 +43,20 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
return MACRO_NONE;
}
*/
-
+
#ifdef MS_MODE
- if ( BABL_WINDOWS == shortcut ) { return switch_babble_mode(MS_MODE); }
-#endif
+ if ( BABL_WINDOWS == shortcut ) { return switch_babble_mode(MS_MODE); }
+#endif
#ifdef MAC_MODE
- if ( BABL_MAC == shortcut) { return switch_babble_mode(MAC_MODE); }
+ if ( BABL_MAC == shortcut) { return switch_babble_mode(MAC_MODE); }
#endif
#ifdef LINUX_MODE
if ( BABL_LINUX == shortcut ) { return switch_babble_mode(LINUX_MODE); }
-#endif
+#endif
#ifdef READMUX_MODE
if ( BABL_READLINE == shortcut ) { switch_babble_mode(READMUX_MODE); return MACRO_NONE; }
-#endif
+#endif
#ifdef VI_MODE
if ( BABL_VI == shortcut ) { return switch_babble_mode(VI_MODE); }
#endif
@@ -66,11 +66,11 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
- switch(babble_mode) {
+ switch(babble_mode) {
#ifdef MS_MODE
-
- case MS_MODE:
+
+ case MS_MODE:
BABLM( BABL_GO_LEFT_1C, T(LEFT), END );
BABLM( BABL_GO_RIGHT_1C , T(RIGHT), END );
BABLM( BABL_GO_LEFT_WORD, D(LCTL), T(LEFT), U(LCTL), END );
@@ -93,7 +93,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_REDO, D(LCTL), T(Y), U(LCTL), END );
BABLM( BABL_CUT, D(LCTL), T(X), U(LCTL), END );
BABLM( BABL_COPY, D(LCTL), T(C), U(LCTL), END );
- BABLM( BABL_PASTE, D(LCTL), T(V), U(LCTL), END );
+ BABLM( BABL_PASTE, D(LCTL), T(V), U(LCTL), END );
BABLM( BABL_SELECT_ALL, D(LCTL), T(A), U(LCTL), END );
BABLM( BABL_FIND, D(LCTL),T(F), U(LCTL),END );
BABLM( BABL_FIND_NEXT, T(F3),END );
@@ -114,7 +114,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_BROWSER_BACK, D(LALT), T(LEFT), U(LALT),END );
BABLM( BABL_BROWSER_FIND, D(LCTL), T(F), U(LCTL),END );
BABLM( BABL_BROWSER_BOOKMARK, D(LCTL), T(D), U(LCTL),END );
- //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LCTL),END ); // EDGE
+ //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LCTL),END ); // EDGE
BABLM( BABL_BROWSER_DEV_TOOLS, D(LCTL), T(T), U(LCTL),END ); // Chrome
// Chrome
BABLM( BABL_BROWSER_RELOAD, D(LCTL), T(F5), U(LCTL),END ); // hard reload w/o cache
@@ -126,8 +126,8 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
// Todo, ring bell, flash light, show user this isn't supported
return MACRO_NONE;
-
-
+
+
#endif /* MS_MODE*/
@@ -146,7 +146,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_GO_PREV_LINE , T(UP), END );
BABLM( BABL_PGDN , T(PGDN), END );
BABLM( BABL_PGUP , T(PGUP), END );
- BABLM( BABL_DEL_RIGHT_1C , D(DEL), END );
+ BABLM( BABL_DEL_RIGHT_1C , D(DEL), END );
BABLM( BABL_DEL_LEFT_WORD , D(LCTL), T(BSPACE), U(LCTL), END );
BABLM( BABL_DEL_RIGHT_WORD , D(LCTL), T(DEL), U(LCTL), END );
BABLM( BABL_DEL_TO_LINE_END, D(RSFT), T(HOME), U(RSFT), T(DEL), END);
@@ -156,8 +156,8 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_REDO , D(LCTL), T(Y), U(LCTL), END );
BABLM( BABL_CUT , D(LCTL), T(X), U(LCTL), END );
BABLM( BABL_COPY , D(LCTL), T(C), U(LCTL), END );
- BABLM( BABL_PASTE , D(LCTL), T(V), U(LCTL), END );
- BABLM( BABL_SELECT_ALL, D(LCTL), T(A), U(LCTL), END );
+ BABLM( BABL_PASTE , D(LCTL), T(V), U(LCTL), END );
+ BABLM( BABL_SELECT_ALL, D(LCTL), T(A), U(LCTL), END );
BABLM( BABL_FIND, D(LCTL),T(F), U(LCTL),END );
/* BABLM(BABL_FIND_NEXT , T(F3),END ); KDE */
BABLM( BABL_FIND_NEXT, D(LCTL),T(G), U(LCTL),END ); // Gnome*/
@@ -167,7 +167,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_SWITCH_APP_NEXT, D(LCTL),T(TAB), U(LCTL),END );
BABLM( BABL_SWITCH_APP_LAST, D(LSFT),D(LCTL),T(TAB), U(LCTL), U(LSFT),END );
BABLM( BABL_CLOSE_APP, D(LALT),T(F4), U(LALT),END );
- //BABLM( BABL_HELP, END );
+ //BABLM( BABL_HELP, END );
#ifndef BABL_NOBROWSER
BABLM( BABL_BROWSER_NEW_TAB, D(LCTL), T(T), U(LCTL),END );
@@ -188,9 +188,9 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
#endif
#endif
return MACRO_NONE;
-
-#endif
-
+
+#endif
+
#ifdef MAC_MODE
case MAC_MODE:
@@ -206,7 +206,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_GO_PREV_LINE , T(UP), END );
BABLM( BABL_PGDN , D(LALT),T(DOWN), U(LALT), END );
BABLM( BABL_PGUP , D(LALT),T(UP), U(LALT), END );
- BABLM( BABL_DEL_RIGHT_1C , D(DEL), END );
+ BABLM( BABL_DEL_RIGHT_1C , D(DEL), END );
BABLM( BABL_DEL_LEFT_WORD , D(LALT), T(BSPACE), U(LALT), END );
BABLM( BABL_DEL_RIGHT_WORD, D(LALT), T(DEL), U(LALT), END );
BABLM( BABL_DEL_TO_LINE_END, D(LCTL), T(K), U(LCTL), END );// there must be another way
@@ -216,7 +216,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_REDO , D(LSFT),D(LGUI), T(Z), U(LSFT),U(LGUI), END );
BABLM( BABL_CUT , D(LGUI), T(X), U(LGUI), END );
BABLM( BABL_COPY , D(LGUI), T(C), U(LGUI), END );
- BABLM( BABL_PASTE , D(LGUI), T(V), U(LGUI), END );
+ BABLM( BABL_PASTE , D(LGUI), T(V), U(LGUI), END );
BABLM( BABL_SELECT_ALL , D(LGUI), T(A), U(LGUI), END );
BABLM( BABL_FIND , D(LGUI),T(F), U(LGUI),END );
BABLM( BABL_FIND_NEXT, D(LGUI),T(G), U(LGUI),END );
@@ -238,7 +238,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_BROWSER_BACK, D(LGUI), T(LEFT), U(LGUI),END );
BABLM( BABL_BROWSER_FIND, D(LGUI), T(F), U(LGUI),END );
BABLM( BABL_BROWSER_BOOKMARK, D(LGUI), T(D), U(LGUI),END );
- //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
+ //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
BABLM( BABL_BROWSER_DEV_TOOLS, D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END ); // Chrome
// Chrome
BABLM( BABL_BROWSER_RELOAD, D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
@@ -247,10 +247,10 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_BROWSER_ZOOM_OUT, D(LGUI), T(MINS), U(LGUI),END );
#endif
#endif
-
+
return MACRO_NONE;
-#endif
-
+#endif
+
#ifdef EMACS_MODE
case EMACS_MODE:
@@ -269,18 +269,18 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_GO_PREV_LINE , D(LCTL), T(P), U(LCTL), END );
BABLM( BABL_PGDN , D(LCTL), T(V), U(LCTL), END );
BABLM( BABL_PGUP , D(LALT), T(V), U(LALT), END );
- BABLM( BABL_DEL_RIGHT_1C, D(LCTL), T(D), U(LCTL),END );
+ BABLM( BABL_DEL_RIGHT_1C, D(LCTL), T(D), U(LCTL),END );
BABLM( BABL_DEL_LEFT_WORD , D(LCTL), T(BSPACE), U(LCTL), END );
BABLM( BABL_DEL_RIGHT_WORD , D(LALT), T(D), U(LALT), END );
- BABLM( BABL_DEL_TO_LINE_END, D(LCTL), T(K), U(LCTL), END );
+ BABLM( BABL_DEL_TO_LINE_END, D(LCTL), T(K), U(LCTL), END );
BABLM( BABL_DEL_TO_LINE_START, T(ESC), T(0), D(LCTL), T(K), U(LCTL), END );
#ifndef BABL_MOVEMENTONLY
BABLM( BABL_UNDO , D(LCTL), T(X), U(LCTL),T(C), END );
BABLM( BABL_REDO , D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
BABLM( BABL_CUT , D(LCTL), T(W), U(LCTL), END );
BABLM( BABL_COPY , D(LALT), T(W), U(LALT), END ); //really?
- BABLM( BABL_PASTE , D(LCTL), T(Y), U(LCTL), END );
- BABLM( BABL_SELECT_ALL ,D(LCTL), T(X), U(LCTL),T(H), END );
+ BABLM( BABL_PASTE , D(LCTL), T(Y), U(LCTL), END );
+ BABLM( BABL_SELECT_ALL ,D(LCTL), T(X), U(LCTL),T(H), END );
BABLM( BABL_FIND , D(LCTL), T(S), U(LCTL),END );
BABLM( BABL_FIND_NEXT , D(LCTL), T(S), U(LCTL),END );
BABLM( BABL_FIND_REPLACE , D(LALT),D(LSFT), T(5),U(LSFT), U(LALT), END );
@@ -290,7 +290,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_CLOSE_APP , D(LCTL), T(X), U(LCTL),T(C),END );
BABLM( BABL_HELP , D(LCTL),T(H), U(LCTL),T(A),END); // start search in help
#ifndef BABL_NOBROWSER
-/* you get to figure w3 out
+/* you get to figure w3 out
BABLM( BABL_BROWSER_NEW_TAB, D(LGUI), T(T), U(LGUI),END );
BABLM( BABL_BROWSER_CLOSE_TAB, D(LGUI), T(W), U(LGUI),END );
BABLM( BABL_BROWSER_REOPEN_LAST_TAB, D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
@@ -301,7 +301,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_BROWSER_BACK, D(LGUI), T(LEFT), U(LGUI),END );
BABLM( BABL_BROWSER_FIND, D(LGUI), T(F), U(LGUI),END );
BABLM( BABL_BROWSER_BOOKMARK, D(LGUI), T(D), U(LGUI),END );
- //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
+ //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
BABLM( BABL_BROWSER_DEV_TOOLS, D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END ); // Chrome
// Chrome
BABLM( BABL_BROWSER_RELOAD, D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
@@ -312,18 +312,18 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
#endif
#endif
break;
-
+
return MACRO_NONE;
}
-
-#endif
+
+#endif
#ifdef VI_MODE
case VI_MODE:
// you have to track the modes yourself. Otherwise motion is awful (bell, bell, bell)
-
-
+
+
BABLM( BABL_GO_LEFT_1C , T(H), END );
BABLM( BABL_GO_RIGHT_1C , T(L), END );
BABLM( BABL_GO_LEFT_WORD , T(B),END );
@@ -336,18 +336,18 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_GO_PREV_LINE, T(K), END );
BABLM( BABL_PGDN ,D(LCTL), T(F), U(LCTL), END );
BABLM( BABL_PGUP , D(LCTL), T(B), U(LCTL), END );
- BABLM( BABL_DEL_RIGHT_1C , T(X),END );
+ BABLM( BABL_DEL_RIGHT_1C , T(X),END );
BABLM( BABL_DEL_LEFT_WORD , T(D),T(G),T(E),END );
BABLM( BABL_DEL_RIGHT_WORD , T(D),T(W),END );
BABLM( BABL_DEL_TO_LINE_END, T(D),D(LSFT), T(4),U(LSFT) ,END ); // d$
- BABLM( BABL_DEL_TO_LINE_START, T(D),D(LSFT), T(6),U(LSFT) ,END );
+ BABLM( BABL_DEL_TO_LINE_START, T(D),D(LSFT), T(6),U(LSFT) ,END );
#ifndef BABL_MOVEMENTONLY
BABLM( BABL_UNDO , T(U), END );
- BABLM( BABL_REDO , D(LCTL), T(R), U(LCTL), END );
+ BABLM( BABL_REDO , D(LCTL), T(R), U(LCTL), END );
BABLM( BABL_CUT , T(X), END );
BABLM( BABL_COPY , T(Y),END );
- BABLM( BABL_PASTE , T(P), END );
- BABLM( BABL_SELECT_ALL , D(LSFT), T(SCLN),U(LSFT),D(LSFT), T(5),U(LSFT),T(Y), END ); // wrong but helpful?
+ BABLM( BABL_PASTE , T(P), END );
+ BABLM( BABL_SELECT_ALL , D(LSFT), T(SCLN),U(LSFT),D(LSFT), T(5),U(LSFT),T(Y), END ); // wrong but helpful?
BABLM( BABL_FIND , T(SLASH),END );
BABLM( BABL_FIND_NEXT , T(N),END );
BABLM( BABL_FIND_REPLACE , D(LALT),D(LSFT), T(5),U(LSFT), U(LALT), END );
@@ -357,7 +357,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM(BABL_CLOSE_APP, D(LSFT), T(SCLN),U(LSFT), T(Q), D(RSFT), T(1),U(RSFT), END );
BABLM(BABL_HELP, D(LSFT), T(SCLN),U(LSFT),T(H),END); // start search in help
#ifndef BABL_NOBROWSER
-/* you get to figure this out
+/* you get to figure this out
BABLM( BABL_BROWSER_NEW_TAB, D(LGUI), T(T), U(LGUI),END );
BABLM( BABL_BROWSER_CLOSE_TAB, D(LGUI), T(W), U(LGUI),END );
BABLM( BABL_BROWSER_REOPEN_LAST_TAB, D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
@@ -368,7 +368,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_BROWSER_BACK, D(LGUI), T(LEFT), U(LGUI),END );
BABLM( BABL_BROWSER_FIND, D(LGUI), T(F), U(LGUI),END );
BABLM( BABL_BROWSER_BOOKMARK, D(LGUI), T(D), U(LGUI),END );
- //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
+ //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
BABLM( BABL_BROWSER_DEV_TOOLS, D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END ); // Chrome
// Chrome
BABLM( BABL_BROWSER_RELOAD, D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
@@ -377,8 +377,8 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_BROWSER_ZOOM_OUT, D(LGUI), T(MINS), U(LGUI),END );
*/
#endif
-#endif
- return MACRO_NONE;
+#endif
+ return MACRO_NONE;
#endif
@@ -387,10 +387,10 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
#ifdef READMUX_MODE
// Readline command line editing + tmux windowing
// I havent decided how much to do readline and how much tmux
-
-
- case READMUX_MODE:
-
+
+
+ case READMUX_MODE:
+
BABLM( BABL_GO_LEFT_1C , T(LEFT), END );
BABLM( BABL_GO_RIGHT_1C , T(RIGHT), END );
BABLM( BABL_GO_LEFT_WORD , D(LALT), T(B), U(LALT), END );
@@ -403,28 +403,28 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_GO_PREV_LINE , D(LCTL), T(P), U(LCTL), END );
BABLM( BABL_PGDN , T(PGDN), END );
BABLM( BABL_PGUP , T(PGUP), END );
- BABLM( BABL_DEL_RIGHT_1C , D(LCTL), T(D), U(LCTL),END );
+ BABLM( BABL_DEL_RIGHT_1C , D(LCTL), T(D), U(LCTL),END );
BABLM( BABL_DEL_LEFT_WORD , D(LCTL), T(W), U(LCTL), END );
BABLM( BABL_DEL_RIGHT_WORD , D(LALT), T(D), U(LALT), END );
- BABLM( BABL_DEL_TO_LINE_END, D(LCTL), T(K), U(LCTL), END );
+ BABLM( BABL_DEL_TO_LINE_END, D(LCTL), T(K), U(LCTL), END );
BABLM( BABL_DEL_TO_LINE_START, D(LCTL), T(U), U(LCTL), END );
#ifndef BABL_MOVEMENTONLY
BABLM( BABL_UNDO , D(LALT), T(R), U(LALT) , END );
BABLM( BABL_REDO , D(LCTL), T(X), U(LCTL),T(C), END ); // arguably
BABLM( BABL_CUT , D(LCTL), T(K), U(LCTL), END ); // wrong half the time
- //BABLM( BABL_COPY ,END );
- BABLM( BABL_PASTE , D(LCTL), T(Y), U(LCTL), END );
- BABLM( BABL_SELECT_ALL , D(LCTL), T(A), T(K), T(Y), U(LCTL) , END );
+ //BABLM( BABL_COPY ,END );
+ BABLM( BABL_PASTE , D(LCTL), T(Y), U(LCTL), END );
+ BABLM( BABL_SELECT_ALL , D(LCTL), T(A), T(K), T(Y), U(LCTL) , END );
BABLM( BABL_FIND , D(LCTL), T(R), U(LCTL), END ); // search history
BABLM(BABL_FIND_NEXT, D(LCTL), T(S), U(LCTL), END );
- //BABLM( BABL_FIND_REPLACE ,END );
+ //BABLM( BABL_FIND_REPLACE ,END );
BABLM( BABL_RUNAPP , D(LCTL), T(B), U(LCTL), T(C),END ); //tmux
BABLM( BABL_SWITCH_APP_NEXT , D(LCTL), T(B), U(LCTL), T(N),END ); //tmux
BABLM( BABL_SWITCH_APP_LAST , D(LCTL), T(B), U(LCTL), T(P),END ); //tmux
BABLM( BABL_CLOSE_APP , D(LCTL), T(B), U(LCTL), T(D),END); // usually what I want
- // BABLM( BABL_HELP ,END );
+ // BABLM( BABL_HELP ,END );
#ifndef BABL_NOBROWSER
-/* Add lynx shortcuts?
+/* Add lynx shortcuts?
BABLM( BABL_BROWSER_NEW_TAB, D(LGUI), T(T), U(LGUI),END );
BABLM( BABL_BROWSER_CLOSE_TAB, D(LGUI), T(W), U(LGUI),END );
BABLM( BABL_BROWSER_REOPEN_LAST_TAB, D(LGUI), D(RSFT),T(T), U(RSFT),U(LGUI),END );
@@ -435,7 +435,7 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
BABLM( BABL_BROWSER_BACK, D(LGUI), T(LEFT), U(LGUI),END );
BABLM( BABL_BROWSER_FIND, D(LGUI), T(F), U(LGUI),END );
BABLM( BABL_BROWSER_BOOKMARK, D(LGUI), T(D), U(LGUI),END );
- //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
+ //BABLM( BABL_BROWSER_DEV_TOOLS, T(F12), U(LGUI),END ); // EDGE
BABLM( BABL_BROWSER_DEV_TOOLS, D(LGUI), D(LALT), T(I), U(LALT),U(LGUI),END ); // Chrome
// Chrome
BABLM( BABL_BROWSER_RELOAD, D(LGUI), T(R), U(LGUI),END ); // add shift for reload w/o cache
@@ -445,12 +445,12 @@ const macro_t *babblePaste (keyrecord_t *record, uint8_t shortcut) {
*/
#endif
#endif
-
+
return MACRO_NONE;
-
-#endif
- default:
+#endif
+
+ default:
return MACRO_NONE;
}
diff --git a/keyboards/handwired/MS_sculpt_mobile/babblePaste.h b/keyboards/handwired/ms_sculpt_mobile/babblePaste.h
index cedd7d92b..1e8206212 100644
--- a/keyboards/handwired/MS_sculpt_mobile/babblePaste.h
+++ b/keyboards/handwired/ms_sculpt_mobile/babblePaste.h
@@ -1,15 +1,15 @@
-/* A library to output the right key shortcut in any common app.
-Given a global variable babble_mode to show the environment and a
-key that calls the paste macro, do the right type of paste.
+/* A library to output the right key shortcut in any common app.
+Given a global variable babble_mode to show the environment and a
+key that calls the paste macro, do the right type of paste.
-Setting the bable_mode is done by another macro, or TBD interaction with the host.
+Setting the bable_mode is done by another macro, or TBD interaction with the host.
Huge thanks to https://en.wikipedia.org/wiki/Table_of_keyboard_shortcuts
and jeebak & algernon's keymap
*/
#ifndef _babblePaste_h_included__
#define _babblePaste_h_included__
-#include "../MS_sculpt_mobile/config.h"
+#include "config.h"
#include "action_layer.h"
#include "quantum_keycodes.h"
@@ -18,11 +18,11 @@ and jeebak & algernon's keymap
/* ***************************
// Uncomment any modes you want. Whatever mode = 0 will be the default on boot
-// Expect to get errors if you comment a feature out and leave it in your keymap.
+// Expect to get errors if you comment a feature out and leave it in your keymap.
#define USE_BABLPASTE
-//#define MS_MODE 0 // Windows.
+//#define MS_MODE 0 // Windows.
//#define MAC_MODE 1
//#define LINUX_MODE 2 //aka gnome+KDE
//#define EMACS_MODE 3
@@ -42,7 +42,7 @@ and jeebak & algernon's keymap
//#define BABL_MOVEMENTONLY
-// Define starting number for BABL macros in the macro range.
+// Define starting number for BABL macros in the macro range.
// Probably can start the default even lower
#define BABL_START_NUM 50
@@ -53,7 +53,7 @@ enum {
// left & right
BABL_GO_LEFT_1C= BABL_START_NUM,
BABL_GO_RIGHT_1C,
- BABL_GO_LEFT_WORD,
+ BABL_GO_LEFT_WORD,
BABL_GO_RIGHT_WORD,
BABL_GO_START_LINE,
BABL_GO_END_LINE,
@@ -65,7 +65,7 @@ enum {
BABL_PGDN,
BABL_PGUP,
// And the delete options
- //BABL_DEL_LEFT_1C == backspace, so why bother.
+ //BABL_DEL_LEFT_1C == backspace, so why bother.
BABL_DEL_RIGHT_1C, // usually = Del
BABL_DEL_LEFT_WORD,
BABL_DEL_RIGHT_WORD,
@@ -110,7 +110,7 @@ enum {
BABL_BROWSER_FULLSCREEN,
BABL_BROWSER_ZOOM_IN,
BABL_BROWSER_ZOOM_OUT,
-
+
#endif
#endif
@@ -137,8 +137,8 @@ enum {
};
-// BUG, used to jump to babble functiion. Surely there is a way to calculate size of enum?
-#define BABL_NUM_MACROS 48+4 // 48 + # of defined modes.
+// BUG, used to jump to babble functiion. Surely there is a way to calculate size of enum?
+#define BABL_NUM_MACROS 48+4 // 48 + # of defined modes.
/* And all the shorthand keymap ready versions */
// First the mode switching macros
@@ -161,7 +161,7 @@ enum {
#define B_READ M(BABL_READLINE)
#endif
-// and all the movement & action.
+// and all the movement & action.
#define B_L1C M(BABL_GO_LEFT_1C)
#define B_R1C M(BABL_GO_RIGHT_1C)
@@ -175,7 +175,7 @@ enum {
#define B_UP M(BABL_GO_PREV_LINE)
#define B_PGDN M(BABL_PGDN)
#define B_PGUP M(BABL_PGUP)
-//#define B_BKSP M(BABL_DEL_LEFT_1C) == backspace so why bother.
+//#define B_BKSP M(BABL_DEL_LEFT_1C) == backspace so why bother.
#define B_DEL M(BABL_DEL_RIGHT_1C) // usually = Del
#define B_DLW M(BABL_DEL_LEFT_WORD)
#define B_DRW M(BABL_DEL_RIGHT_WORD)
@@ -210,8 +210,8 @@ enum {
#define B_BFUlL M(BABL_BROWSER_FULLSCREEN)
#define B_ZMIN M(BABL_BROWSER_ZOOM_IN)
#define B_ZMOT M(BABL_BROWSER_ZOOM_OUT)
-
-
+
+
diff --git a/keyboards/handwired/MS_sculpt_mobile/babblePaste.txt b/keyboards/handwired/ms_sculpt_mobile/babblePaste.txt
index cf75e153e..cf75e153e 100644
--- a/keyboards/handwired/MS_sculpt_mobile/babblePaste.txt
+++ b/keyboards/handwired/ms_sculpt_mobile/babblePaste.txt
diff --git a/keyboards/handwired/ms_sculpt_mobile/config.h b/keyboards/handwired/ms_sculpt_mobile/config.h
new file mode 100644
index 000000000..c3bdf333e
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/config.h
@@ -0,0 +1,98 @@
+/*
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Microsoftplus
+#define DESCRIPTION 6000
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 18
+
+#ifdef ASTAR
+#define PRODUCT sculpt mobile astar
+ /*0 1 2 3 4 5 6 7 8 */
+#define MATRIX_ROW_PINS {D7, C6, D4, D0, D1, D3, D2, E2}
+/* A B C D E F G H I J K L M N O P Q R */
+#define MATRIX_COL_PINS {B4, B5, E6, B7, B6, D6, C7, F7, F6, F4,F5, F1,F0, D5, B0, B1, B2, B3}
+
+#else
+#define PRODUCT sculpt mobile teensypp
+/* 0 1 2 3 4 5 6 7 */
+#define MATRIX_ROW_PINS { F7,F6,F4,F5,F3,F2,F1,F0}
+/* A B C D E F G H I J K L M N O P Q R */
+#define MATRIX_COL_PINS { B7, D0, D1, D2, D3, D4, D5, D6, D7, E0,E1,C1, C0, C3, C2, C5, C4,C7}
+#define UNUSED_PINS { B6,B5,B4,B3,B2,B1,B0 }
+
+
+#endif
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* 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
+
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* 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
+
+#endif
diff --git a/keyboards/handwired/ms_sculpt_mobile/info.json b/keyboards/handwired/ms_sculpt_mobile/info.json
new file mode 100644
index 000000000..86d5fde2e
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/info.json
@@ -0,0 +1,96 @@
+{
+ "keyboard_name": "MS Sculpt Mobile",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":1, "y":0},
+ {"label":"F2", "x":2, "y":0},
+ {"label":"F3", "x":3, "y":0},
+ {"label":"F4", "x":4, "y":0},
+ {"label":"F5", "x":5, "y":0},
+ {"label":"F6", "x":6, "y":0},
+ {"label":"F7", "x":7, "y":0},
+ {"label":"F8", "x":8, "y":0},
+ {"label":"F9", "x":9, "y":0},
+ {"label":"F10", "x":10, "y":0},
+ {"label":"F11", "x":11, "y":0},
+ {"label":"F12", "x":12, "y":0},
+ {"label":"PrtSc", "x":13, "y":0},
+ {"label":"Home", "x":14, "y":0},
+ {"label":"End", "x":15, "y":0},
+ {"label":"`", "x":0, "y":1},
+ {"label":"1", "x":1, "y":1},
+ {"label":"2", "x":2, "y":1},
+ {"label":"3", "x":3, "y":1},
+ {"label":"4", "x":4, "y":1},
+ {"label":"5", "x":5, "y":1},
+ {"label":"6", "x":6, "y":1},
+ {"label":"7", "x":7, "y":1},
+ {"label":"8", "x":8, "y":1},
+ {"label":"9", "x":9, "y":1},
+ {"label":"0", "x":10, "y":1},
+ {"label":"-", "x":11, "y":1},
+ {"label":"=", "x":12, "y":1},
+ {"label":"Backspace", "x":13, "y":1, "w":2},
+ {"label":"Del", "x":15, "y":1, "h":1.6},
+ {"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":"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":"PgUp", "x":15, "y":2.6, "h":1.2},
+ {"label":"LShift", "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":"RShift", "x":12.25, "y":4, "w":1.75},
+ {"label":"Up", "x":14, "y":4},
+ {"label":"PgDn", "x":15, "y":3.8, "h":1.2},
+ {"label":"LCtrl", "x":0, "y":5, "w":1.25},
+ {"label":"LWin", "x":1.25, "y":5, "w":1.25},
+ {"label":"LAlt", "x":2.5, "y":5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5, "w":5.5},
+ {"label":"RAlt", "x":9.25, "y":5, "w":1.25},
+ {"label":"Fn", "x":10.5, "y":5, "w":1.25},
+ {"label":"RCtrl", "x":11.75, "y":5, "w":1.25},
+ {"label":"Left", "x":13, "y":5},
+ {"label":"Down", "x":14, "y":5},
+ {"label":"Right", "x":15, "y":5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/ms_sculpt_mobile/keymaps/default/config.h b/keyboards/handwired/ms_sculpt_mobile/keymaps/default/config.h
new file mode 100644
index 000000000..271f48d00
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/default/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/handwired/ms_sculpt_mobile/keymaps/default/keymap.c b/keyboards/handwired/ms_sculpt_mobile/keymaps/default/keymap.c
new file mode 100644
index 000000000..d4d0f33e9
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/default/keymap.c
@@ -0,0 +1,44 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+*
+* |ESC | F1 | F2 | F3 | F4 | F5 | F6 | f7 | F8 | F9 | F10| F11| F12|Vol-|Vol+|Mute|
+* -------------------------------------------------------------------------------'
+* | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace| Del |
+* --------------------------------------------------------------------------
+* | tab | q | w | e | r | t | y | u | i | o | p | [ | ] | \ | |
+* -------------------------------------------------------------------------------'
+* | caps | a | s | d | f | g | h | j | k | l | ; | ' | enter |PgUp|
+* --------------------------------------------------------------------------------
+* |Lsft | z | x | c | v | b | n | m | , | . | / | Rsft| Up| PgDn|
+* ---------------------------------------------------------------------------------
+* |Lctl |Lgui |Lalt | Space |Ralt | FN | Rctl |Left|Down|Rght|
+* ---------------------------------------------------------------------------------
+*/
+
+ [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_VOLD, KC_VOLU, KC_MUTE, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_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, RSFT(KC_1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ )
+};
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/handwired/ms_sculpt_mobile/keymaps/default/readme.md b/keyboards/handwired/ms_sculpt_mobile/keymaps/default/readme.md
new file mode 100644
index 000000000..91575f7cd
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for Microsoft Sculpt Mobile
diff --git a/keyboards/handwired/ms_sculpt_mobile/keymaps/default/rules.mk b/keyboards/handwired/ms_sculpt_mobile/keymaps/default/rules.mk
new file mode 100644
index 000000000..3955a3ff4
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/default/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/config.h b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/config.h
new file mode 100644
index 000000000..9d6be063e
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/config.h
@@ -0,0 +1,28 @@
+#pragma once
+
+#define USE_BABLPASTE
+
+// Expect to get errors if you comment a feature out and leave it in your keymap.
+
+#ifdef USE_BABLPASTE
+//define BabblePaste maps
+// Windows.
+#define MAC_MODE 0
+#define MS_MODE 1
+//aka gnome+KDE
+//#define LINUX_MODE 2
+//#define EMACS_MODE 3
+#define VI_MODE 3
+// Readline and tmux
+#define READMUX_MODE 2
+//#define WORDSTAR_MODE 5
+#endif
+
+// Uncomment if you need more free flash space
+
+// This removes everything but cursor movement
+//#define BABL_MOVEMENTONLY
+// and this just removes browser shortcuts
+//#define BABL_NOBROWSER
+
+// place overrides here
diff --git a/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/keymap.c b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/keymap.c
new file mode 100644
index 000000000..c5ed18797
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/keymap.c
@@ -0,0 +1,266 @@
+#include "babblePaste.h"
+#include QMK_KEYBOARD_H
+
+#define _QWR 0
+#define _CDH 2
+#define _SYM 3
+#define _MOV 4
+#define _TRAN 5
+
+
+enum layer_keycodes {
+QWR,
+CDH,
+SYM,
+MOV,
+NUM,
+TRAN
+};
+
+
+// Shorter spacing
+#define XXXX KC_NO
+#define ____ KC_TRNS
+
+// Custom macros
+
+/* Fn Keys */
+#define TT_SYM MO(_SYM)
+#define TT_MOV KC_FN2
+#define TT_NUM MO(_NUM)
+#define SSFT ACTION_MODS_ONESHOT(MOD_LSFT)
+
+enum macro_keycodes {
+DHPASTE=1,
+VIBRK,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* QWERTY
+*
+* |ESC | F1 | F2 | F3 | F4 | F5 | F6 | f7 | F8 | F9 | F10| F11| F12|Vol-|Vol+|_CDH|
+* -------------------------------------------------------------------------------'
+* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace| Del|
+* ---------------------------------------------------------------------------
+* | tab | q | w | e | r | t | y | u | i | o | p | [ | ] | \ | |
+* -------------------------------------------------------------------------------'
+* |Bak/Mov| a | s | d | f | g | h | j | k | l | ; | ' | enter |PgUp|
+* --------------------------------------------------------------------------------
+* |Lsft | z | x | c | v | b | n | m | , | . | / | Rsft| Up| PgDn|
+* ---------------------------------------------------------------------------------
+* |Lctl |Lgui |Lalt | Space/Sym | GUI | Sym | Rctl |Left|Down|Rght|
+* ---------------------------------------------------------------------------------
+*/
+
+[_QWR] = 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_VOLD, KC_VOLU, CDH,\
+ 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_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,\
+ TT_MOV, KC_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_FN1, KC_RGUI,TT_SYM,KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+),
+
+[_CDH] = LAYOUT(\
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, QWR, \
+ KC_ESC, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, ____, ____, ____,\
+ TT_MOV, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, KC_2,\
+ KC_LSFT, KC_Z, KC_X, KC_C, M(DHPASTE), KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, ____, KC_1,\
+ ____, ____, ____ , KC_FN1, ____, ____, ____, ____, ____, ____
+
+),
+
+
+/* SYM
+*
+* |ESC | F1 | F2 | F3 | F4 | F5 | F6 | f7 | F8 | F9 | F10| F11| F12|Vol-|Vol+|_CDH|
+* -------------------------------------------------------------------------------'
+* | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace|Del |
+* --------------------------------------------------------------------------
+* | ESC: | ^ | { | } | @ | % | | [ | ( | ) | _ | [ | ] | \ | |
+* -------------------------------------------------------------------------------'
+* |Bak/Mov| ! | # | 0 | = | { | } | - | 1 | + | ] | ` | enter |PgUp|
+* --------------------------------------------------------------------------------
+* |Lsft | ; | ~ | : | ~ | "|"| $ | * | | . | / | Rsft| Up| PgDn|
+* ---------------------------------------------------------------------------------
+* |Lctl |Lgui |Lalt | Space/Sym | GUI | Sym | Rctl |Left|Down|Rght|
+* ---------------------------------------------------------------------------------
+*/
+
+[_SYM] = LAYOUT(\
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ M(VIBRK), KC_CIRC, KC_LCBR, KC_RCBR,KC_AT, KC_PERC, ____, KC_LBRC,KC_LPRN,KC_RPRN,KC_UNDS, ____, ____, ____,\
+ ____, KC_EXLM, KC_HASH, KC_0, KC_EQL, KC_LCBR, KC_RCBR,KC_MINS,KC_1, KC_PLUS,KC_RBRC, KC_GRV, ____, ____,\
+ ____, KC_SCLN, KC_TILDE, KC_COLN, KC_TILDE, KC_PIPE, KC_DLR, KC_ASTR, ____, KC_DOT , KC_SLSH, ____, ____, ____,\
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
+),
+/*
+* |ESC | MAC| Win|RdLn| VI | | | | | | | | | | | |
+* -------------------------------------------------------------------------------'
+* | | | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |Bakspace| Del|
+* ---------------------------------------------------------------------------
+* | tab | | |Find| |pTab |DSOL|DelW| Up |DelW|DEOL| [ | ] | \ | |
+* -------------------------------------------------------------------------------'
+* |Bak/Mov| | | | |nTab |GSOL| <- | Dwn | -> | EOL | ' | enter |PgUp|
+* --------------------------------------------------------------------------------
+* |Lsft |Undo| Cut|Copy|Pste| | | | | | / | Rsft| Up| PgDn|
+* ---------------------------------------------------------------------------------
+* |Lctl |Lgui |Lalt | Space/Sym | GUI | Sym | Rctl |Left|Down|Rght|
+* ---------------------------------------------------------------------------------
+*/
+
+[_MOV] = LAYOUT(\
+ ____, B_MAC,B_WIN,B_READ, B_VI, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, B_PAPP, B_NAPP, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, B_UNDO, ____, B_BFND, ____, B_PTAB, B_DSOL, B_DLW, B_UP, B_DRW, B_DEOL, ____, ____, ____, \
+ ____, B_SELA, B_BRLD, ____, ____, B_NXTB, B_GSOL, B_L1C, B_DOWN, B_R1C,B_GEOL, ____, ____, ____,\
+ ____, B_UNDO,B_CUT, B_COPY, B_PAST, B_PAST, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
+),
+
+[_TRAN] = LAYOUT(\
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____
+)
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+[1] = ACTION_LAYER_TAP_KEY(_SYM,KC_SPACE),
+[2] = ACTION_LAYER_TAP_KEY(_MOV,KC_BSPC)
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+#endif
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWR:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ layer_off(_CDH);
+ }
+ return false;
+ break;
+
+ case CDH:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ layer_on(_CDH);
+ }
+ return false;
+ break;
+
+ case SYM:
+ if (record->event.pressed) {
+ layer_on(_SYM);
+ } else {
+ layer_off(_SYM);
+ }
+ return false;
+ break;
+
+ }
+ return true;
+
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+
+/* If id is in the range of BABL macros, call the babl function */
+/* Any clever remapping with modifiers should happen here e.g. shift bablkey does opposite*/
+#ifdef USE_BABLPASTE
+
+ if( id >= BABL_START_NUM && id < (BABL_START_NUM + BABL_NUM_MACROS ) ) {
+ if (record->event.pressed) { // is there a case where this isn't desired?
+
+ babblePaste ( record, id );
+ return MACRO_NONE;
+ }
+ }
+#endif
+
+
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+
+ /* Colemak mod-dh moves the D key to the qwerty V position
+ This hack makes apple-V_position do what I mean */
+ case DHPASTE:
+ if(keyboard_report->mods & MOD_BIT(KC_LGUI) ) {
+ if (record->event.pressed) {
+ clear_keyboard_but_mods();
+ register_code(KC_V);
+ } else {
+ unregister_code(KC_V);
+ }
+ } else {
+ if (record->event.pressed) {
+ register_code(KC_D);
+ } else {
+ unregister_code(KC_D);
+ }
+ }
+ break;
+
+ case VIBRK: // vi esc:
+ if (record->event.pressed) {
+ return MACRO( T(ESC),D(LSFT),T(SCLN),U(LSFT), END );
+ }
+ break;
+
+
+
+
+ default:
+ return MACRO_NONE;
+ }
+
+
+return MACRO_NONE;
+};
+
+
+
+
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+
+}
+
+
+void led_set_user(uint8_t usb_led) {
+
+}
+
+
+
+
+
+
diff --git a/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/readme.md b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/readme.md
new file mode 100644
index 000000000..3cb1380d1
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/readme.md
@@ -0,0 +1 @@
+# A more programmer oriented keymap for Microsoft Sculpt Mobile
diff --git a/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/rules.mk b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/rules.mk
new file mode 100644
index 000000000..ddfea8255
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/keymaps/milestogo/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/ms_sculpt_mobile/ms_sculpt_mobile.c b/keyboards/handwired/ms_sculpt_mobile/ms_sculpt_mobile.c
new file mode 100644
index 000000000..53773e5d8
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/ms_sculpt_mobile.c
@@ -0,0 +1 @@
+#include "ms_sculpt_mobile.h"
diff --git a/keyboards/handwired/ms_sculpt_mobile/ms_sculpt_mobile.h b/keyboards/handwired/ms_sculpt_mobile/ms_sculpt_mobile.h
new file mode 100644
index 000000000..cfa07c92e
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/ms_sculpt_mobile.h
@@ -0,0 +1,48 @@
+#ifndef MICROSOFT_SCULPT_MOBILE_H
+#define MICROSOFT_SCULPT_MOBILE_H
+
+#include "quantum.h"
+
+
+#define LAYOUT( \
+ k7Q, k6O, k6P, k6Q, k5O, k5P, k5Q, k7A, k7B, k7C, k7D, k7E, k7F, k1O, k1K, k1L, \
+ k5A, k5K, k5L, k5M, k5N, k5H, k5I, k2A, k2B, k2C, k2D, k5B, k5C, k5J, k2E, \
+ k6R, k6D, k6E, k6F, k7I, k7J, k4A, k4B, k4C, k4D, k3A, k3B, k3C, k3D, \
+ k0J, k6A, k6B, k6C, k7H, k1A, k1B, k5D, k5E, k5F, k5G, k1C, k7P, k2G, \
+ k2P, k7K, k7L, k7M, k7O, k0A, k0B, k0C, k0D, k0E, k0F, k2L, k6G, k1P,\
+ k1Q, k4N, k3O,k6N, k3K, k0R, k1M, k6H, k6I, k6J \
+) \
+{ \
+ {k0A, k0B, k0C, k0D, k0E, k0F, KC_NO, KC_NO, KC_NO, k0J, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,KC_NO, KC_NO, k0R},\
+ {k1A, k1B, k1C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, k1K, k1L, k1M, KC_NO, k1O, k1P, k1Q, KC_NO},\
+ {k2A, k2B, k2C, k2D, k2E, KC_NO, k2G, KC_NO, KC_NO, KC_NO, KC_NO, k2L, KC_NO, KC_NO, KC_NO, k2P, KC_NO, KC_NO},\
+ {k3A, k3B, k3C, k3D, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, k3K, KC_NO, KC_NO, KC_NO, k3O, KC_NO, KC_NO, KC_NO},\
+ {k4A, k4B, k4C, k4D, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, k4N, KC_NO,KC_NO, KC_NO, KC_NO},\
+ {k5A, k5B, k5C, k5D, k5E, k5F, k5G, k5H, k5I, k5J, k5K, k5L, k5M, k5N, k5O, k5P, k5Q, KC_NO },\
+ {k6A, k6B, k6C, k6D, k6E, k6F, k6G, k6H, k6I, k6J, KC_NO, KC_NO, KC_NO, k6N, k6O, k6P, k6Q, k6R},\
+ {k7A, k7B, k7C, k7D, k7E, k7F, KC_NO, k7H, k7I, k7J, k7K, k7L, k7M, KC_NO, k7O, k7P, k7Q, KC_NO},\
+}
+
+
+#define MATRIX_TESTING_LAYOUT( \
+ k0A, k0B, k0C, k0D, k0E, k0F, k0G, k0H, k0I, k0, k0J, k0K, k0L, k0M, k0N, k0O, k0P, k0Q,\
+ k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, k1, k1J, k1K, k1L, k1M, k1N, k1O, k1P, k1Q,\
+ k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, k2, k2J, k2K, k2L, k2M, k2N, k2O, k2P, k2Q,\
+ k3A, k3B, k3C, k3D, k3E, k3F, k3G, k3H, k3I, k3, k3J, k3K, k3L, k3M, k3N, k3O, k3P, k3Q,\
+ k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, k4I, k4, k4J, k4K, k4L, k4M, k4N, k4O, k4P, k4Q,\
+ k5A, k5B, k5C, k5D, k5E, k5F, k5G, k5H, k5I, k5, k5J, k5K, k5L, k5M, k5N, k5O, k5P, k5Q,\
+ k6A, k6B, k6C, k6D, k6E, k6F, k6G, k6H, k6I, k6, k6J, k6K, k6L, k6M, k6N, k6O, k6P, k6Q,\
+ k7A, k7B, k7C, k7D, k7E, k7F, k7G, k7H, k7I, k7, k7J, k7K, k7L, k7M, k7N, k7O, k7P, k7Q\
+) \
+{ \
+ {k0A, k0B, k0C, k0D, k0E, k0F, k0G, k0H, k0I, k0, k0J, k0K, k0L, k0M, k0N, k0O, k0P, k0Q},\
+ {k1A, k1B, k1C, k1D, k1E, k1F, k1G, k1H, k1I, k1, k1J, k1K, k1L, k1M, k1N, k1O, k1P, k1Q},\
+ {k2A, k2B, k2C, k2D, k2E, k2F, k2G, k2H, k2I, k2, k2J, k2K, k2L, k2M, k2N, k2O, k2P, k2Q},\
+ {k3A, k3B, k3C, k3D, k3E, k3F, k3G, k3H, k3I, k3, k3J, k3K, k3L, k3M, k3N, k3O, k3P, k3Q},\
+ {k4A, k4B, k4C, k4D, k4E, k4F, k4G, k4H, k4I, k4, k4J, k4K, k4L, k4M, k4N, k4O, k4P, k4Q},\
+ {k5A, k5B, k5C, k5D, k5E, k5F, k5G, k5H, k5I, k5, k5J, k5K, k5L, k5M, k5N, k5O, k5P, k5Q},\
+ {k6A, k6B, k6C, k6D, k6E, k6F, k6G, k6H, k6I, k6, k6J, k6K, k6L, k6M, k6N, k6O, k6P, k6Q},\
+ {k7A, k7B, k7C, k7D, k7E, k7F, k7G, k7H, k7I, k7, k7J, k7K, k7L, k7M, k7N, k7O, k7P, k7Q},\
+}
+
+#endif
diff --git a/keyboards/handwired/ms_sculpt_mobile/readme.md b/keyboards/handwired/ms_sculpt_mobile/readme.md
new file mode 100644
index 000000000..98fd1f8d1
--- /dev/null
+++ b/keyboards/handwired/ms_sculpt_mobile/readme.md
@@ -0,0 +1,55 @@
+# Microsoft Sculpt Mobile
+
+This is a way to take a Microsoft ergonomic bluetooth keyboard, and make it
+into a hard-wired keyboard running QMK.
+
+The keyboard is known under several different names:
+Mobile Bluetooth 5000, Mobile 6000, Sculpt mobile, and Asus rebranded.
+
+I had a stack of them, since they're cheap on ebay, travel well, and are just ergo enough.
+
+The ribbon cable is 1mm pitch, which is hard to hand solder. I bought a cheap set of
+"pitch adapter" boards https://www.amazon.com/Double-Sided-0-4mm-1-0-Adapter-60mmx38mm/dp/B00OK42118
+
+Cut the original ribbon cable sockets off the bluetooth board using a razor, they're hard to desolder.
+They're also allow the cable to be inserted on top or bottom.
+
+If I was going to do it again, I'd make the MCU connection come out the top of the keyboard
+and avoid the wires dangling out the bottom.
+
+As I was debugging the matrix, I started to get random failures. In desparation I tried a second MCU,
+but had the same problems. It turns out that the ribbon cable connections can get worn. Shave a
+half millimeter off the end of the ribbon cable & the errors go away.
+
+My method for discovering the matrix was to set up a LAYOUT macro that included all pins.
+See MATRIX_TESTING_LAYOUT if you need it. Then set up a keymap that has all printable symbols
+in the first 4 rows. test each key & record output. Then switch the printable symbols to the
+bottom 4 rows & repeat. This was enough to show the matrix.
+
+
+The full original keymap for the Sculpt is
+
+| | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R |
+|:-:|:--:|:--:|:--:|:---:|:---:|:---:|:----:|:----:|:----:|:-----:|:----:|:------:|:----:|:-----:|:----:|:------:|:----:|:---:|
+| 0 | b | n | m | , | . | / | | | | Caps | | | | | | | | Fn |
+| 1 | g | h | " | | | | | | | | Vol+ | Mute | RCtl | | Vol- | PgDn | LCtl | |
+| 2 | 7 | 8 | 9 | 0 | Del | | PgUp | | | | | RShift | | | | LShift | | |
+| 3 | p | [ | ] | \ | | | | | | | RAlt | | | | LAlt | | | |
+| 4 | y | u | i | o | | | | | | | | | | LGUI | | | | |
+| 5 | ~ | - | += | j | k | l | ; | 5 | 6 | Bksp | 1 | 2 | 3 | 4 | F4 | F5 | F6 | |
+| 6 | a | s | d | q | w | e | Up | Left | Down | Right | | | | Space | F1 | F2 | F3 | Tab |
+| 7 | F7 | F8 | F9 | F10 | F11 | F12 | | f | r | t | z | x | c | | v | Enter | Esc | |
+
+This works with 18 cols + 8 rows on a Teensy++, or ARM-based Teensy.
+
+The Astar mini has all pins exposed , so you can do 18x8
+If you want a speaker, LEDs, etc., you'll need to free up a pin. I recommend joining columns
+R and L to the same pin.
+
+Building - add ASTAR=1 to the compile line or leave out for teensy2++
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/ms_sculpt_mobile: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/MS_sculpt_mobile/rules.mk b/keyboards/handwired/ms_sculpt_mobile/rules.mk
index 680c057d3..680c057d3 100644
--- a/keyboards/handwired/MS_sculpt_mobile/rules.mk
+++ b/keyboards/handwired/ms_sculpt_mobile/rules.mk
diff --git a/keyboards/handwired/nicekey/keymaps/default/keymap.c b/keyboards/handwired/nicekey/keymaps/default/keymap.c
index 573237715..139ea6a3b 100644
--- a/keyboards/handwired/nicekey/keymaps/default/keymap.c
+++ b/keyboards/handwired/nicekey/keymaps/default/keymap.c
@@ -71,5 +71,5 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- {{ RANDOM_STRING_MACRO }}
+ LAYOUT( RANDOM_STRING_MACRO )
};
diff --git a/keyboards/handwired/nicekey/nicekey.h b/keyboards/handwired/nicekey/nicekey.h
index 7a4a4835e..ee5bcfd6b 100644
--- a/keyboards/handwired/nicekey/nicekey.h
+++ b/keyboards/handwired/nicekey/nicekey.h
@@ -1 +1,12 @@
-#include "quantum.h" \ No newline at end of file
+#ifndef NICEKEY_H
+#define NICEKEY_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ k00 \
+ ) { \
+ { k00 } \
+}
+
+#endif
diff --git a/keyboards/handwired/nicekey/readme.md b/keyboards/handwired/nicekey/readme.md
index a867e907e..e108b38dd 100644
--- a/keyboards/handwired/nicekey/readme.md
+++ b/keyboards/handwired/nicekey/readme.md
@@ -5,7 +5,7 @@
Custom handwired nicekey, a one key keyboard that writes random compliments.
-Keyboard Maintainer: spydon
+Keyboard Maintainer: [spydon](https://github.com/spydon)
Hardware Supported: Custom handwired one key
Hardware Availability:
@@ -15,4 +15,4 @@ Make example for this keyboard (after setting up your build environment):
make handwired/nicekey:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/not_so_minidox/info.json b/keyboards/handwired/not_so_minidox/info.json
new file mode 100644
index 000000000..022209502
--- /dev/null
+++ b/keyboards/handwired/not_so_minidox/info.json
@@ -0,0 +1,63 @@
+{
+ "keyboard_name": "Not So MiniDox",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12,
+ "height": 5.75,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 42,
+ "layout": [
+ {"x":0, "y":0.375},
+ {"x":1, "y":0.25},
+ {"x":2, "y":0.125},
+ {"x":3, "y":0},
+ {"x":4, "y":0.125},
+ {"x":5, "y":0.25},
+
+ {"x":8, "y":0.25},
+ {"x":9, "y":0.125},
+ {"x":10, "y":0},
+ {"x":11, "y":0.125},
+ {"x":12, "y":0.25},
+ {"x":13, "y":0.375},
+
+ {"x":0, "y":1.375},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.125},
+ {"x":3, "y":1},
+ {"x":4, "y":1.125},
+ {"x":5, "y":1.25},
+
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.125},
+ {"x":10, "y":1},
+ {"x":11, "y":1.125},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.375},
+
+ {"x":0, "y":2.375},
+ {"x":1, "y":2.25},
+ {"x":2, "y":2.125},
+ {"x":3, "y":2},
+ {"x":4, "y":2.125},
+ {"x":5, "y":2.25},
+
+ {"x":8, "y":2.25},
+ {"x":9, "y":2.125},
+ {"x":10, "y":2},
+ {"x":11, "y":2.125},
+ {"x":12, "y":2.25},
+ {"x":13, "y":2.375},
+
+ {"x":3.5, "y":4.75},
+ {"x":4.5, "y":4.75},
+ {"x":5.5, "y":3.75, "h":2},
+
+ {"x":7.5, "y":3.75, "h":2},
+ {"x":8.5, "y":4.75},
+ {"x":9.5, "y":4.75}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/not_so_minidox/readme.md b/keyboards/handwired/not_so_minidox/readme.md
index fbfa7b7be..bd4060735 100644
--- a/keyboards/handwired/not_so_minidox/readme.md
+++ b/keyboards/handwired/not_so_minidox/readme.md
@@ -5,7 +5,7 @@ not_so_minidox
A slightly larger version of the MiniDox
-Keyboard Maintainer: mtdjr
+Keyboard Maintainer: mtdjr
Hardware Supported: None yet/ProMicro
Make example for this keyboard (after setting up your build environment):
@@ -50,13 +50,13 @@ file will run on both hands instead of having to flash left and right handed
versions of the firmware to each half. To flash the EEPROM file for the left
half run:
```
-avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-lefthand.eep
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-lefthand.eep"
// or the equivalent in dfu-programmer
```
and similarly for right half
```
-avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-righhand.eep
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-righthand.eep"
// or the equivalent in dfu-programmer
```
diff --git a/keyboards/handwired/not_so_minidox/rules.mk b/keyboards/handwired/not_so_minidox/rules.mk
index fe4cc014e..833dd4b79 100644
--- a/keyboards/handwired/not_so_minidox/rules.mk
+++ b/keyboards/handwired/not_so_minidox/rules.mk
@@ -63,7 +63,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight.
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
diff --git a/keyboards/handwired/numpad20/info.json b/keyboards/handwired/numpad20/info.json
new file mode 100644
index 000000000..691acb315
--- /dev/null
+++ b/keyboards/handwired/numpad20/info.json
@@ -0,0 +1,33 @@
+{
+ "keyboard_name": "numpad20 handwired",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 4,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"K00", "x":0, "y":0},
+ {"label":"K01", "x":1, "y":0},
+ {"label":"K02", "x":2, "y":0},
+ {"label":"K03", "x":3, "y":0},
+ {"label":"K10", "x":0, "y":1},
+ {"label":"K11", "x":1, "y":1},
+ {"label":"K12", "x":2, "y":1},
+ {"label":"K13", "x":3, "y":1},
+ {"label":"K20", "x":0, "y":2},
+ {"label":"K21", "x":1, "y":2},
+ {"label":"K22", "x":2, "y":2},
+ {"label":"K23", "x":3, "y":2},
+ {"label":"K30", "x":0, "y":3},
+ {"label":"K31", "x":1, "y":3},
+ {"label":"K32", "x":2, "y":3},
+ {"label":"K33", "x":3, "y":3},
+ {"label":"K40", "x":0, "y":4},
+ {"label":"K41", "x":1, "y":4},
+ {"label":"K42", "x":2, "y":4},
+ {"label":"K43", "x":3, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/numpad20/keymaps/default/keymap.c b/keyboards/handwired/numpad20/keymaps/default/keymap.c
index 65799bfee..414b104af 100644
--- a/keyboards/handwired/numpad20/keymaps/default/keymap.c
+++ b/keyboards/handwired/numpad20/keymaps/default/keymap.c
@@ -1,16 +1,11 @@
-#include "numpad20.h"
-
-#define KC_ KC_TRNS
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
- LEFT,RGHT, UP ,DOWN, \
- P7 , P8 , P9 ,PLUS, \
- P4 , P5 , P6 ,MINS, \
- P1 , P2 , P3 , ENT, \
- P0 ,DOT ,RGHT, TAB \
- )
-};
-
-const uint16_t PROGMEM fn_actions[] = {
+ KC_LEFT, KC_RGHT, KC_UP, KC_DOWN, \
+ KC_P7, KC_P8, KC_P9, KC_PLUS, \
+ KC_P4, KC_P5, KC_P6, KC_MINS, \
+ KC_P1, KC_P2, KC_P3, KC_ENT, \
+ KC_P0, KC_DOT, KC_RGHT, KC_TAB \
+ )
};
diff --git a/keyboards/handwired/numpad20/numpad20.h b/keyboards/handwired/numpad20/numpad20.h
index a2aa8d16b..c15aa9ac7 100644
--- a/keyboards/handwired/numpad20/numpad20.h
+++ b/keyboards/handwired/numpad20/numpad20.h
@@ -10,11 +10,11 @@
K30, K31, K32, K33, \
K40, K41, K42, K43 \
) { \
- { KC_##K00, KC_##K01, KC_##K02, KC_##K03 }, \
- { KC_##K10, KC_##K11, KC_##K12, KC_##K13 }, \
- { KC_##K20, KC_##K21, KC_##K22, KC_##K23 }, \
- { KC_##K30, KC_##K31, KC_##K32, KC_##K33 }, \
- { KC_##K40, KC_##K41, KC_##K42, KC_##K43 } \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, K23 }, \
+ { K30, K31, K32, K33 }, \
+ { K40, K41, K42, K43 } \
}
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/handwired/onekey/keymaps/default/keymap.c b/keyboards/handwired/onekey/keymaps/default/keymap.c
index 10c486718..dd64f9fa5 100644
--- a/keyboards/handwired/onekey/keymaps/default/keymap.c
+++ b/keyboards/handwired/onekey/keymaps/default/keymap.c
@@ -1,5 +1,5 @@
-#include "onekey.h"
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- {{ KC_A }}
+ LAYOUT( KC_A )
};
diff --git a/keyboards/handwired/onekey/onekey.h b/keyboards/handwired/onekey/onekey.h
index 7a4a4835e..8ce6fec2d 100644
--- a/keyboards/handwired/onekey/onekey.h
+++ b/keyboards/handwired/onekey/onekey.h
@@ -1 +1,12 @@
-#include "quantum.h" \ No newline at end of file
+#ifndef ONEKEY_H
+#define ONEKEY_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ k00 \
+ ) { \
+ { k00 } \
+}
+
+#endif
diff --git a/keyboards/handwired/onekey/readme.md b/keyboards/handwired/onekey/readme.md
index c28e284f3..eab3b75a9 100644
--- a/keyboards/handwired/onekey/readme.md
+++ b/keyboards/handwired/onekey/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make handwired/onekey:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/ortho5x13/info.json b/keyboards/handwired/ortho5x13/info.json
new file mode 100644
index 000000000..15a65081a
--- /dev/null
+++ b/keyboards/handwired/ortho5x13/info.json
@@ -0,0 +1,77 @@
+{
+ "keyboard_name": "ortho5x13",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 13,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Tab", "x":0, "y":1},
+ {"label":"Q", "x":1, "y":1},
+ {"label":"W", "x":2, "y":1},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1},
+ {"label":"T", "x":5, "y":1},
+ {"label":"Y", "x":6, "y":1},
+ {"label":"U", "x":7, "y":1},
+ {"label":"I", "x":8, "y":1},
+ {"label":"O", "x":9, "y":1},
+ {"label":"P", "x":10, "y":1},
+ {"label":"[", "x":11, "y":1},
+ {"label":"]", "x":12, "y":1},
+ {"label":"`", "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":"\\", "x":12, "y":2},
+ {"label":"Shift", "x":0, "y":3},
+ {"label":"Z", "x":1, "y":3},
+ {"label":"X", "x":2, "y":3},
+ {"label":"C", "x":3, "y":3},
+ {"label":"V", "x":4, "y":3},
+ {"label":"B", "x":5, "y":3},
+ {"label":"N", "x":6, "y":3},
+ {"label":"M", "x":7, "y":3},
+ {"label":",", "x":8, "y":3},
+ {"label":".", "x":9, "y":3},
+ {"label":"/", "x":10, "y":3},
+ {"label":"Enter", "x":11, "y":3},
+ {"label":"Up", "x":12, "y":3},
+ {"label":"Hyper", "x":0, "y":4},
+ {"label":"Ctrl", "x":1, "y":4},
+ {"label":"Alt", "x":2, "y":4},
+ {"label":"GUI", "x":3, "y":4},
+ {"label":"Lower", "x":4, "y":4},
+ {"label":"Space", "x":5, "y":4, "w":2},
+ {"label":"Raise", "x":7, "y":4},
+ {"label":"Backspace", "x":8, "y":4},
+ {"label":"Shift", "x":9, "y":4},
+ {"label":"Left", "x":10, "y":4},
+ {"label":"Right", "x":11, "y":4},
+ {"label":"Down", "x":12, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/ortho5x13/keymaps/default/keymap.c b/keyboards/handwired/ortho5x13/keymaps/default/keymap.c
index 0d5d0c430..0c8bbb055 100644
--- a/keyboards/handwired/ortho5x13/keymaps/default/keymap.c
+++ b/keyboards/handwired/ortho5x13/keymaps/default/keymap.c
@@ -1,9 +1,4 @@
-#include "ortho5x13.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-#ifdef AUDIO_ENABLE
- #include "audio.h"
-#endif
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -25,146 +20,142 @@ enum custom_keycodes {
BACKLIT
};
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
#define KC_L1 LOWER
#define KC_L2 RAISE
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Qwerty
+ /* Qwerty
+ * ,------------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | ` | A | S | D | F | G | H | J | K | L | ; | ' | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | Up |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Hyper| Ctrl | Alt | GUI |Lower | Space |Raise | Bksp |Shift | Left | Down |Right |
+ * `------------------------------------------------------------------------------------------'
+ */
+ [_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_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_LBRC ,KC_RBRC ,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ KC_GRV ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_QUOT ,KC_BSLS ,
+ //|--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ 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_UP ,
+ //|--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------+--------|
+ KC_HYPR ,KC_LCTL ,KC_LALT ,KC_LGUI ,KC_L1 , KC_SPC ,KC_L2 ,KC_BSPC ,KC_RSFT ,KC_LEFT ,KC_RGHT ,KC_DOWN
+ //`--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+--------+--------'
+ ),
+
+/* Colemak
* ,------------------------------------------------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] |
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del | |
* |------+------+------+------+------+-------------+------+------+------+------+------+------|
- * | ` | A | S | D | F | G | H | J | K | L | ; | ' | \ |
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " | |
* |------+------+------+------+------+------|------+------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter | Up |
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | Hyper| Ctrl | Alt | GUI |Lower | Space |Raise | Bksp |Shift | Left | Down |Right |
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | |
* `------------------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT_compact(
- //,----+----+----+----+----+----+----+----+----+----+----+----+----.
- ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL ,
- //|----+----+----+----+----+----+----+----+----+----+----+----+----|
- TAB , Q , W , E , R , T , Y , U , I , O , P ,LBRC,RBRC,
- //|----+----+----+----+----+----+----+----+----+----+----+----+----|
- GRV , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,BSLS,
- //|----+----+----+----+----+----+----+----+----+----+----+----+----|
- LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH,ENT , UP ,
- //|----+----+----+----+----+---------+----+----+----+----+----+----|
- HYPR,LCTL,LALT,LGUI, L1 , SPACE , L2 ,BSPC,RSFT,LEFT,RGHT,DOWN
- //`----+----+----+----+----+---------+----+----+----+----+----+----'
- ),
-
-/* Colemak
- * ,-----------------------------------------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Esc | A | R | S | T | D | H | N | E | I | O | " |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[_COLEMAK] = {
- {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL},
- {KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
-},
+[_COLEMAK] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL , _______,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, _______,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , _______,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______
+),
/* Dvorak
- * ,-----------------------------------------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab | " | , | . | P | Y | F | G | C | R | L | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Esc | A | O | E | U | I | D | H | T | N | S | / |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
+ * ,------------------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Del | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right | |
+ * `------------------------------------------------------------------------------------------'
*/
-[_DVORAK] = {
- {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL},
- {KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH},
- {KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT },
- {BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
-},
+[_DVORAK] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______,
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL , _______,
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, _______,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , _______,
+ BACKLIT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______
+),
/* Lower
- * ,-----------------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
+ * ,------------------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play | |
+ * `------------------------------------------------------------------------------------------'
*/
-[_LOWER] = {
- {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
- {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL},
- {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
-},
+[_LOWER] = LAYOUT(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, _______,
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL , _______,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______
+),
/* Raise
- * ,-----------------------------------------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
+ * ,------------------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play | |
+ * `------------------------------------------------------------------------------------------'
*/
-[_RAISE] = {
- {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL},
- {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
-},
+[_RAISE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL , _______,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______
+),
/* Adjust (Lower + Raise)
- * ,-----------------------------------------------------------------------------------.
- * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | Reset| | | | | | | | | | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | |Voice-|Voice+|Musoff|Mus on| | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
+ * ,------------------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset| | | | | | | | | | Del | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | | | |Audoff|Aud on|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Musoff|Mus on| | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `------------------------------------------------------------------------------------------'
*/
-[_ADJUST] = {
- {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12},
- {_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
- {_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______},
- {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-}
+[_ADJUST] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 , _______,
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL , _______,
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
};
@@ -286,4 +277,4 @@ void music_scale_user(void)
PLAY_SONG(music_scale);
}
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/handwired/ortho5x13/readme.md b/keyboards/handwired/ortho5x13/readme.md
index 7241ddae8..444cfec96 100644
--- a/keyboards/handwired/ortho5x13/readme.md
+++ b/keyboards/handwired/ortho5x13/readme.md
@@ -10,4 +10,4 @@ Make example for this keyboard (after setting up your build environment):
make handwired/ortho5x13:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.c b/keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.c
new file mode 100644
index 000000000..8c5a87f35
--- /dev/null
+++ b/keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.c
@@ -0,0 +1,56 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#include "hal.h"
+
+// Value to place in RTC backup register 10 for persistent bootloader mode
+#define RTC_BOOTLOADER_FLAG 0x424C
+
+/**
+ * @brief PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ * This variable is used by the HAL when initializing the PAL driver.
+ */
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+const PALConfig pal_default_config =
+{
+ {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
+ {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
+ {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
+ {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
+ {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
+};
+#endif
+
+/*
+ * Early initialization code.
+ * This initialization must be performed just after stack setup and before
+ * any other initialization.
+ */
+void __early_init(void) {
+
+ stm32_clock_init();
+}
+
+/*
+ * Board-specific initialization code.
+ */
+void boardInit(void) {
+ //JTAG-DP Disabled and SW-DP Enabled
+ AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
+ //Set backup register DR10 to enter bootloader on reset
+ BKP->DR10 = RTC_BOOTLOADER_FLAG;
+}
diff --git a/keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.h b/keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.h
new file mode 100644
index 000000000..9427adabf
--- /dev/null
+++ b/keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.h
@@ -0,0 +1,166 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+/*
+ * Setup for a Generic STM32F103 board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_GENERIC_STM32_F103
+#define BOARD_NAME "Generic STM32F103x board"
+
+/*
+ * Board frequencies.
+ */
+#define STM32_LSECLK 32768
+#define STM32_HSECLK 8000000
+
+/*
+ * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
+ */
+#define STM32F103xB
+
+/*
+ * IO pins assignments
+ */
+
+/* on-board */
+
+#define GPIOA_LED 8
+#define GPIOD_OSC_IN 0
+#define GPIOD_OSC_OUT 1
+
+/* In case your board has a "USB enable" hardware
+ controlled by a pin, define it here. (It could be just
+ a 1.5k resistor connected to D+ line.)
+*/
+/*
+#define GPIOB_USB_DISC 10
+*/
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ *
+ * The digits have the following meaning:
+ * 0 - Analog input.
+ * 1 - Push Pull output 10MHz.
+ * 2 - Push Pull output 2MHz.
+ * 3 - Push Pull output 50MHz.
+ * 4 - Digital input.
+ * 5 - Open Drain output 10MHz.
+ * 6 - Open Drain output 2MHz.
+ * 7 - Open Drain output 50MHz.
+ * 8 - Digital input with PullUp or PullDown resistor depending on ODR.
+ * 9 - Alternate Push Pull output 10MHz.
+ * A - Alternate Push Pull output 2MHz.
+ * B - Alternate Push Pull output 50MHz.
+ * C - Reserved.
+ * D - Alternate Open Drain output 10MHz.
+ * E - Alternate Open Drain output 2MHz.
+ * F - Alternate Open Drain output 50MHz.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+
+/*
+ * Port A setup.
+ * Everything input with pull-up except:
+ * PA2 - Alternate output (USART2 TX).
+ * PA3 - Normal input (USART2 RX).
+ * PA9 - Alternate output (USART1 TX).
+ * PA10 - Normal input (USART1 RX).
+ */
+#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */
+#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */
+#define VAL_GPIOAODR 0xFFFFFFFF
+
+/*
+ * Port B setup.
+ * Everything input with pull-up except:
+ * PB10 - Push Pull output (USB switch).
+ */
+#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */
+#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */
+#define VAL_GPIOBODR 0xFFFFFFFF
+
+/*
+ * Port C setup.
+ * Everything input with pull-up except:
+ * PC13 - Push Pull output (LED).
+ */
+#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */
+#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */
+#define VAL_GPIOCODR 0xFFFFFFFF
+
+/*
+ * Port D setup.
+ * Everything input with pull-up except:
+ * PD0 - Normal input (XTAL).
+ * PD1 - Normal input (XTAL).
+ */
+#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */
+#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */
+#define VAL_GPIODODR 0xFFFFFFFF
+
+/*
+ * Port E setup.
+ * Everything input with pull-up except:
+ */
+#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */
+#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */
+#define VAL_GPIOEODR 0xFFFFFFFF
+
+/*
+ * USB bus activation macro, required by the USB driver.
+ */
+/* The point is that most of the generic STM32F103* boards
+ have a 1.5k resistor connected on one end to the D+ line
+ and on the other end to some pin. Or even a slightly more
+ complicated "USB enable" circuit, controlled by a pin.
+ That should go here.
+
+ However on some boards (e.g. one that I have), there's no
+ such hardware. In which case it's better to not do anything.
+*/
+/*
+#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC)
+*/
+#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);
+
+/*
+ * USB bus de-activation macro, required by the USB driver.
+ */
+/*
+#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC)
+*/
+#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12);
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* _BOARD_H_ */
diff --git a/keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.mk b/keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.mk
new file mode 100644
index 000000000..6b8b312fd
--- /dev/null
+++ b/keyboards/handwired/ortho60/boards/GENERIC_STM32_F103/board.mk
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F103/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F103
diff --git a/keyboards/handwired/ortho60/bootloader_defs.h b/keyboards/handwired/ortho60/bootloader_defs.h
new file mode 100644
index 000000000..0f45203cb
--- /dev/null
+++ b/keyboards/handwired/ortho60/bootloader_defs.h
@@ -0,0 +1,10 @@
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here (page 175):
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ * This also requires a patch to chibios:
+ * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+ */
+
+// STM32F103* does NOT have an USB bootloader in ROM (only serial),
+// so setting anything here does not make much sense
+// #define STM32_BOOTLOADER_ADDRESS 0x1FFFC800
diff --git a/keyboards/handwired/ortho60/chconf.h b/keyboards/handwired/ortho60/chconf.h
new file mode 100644
index 000000000..bbd9b2da6
--- /dev/null
+++ b/keyboards/handwired/ortho60/chconf.h
@@ -0,0 +1,524 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION 32
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY 100000
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#define CH_CFG_ST_TIMEDELTA 0
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM 0
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE 0
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD FALSE
+
+/* Use __WFI in the idle thread for waiting. Does lower the power
+ * consumption. */
+#define CORTEX_ENABLE_WFI_IDLE TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM FALSE
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY TRUE
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT TRUE
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES TRUE
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES TRUE
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS TRUE
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS TRUE
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES TRUE
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES TRUE
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE TRUE
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP TRUE
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS FALSE
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS FALSE
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS FALSE
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS FALSE
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS FALSE
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note It is invoked from within @p chThdInit() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/handwired/ortho60/config.h b/keyboards/handwired/ortho60/config.h
new file mode 100644
index 000000000..dd06f3f95
--- /dev/null
+++ b/keyboards/handwired/ortho60/config.h
@@ -0,0 +1,74 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6464
+#define DEVICE_VER 0x0001
+/* in python2: list(u"whatever".encode('utf-16-le')) */
+/* at most 32 characters or the ugly hack in usb_main.c borks */
+#define MANUFACTURER QMK
+#define PRODUCT Ortho60
+#define DESCRIPTION Ortho60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
+
+#define MATRIX_COL_PINS { B11, B10, B1, B0, A7, A6, A5, A4, A3, A2, A1, A0 }
+#define MATRIX_ROW_PINS { B3, B4, B5, B6, B7 }
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_LEVELS 1
+
+/* 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
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/handwired/ortho60/halconf.h b/keyboards/handwired/ortho60/halconf.h
new file mode 100644
index 000000000..5fba285a3
--- /dev/null
+++ b/keyboards/handwired/ortho60/halconf.h
@@ -0,0 +1,353 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef _HALCONF_H_
+#define _HALCONF_H_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C FALSE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM FALSE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI TRUE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 1
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+#endif /* _HALCONF_H_ */
+
+/** @} */
diff --git a/keyboards/handwired/ortho60/hsv2rgb.c b/keyboards/handwired/ortho60/hsv2rgb.c
new file mode 100644
index 000000000..adb7af8fa
--- /dev/null
+++ b/keyboards/handwired/ortho60/hsv2rgb.c
@@ -0,0 +1,80 @@
+/* hsv2rgb.c
+ * Integer only conversion functions between HSV and RGB
+ */
+
+#include "hsv2rgb.h"
+
+// TODO fix these buggy macros
+#define max(x,y) ((x>y) ? x:y)
+#define min(x,y) ((x>y) ? y:x)
+#define min3(x,y,z) (min(min(x,y),z))
+#define max3(x,y,z) (max(max(x,y),z))
+
+
+rgb_color hsv2rgb(hsv_color hsv)
+{
+ // From : http://qscribble.blogspot.fr/2008/06/integer-conversion-from-hsl-to-rgb.html
+ int h = hsv.h;
+ int s = hsv.s;
+ int v = hsv.v;
+ rgb_color rgb = {0, 0, 0};
+
+ if (v == 0)
+ return rgb;
+
+ // sextant = 0 .. 5
+ int sextant = (h*6)/256;
+ // f = 0 .. 42
+ int f = h - (sextant*256)/6;
+
+ int p = (v * (256 - s))/256;
+ int q = (v * (256*43 - s*f))/(256*43);
+ int t = (v * (256*43 - s*(43-f)))/(256*43);
+
+ // Corrige les erreurs dues aux arrondis
+ p = max(min(p, 255), 0);
+ q = max(min(q, 255), 0);
+ t = max(min(t, 255), 0);
+
+ switch(sextant){
+ case 0: rgb.r = v; rgb.g = t; rgb.b = p; break;
+ case 1: rgb.r = q; rgb.g = v; rgb.b = p; break;
+ case 2: rgb.r = p; rgb.g = v; rgb.b = t; break;
+ case 3: rgb.r = p; rgb.g = q; rgb.b = v; break;
+ case 4: rgb.r = t; rgb.g = p; rgb.b = v; break;
+ default:rgb.r = v; rgb.g = p; rgb.b = q; break;
+ }
+ return rgb;
+}
+
+
+hsv_color rgb2hsv(rgb_color rgb)
+{
+ // From : http://www.ruinelli.ch/rgb-to-hsv
+ hsv_color hsv = {0, 0, 0};
+ int min, max, delta;
+
+ min = min3(rgb.r, rgb.g, rgb.b);
+ max = max3(rgb.r, rgb.g, rgb.b);
+
+ if(max==0) {
+ hsv.h = 0;
+ hsv.s = 0;
+ hsv.v = 0;
+ return hsv;
+ }
+
+ hsv.v = max;
+ delta = max - min;
+
+ hsv.s = (delta)*255 / max;
+
+ if(rgb.r == max)
+ hsv.h = (rgb.g - rgb.b)*42/delta; // between yellow & magenta
+ else if(rgb.g == max)
+ hsv.h = 120 + (rgb.b - rgb.r)*42/delta; // between cyan & yellow
+ else
+ hsv.h = 240 + (rgb.r - rgb.g)*42/delta; // between magenta & cyan
+
+ return hsv;
+} \ No newline at end of file
diff --git a/keyboards/handwired/ortho60/hsv2rgb.h b/keyboards/handwired/ortho60/hsv2rgb.h
new file mode 100644
index 000000000..99566c32c
--- /dev/null
+++ b/keyboards/handwired/ortho60/hsv2rgb.h
@@ -0,0 +1,23 @@
+/* hsv2rgb.h
+ * Convert Hue Saturation Value to Red Green Blue
+ *
+ * Programme de convertion d'une information HSV en RGB
+ */
+#ifndef HSV2RGB_H
+#define HSV2RGB_H
+
+typedef struct {
+ unsigned char h;
+ unsigned char s;
+ unsigned char v;
+} hsv_color;
+
+typedef struct {
+ unsigned char r;
+ unsigned char g;
+ unsigned char b;
+} rgb_color;
+
+rgb_color hsv2rgb(hsv_color hsv);
+
+#endif \ No newline at end of file
diff --git a/keyboards/handwired/ortho60/info.json b/keyboards/handwired/ortho60/info.json
new file mode 100644
index 000000000..b6e485441
--- /dev/null
+++ b/keyboards/handwired/ortho60/info.json
@@ -0,0 +1,73 @@
+{
+ "keyboard_name": "Ortho60",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ortho_5x12": {
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"Backspace", "x":11, "y":0},
+ {"label":"Tab", "x":0, "y":1},
+ {"label":"Q", "x":1, "y":1},
+ {"label":"W", "x":2, "y":1},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1},
+ {"label":"T", "x":5, "y":1},
+ {"label":"Y", "x":6, "y":1},
+ {"label":"U", "x":7, "y":1},
+ {"label":"I", "x":8, "y":1},
+ {"label":"O", "x":9, "y":1},
+ {"label":"P", "x":10, "y":1},
+ {"label":"Delete", "x":11, "y":1},
+ {"label":"Esc", "x":0, "y":2},
+ {"label":"A", "x":1, "y":2},
+ {"label":"S", "x":2, "y":2},
+ {"label":"D", "x":3, "y":2},
+ {"label":"F", "x":4, "y":2},
+ {"label":"G", "x":5, "y":2},
+ {"label":"H", "x":6, "y":2},
+ {"label":"J", "x":7, "y":2},
+ {"label":"K", "x":8, "y":2},
+ {"label":"L", "x":9, "y":2},
+ {"label":";", "x":10, "y":2},
+ {"label":"'", "x":11, "y":2},
+ {"label":"Shift", "x":0, "y":3},
+ {"label":"Z", "x":1, "y":3},
+ {"label":"X", "x":2, "y":3},
+ {"label":"C", "x":3, "y":3},
+ {"label":"V", "x":4, "y":3},
+ {"label":"B", "x":5, "y":3},
+ {"label":"N", "x":6, "y":3},
+ {"label":"M", "x":7, "y":3},
+ {"label":",", "x":8, "y":3},
+ {"label":".", "x":9, "y":3},
+ {"label":"/", "x":10, "y":3},
+ {"label":"Enter", "x":11, "y":3},
+ {"label":"Fn", "x":0, "y":4},
+ {"label":"Ctrl", "x":1, "y":4},
+ {"label":"Alt", "x":2, "y":4},
+ {"label":"Meta", "x":3, "y":4},
+ {"label":"Lower", "x":4, "y":4},
+ {"label":"Space", "x":5, "y":4},
+ {"label":"Space", "x":6, "y":4},
+ {"label":"Raise", "x":7, "y":4},
+ {"label":"Left", "x":8, "y":4},
+ {"label":"Down", "x":9, "y":4},
+ {"label":"Right", "x":10, "y":4},
+ {"label":"up", "x":11, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/ortho60/keymaps/default/keymap.c b/keyboards/handwired/ortho60/keymaps/default/keymap.c
new file mode 100644
index 000000000..8617b6341
--- /dev/null
+++ b/keyboards/handwired/ortho60/keymaps/default/keymap.c
@@ -0,0 +1,98 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BASE 0
+#define _RAISE 1
+#define _LOWER 2
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_BASE] = LAYOUT_ortho_5x12( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, \
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ BL_TOGG, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_5x12( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_5x12( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+)
+};
diff --git a/keyboards/handwired/ortho60/ld/MKL26Z64.ld b/keyboards/handwired/ortho60/ld/MKL26Z64.ld
new file mode 100644
index 000000000..c4ca8b874
--- /dev/null
+++ b/keyboards/handwired/ortho60/ld/MKL26Z64.ld
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com
+ * (C) 2016 flabbergast <s3+flabbergast@sdfeu.org>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * KL26Z64 memory setup.
+ */
+MEMORY
+{
+ flash0 : org = 0x00000000, len = 0x100
+ flash1 : org = 0x00000400, len = 0x10
+ flash2 : org = 0x00000410, len = 62k - 0x410
+ flash3 : org = 0x0000F800, len = 2k
+ flash4 : org = 0x00000000, len = 0
+ flash5 : org = 0x00000000, len = 0
+ flash6 : org = 0x00000000, len = 0
+ flash7 : org = 0x00000000, len = 0
+ ram0 : org = 0x1FFFF800, len = 8k
+ ram1 : org = 0x00000000, len = 0
+ ram2 : org = 0x00000000, len = 0
+ ram3 : org = 0x00000000, len = 0
+ ram4 : org = 0x00000000, len = 0
+ ram5 : org = 0x00000000, len = 0
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
+}
+
+/* Flash region for the configuration bytes.*/
+SECTIONS
+{
+ .cfmprotect : ALIGN(4) SUBALIGN(4)
+ {
+ KEEP(*(.cfmconfig))
+ } > flash1
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash2);
+REGION_ALIAS("XTORS_FLASH_LMA", flash2);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash2);
+REGION_ALIAS("TEXT_FLASH_LMA", flash2);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash2);
+REGION_ALIAS("RODATA_FLASH_LMA", flash2);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash2);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash2);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+__eeprom_workarea_start__ = ORIGIN(flash3);
+__eeprom_workarea_size__ = LENGTH(flash3);
+__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__;
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/handwired/ortho60/ld/STM32F103x8_stm32duino_bootloader.ld b/keyboards/handwired/ortho60/ld/STM32F103x8_stm32duino_bootloader.ld
new file mode 100644
index 000000000..d0688ef60
--- /dev/null
+++ b/keyboards/handwired/ortho60/ld/STM32F103x8_stm32duino_bootloader.ld
@@ -0,0 +1,88 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/*
+ * ST32F103xB memory setup for use with the maplemini bootloader.
+ * You will have to
+ * #define CORTEX_VTOR_INIT 0x5000
+ * in your projects chconf.h
+ */
+MEMORY
+{
+ flash0 : org = 0x08002000, len = 64k - 0x2000
+ flash1 : org = 0x00000000, len = 0
+ flash2 : org = 0x00000000, len = 0
+ flash3 : org = 0x00000000, len = 0
+ flash4 : org = 0x00000000, len = 0
+ flash5 : org = 0x00000000, len = 0
+ flash6 : org = 0x00000000, len = 0
+ flash7 : org = 0x00000000, len = 0
+ ram0 : org = 0x20000000, len = 20k
+ ram1 : org = 0x00000000, len = 0
+ ram2 : org = 0x00000000, len = 0
+ ram3 : org = 0x00000000, len = 0
+ ram4 : org = 0x00000000, len = 0
+ ram5 : org = 0x00000000, len = 0
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash0);
+REGION_ALIAS("XTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash0);
+REGION_ALIAS("TEXT_FLASH_LMA", flash0);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash0);
+REGION_ALIAS("RODATA_FLASH_LMA", flash0);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash0);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash0);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/handwired/ortho60/led.c b/keyboards/handwired/ortho60/led.c
new file mode 100644
index 000000000..f15baed16
--- /dev/null
+++ b/keyboards/handwired/ortho60/led.c
@@ -0,0 +1,51 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "hal.h"
+#include "backlight.h"
+#include "led.h"
+#include "printf.h"
+
+void backlight_init_ports(void) {
+ printf("backlight_init_ports()\n");
+ #ifdef BACKLIGHT_ENABLE
+ palSetPadMode(GPIOA, 8, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPad(GPIOA, 8);
+ #endif
+}
+
+void backlight_set(uint8_t level) {
+ printf("backlight_set(%d)\n", level);
+ #ifdef BACKLIGHT_ENABLE
+ if (level == 0) {
+ // Turn backlight off
+ palSetPad(GPIOA, 8);
+ } else {
+ // Turn backlight on
+ palClearPad(GPIOA, 8);
+ }
+ #endif
+}
+
+void led_set(uint8_t usb_led)
+{
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ palClearPad(GPIOC, 13);
+ } else {
+ palSetPad(GPIOC, 13);
+ }
+}
diff --git a/keyboards/handwired/ortho60/mcuconf.h b/keyboards/handwired/ortho60/mcuconf.h
new file mode 100644
index 000000000..9945e7408
--- /dev/null
+++ b/keyboards/handwired/ortho60/mcuconf.h
@@ -0,0 +1,209 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define STM32F103_MCUCONF
+
+/*
+ * STM32F103 drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED FALSE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
+#define STM32_PLLMUL_VALUE 9
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV2
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_USB_CLOCK_REQUIRED TRUE
+#define STM32_USBPRE STM32_USBPRE_DIV1P5
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_ADC1_IRQ_PRIORITY 6
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1 FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY 11
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM5 FALSE
+#define STM32_GPT_USE_TIM8 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM5_IRQ_PRIORITY 7
+#define STM32_GPT_TIM8_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 5
+#define STM32_I2C_I2C2_IRQ_PRIORITY 5
+#define STM32_I2C_I2C1_DMA_PRIORITY 3
+#define STM32_I2C_I2C2_DMA_PRIORITY 3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM5 FALSE
+#define STM32_ICU_USE_TIM8 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM5_IRQ_PRIORITY 7
+#define STM32_ICU_TIM8_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_USE_TIM4 FALSE
+#define STM32_PWM_USE_TIM5 FALSE
+#define STM32_PWM_USE_TIM8 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM5_IRQ_PRIORITY 7
+#define STM32_PWM_TIM8_IRQ_PRIORITY 7
+
+/*
+ * RTC driver system settings.
+ */
+#define STM32_RTC_IRQ_PRIORITY 15
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USE_USART3 FALSE
+#define STM32_SERIAL_USE_UART4 FALSE
+#define STM32_SERIAL_USE_UART5 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART3_PRIORITY 12
+#define STM32_SERIAL_UART4_PRIORITY 12
+#define STM32_SERIAL_UART5_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 TRUE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USE_USART3 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART3_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART3_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/handwired/ortho60/ortho60.c b/keyboards/handwired/ortho60/ortho60.c
new file mode 100644
index 000000000..32db007b6
--- /dev/null
+++ b/keyboards/handwired/ortho60/ortho60.c
@@ -0,0 +1,32 @@
+
+#include "ortho60.h"
+
+#include "ch.h"
+#include "hal.h"
+
+#include "underglow.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+
+/* generic STM32F103C8T6 board */
+#ifdef BOARD_GENERIC_STM32_F103
+#define LED_ON() do { palClearPad(GPIOC, 13) ;} while (0)
+#define LED_OFF() do { palSetPad(GPIOC, 13); } while (0)
+#define LED_TGL() do { palTogglePad(GPIOC, 13); } while (0)
+#endif
+
+void matrix_init_kb(void){
+ /* MOSI pin*/
+ palSetPadMode(GPIOB, 15, PAL_MODE_STM32_ALTERNATE_PUSHPULL);
+
+ LED_ON();
+ palSetPad(GPIOA, 8);
+ wait_ms(500);
+ palClearPad(GPIOA, 8);
+ LED_OFF();
+
+ leds_init();
+
+
+}
diff --git a/keyboards/handwired/ortho60/ortho60.h b/keyboards/handwired/ortho60/ortho60.h
new file mode 100644
index 000000000..0f3ae127a
--- /dev/null
+++ b/keyboards/handwired/ortho60/ortho60.h
@@ -0,0 +1,33 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_1x2uC( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45 , k47, k48, k49, k4a, k4b \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k43, k44, k45, KC_NO, k47, k48, k49, k4a, k4b }, \
+}
+
+#define LAYOUT_ortho_5x12( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b }, \
+}
diff --git a/keyboards/handwired/ortho60/readme.md b/keyboards/handwired/ortho60/readme.md
new file mode 100644
index 000000000..8db1b7df7
--- /dev/null
+++ b/keyboards/handwired/ortho60/readme.md
@@ -0,0 +1,3 @@
+# Ortho 60
+
+Blue Pill STM32F103C8T6 based 12x5 Ortholinear Board
diff --git a/keyboards/handwired/ortho60/rules.mk b/keyboards/handwired/ortho60/rules.mk
new file mode 100644
index 000000000..3f4574473
--- /dev/null
+++ b/keyboards/handwired/ortho60/rules.mk
@@ -0,0 +1,56 @@
+# project specific files
+SRC = led.c \
+ underglow.c \
+ hsv2rgb.c
+
+# GENERIC STM32F103C8T6 board - stm32duino bootloader
+OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
+MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
+BOARD = GENERIC_STM32_F103
+
+# OPT_DEFS =
+# MCU_LDSCRIPT = STM32F103x8
+# BOARD = GENERIC_STM32_F103
+
+## chip/board settings
+# the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F1xx
+# linker script to use
+# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+# startup code to use
+# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f1xx
+# it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+# Cortex version
+# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
+MCU = cortex-m3
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
+# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
+# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
+# a custom board definition that you plan to reuse).
+# If you're not setting it here, leave it commented out.
+# It is chip dependent, the correct number can be looked up here (page 175):
+# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+# This also requires a patch to chibios:
+# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+
+
+#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes
+
+LAYOUTS = ortho_5x12
+
+DEFAULT_FOLDER = handwired/ortho60
diff --git a/keyboards/handwired/ortho60/underglow.c b/keyboards/handwired/ortho60/underglow.c
new file mode 100644
index 000000000..1383af189
--- /dev/null
+++ b/keyboards/handwired/ortho60/underglow.c
@@ -0,0 +1,157 @@
+#include "ch.h"
+#include "hal.h"
+
+#include "hsv2rgb.h"
+#include "underglow.h"
+
+#define BYTES_FOR_LED_BYTE 4
+#define NB_COLORS 3
+#define BYTES_FOR_LED BYTES_FOR_LED_BYTE*NB_COLORS
+#define DATA_SIZE BYTES_FOR_LED*NB_LEDS
+#define RESET_SIZE 200
+#define PREAMBLE_SIZE 4
+
+// Define the spi your LEDs are plugged to here
+#define LEDS_SPI SPID2
+// Define the number of LEDs you wish to control in your LED strip
+#define NB_LEDS 8
+
+#define LED_SPIRAL 1
+
+static uint8_t txbuf[PREAMBLE_SIZE + DATA_SIZE + RESET_SIZE];
+static uint8_t get_protocol_eq(uint8_t data, int pos);
+
+/*
+ * This lib is meant to be used asynchronously, thus the colors contained in
+ * the txbuf will be sent in loop, so that the colors are always the ones you
+ * put in the table (the user thus have less to worry about)
+ *
+ * Since the data are sent via DMA, and the call to spiSend is a blocking one,
+ * the processor ressources are not used to much, if you see your program being
+ * too slow, simply add a:
+ * chThdSleepMilliseconds(x);
+ * after the spiSend, where you increment x untill you are satisfied with your
+ * program speed, another trick may be to lower this thread priority : your call
+ */
+static THD_WORKING_AREA(LEDS_THREAD_WA, 128);
+static THD_FUNCTION(ledsThread, arg) {
+ (void) arg;
+ while(1){
+ spiSend(&LEDS_SPI, PREAMBLE_SIZE + DATA_SIZE + RESET_SIZE, txbuf);
+ }
+}
+
+#if LED_SPIRAL
+/*
+ * 'Led spiral' is a simple demo in which we put all the leds to the same
+ * color, where this color does all the hsv circle in loop.
+ * If you want to launch the thread that will chage the led colors to the
+ * appropriate value, simply set LED_SPIRAL to 1.
+ */
+static THD_WORKING_AREA(HSVTRANS_WA, 128);
+static THD_FUNCTION(hsv_transThread, arg){
+ (void) arg;
+ hsv_color color = {0, 255, 127};
+ while(1){
+ color.h += 1;
+ color.h %= 256;
+ set_leds_color_hsv(color);
+ chThdSleepMilliseconds(50);
+ }
+}
+#endif
+
+static const SPIConfig spicfg = {
+ NULL,
+ GPIOB,
+ 15,
+ SPI_CR1_BR_1|SPI_CR1_BR_0 // baudrate : fpclk / 8 => 1tick is 0.32us
+};
+
+/*
+ * Function used to initialize the driver.
+ *
+ * Starts by shutting off all the LEDs.
+ * Then gets access on the LED_SPI driver.
+ * May eventually launch an animation on the LEDs (e.g. a thread setting the
+ * txbuff values)
+ */
+void leds_init(void){
+ for(int i = 0; i < RESET_SIZE; i++)
+ txbuf[DATA_SIZE+i] = 0x00;
+ for (int i=0; i<PREAMBLE_SIZE; i++)
+ txbuf[i] = 0x00;
+ spiAcquireBus(&LEDS_SPI); /* Acquire ownership of the bus. */
+ spiStart(&LEDS_SPI, &spicfg); /* Setup transfer parameters. */
+ spiSelect(&LEDS_SPI); /* Slave Select assertion. */
+ chThdCreateStatic(LEDS_THREAD_WA, sizeof(LEDS_THREAD_WA),NORMALPRIO, ledsThread, NULL);
+#if LED_SPIRAL
+ chThdCreateStatic(HSVTRANS_WA, sizeof(HSVTRANS_WA),
+ NORMALPRIO, hsv_transThread, NULL);
+#endif
+}
+
+/*
+ * As the trick here is to use the SPI to send a huge pattern of 0 and 1 to
+ * the ws2812b protocol, we use this helper function to translate bytes into
+ * 0s and 1s for the LED (with the appropriate timing).
+ */
+static uint8_t get_protocol_eq(uint8_t data, int pos){
+ uint8_t eq = 0;
+ if (data & (1 << (2*(3-pos))))
+ eq = 0b1110;
+ else
+ eq = 0b1000;
+ if (data & (2 << (2*(3-pos))))
+ eq += 0b11100000;
+ else
+ eq += 0b10000000;
+ return eq;
+}
+
+/*
+ * If you want to set a LED's color in the HSV color space, simply call this
+ * function with a hsv_color containing the desired color and the index of the
+ * led on the LED strip (starting from 0, the first one being the closest the
+ * first plugged to the board)
+ *
+ * Only set the color of the LEDs through the functions given by this API
+ * (unless you really know what you are doing)
+ */
+void set_led_color_hsv(hsv_color color, int pos){
+ set_led_color_rgb(hsv2rgb(color), pos);
+}
+
+/*
+ * If you want to set a LED's color in the RGB color space, simply call this
+ * function with a hsv_color containing the desired color and the index of the
+ * led on the LED strip (starting from 0, the first one being the closest the
+ * first plugged to the board)
+ *
+ * Only set the color of the LEDs through the functions given by this API
+ * (unless you really know what you are doing)
+ */
+void set_led_color_rgb(rgb_color color, int pos){
+ for(int j = 0; j < 4; j++)
+ txbuf[PREAMBLE_SIZE + BYTES_FOR_LED*pos + j] = get_protocol_eq(color.g, j);
+ for(int j = 0; j < 4; j++)
+ txbuf[PREAMBLE_SIZE + BYTES_FOR_LED*pos + BYTES_FOR_LED_BYTE+j] = get_protocol_eq(color.r, j);
+ for(int j = 0; j < 4; j++)
+ txbuf[PREAMBLE_SIZE + BYTES_FOR_LED*pos + BYTES_FOR_LED_BYTE*2+j] = get_protocol_eq(color.b, j);
+}
+
+/*
+ * Same as the two above, but sets all the LEDs in the LED strip (HSV)
+ */
+void set_leds_color_hsv(hsv_color color){
+ for(int i = 0; i < NB_LEDS; i++)
+ set_led_color_hsv(color, i);
+}
+
+/*
+ * Same as the two above, but sets all the LEDs in the LED strip (RGB)
+ */
+void set_leds_color_rgb(rgb_color color){
+ for(int i = 0; i < NB_LEDS; i++)
+ set_led_color_rgb(color, i);
+} \ No newline at end of file
diff --git a/keyboards/handwired/ortho60/underglow.h b/keyboards/handwired/ortho60/underglow.h
new file mode 100644
index 000000000..ff1195279
--- /dev/null
+++ b/keyboards/handwired/ortho60/underglow.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#include "hsv2rgb.h"
+
+void set_leds_color_hsv(hsv_color color);
+void set_leds_color_rgb(rgb_color color);
+void set_led_color_hsv(hsv_color color, int pos);
+void set_led_color_rgb(rgb_color color, int pos);
+
+void leds_init(void);
diff --git a/keyboards/handwired/pilcrow/info.json b/keyboards/handwired/pilcrow/info.json
new file mode 100644
index 000000000..824e2abbc
--- /dev/null
+++ b/keyboards/handwired/pilcrow/info.json
@@ -0,0 +1,53 @@
+{
+ "keyboard_name": "pilcrow",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 10,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Q", "x":0, "y":0},
+ {"label":"W", "x":1, "y":0},
+ {"label":"E", "x":2, "y":0},
+ {"label":"R", "x":3, "y":0},
+ {"label":"T", "x":4, "y":0},
+ {"label":"Y", "x":5, "y":0},
+ {"label":"U", "x":6, "y":0},
+ {"label":"I", "x":7, "y":0},
+ {"label":"O", "x":8, "y":0},
+ {"label":"P", "x":9, "y":0},
+ {"label":"A", "x":0, "y":1},
+ {"label":"S", "x":1, "y":1},
+ {"label":"D", "x":2, "y":1},
+ {"label":"F", "x":3, "y":1},
+ {"label":"G", "x":4, "y":1},
+ {"label":"H", "x":5, "y":1},
+ {"label":"J", "x":6, "y":1},
+ {"label":"K", "x":7, "y":1},
+ {"label":"L", "x":8, "y":1},
+ {"label":";", "x":9, "y":1},
+ {"label":"Z", "x":0, "y":2},
+ {"label":"X", "x":1, "y":2},
+ {"label":"C", "x":2, "y":2},
+ {"label":"V", "x":3, "y":2},
+ {"label":"B", "x":4, "y":2},
+ {"label":"N", "x":5, "y":2},
+ {"label":"M", "x":6, "y":2},
+ {"label":",", "x":7, "y":2},
+ {"label":".", "x":8, "y":2},
+ {"label":"/", "x":9, "y":2},
+ {"label":"Ctrl", "x":0, "y":3},
+ {"label":"Alt", "x":1, "y":3},
+ {"label":"GUI", "x":2, "y":3},
+ {"label":"MO(1)", "x":3, "y":3},
+ {"label":"Space", "x":4, "y":3},
+ {"label":"Shift / Space", "x":5, "y":3},
+ {"label":"MO(2)", "x":6, "y":3},
+ {"label":"MO(3)", "x":7, "y":3},
+ {"label":"Delete", "x":8, "y":3},
+ {"label":"Esc", "x":9, "y":3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/pilcrow/keymaps/default/config.h b/keyboards/handwired/pilcrow/keymaps/default/config.h
index df06a2620..271f48d00 100644
--- a/keyboards/handwired/pilcrow/keymaps/default/config.h
+++ b/keyboards/handwired/pilcrow/keymaps/default/config.h
@@ -1,8 +1,3 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
// place overrides here
-
-#endif \ No newline at end of file
diff --git a/keyboards/handwired/pilcrow/keymaps/default/keymap.c b/keyboards/handwired/pilcrow/keymaps/default/keymap.c
index e382e4c6a..617ff4f6c 100644
--- a/keyboards/handwired/pilcrow/keymaps/default/keymap.c
+++ b/keyboards/handwired/pilcrow/keymaps/default/keymap.c
@@ -1,76 +1,58 @@
-#include "pilcrow.h"
-#define _______ KC_TRNS
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = KEYMAP( \
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \
- KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, MT(MOD_LSFT, KC_SPC), MO(2), MO(3), KC_DEL, KC_ESC \
-),
-
-/* Colemak
- * ,-----------------------------------------------------------------------------------.
- * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Esc | A | R | S | T | D | H | N | E | I | O | " |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[1] = KEYMAP( \
- KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, \
- KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_PIPE, S(KC_QUOT), \
- _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_GRV \
-),
-[2] = KEYMAP( \
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \
- KC_TAB, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, \
- OSM(MOD_LSFT), KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_BSLS, KC_QUOT, \
- _______, _______, _______, _______, KC_ENT, KC_ENT, _______, KC_MNXT, KC_VOLD, KC_VOLU \
-),
+#include QMK_KEYBOARD_H
-/* Adjust (Lower + Raise)
- * ,-----------------------------------------------------------------------------------.
- * | | Reset| | | | | | | | | | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[3] = KEYMAP( \
- RESET, KC_UP, _______, _______, _______, _______, _______, KC_MS_WH_DOWN, KC_MS_U, KC_MS_WH_UP, \
- KC_LEFT, KC_DOWN, KC_RIGHT, AU_ON, AU_OFF, AG_NORM, AG_SWAP, KC_MS_L,KC_MS_D, KC_MS_R, \
- RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, \
- _______, _______, _______, _______, KC_MS_BTN1, KC_MS_BTN2, _______, _______, _______, _______ \
-)
-};
+#define SFT_SPC MT(MOD_LSFT, KC_SPC)
-const uint16_t PROGMEM fn_actions[] = {
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT( \
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \
+ KC_LCTL, KC_LALT, KC_LGUI, MO(1), KC_SPC, SFT_SPC, MO(2), MO(3), KC_DEL, KC_ESC \
+ ),
-};
+ /* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [1] = LAYOUT( \
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, \
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_PIPE, S(KC_QUOT), \
+ _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_GRV \
+ ),
+ [2] = LAYOUT( \
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \
+ KC_TAB, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, \
+ OSM(MOD_LSFT), KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_BSLS, KC_QUOT, \
+ _______, _______, _______, _______, KC_ENT, KC_ENT, _______, KC_MNXT, KC_VOLD, KC_VOLU \
+ ),
-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;
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [3] = LAYOUT( \
+ RESET, KC_UP, _______, _______, _______, _______, _______, KC_WH_D, KC_MS_U, KC_WH_U, \
+ KC_LEFT, KC_DOWN, KC_RGHT, AU_ON, AU_OFF, AG_NORM, AG_SWAP, KC_MS_L, KC_MS_D, KC_MS_R, \
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, \
+ _______, _______, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______, _______ \
+ )
};
-
void matrix_init_user(void) {
}
diff --git a/keyboards/handwired/pilcrow/keymaps/default/rules.mk b/keyboards/handwired/pilcrow/keymaps/default/rules.mk
index b3c01678f..3955a3ff4 100644
--- a/keyboards/handwired/pilcrow/keymaps/default/rules.mk
+++ b/keyboards/handwired/pilcrow/keymaps/default/rules.mk
@@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/pilcrow/pilcrow.h b/keyboards/handwired/pilcrow/pilcrow.h
index 7138ccb3f..37d2914f2 100644
--- a/keyboards/handwired/pilcrow/pilcrow.h
+++ b/keyboards/handwired/pilcrow/pilcrow.h
@@ -7,7 +7,7 @@
// The following is an example using the Planck MIT layout
// The first section contains all of the arguements
// The second converts the arguments into a two-dimensional array
-#define KEYMAP( \
+#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \
diff --git a/keyboards/handwired/pilcrow/readme.md b/keyboards/handwired/pilcrow/readme.md
index 7a7f6d2af..79f22518e 100644
--- a/keyboards/handwired/pilcrow/readme.md
+++ b/keyboards/handwired/pilcrow/readme.md
@@ -1,28 +1,14 @@
-pilcrow keyboard firmware
-======================
+# pilcrow
-## Quantum MK Firmware
+![pilcrow](https://i.imgur.com/KQdn2kg.jpg)
-For the full Quantum feature list, see [the parent readme](/).
+A 4x10 ortholinear keyboard powered by a Teensy.
-## Building
+Keyboard Maintainer: [The QMK Community](https://github.com/qmk)
+Hardware Supported: Teensy-powered pilcrow
-Download or clone the whole firmware and navigate to the keyboards/pilcrow folder. Once your dev env is setup, you'll be able to type `make` to generate your .hex - you can then use the Teensy Loader to program your .hex file.
+Make example for this keyboard (after setting up your build environment):
-Depending on which keymap you would like to use, you will have to compile slightly differently.
+ make handwired/pilcrow:default
-### Default
-
-To build with the default keymap, simply run `make default`.
-
-### Other Keymaps
-
-Several version of keymap are available in advance but you are recommended to define your favorite layout yourself. To define your own keymap create a folder with the name of your keymap in the keymaps folder, and see keymap documentation (you can find in top readme.md) and existant keymap files.
-
-To build the firmware binary hex file with a keymap just do `make` with a keymap like this:
-
-```
-$ make [default|jack|<name>]
-```
-
-Keymaps follow the format **__\<name\>.c__** and are stored in the `keymaps` folder.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.c b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.c
new file mode 100644
index 000000000..8c5a87f35
--- /dev/null
+++ b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.c
@@ -0,0 +1,56 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#include "hal.h"
+
+// Value to place in RTC backup register 10 for persistent bootloader mode
+#define RTC_BOOTLOADER_FLAG 0x424C
+
+/**
+ * @brief PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ * This variable is used by the HAL when initializing the PAL driver.
+ */
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+const PALConfig pal_default_config =
+{
+ {VAL_GPIOAODR, VAL_GPIOACRL, VAL_GPIOACRH},
+ {VAL_GPIOBODR, VAL_GPIOBCRL, VAL_GPIOBCRH},
+ {VAL_GPIOCODR, VAL_GPIOCCRL, VAL_GPIOCCRH},
+ {VAL_GPIODODR, VAL_GPIODCRL, VAL_GPIODCRH},
+ {VAL_GPIOEODR, VAL_GPIOECRL, VAL_GPIOECRH},
+};
+#endif
+
+/*
+ * Early initialization code.
+ * This initialization must be performed just after stack setup and before
+ * any other initialization.
+ */
+void __early_init(void) {
+
+ stm32_clock_init();
+}
+
+/*
+ * Board-specific initialization code.
+ */
+void boardInit(void) {
+ //JTAG-DP Disabled and SW-DP Enabled
+ AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_JTAGDISABLE;
+ //Set backup register DR10 to enter bootloader on reset
+ BKP->DR10 = RTC_BOOTLOADER_FLAG;
+}
diff --git a/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.h b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.h
new file mode 100644
index 000000000..9427adabf
--- /dev/null
+++ b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.h
@@ -0,0 +1,166 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+/*
+ * Setup for a Generic STM32F103 board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_GENERIC_STM32_F103
+#define BOARD_NAME "Generic STM32F103x board"
+
+/*
+ * Board frequencies.
+ */
+#define STM32_LSECLK 32768
+#define STM32_HSECLK 8000000
+
+/*
+ * MCU type, supported types are defined in ./os/hal/platforms/hal_lld.h.
+ */
+#define STM32F103xB
+
+/*
+ * IO pins assignments
+ */
+
+/* on-board */
+
+#define GPIOA_LED 8
+#define GPIOD_OSC_IN 0
+#define GPIOD_OSC_OUT 1
+
+/* In case your board has a "USB enable" hardware
+ controlled by a pin, define it here. (It could be just
+ a 1.5k resistor connected to D+ line.)
+*/
+/*
+#define GPIOB_USB_DISC 10
+*/
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ *
+ * The digits have the following meaning:
+ * 0 - Analog input.
+ * 1 - Push Pull output 10MHz.
+ * 2 - Push Pull output 2MHz.
+ * 3 - Push Pull output 50MHz.
+ * 4 - Digital input.
+ * 5 - Open Drain output 10MHz.
+ * 6 - Open Drain output 2MHz.
+ * 7 - Open Drain output 50MHz.
+ * 8 - Digital input with PullUp or PullDown resistor depending on ODR.
+ * 9 - Alternate Push Pull output 10MHz.
+ * A - Alternate Push Pull output 2MHz.
+ * B - Alternate Push Pull output 50MHz.
+ * C - Reserved.
+ * D - Alternate Open Drain output 10MHz.
+ * E - Alternate Open Drain output 2MHz.
+ * F - Alternate Open Drain output 50MHz.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+
+/*
+ * Port A setup.
+ * Everything input with pull-up except:
+ * PA2 - Alternate output (USART2 TX).
+ * PA3 - Normal input (USART2 RX).
+ * PA9 - Alternate output (USART1 TX).
+ * PA10 - Normal input (USART1 RX).
+ */
+#define VAL_GPIOACRL 0x88884B88 /* PA7...PA0 */
+#define VAL_GPIOACRH 0x888884B8 /* PA15...PA8 */
+#define VAL_GPIOAODR 0xFFFFFFFF
+
+/*
+ * Port B setup.
+ * Everything input with pull-up except:
+ * PB10 - Push Pull output (USB switch).
+ */
+#define VAL_GPIOBCRL 0x88888888 /* PB7...PB0 */
+#define VAL_GPIOBCRH 0x88888388 /* PB15...PB8 */
+#define VAL_GPIOBODR 0xFFFFFFFF
+
+/*
+ * Port C setup.
+ * Everything input with pull-up except:
+ * PC13 - Push Pull output (LED).
+ */
+#define VAL_GPIOCCRL 0x88888888 /* PC7...PC0 */
+#define VAL_GPIOCCRH 0x88388888 /* PC15...PC8 */
+#define VAL_GPIOCODR 0xFFFFFFFF
+
+/*
+ * Port D setup.
+ * Everything input with pull-up except:
+ * PD0 - Normal input (XTAL).
+ * PD1 - Normal input (XTAL).
+ */
+#define VAL_GPIODCRL 0x88888844 /* PD7...PD0 */
+#define VAL_GPIODCRH 0x88888888 /* PD15...PD8 */
+#define VAL_GPIODODR 0xFFFFFFFF
+
+/*
+ * Port E setup.
+ * Everything input with pull-up except:
+ */
+#define VAL_GPIOECRL 0x88888888 /* PE7...PE0 */
+#define VAL_GPIOECRH 0x88888888 /* PE15...PE8 */
+#define VAL_GPIOEODR 0xFFFFFFFF
+
+/*
+ * USB bus activation macro, required by the USB driver.
+ */
+/* The point is that most of the generic STM32F103* boards
+ have a 1.5k resistor connected on one end to the D+ line
+ and on the other end to some pin. Or even a slightly more
+ complicated "USB enable" circuit, controlled by a pin.
+ That should go here.
+
+ However on some boards (e.g. one that I have), there's no
+ such hardware. In which case it's better to not do anything.
+*/
+/*
+#define usb_lld_connect_bus(usbp) palClearPad(GPIOB, GPIOB_USB_DISC)
+*/
+#define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT);
+
+/*
+ * USB bus de-activation macro, required by the USB driver.
+ */
+/*
+#define usb_lld_disconnect_bus(usbp) palSetPad(GPIOB, GPIOB_USB_DISC)
+*/
+#define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12);
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* _BOARD_H_ */
diff --git a/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.mk b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.mk
new file mode 100644
index 000000000..6b8b312fd
--- /dev/null
+++ b/keyboards/handwired/practice60/boards/GENERIC_STM32_F103/board.mk
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F103/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F103
diff --git a/keyboards/handwired/practice60/bootloader_defs.h b/keyboards/handwired/practice60/bootloader_defs.h
new file mode 100644
index 000000000..0f45203cb
--- /dev/null
+++ b/keyboards/handwired/practice60/bootloader_defs.h
@@ -0,0 +1,10 @@
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here (page 175):
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ * This also requires a patch to chibios:
+ * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+ */
+
+// STM32F103* does NOT have an USB bootloader in ROM (only serial),
+// so setting anything here does not make much sense
+// #define STM32_BOOTLOADER_ADDRESS 0x1FFFC800
diff --git a/keyboards/handwired/practice60/chconf.h b/keyboards/handwired/practice60/chconf.h
new file mode 100644
index 000000000..bbd9b2da6
--- /dev/null
+++ b/keyboards/handwired/practice60/chconf.h
@@ -0,0 +1,524 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION 32
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY 100000
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#define CH_CFG_ST_TIMEDELTA 0
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM 0
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE 0
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD FALSE
+
+/* Use __WFI in the idle thread for waiting. Does lower the power
+ * consumption. */
+#define CORTEX_ENABLE_WFI_IDLE TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM FALSE
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY TRUE
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT TRUE
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES TRUE
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES TRUE
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS TRUE
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS TRUE
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES TRUE
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES TRUE
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE TRUE
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP TRUE
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS FALSE
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS FALSE
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS FALSE
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS FALSE
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS FALSE
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note It is invoked from within @p chThdInit() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/handwired/practice60/config.h b/keyboards/handwired/practice60/config.h
new file mode 100644
index 000000000..31ddd77d1
--- /dev/null
+++ b/keyboards/handwired/practice60/config.h
@@ -0,0 +1,74 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6464
+#define DEVICE_VER 0x0001
+/* in python2: list(u"whatever".encode('utf-16-le')) */
+/* at most 32 characters or the ugly hack in usb_main.c borks */
+#define MANUFACTURER QMK
+#define PRODUCT Practice 60
+#define DESCRIPTION Practice 60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+#define MATRIX_COL_PINS { B11, B10, B1, B0, A7, A6, A5, A4, A3, A2, A1, A0, C15, C14 }
+#define MATRIX_ROW_PINS { B3, B4, B5, B6, B7 }
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_LEVELS 1
+
+/* 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
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/handwired/practice60/halconf.h b/keyboards/handwired/practice60/halconf.h
new file mode 100644
index 000000000..5fba285a3
--- /dev/null
+++ b/keyboards/handwired/practice60/halconf.h
@@ -0,0 +1,353 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef _HALCONF_H_
+#define _HALCONF_H_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C FALSE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM FALSE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI TRUE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 1
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+#endif /* _HALCONF_H_ */
+
+/** @} */
diff --git a/keyboards/handwired/practice60/hsv2rgb.c b/keyboards/handwired/practice60/hsv2rgb.c
new file mode 100644
index 000000000..adb7af8fa
--- /dev/null
+++ b/keyboards/handwired/practice60/hsv2rgb.c
@@ -0,0 +1,80 @@
+/* hsv2rgb.c
+ * Integer only conversion functions between HSV and RGB
+ */
+
+#include "hsv2rgb.h"
+
+// TODO fix these buggy macros
+#define max(x,y) ((x>y) ? x:y)
+#define min(x,y) ((x>y) ? y:x)
+#define min3(x,y,z) (min(min(x,y),z))
+#define max3(x,y,z) (max(max(x,y),z))
+
+
+rgb_color hsv2rgb(hsv_color hsv)
+{
+ // From : http://qscribble.blogspot.fr/2008/06/integer-conversion-from-hsl-to-rgb.html
+ int h = hsv.h;
+ int s = hsv.s;
+ int v = hsv.v;
+ rgb_color rgb = {0, 0, 0};
+
+ if (v == 0)
+ return rgb;
+
+ // sextant = 0 .. 5
+ int sextant = (h*6)/256;
+ // f = 0 .. 42
+ int f = h - (sextant*256)/6;
+
+ int p = (v * (256 - s))/256;
+ int q = (v * (256*43 - s*f))/(256*43);
+ int t = (v * (256*43 - s*(43-f)))/(256*43);
+
+ // Corrige les erreurs dues aux arrondis
+ p = max(min(p, 255), 0);
+ q = max(min(q, 255), 0);
+ t = max(min(t, 255), 0);
+
+ switch(sextant){
+ case 0: rgb.r = v; rgb.g = t; rgb.b = p; break;
+ case 1: rgb.r = q; rgb.g = v; rgb.b = p; break;
+ case 2: rgb.r = p; rgb.g = v; rgb.b = t; break;
+ case 3: rgb.r = p; rgb.g = q; rgb.b = v; break;
+ case 4: rgb.r = t; rgb.g = p; rgb.b = v; break;
+ default:rgb.r = v; rgb.g = p; rgb.b = q; break;
+ }
+ return rgb;
+}
+
+
+hsv_color rgb2hsv(rgb_color rgb)
+{
+ // From : http://www.ruinelli.ch/rgb-to-hsv
+ hsv_color hsv = {0, 0, 0};
+ int min, max, delta;
+
+ min = min3(rgb.r, rgb.g, rgb.b);
+ max = max3(rgb.r, rgb.g, rgb.b);
+
+ if(max==0) {
+ hsv.h = 0;
+ hsv.s = 0;
+ hsv.v = 0;
+ return hsv;
+ }
+
+ hsv.v = max;
+ delta = max - min;
+
+ hsv.s = (delta)*255 / max;
+
+ if(rgb.r == max)
+ hsv.h = (rgb.g - rgb.b)*42/delta; // between yellow & magenta
+ else if(rgb.g == max)
+ hsv.h = 120 + (rgb.b - rgb.r)*42/delta; // between cyan & yellow
+ else
+ hsv.h = 240 + (rgb.r - rgb.g)*42/delta; // between magenta & cyan
+
+ return hsv;
+} \ No newline at end of file
diff --git a/keyboards/handwired/practice60/hsv2rgb.h b/keyboards/handwired/practice60/hsv2rgb.h
new file mode 100644
index 000000000..99566c32c
--- /dev/null
+++ b/keyboards/handwired/practice60/hsv2rgb.h
@@ -0,0 +1,23 @@
+/* hsv2rgb.h
+ * Convert Hue Saturation Value to Red Green Blue
+ *
+ * Programme de convertion d'une information HSV en RGB
+ */
+#ifndef HSV2RGB_H
+#define HSV2RGB_H
+
+typedef struct {
+ unsigned char h;
+ unsigned char s;
+ unsigned char v;
+} hsv_color;
+
+typedef struct {
+ unsigned char r;
+ unsigned char g;
+ unsigned char b;
+} rgb_color;
+
+rgb_color hsv2rgb(hsv_color hsv);
+
+#endif \ No newline at end of file
diff --git a/keyboards/handwired/practice60/info.json b/keyboards/handwired/practice60/info.json
new file mode 100644
index 000000000..cffbcf492
--- /dev/null
+++ b/keyboards/handwired/practice60/info.json
@@ -0,0 +1,74 @@
+{
+ "keyboard_name": "Practice 60",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"label":"`", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"[", "x":11.5, "y":1},
+ {"label":"]", "x":12.5, "y":1},
+ {"label":"\\", "x":13.5, "y":1, "w":1.5},
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"label":"Space", "x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"GUI", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/practice60/keymaps/default/keymap.c b/keyboards/handwired/practice60/keymaps/default/keymap.c
new file mode 100644
index 000000000..ac6e75509
--- /dev/null
+++ b/keyboards/handwired/practice60/keymaps/default/keymap.c
@@ -0,0 +1,48 @@
+/*
+Copyright 2012,2013 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BASE 0
+#define _FN1 1
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_60_ansi(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, MT(MOD_LSFT, 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(_FN1), KC_RCTL
+ ),
+
+ [_FN1] = LAYOUT_60_ansi(
+ KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, \
+ RGB_TOG, RGB_MOD, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ BL_INC, BL_DEC, BL_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/handwired/practice60/ld/MKL26Z64.ld b/keyboards/handwired/practice60/ld/MKL26Z64.ld
new file mode 100644
index 000000000..c4ca8b874
--- /dev/null
+++ b/keyboards/handwired/practice60/ld/MKL26Z64.ld
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2013-2016 Fabio Utzig, http://fabioutzig.com
+ * (C) 2016 flabbergast <s3+flabbergast@sdfeu.org>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+/*
+ * KL26Z64 memory setup.
+ */
+MEMORY
+{
+ flash0 : org = 0x00000000, len = 0x100
+ flash1 : org = 0x00000400, len = 0x10
+ flash2 : org = 0x00000410, len = 62k - 0x410
+ flash3 : org = 0x0000F800, len = 2k
+ flash4 : org = 0x00000000, len = 0
+ flash5 : org = 0x00000000, len = 0
+ flash6 : org = 0x00000000, len = 0
+ flash7 : org = 0x00000000, len = 0
+ ram0 : org = 0x1FFFF800, len = 8k
+ ram1 : org = 0x00000000, len = 0
+ ram2 : org = 0x00000000, len = 0
+ ram3 : org = 0x00000000, len = 0
+ ram4 : org = 0x00000000, len = 0
+ ram5 : org = 0x00000000, len = 0
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
+}
+
+/* Flash region for the configuration bytes.*/
+SECTIONS
+{
+ .cfmprotect : ALIGN(4) SUBALIGN(4)
+ {
+ KEEP(*(.cfmconfig))
+ } > flash1
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash2);
+REGION_ALIAS("XTORS_FLASH_LMA", flash2);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash2);
+REGION_ALIAS("TEXT_FLASH_LMA", flash2);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash2);
+REGION_ALIAS("RODATA_FLASH_LMA", flash2);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash2);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash2);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash2);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash2);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+__eeprom_workarea_start__ = ORIGIN(flash3);
+__eeprom_workarea_size__ = LENGTH(flash3);
+__eeprom_workarea_end__ = __eeprom_workarea_start__ + __eeprom_workarea_size__;
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/handwired/practice60/ld/STM32F103x8_stm32duino_bootloader.ld b/keyboards/handwired/practice60/ld/STM32F103x8_stm32duino_bootloader.ld
new file mode 100644
index 000000000..d0688ef60
--- /dev/null
+++ b/keyboards/handwired/practice60/ld/STM32F103x8_stm32duino_bootloader.ld
@@ -0,0 +1,88 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/*
+ * ST32F103xB memory setup for use with the maplemini bootloader.
+ * You will have to
+ * #define CORTEX_VTOR_INIT 0x5000
+ * in your projects chconf.h
+ */
+MEMORY
+{
+ flash0 : org = 0x08002000, len = 64k - 0x2000
+ flash1 : org = 0x00000000, len = 0
+ flash2 : org = 0x00000000, len = 0
+ flash3 : org = 0x00000000, len = 0
+ flash4 : org = 0x00000000, len = 0
+ flash5 : org = 0x00000000, len = 0
+ flash6 : org = 0x00000000, len = 0
+ flash7 : org = 0x00000000, len = 0
+ ram0 : org = 0x20000000, len = 20k
+ ram1 : org = 0x00000000, len = 0
+ ram2 : org = 0x00000000, len = 0
+ ram3 : org = 0x00000000, len = 0
+ ram4 : org = 0x00000000, len = 0
+ ram5 : org = 0x00000000, len = 0
+ ram6 : org = 0x00000000, len = 0
+ ram7 : org = 0x00000000, len = 0
+}
+
+/* For each data/text section two region are defined, a virtual region
+ and a load region (_LMA suffix).*/
+
+/* Flash region to be used for exception vectors.*/
+REGION_ALIAS("VECTORS_FLASH", flash0);
+REGION_ALIAS("VECTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for constructors and destructors.*/
+REGION_ALIAS("XTORS_FLASH", flash0);
+REGION_ALIAS("XTORS_FLASH_LMA", flash0);
+
+/* Flash region to be used for code text.*/
+REGION_ALIAS("TEXT_FLASH", flash0);
+REGION_ALIAS("TEXT_FLASH_LMA", flash0);
+
+/* Flash region to be used for read only data.*/
+REGION_ALIAS("RODATA_FLASH", flash0);
+REGION_ALIAS("RODATA_FLASH_LMA", flash0);
+
+/* Flash region to be used for various.*/
+REGION_ALIAS("VARIOUS_FLASH", flash0);
+REGION_ALIAS("VARIOUS_FLASH_LMA", flash0);
+
+/* Flash region to be used for RAM(n) initialization data.*/
+REGION_ALIAS("RAM_INIT_FLASH_LMA", flash0);
+
+/* RAM region to be used for Main stack. This stack accommodates the processing
+ of all exceptions and interrupts.*/
+REGION_ALIAS("MAIN_STACK_RAM", ram0);
+
+/* RAM region to be used for the process stack. This is the stack used by
+ the main() function.*/
+REGION_ALIAS("PROCESS_STACK_RAM", ram0);
+
+/* RAM region to be used for data segment.*/
+REGION_ALIAS("DATA_RAM", ram0);
+REGION_ALIAS("DATA_RAM_LMA", flash0);
+
+/* RAM region to be used for BSS segment.*/
+REGION_ALIAS("BSS_RAM", ram0);
+
+/* RAM region to be used for the default heap.*/
+REGION_ALIAS("HEAP_RAM", ram0);
+
+/* Generic rules inclusion.*/
+INCLUDE rules.ld
diff --git a/keyboards/handwired/practice60/led.c b/keyboards/handwired/practice60/led.c
new file mode 100644
index 000000000..f15baed16
--- /dev/null
+++ b/keyboards/handwired/practice60/led.c
@@ -0,0 +1,51 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "hal.h"
+#include "backlight.h"
+#include "led.h"
+#include "printf.h"
+
+void backlight_init_ports(void) {
+ printf("backlight_init_ports()\n");
+ #ifdef BACKLIGHT_ENABLE
+ palSetPadMode(GPIOA, 8, PAL_MODE_OUTPUT_PUSHPULL);
+ palSetPad(GPIOA, 8);
+ #endif
+}
+
+void backlight_set(uint8_t level) {
+ printf("backlight_set(%d)\n", level);
+ #ifdef BACKLIGHT_ENABLE
+ if (level == 0) {
+ // Turn backlight off
+ palSetPad(GPIOA, 8);
+ } else {
+ // Turn backlight on
+ palClearPad(GPIOA, 8);
+ }
+ #endif
+}
+
+void led_set(uint8_t usb_led)
+{
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ palClearPad(GPIOC, 13);
+ } else {
+ palSetPad(GPIOC, 13);
+ }
+}
diff --git a/keyboards/handwired/practice60/mcuconf.h b/keyboards/handwired/practice60/mcuconf.h
new file mode 100644
index 000000000..9945e7408
--- /dev/null
+++ b/keyboards/handwired/practice60/mcuconf.h
@@ -0,0 +1,209 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+#define STM32F103_MCUCONF
+
+/*
+ * STM32F103 drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED FALSE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV1
+#define STM32_PLLMUL_VALUE 9
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV2
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_USB_CLOCK_REQUIRED TRUE
+#define STM32_USBPRE STM32_USBPRE_DIV1P5
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_RTCSEL STM32_RTCSEL_HSEDIV
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_ADC1_IRQ_PRIORITY 6
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1 FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY 11
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM5 FALSE
+#define STM32_GPT_USE_TIM8 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM5_IRQ_PRIORITY 7
+#define STM32_GPT_TIM8_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 5
+#define STM32_I2C_I2C2_IRQ_PRIORITY 5
+#define STM32_I2C_I2C1_DMA_PRIORITY 3
+#define STM32_I2C_I2C2_DMA_PRIORITY 3
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM5 FALSE
+#define STM32_ICU_USE_TIM8 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM5_IRQ_PRIORITY 7
+#define STM32_ICU_TIM8_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_USE_TIM4 FALSE
+#define STM32_PWM_USE_TIM5 FALSE
+#define STM32_PWM_USE_TIM8 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM5_IRQ_PRIORITY 7
+#define STM32_PWM_TIM8_IRQ_PRIORITY 7
+
+/*
+ * RTC driver system settings.
+ */
+#define STM32_RTC_IRQ_PRIORITY 15
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USE_USART3 FALSE
+#define STM32_SERIAL_USE_UART4 FALSE
+#define STM32_SERIAL_USE_UART5 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART3_PRIORITY 12
+#define STM32_SERIAL_UART4_PRIORITY 12
+#define STM32_SERIAL_UART5_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 TRUE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USE_USART3 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART3_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART3_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
+
+#endif /* _MCUCONF_H_ */
diff --git a/keyboards/handwired/practice60/practice60.c b/keyboards/handwired/practice60/practice60.c
new file mode 100644
index 000000000..5d0fffbd0
--- /dev/null
+++ b/keyboards/handwired/practice60/practice60.c
@@ -0,0 +1,32 @@
+
+#include "practice60.h"
+
+#include "ch.h"
+#include "hal.h"
+
+#include "underglow.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+
+/* generic STM32F103C8T6 board */
+#ifdef BOARD_GENERIC_STM32_F103
+#define LED_ON() do { palClearPad(GPIOC, 13) ;} while (0)
+#define LED_OFF() do { palSetPad(GPIOC, 13); } while (0)
+#define LED_TGL() do { palTogglePad(GPIOC, 13); } while (0)
+#endif
+
+void matrix_init_kb(void){
+ /* MOSI pin*/
+ palSetPadMode(GPIOB, 15, PAL_MODE_STM32_ALTERNATE_PUSHPULL);
+
+ LED_ON();
+ palSetPad(GPIOA, 8);
+ wait_ms(500);
+ palClearPad(GPIOA, 8);
+ LED_OFF();
+
+ leds_init();
+
+
+}
diff --git a/keyboards/handwired/practice60/practice60.h b/keyboards/handwired/practice60/practice60.h
new file mode 100644
index 000000000..5ebba8fb8
--- /dev/null
+++ b/keyboards/handwired/practice60/practice60.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_60_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, \
+ K40, K41, K42, K43, K49, K4A, K4B, K4C \
+) { \
+ { 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, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, KC_NO }, \
+ { K40, K41, K42, K43, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, K4C, KC_NO } \
+}
diff --git a/keyboards/handwired/practice60/readme.md b/keyboards/handwired/practice60/readme.md
new file mode 100644
index 000000000..b23d7de69
--- /dev/null
+++ b/keyboards/handwired/practice60/readme.md
@@ -0,0 +1,3 @@
+# Practice 60
+
+Blue Pill STM32F103C8T6 based 60% board \ No newline at end of file
diff --git a/keyboards/handwired/practice60/rules.mk b/keyboards/handwired/practice60/rules.mk
new file mode 100644
index 000000000..915b07320
--- /dev/null
+++ b/keyboards/handwired/practice60/rules.mk
@@ -0,0 +1,56 @@
+# project specific files
+SRC = led.c \
+ underglow.c \
+ hsv2rgb.c
+
+# GENERIC STM32F103C8T6 board - stm32duino bootloader
+OPT_DEFS = -DCORTEX_VTOR_INIT=0x2000
+MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
+BOARD = GENERIC_STM32_F103
+
+# OPT_DEFS =
+# MCU_LDSCRIPT = STM32F103x8
+# BOARD = GENERIC_STM32_F103
+
+## chip/board settings
+# the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F1xx
+# linker script to use
+# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+# startup code to use
+# is should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f1xx
+# it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+# Cortex version
+# Teensy LC is cortex-m0; Teensy 3.x are cortex-m4
+MCU = cortex-m3
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+# If you want to be able to jump to bootloader from firmware on STM32 MCUs,
+# set the correct BOOTLOADER_ADDRESS. Either set it here, or define it in
+# ./bootloader_defs.h or in ./boards/<FOO>/bootloader_defs.h (if you have
+# a custom board definition that you plan to reuse).
+# If you're not setting it here, leave it commented out.
+# It is chip dependent, the correct number can be looked up here (page 175):
+# http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+# This also requires a patch to chibios:
+# <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+#STM32_BOOTLOADER_ADDRESS = 0x1FFFC800
+
+
+#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes
+
+LAYOUTS = 60_ansi
+
+DEFAULT_FOLDER = handwired/practice60
diff --git a/keyboards/handwired/practice60/underglow.c b/keyboards/handwired/practice60/underglow.c
new file mode 100644
index 000000000..1383af189
--- /dev/null
+++ b/keyboards/handwired/practice60/underglow.c
@@ -0,0 +1,157 @@
+#include "ch.h"
+#include "hal.h"
+
+#include "hsv2rgb.h"
+#include "underglow.h"
+
+#define BYTES_FOR_LED_BYTE 4
+#define NB_COLORS 3
+#define BYTES_FOR_LED BYTES_FOR_LED_BYTE*NB_COLORS
+#define DATA_SIZE BYTES_FOR_LED*NB_LEDS
+#define RESET_SIZE 200
+#define PREAMBLE_SIZE 4
+
+// Define the spi your LEDs are plugged to here
+#define LEDS_SPI SPID2
+// Define the number of LEDs you wish to control in your LED strip
+#define NB_LEDS 8
+
+#define LED_SPIRAL 1
+
+static uint8_t txbuf[PREAMBLE_SIZE + DATA_SIZE + RESET_SIZE];
+static uint8_t get_protocol_eq(uint8_t data, int pos);
+
+/*
+ * This lib is meant to be used asynchronously, thus the colors contained in
+ * the txbuf will be sent in loop, so that the colors are always the ones you
+ * put in the table (the user thus have less to worry about)
+ *
+ * Since the data are sent via DMA, and the call to spiSend is a blocking one,
+ * the processor ressources are not used to much, if you see your program being
+ * too slow, simply add a:
+ * chThdSleepMilliseconds(x);
+ * after the spiSend, where you increment x untill you are satisfied with your
+ * program speed, another trick may be to lower this thread priority : your call
+ */
+static THD_WORKING_AREA(LEDS_THREAD_WA, 128);
+static THD_FUNCTION(ledsThread, arg) {
+ (void) arg;
+ while(1){
+ spiSend(&LEDS_SPI, PREAMBLE_SIZE + DATA_SIZE + RESET_SIZE, txbuf);
+ }
+}
+
+#if LED_SPIRAL
+/*
+ * 'Led spiral' is a simple demo in which we put all the leds to the same
+ * color, where this color does all the hsv circle in loop.
+ * If you want to launch the thread that will chage the led colors to the
+ * appropriate value, simply set LED_SPIRAL to 1.
+ */
+static THD_WORKING_AREA(HSVTRANS_WA, 128);
+static THD_FUNCTION(hsv_transThread, arg){
+ (void) arg;
+ hsv_color color = {0, 255, 127};
+ while(1){
+ color.h += 1;
+ color.h %= 256;
+ set_leds_color_hsv(color);
+ chThdSleepMilliseconds(50);
+ }
+}
+#endif
+
+static const SPIConfig spicfg = {
+ NULL,
+ GPIOB,
+ 15,
+ SPI_CR1_BR_1|SPI_CR1_BR_0 // baudrate : fpclk / 8 => 1tick is 0.32us
+};
+
+/*
+ * Function used to initialize the driver.
+ *
+ * Starts by shutting off all the LEDs.
+ * Then gets access on the LED_SPI driver.
+ * May eventually launch an animation on the LEDs (e.g. a thread setting the
+ * txbuff values)
+ */
+void leds_init(void){
+ for(int i = 0; i < RESET_SIZE; i++)
+ txbuf[DATA_SIZE+i] = 0x00;
+ for (int i=0; i<PREAMBLE_SIZE; i++)
+ txbuf[i] = 0x00;
+ spiAcquireBus(&LEDS_SPI); /* Acquire ownership of the bus. */
+ spiStart(&LEDS_SPI, &spicfg); /* Setup transfer parameters. */
+ spiSelect(&LEDS_SPI); /* Slave Select assertion. */
+ chThdCreateStatic(LEDS_THREAD_WA, sizeof(LEDS_THREAD_WA),NORMALPRIO, ledsThread, NULL);
+#if LED_SPIRAL
+ chThdCreateStatic(HSVTRANS_WA, sizeof(HSVTRANS_WA),
+ NORMALPRIO, hsv_transThread, NULL);
+#endif
+}
+
+/*
+ * As the trick here is to use the SPI to send a huge pattern of 0 and 1 to
+ * the ws2812b protocol, we use this helper function to translate bytes into
+ * 0s and 1s for the LED (with the appropriate timing).
+ */
+static uint8_t get_protocol_eq(uint8_t data, int pos){
+ uint8_t eq = 0;
+ if (data & (1 << (2*(3-pos))))
+ eq = 0b1110;
+ else
+ eq = 0b1000;
+ if (data & (2 << (2*(3-pos))))
+ eq += 0b11100000;
+ else
+ eq += 0b10000000;
+ return eq;
+}
+
+/*
+ * If you want to set a LED's color in the HSV color space, simply call this
+ * function with a hsv_color containing the desired color and the index of the
+ * led on the LED strip (starting from 0, the first one being the closest the
+ * first plugged to the board)
+ *
+ * Only set the color of the LEDs through the functions given by this API
+ * (unless you really know what you are doing)
+ */
+void set_led_color_hsv(hsv_color color, int pos){
+ set_led_color_rgb(hsv2rgb(color), pos);
+}
+
+/*
+ * If you want to set a LED's color in the RGB color space, simply call this
+ * function with a hsv_color containing the desired color and the index of the
+ * led on the LED strip (starting from 0, the first one being the closest the
+ * first plugged to the board)
+ *
+ * Only set the color of the LEDs through the functions given by this API
+ * (unless you really know what you are doing)
+ */
+void set_led_color_rgb(rgb_color color, int pos){
+ for(int j = 0; j < 4; j++)
+ txbuf[PREAMBLE_SIZE + BYTES_FOR_LED*pos + j] = get_protocol_eq(color.g, j);
+ for(int j = 0; j < 4; j++)
+ txbuf[PREAMBLE_SIZE + BYTES_FOR_LED*pos + BYTES_FOR_LED_BYTE+j] = get_protocol_eq(color.r, j);
+ for(int j = 0; j < 4; j++)
+ txbuf[PREAMBLE_SIZE + BYTES_FOR_LED*pos + BYTES_FOR_LED_BYTE*2+j] = get_protocol_eq(color.b, j);
+}
+
+/*
+ * Same as the two above, but sets all the LEDs in the LED strip (HSV)
+ */
+void set_leds_color_hsv(hsv_color color){
+ for(int i = 0; i < NB_LEDS; i++)
+ set_led_color_hsv(color, i);
+}
+
+/*
+ * Same as the two above, but sets all the LEDs in the LED strip (RGB)
+ */
+void set_leds_color_rgb(rgb_color color){
+ for(int i = 0; i < NB_LEDS; i++)
+ set_led_color_rgb(color, i);
+} \ No newline at end of file
diff --git a/keyboards/handwired/practice60/underglow.h b/keyboards/handwired/practice60/underglow.h
new file mode 100644
index 000000000..ff1195279
--- /dev/null
+++ b/keyboards/handwired/practice60/underglow.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#include "hsv2rgb.h"
+
+void set_leds_color_hsv(hsv_color color);
+void set_leds_color_rgb(rgb_color color);
+void set_led_color_hsv(hsv_color color, int pos);
+void set_led_color_rgb(rgb_color color, int pos);
+
+void leds_init(void);
diff --git a/keyboards/handwired/prime_exl/config.h b/keyboards/handwired/prime_exl/config.h
new file mode 100644
index 000000000..e34fbb8cc
--- /dev/null
+++ b/keyboards/handwired/prime_exl/config.h
@@ -0,0 +1,56 @@
+/*
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4024
+#define DEVICE_VER 0x0001
+#define MANUFACTURER PrimeKB
+#define PRODUCT Prime_EXL
+#define DESCRIPTION Ergo
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 9
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS { B1, E6, D5, D6, B4, D7, D4, F1, F0, B0 }
+#define MATRIX_COL_PINS { D0, B3, B2, D1, D2, D3, F7, F6, F5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_LEVELS 5
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
diff --git a/keyboards/handwired/prime_exl/info.json b/keyboards/handwired/prime_exl/info.json
new file mode 100644
index 000000000..edab78860
--- /dev/null
+++ b/keyboards/handwired/prime_exl/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Prime_EXL",
+ "url": "https://www.primekb.com",
+ "maintainer": "holtenc",
+ "width": 18,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0,"y":0,"w":1,"h":1}, {"x":1,"y":0,"w":1,"h":1}, {"x":2,"y":0,"w":1,"h":1}, {"x":3,"y":0,"w":1,"h":1}, {"x":4,"y":0,"w":1,"h":1}, {"x":5,"y":0,"w":1,"h":1}, {"x":6.5,"y":0,"w":1,"h":1}, {"x":7.5,"y":0,"w":1,"h":1}, {"x":8.5,"y":0,"w":1,"h":1}, {"x":9.5,"y":0,"w":1,"h":1}, {"x":10.5,"y":0,"w":1,"h":1}, {"x":11.5,"y":0,"w":1,"h":1}, {"x":13.75,"y":0,"w":1,"h":1}, {"x":14.75,"y":0,"w":1,"h":1}, {"x":15.75,"y":0,"w":1,"h":1}, {"x":16.75,"y":0,"w":1,"h":1}, {"x":17.75,"y":0,"w":1,"h":1}, {"x":18.75,"y":0,"w":2,"h":1}, {"x":0,"y":1,"w":1,"h":1}, {"x":1,"y":1,"w":1,"h":1}, {"x":2,"y":1,"w":1,"h":1}, {"x":3,"y":1,"w":1,"h":1}, {"x":4,"y":1,"w":1,"h":1}, {"x":5,"y":1,"w":1,"h":1}, {"x":6.5,"y":1,"w":1.26,"h":1}, {"x":7.75,"y":1,"w":1,"h":1}, {"x":8.75,"y":1,"w":1,"h":1}, {"x":9.75,"y":1,"w":1,"h":1}, {"x":10.75,"y":1,"w":1,"h":1}, {"x":11.75,"y":1,"w":1,"h":1}, {"x":14,"y":1,"w":1,"h":1}, {"x":15,"y":1,"w":1,"h":1}, {"x":16,"y":1,"w":1,"h":1}, {"x":17,"y":1,"w":1,"h":1}, {"x":18,"y":1,"w":1,"h":1}, {"x":19,"y":1,"w":1.75,"h":1}, {"x":0,"y":2,"w":1,"h":1}, {"x":1,"y":2,"w":1,"h":1}, {"x":2,"y":2,"w":1,"h":1}, {"x":3,"y":2,"w":1,"h":1}, {"x":4,"y":2,"w":1,"h":1}, {"x":5,"y":2,"w":1,"h":1}, {"x":6.5,"y":2,"w":1.75,"h":1}, {"x":8.25,"y":2,"w":1,"h":1}, {"x":9.25,"y":2,"w":1,"h":1}, {"x":10.25,"y":2,"w":1,"h":1}, {"x":11.25,"y":2,"w":1,"h":1}, {"x":12.25,"y":2,"w":1,"h":1}, {"x":13.5,"y":2,"w":1,"h":1}, {"x":14.5,"y":2,"w":1,"h":1}, {"x":15.5,"y":2,"w":1,"h":1}, {"x":16.5,"y":2,"w":1,"h":1}, {"x":17.5,"y":2,"w":1,"h":1}, {"x":18.5,"y":2,"w":1,"h":1}, {"x":19.5,"y":2,"w":1.25,"h":1}, {"x":0,"y":3,"w":1,"h":1}, {"x":1,"y":3,"w":1,"h":1}, {"x":2,"y":3,"w":1,"h":1}, {"x":3,"y":3,"w":1,"h":1}, {"x":4,"y":3,"w":1,"h":1}, {"x":5,"y":3,"w":1,"h":1}, {"x":6.5,"y":3,"w":1.25,"h":1}, {"x":7.75,"y":3,"w":1.25,"h":1}, {"x":9,"y":3,"w":1,"h":1}, {"x":10,"y":3,"w":1,"h":1}, {"x":11,"y":3,"w":2,"h":1}, {"x":13.5,"y":3,"w":2,"h":1}, {"x":15.5,"y":3,"w":1,"h":1}, {"x":16.5,"y":3,"w":1,"h":1}, {"x":17.5,"y":3,"w":1.5,"h":1}, {"x":19,"y":3,"w":1.5,"h":1}, {"x":0,"y":4,"w":1,"h":1}, {"x":1,"y":4,"w":1,"h":1}, {"x":2,"y":4,"w":1,"h":1}, {"x":3,"y":4,"w":1,"h":1}, {"x":4,"y":4,"w":1,"h":1}, {"x":5,"y":4,"w":1,"h":1}]
+ }
+ }
+}
diff --git a/keyboards/handwired/prime_exl/keymaps/default/config.h b/keyboards/handwired/prime_exl/keymaps/default/config.h
new file mode 100644
index 000000000..83bd38a81
--- /dev/null
+++ b/keyboards/handwired/prime_exl/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* 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/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/handwired/prime_exl/keymaps/default/keymap.c b/keyboards/handwired/prime_exl/keymaps/default/keymap.c
new file mode 100644
index 000000000..0e1c60d4a
--- /dev/null
+++ b/keyboards/handwired/prime_exl/keymaps/default/keymap.c
@@ -0,0 +1,143 @@
+/* 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
+
+// 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_NLCK, KC_LPRN, KC_RPRN, KC_PSLS, KC_PAST, KC_BSPC, KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_F1, KC_F2, KC_P7, KC_P8, KC_P9, KC_DEL, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ KC_F3, KC_F4, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(3), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT,
+ KC_F5, KC_F6, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_LCTL, KC_LALT, KC_LBRC, KC_RBRC, MO(1), KC_SPC, KC_MINS, KC_EQL, KC_LGUI, MO(4),
+ KC_F7, KC_F8, TO(2), KC_PDOT, KC_P0, KC_PENT
+ ),
+
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_SCLN, KC_BSLS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS,
+ BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [2] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_F9, 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_Q, KC_W, KC_E, KC_R, KC_T, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, MO(3), KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LCTL, KC_LALT, KC_LBRC, KC_RBRC, MO(5), KC_SPC, KC_MINS, KC_EQL, KC_LGUI, MO(4),
+ KC_LCTL, KC_LALT, TO(0), KC_P, KC_H, KC_SPC
+ ),
+
+ [3] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [4] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [5] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_DEL,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_SCLN, KC_BSLS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS,
+ BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ // set CapsLock LED to output and low
+ DDRC |= (1 << 6);
+ PORTC &= ~(1 << 6);
+ // set NumLock LED to output and low
+ DDRB |= (1 << 6);
+ PORTB &= ~(1 << 6);
+ // set ScrollLock LED to output and low
+ DDRB |= (1 << 5);
+ PORTB &= ~(1 << 5);
+}
+
+void matrix_scan_user(void) {
+
+}
+
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ PORTB |= (1<<6);
+ } else {
+ PORTB &= ~(1<<6);
+ }
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ PORTB |= (1<<5);
+ } else {
+ PORTB &= ~(1<<5);
+ }
+ /*
+ if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+ PORTC |= (1<<6);
+ } else {
+ PORTC &= ~(1<<6);
+ }
+ */
+}
+
+//function for layer indicator LED
+uint32_t layer_state_set_user(uint32_t state)
+{
+ if (biton32(state) == 2) {
+ PORTC |= (1<<6);
+ } else {
+ PORTC &= ~(1<<6);
+ }
+ return state;
+}
diff --git a/keyboards/handwired/prime_exl/keymaps/default/readme.md b/keyboards/handwired/prime_exl/keymaps/default/readme.md
new file mode 100644
index 000000000..c2278bd46
--- /dev/null
+++ b/keyboards/handwired/prime_exl/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for prime_exl \ No newline at end of file
diff --git a/keyboards/handwired/prime_exl/prime_exl.c b/keyboards/handwired/prime_exl/prime_exl.c
new file mode 100644
index 000000000..d088f6ad1
--- /dev/null
+++ b/keyboards/handwired/prime_exl/prime_exl.c
@@ -0,0 +1,43 @@
+/* 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 "prime_exl.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/handwired/prime_exl/prime_exl.h b/keyboards/handwired/prime_exl/prime_exl.h
new file mode 100644
index 000000000..727db5db8
--- /dev/null
+++ b/keyboards/handwired/prime_exl/prime_exl.h
@@ -0,0 +1,40 @@
+/* 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/>.
+ */
+#ifndef PRIME_EXL_H
+#define PRIME_EXL_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K040, K050, K041, K051, K042, K052, K043, K053, K044, K054, K045, K055, K046, K056, K047, K057, K048, K058, \
+ K030, K060, K031, K061, K032, K062, K033, K063, K034, K064, K035, K065, K036, K066, K037, K067, K038, K068, \
+ K020, K070, K021, K071, K022, K072, K023, K073, K024, K074, K025, K075, K085, K026, K076, K027, K077, K028, K078, \
+ K010, K080, K011, K081, K012, K082, K013, K083, K014, K084, K015, K016, K086, K017, K087, K018, \
+ K000, K090, K001, K091, K002, K092 \
+) { \
+ { K000, K001, K002, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K010, K011, K012, K013, K014, K015, K016, K017, K018 }, \
+ { K020, K021, K022, K023, K024, K025, K026, K027, K028 }, \
+ { K030, K031, K032, K033, K034, K035, K036, K037, K038 }, \
+ { K040, K041, K042, K043, K044, K045, K046, K047, K048 }, \
+ { K050, K051, K052, K053, K054, K055, K056, K057, K058 }, \
+ { K060, K061, K062, K063, K064, K065, K066, K067, K068 }, \
+ { K070, K071, K072, K073, K074, K075, K076, K077, K078 }, \
+ { K080, K081, K082, K083, K084, K085, K086, K087, KC_NO }, \
+ { K090, K091, K092, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
+}
+
+#endif \ No newline at end of file
diff --git a/keyboards/handwired/prime_exl/readme.md b/keyboards/handwired/prime_exl/readme.md
new file mode 100644
index 000000000..f99cba004
--- /dev/null
+++ b/keyboards/handwired/prime_exl/readme.md
@@ -0,0 +1,15 @@
+# Prime_EXL
+
+![Prime_EXL](https://i.imgur.com/3t524g8.jpg)
+
+An ergonomic 45% keyboard with a macro/numpad added to the left side.
+
+Keyboard Maintainer: [Holtenc](https://github.com/holtenc/)
+Hardware Supported: Prime_EXL PCB, ATMega32u4
+Hardware Availability: Prototype
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/prime_exl: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/prime_exl/rules.mk b/keyboards/handwired/prime_exl/rules.mk
new file mode 100644
index 000000000..5cce4e811
--- /dev/null
+++ b/keyboards/handwired/prime_exl/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 = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h
index ea5f2b76e..dca0aec2e 100644
--- a/keyboards/handwired/promethium/config.h
+++ b/keyboards/handwired/promethium/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -159,27 +158,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MAX_VOLTAGE 4.2
#define MIN_VOLTAGE 3.2
-#define ___ KC_NO
-
-#define KEYMAP_CUSTOM( \
- k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
- k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
- k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
- k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, \
- tp1, tp2, tp3 \
-) \
-{ \
- {k11, k12, k13, k14, k15, k16}, \
- {k21, k22, k23, k24, k25, k26}, \
- {k31, k32, k33, k34, k35, k36}, \
- {k41, k42, k43, k44, k45, k46}, \
- {k17, k18, k19, k1a, k1b, k1c}, \
- {k27, k28, k29, k2a, k2b, k2c}, \
- {k37, k38, k39, k3a, k3b, k3c}, \
- {k47, k48, k49, k4a, k4b, k4c}, \
- {tp1, tp2, tp3, ___, ___, ___} \
-}
-
#ifndef __ASSEMBLER__ // assembler doesn't like enum in .h file
enum led_sequence {
LED_IND_LINUX,
@@ -351,6 +329,3 @@ enum led_sequence {
#define PS2_USART_ERROR (UCSR1A & ((1<<FE1) | (1<<DOR1) | (1<<UPE1)))
#define PS2_USART_RX_VECT USART1_RX_vect
#endif
-
-
-#endif
diff --git a/keyboards/handwired/promethium/info.json b/keyboards/handwired/promethium/info.json
new file mode 100644
index 000000000..2742ffa64
--- /dev/null
+++ b/keyboards/handwired/promethium/info.json
@@ -0,0 +1,68 @@
+{
+ "keyboard_name": "Promethium51",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "label": "k11", "x": 0, "y": 0.50 },
+ { "label": "k12", "x": 1, "y": 0.30 },
+ { "label": "k13", "x": 2, "y": 0.15 },
+ { "label": "k14", "x": 3, "y": 0 },
+ { "label": "k15", "x": 4, "y": 0.15 },
+ { "label": "k16", "x": 5, "y": 0.15 },
+ { "label": "k17", "x": 10, "y": 0.15 },
+ { "label": "k18", "x": 11, "y": 0.15 },
+ { "label": "k19", "x": 12, "y": 0 },
+ { "label": "k1a", "x": 13, "y": 0.15 },
+ { "label": "k1b", "x": 14, "y": 0.30 },
+ { "label": "k1c", "x": 15, "y": 0.50 },
+
+ { "label": "k21", "x": 0, "y": 1.50 },
+ { "label": "k22", "x": 1, "y": 1.30 },
+ { "label": "k23", "x": 2, "y": 1.15 },
+ { "label": "k24", "x": 3, "y": 1 },
+ { "label": "k25", "x": 4, "y": 1.15 },
+ { "label": "k26", "x": 5, "y": 1.15 },
+ { "label": "k27", "x": 10, "y": 1.15 },
+ { "label": "k28", "x": 11, "y": 1.15 },
+ { "label": "k29", "x": 12, "y": 1 },
+ { "label": "k2a", "x": 13, "y": 1.15 },
+ { "label": "k2b", "x": 14, "y": 1.30 },
+ { "label": "k2c", "x": 15, "y": 1.50 },
+
+ { "label": "k31", "x": 0, "y": 2.50 },
+ { "label": "k32", "x": 1, "y": 2.30 },
+ { "label": "k33", "x": 2, "y": 2.15 },
+ { "label": "k34", "x": 3, "y": 2 },
+ { "label": "k35", "x": 4, "y": 2.15 },
+ { "label": "k36", "x": 5, "y": 2.15 },
+ { "label": "k37", "x": 10, "y": 2.15 },
+ { "label": "k38", "x": 11, "y": 2.15 },
+ { "label": "k39", "x": 12, "y": 2 },
+ { "label": "k3a", "x": 13, "y": 2.15 },
+ { "label": "k3b", "x": 14, "y": 2.30 },
+ { "label": "k3c", "x": 15, "y": 2.50 },
+
+ { "label": "k41", "x": 0, "y": 3.50 },
+ { "label": "k42", "x": 1, "y": 3.30 },
+ { "label": "k43", "x": 2, "y": 3.15 },
+ { "label": "k44", "x": 3, "y": 3 },
+ { "label": "k45", "x": 4, "y": 3.15 },
+ { "label": "k46", "x": 5, "y": 3.15 },
+ { "label": "k47", "x": 10, "y": 3.15 },
+ { "label": "k48", "x": 11, "y": 3.15 },
+ { "label": "k49", "x": 12, "y": 3 },
+ { "label": "k4a", "x": 13, "y": 3.15 },
+ { "label": "k4b", "x": 14, "y": 3.30 },
+ { "label": "k4c", "x": 15, "y": 3.50 },
+
+ { "label": "tp1", "x": 6.5, "y": 3.15 },
+ { "label": "tp2", "x": 7.5, "y": 3.15 },
+ { "label": "tp3", "x": 8.5, "y": 3.15 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/promethium/keymaps/default/config.h b/keyboards/handwired/promethium/keymaps/default/config.h
index fa86e2247..0630fd43e 100644
--- a/keyboards/handwired/promethium/keymaps/default/config.h
+++ b/keyboards/handwired/promethium/keymaps/default/config.h
@@ -1,7 +1,4 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
#define PRIYADI_PROMETHIUM
@@ -11,8 +8,6 @@
/* skip bootmagic and eeconfig */
#define BOOTMAGIC_KEY_SKIP KC_SPACE
-#define PREVENT_STUCK_MODIFIERS
-
#define RGBSPS_ENABLE
#define RGBSPS_DEMO_ENABLE
@@ -25,5 +20,3 @@
#define DOUBLESPACE_LAYER_ENABLE
// #define TOLELOT_ENABLE
-
-#endif
diff --git a/keyboards/handwired/promethium/keymaps/default/keymap.c b/keyboards/handwired/promethium/keymaps/default/keymap.c
index e229b67e5..a1ca79f9a 100644
--- a/keyboards/handwired/promethium/keymaps/default/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/default/keymap.c
@@ -686,7 +686,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | Alt | GUI | Punc | Num | Space | Fun |Greek | GUI |AltGr | Ctrl |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = KEYMAP_CUSTOM(
+[_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_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,
@@ -706,7 +706,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
#ifdef LAYOUT_DVORAK
-[_DVORAK] = KEYMAP_CUSTOM(
+[_DVORAK] = LAYOUT(
_______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______,
_______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______,
_______, KC_SLSH, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______,
@@ -728,7 +728,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
#ifdef LAYOUT_COLEMAK
-[_COLEMAK] = KEYMAP_CUSTOM(
+[_COLEMAK] = LAYOUT(
_______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______,
_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, 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_SLSH, _______,
@@ -750,7 +750,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
#ifdef LAYOUT_NORMAN
-[_NORMAN] = KEYMAP_CUSTOM(
+[_NORMAN] = LAYOUT(
_______, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_QUOT, _______,
_______, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, _______,
_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
@@ -772,7 +772,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
#ifdef LAYOUT_WORKMAN
-[_WORKMAN] = KEYMAP_CUSTOM(
+[_WORKMAN] = LAYOUT(
_______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______,
_______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______,
_______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______,
@@ -792,7 +792,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | : | |
* `-----------------------------------------------------------------------------------'
*/
-[_PUNC] = KEYMAP_CUSTOM(
+[_PUNC] = LAYOUT(
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, X(LTEQ), X(GTEQ), _______,
KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, X(NOTEQ),KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______,
KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, X(PLMIN),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______,
@@ -811,7 +811,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | x | | | | | 0 | , | . | : | |
* `-----------------------------------------------------------------------------------'
*/
-[_NUM] = KEYMAP_CUSTOM(
+[_NUM] = LAYOUT(
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_1, KC_2, KC_3, S(KC_D), _______,
KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______,
KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_7, KC_8, KC_9, S(KC_F), _______,
@@ -830,7 +830,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_FUN] = KEYMAP_CUSTOM(
+[_FUN] = LAYOUT(
XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_INS, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______,
_______, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
@@ -849,7 +849,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_GREEKU] = KEYMAP_CUSTOM(
+[_GREEKU] = LAYOUT(
_______, XXXXXXX, XXXXXXX,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______,
_______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), KC_QUOT, _______,
_______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), KC_COMM, KC_DOT, KC_SLSH, _______,
@@ -868,7 +868,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_GREEKL] = KEYMAP_CUSTOM(
+[_GREEKL] = LAYOUT(
_______, XXXXXXX,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______,
_______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), KC_QUOT, _______,
_______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), KC_COMM, KC_DOT, KC_SLSH, _______,
@@ -887,7 +887,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_EMPTY] = KEYMAP_CUSTOM(
+[_EMPTY] = LAYOUT(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
@@ -906,7 +906,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_EMOJI] = KEYMAP_CUSTOM(
+[_EMOJI] = LAYOUT(
X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
@@ -925,7 +925,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_GUI] = KEYMAP_CUSTOM(
+[_GUI] = LAYOUT(
XXXXXXX, G(KC_1), G(KC_2), G(KC_3), G(KC_4), G(KC_5), G(KC_6), G(KC_7), G(KC_8), G(KC_9), G(KC_0), XXXXXXX,
KC_ESC, XXXXXXX, S(KC_TAB),KC_ESC, KC_TAB, XXXXXXX, XXXXXXX, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, KC_SPC, KC_SPC, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
@@ -944,7 +944,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_SYS] = KEYMAP_CUSTOM(
+[_SYS] = LAYOUT(
DEBUG, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, RGBDEMO,
XXXXXXX, FC_TOG, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BT, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
@@ -1365,4 +1365,4 @@ void turn_off_capslock() {
rcv = ps2_host_send(0x01);
}
}
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/handwired/promethium/keymaps/default/rules.mk b/keyboards/handwired/promethium/keymaps/default/rules.mk
index a0d4261fa..5761be517 100644
--- a/keyboards/handwired/promethium/keymaps/default/rules.mk
+++ b/keyboards/handwired/promethium/keymaps/default/rules.mk
@@ -16,7 +16,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_MOUSE_ENABLE = yes
PS2_USE_INT = yes
FAUXCLICKY_ENABLE = yes
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/config.h b/keyboards/handwired/promethium/keymaps/priyadi/config.h
index fa86e2247..0630fd43e 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/config.h
+++ b/keyboards/handwired/promethium/keymaps/priyadi/config.h
@@ -1,7 +1,4 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
#define PRIYADI_PROMETHIUM
@@ -11,8 +8,6 @@
/* skip bootmagic and eeconfig */
#define BOOTMAGIC_KEY_SKIP KC_SPACE
-#define PREVENT_STUCK_MODIFIERS
-
#define RGBSPS_ENABLE
#define RGBSPS_DEMO_ENABLE
@@ -25,5 +20,3 @@
#define DOUBLESPACE_LAYER_ENABLE
// #define TOLELOT_ENABLE
-
-#endif
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
index e229b67e5..a1ca79f9a 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
@@ -686,7 +686,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | Alt | GUI | Punc | Num | Space | Fun |Greek | GUI |AltGr | Ctrl |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = KEYMAP_CUSTOM(
+[_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_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,
@@ -706,7 +706,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
#ifdef LAYOUT_DVORAK
-[_DVORAK] = KEYMAP_CUSTOM(
+[_DVORAK] = LAYOUT(
_______, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, _______,
_______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, _______,
_______, KC_SLSH, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, _______,
@@ -728,7 +728,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
#ifdef LAYOUT_COLEMAK
-[_COLEMAK] = KEYMAP_CUSTOM(
+[_COLEMAK] = LAYOUT(
_______, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_QUOT, _______,
_______, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, 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_SLSH, _______,
@@ -750,7 +750,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
#ifdef LAYOUT_NORMAN
-[_NORMAN] = KEYMAP_CUSTOM(
+[_NORMAN] = LAYOUT(
_______, KC_Q, KC_W, KC_D, KC_F, KC_K, KC_J, KC_U, KC_R, KC_L, KC_QUOT, _______,
_______, KC_A, KC_S, KC_E, KC_T, KC_G, KC_Y, KC_N, KC_I, KC_O, KC_H, _______,
_______, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_P, KC_M, KC_COMM, KC_DOT, KC_SLSH, _______,
@@ -772,7 +772,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
#ifdef LAYOUT_WORKMAN
-[_WORKMAN] = KEYMAP_CUSTOM(
+[_WORKMAN] = LAYOUT(
_______, KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_QUOT, _______,
_______, KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I, _______,
_______, KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_SLSH, _______,
@@ -792,7 +792,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | : | |
* `-----------------------------------------------------------------------------------'
*/
-[_PUNC] = KEYMAP_CUSTOM(
+[_PUNC] = LAYOUT(
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, X(LTEQ), X(GTEQ), _______,
KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, X(NOTEQ),KC_LPRN, KC_RPRN, KC_LABK, KC_RABK, _______,
KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, X(PLMIN),KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, _______,
@@ -811,7 +811,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | x | | | | | 0 | , | . | : | |
* `-----------------------------------------------------------------------------------'
*/
-[_NUM] = KEYMAP_CUSTOM(
+[_NUM] = LAYOUT(
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, S(KC_A), KC_1, KC_2, KC_3, S(KC_D), _______,
KC_GRV, KC_ASTR, KC_BSLS, KC_MINS, KC_EQL, KC_SLSH, S(KC_B), KC_4, KC_5, KC_6, S(KC_E), _______,
KC_AMPR, KC_CIRC, KC_PIPE, KC_UNDS, KC_PLUS, KC_QUES, S(KC_C), KC_7, KC_8, KC_9, S(KC_F), _______,
@@ -830,7 +830,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_FUN] = KEYMAP_CUSTOM(
+[_FUN] = LAYOUT(
XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_INS, XXXXXXX, KC_PGUP, KC_UP, KC_PGDN, KC_PGUP, KC_DEL,
KC_CAPS, KC_F5, KC_F6, KC_F7, KC_F8, KC_PSCR, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______,
_______, KC_F9, KC_F10, KC_F11, KC_F12, KC_PAUS, XXXXXXX, XXXXXXX, KC_HOME, KC_END, XXXXXXX, _______,
@@ -849,7 +849,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_GREEKU] = KEYMAP_CUSTOM(
+[_GREEKU] = LAYOUT(
_______, XXXXXXX, XXXXXXX,X(UEPSI), X(URHO), X(UTAU),X(UUPSI),X(UTHET),X(UIOTA),X(UOMIC), X(UPI), _______,
_______,X(UALPH),X(USIGM),X(UDELT), X(UPHI),X(UGAMM), X(UETA), X(UXI),X(UKAPP),X(ULAMB), KC_QUOT, _______,
_______,X(UZETA), X(UCHI), X(UPSI),X(UOMEG),X(UBETA), X(UNU), X(UMU), KC_COMM, KC_DOT, KC_SLSH, _______,
@@ -868,7 +868,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_GREEKL] = KEYMAP_CUSTOM(
+[_GREEKL] = LAYOUT(
_______, XXXXXXX,X(FSIGM),X(LEPSI), X(LRHO), X(LTAU),X(LUPSI),X(LTHET),X(LIOTA),X(LOMIC), X(LPI), _______,
_______,X(LALPH),X(LSIGM),X(LDELT), X(LPHI),X(LGAMM), X(LETA), X(LXI),X(LKAPP),X(LLAMB), KC_QUOT, _______,
_______,X(LZETA), X(LCHI), X(LPSI),X(LOMEG),X(LBETA), X(LNU), X(LMU), KC_COMM, KC_DOT, KC_SLSH, _______,
@@ -887,7 +887,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_EMPTY] = KEYMAP_CUSTOM(
+[_EMPTY] = LAYOUT(
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
@@ -906,7 +906,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_EMOJI] = KEYMAP_CUSTOM(
+[_EMOJI] = LAYOUT(
X(HART2), X(CRY2),X(WEARY),X(EYERT),X(SMIRK), X(TJOY),X(RECYC),X(UNAMU),X(MUSIC),X(OKHND),X(PENSV), X(PHEW),
X(THMUP), X(PRAY),X(SMILE),X(SMIL2),X(FLUSH), X(GRIN),X(HEART), X(BYE), X(KISS),X(CELEB), X(COOL),X(NOEVS),
X(THMDN),X(SLEEP), X(CLAP), X(CRY), X(VIC),X(BHART), X(SUN),X(SMEYE), X(WINK), X(MOON),X(CONFU),X(NOEVH),
@@ -925,7 +925,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_GUI] = KEYMAP_CUSTOM(
+[_GUI] = LAYOUT(
XXXXXXX, G(KC_1), G(KC_2), G(KC_3), G(KC_4), G(KC_5), G(KC_6), G(KC_7), G(KC_8), G(KC_9), G(KC_0), XXXXXXX,
KC_ESC, XXXXXXX, S(KC_TAB),KC_ESC, KC_TAB, XXXXXXX, XXXXXXX, KC_WWWB, XXXXXXX, KC_WWWF, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, KC_VOLD, KC_MUTE, KC_VOLU, KC_SPC, KC_SPC, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX,
@@ -944,7 +944,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_SYS] = KEYMAP_CUSTOM(
+[_SYS] = LAYOUT(
DEBUG, QWERTY, WIN, XXXXXXX, RESET, XXXXXXX, XXXXXXX, OUT_USB, XXXXXXX, XXXXXXX, XXXXXXX, RGBDEMO,
XXXXXXX, FC_TOG, XXXXXXX, DVORAK, XXXXXXX, GLOW, XXXXXXX, XXXXXXX, WORKMAN, LINUX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, OUT_BT, NORMAN, OSX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
@@ -1365,4 +1365,4 @@ void turn_off_capslock() {
rcv = ps2_host_send(0x01);
}
}
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/rules.mk b/keyboards/handwired/promethium/keymaps/priyadi/rules.mk
index a0d4261fa..5761be517 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/rules.mk
+++ b/keyboards/handwired/promethium/keymaps/priyadi/rules.mk
@@ -16,7 +16,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_MOUSE_ENABLE = yes
PS2_USE_INT = yes
FAUXCLICKY_ENABLE = yes
diff --git a/keyboards/handwired/promethium/promethium.h b/keyboards/handwired/promethium/promethium.h
index 260f140c5..b8d635220 100644
--- a/keyboards/handwired/promethium/promethium.h
+++ b/keyboards/handwired/promethium/promethium.h
@@ -7,4 +7,23 @@ void battery_poll(uint8_t level);
void led_set_kb(uint8_t usb_led);
void led_set_user(uint8_t usb_led);
+#define LAYOUT( \
+ k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, \
+ k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, \
+ k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
+ k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, \
+ tp1, tp2, tp3 \
+) \
+{ \
+ {k11, k12, k13, k14, k15, k16}, \
+ {k21, k22, k23, k24, k25, k26}, \
+ {k31, k32, k33, k34, k35, k36}, \
+ {k41, k42, k43, k44, k45, k46}, \
+ {k17, k18, k19, k1a, k1b, k1c}, \
+ {k27, k28, k29, k2a, k2b, k2c}, \
+ {k37, k38, k39, k3a, k3b, k3c}, \
+ {k47, k48, k49, k4a, k4b, k4c}, \
+ {tp1, tp2, tp3, KC_NO, KC_NO, KC_NO} \
+}
+
#endif
diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk
index 69903dceb..21328b7f8 100644
--- a/keyboards/handwired/promethium/rules.mk
+++ b/keyboards/handwired/promethium/rules.mk
@@ -62,7 +62,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_MOUSE_ENABLE = yes
PS2_USE_INT = yes
API_SYSEX_ENABLE = no
diff --git a/keyboards/handwired/pteron/config.h b/keyboards/handwired/pteron/config.h
new file mode 100644
index 000000000..9650839e3
--- /dev/null
+++ b/keyboards/handwired/pteron/config.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER QMK Community
+#define PRODUCT Pteron Keyboard
+#define DESCRIPTION Pteron Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 12
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D7, E6, B4, B5, B6 }
+#define MATRIX_COL_PINS { F4, F6, F5, F7, B1, B3, C6, D4, D0, D1, D2, D3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5 // 5 is default
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* prevent stuck modifiers */
+#define PREVENT_STUCK_MODIFIERS
diff --git a/keyboards/handwired/pteron/info.json b/keyboards/handwired/pteron/info.json
new file mode 100644
index 000000000..7b3b1b696
--- /dev/null
+++ b/keyboards/handwired/pteron/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "pteron",
+ "url": "",
+ "maintainer": "FSund",
+ "width": 17,
+ "height": 5.95,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"K000", "x":0, "y":0.75},
+ {"label":"K001", "x":1, "y":0.75},
+ {"label":"K002", "x":2, "y":0.25},
+ {"label":"K003", "x":3, "y":0},
+ {"label":"K004", "x":4, "y":0.35},
+ {"label":"K005", "x":5, "y":0.45},
+
+ {"label":"K006", "x":11, "y":0.45},
+ {"label":"K007", "x":12, "y":0.35},
+ {"label":"K008", "x":13, "y":0},
+ {"label":"K009", "x":14, "y":0.25},
+ {"label":"K010", "x":15, "y":0.75},
+ {"label":"K011", "x":16, "y":0.75},
+
+ {"label":"K100", "x":0, "y":1.75},
+ {"label":"K101", "x":1, "y":1.75},
+ {"label":"K102", "x":2, "y":1.25},
+ {"label":"K103", "x":3, "y":1},
+ {"label":"K104", "x":4, "y":1.35},
+ {"label":"K105", "x":5, "y":1.45},
+
+ {"label":"K106", "x":11, "y":1.45},
+ {"label":"K107", "x":12, "y":1.35},
+ {"label":"K108", "x":13, "y":1},
+ {"label":"K109", "x":14, "y":1.25},
+ {"label":"K110", "x":15, "y":1.75},
+ {"label":"K111", "x":16, "y":1.75},
+
+ {"label":"K200", "x":0, "y":2.75},
+ {"label":"K201", "x":1, "y":2.75},
+ {"label":"K202", "x":2, "y":2.25},
+ {"label":"K203", "x":3, "y":2},
+ {"label":"K204", "x":4, "y":2.35},
+ {"label":"K205", "x":5, "y":2.45},
+
+ {"label":"K206", "x":11, "y":2.45},
+ {"label":"K207", "x":12, "y":2.35},
+ {"label":"K208", "x":13, "y":2},
+ {"label":"K209", "x":14, "y":2.25},
+ {"label":"K210", "x":15, "y":2.75},
+ {"label":"K211", "x":16, "y":2.75},
+
+ {"label":"K300", "x":0, "y":3.75},
+ {"label":"K301", "x":1, "y":3.75},
+ {"label":"K302", "x":2, "y":3.25},
+ {"label":"K303", "x":3, "y":3},
+ {"label":"K304", "x":4, "y":3.35},
+ {"label":"K305", "x":5, "y":3.45},
+
+ {"label":"K306", "x":11, "y":3.45},
+ {"label":"K307", "x":12, "y":3.35},
+ {"label":"K308", "x":13, "y":3},
+ {"label":"K309", "x":14, "y":3.25},
+ {"label":"K310", "x":15, "y":3.75},
+ {"label":"K311", "x":16, "y":3.75},
+
+ {"label":"K402", "x":4, "y":4.35},
+ {"label":"K403", "x":5, "y":4.45},
+ {"label":"K404", "x":6, "y":4.65},
+ {"label":"K405", "x":7, "y":4.95},
+
+ {"label":"K406", "x":9, "y":4.95},
+ {"label":"K407", "x":10, "y":4.65},
+ {"label":"K408", "x":11, "y":4.45},
+ {"label":"K409", "x":12, "y":4.35}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/pteron/keymaps/FSund/keymap.c b/keyboards/handwired/pteron/keymaps/FSund/keymap.c
new file mode 100644
index 000000000..f34beae06
--- /dev/null
+++ b/keyboards/handwired/pteron/keymaps/FSund/keymap.c
@@ -0,0 +1,118 @@
+#include QMK_KEYBOARD_H
+
+enum pteron_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+// use S() to produce shifted versions of keys
+// #define S(kc) LSFT(kc) // defined by default
+
+// alt gr
+#define G(kc) RALT(kc)
+
+// custom keycodes
+// use F_ prefix to avoid problems
+
+// NB! I use Norwegian keyboard layout on my machines, so the keymap probably
+// doesn't make much sense for US/ANSI users
+
+#define F_FSLH S(KC_7) // forward slash
+#define F_BSLH KC_EQL // backward slash
+#define F_EQL S(KC_0) // equals sign
+#define F_APOS KC_BSLS // '
+#define F_TIMES S(KC_BSLS) // *
+#define F_PLUS KC_MINS // +
+#define F_QUEST S(KC_MINS) // ?
+#define F_HAT S(KC_RBRC) // ^
+#define F_TILD G(KC_RBRC) // ~
+#define F_UML KC_RBRC // ¨ (umlaut)
+#define F_SECT S(KC_GRV) // section sign ("law sign") (shifted key below esc)
+#define F_GRAVE S(KC_EQL)
+#define F_ACUTE G(KC_EQL)
+
+#define KC_AA KC_LBRC
+#define KC_OE KC_SCLN
+#define KC_AE KC_QUOT
+
+// brackets
+#define F_SBRL G(KC_8) // square bracket left
+#define F_SBRR G(KC_9) // square bracket right
+#define F_CBRL G(KC_7) // curly bracket left
+#define F_CBRR G(KC_0) // curly bracket right
+#define F_RBRL S(KC_8) // round bracket left
+#define F_RBRR S(KC_9) // round bracket right
+#define F_ABRL KC_NUBS // angle bracket left
+#define F_ABRR S(KC_NUBS) // angle bracket right
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * +-----------------------------------------+ +-----------------------------------------+
+ * | Esc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Å |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | S | D | F | G | | H | J | K | L | Ø | Æ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | Z | X | C | V | B | | N | M | , | . | - | Shft |
+ * +---------------------------+------+------+-------------+ +-------------+------+------+---------------------------+
+ * | LOWR | Spc | Alt | Win | | Win | Alt | Spc | RISE |
+ * +---------------------------+ +---------------------------+
+ */
+
+[_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_AA,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_OE, KC_AE,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT,
+ LOWER, KC_SPC, KC_LALT, KC_LGUI, KC_RGUI, KC_RALT, KC_ENT, RAISE
+ ),
+
+/* LOWER
+ * +-----------------------------------------+ +-----------------------------------------+
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | \ | / | [ | ] | = | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | | < | > | ( | ) | * | ~ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F6 | F7 | F8 | F9 | F10 | | F11 | F12 | { | } | + | |
+ * +---------------------------+------+------+-------------+ +-------------+------+------+---------------------------+
+ * | | | | | | | | | |
+ * +---------------------------+ +---------------------------+
+ */
+
+[_LOWER] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, F_BSLH, F_FSLH, F_SBRL, F_SBRR, F_EQL, KC_DEL,
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, F_ABRL, F_ABRR, F_RBRL, F_RBRR, F_TIMES, F_TILD,
+ _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, F_CBRL, F_CBRR, F_PLUS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+[_RAISE] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_AA,
+ F_SECT, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), F_QUEST, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, F_APOS,
+ _______, S(KC_6), G(KC_2), G(KC_3), G(KC_4), G(KC_5), F_HAT, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+[_ADJUST] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, F_UML, F_GRAVE, F_ACUTE, _______, RESET, _______, _______, _______, _______, KC_PSCR, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
diff --git a/keyboards/handwired/pteron/keymaps/default/keymap.c b/keyboards/handwired/pteron/keymaps/default/keymap.c
new file mode 100644
index 000000000..3079cc7af
--- /dev/null
+++ b/keyboards/handwired/pteron/keymaps/default/keymap.c
@@ -0,0 +1,104 @@
+#include QMK_KEYBOARD_H
+
+enum pteron_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * +-----------------------------------------+ +-----------------------------------------+
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
+ * +-------------+------+------+------+------| |------+------+------+------+-------------+
+ * |Lower | SPC | Alt | GUI | | Alt | GUI | SPC |Raise |
+ * +---------------------------+ +---------------------------+
+ */
+[_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_DEL, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ LOWER, KC_SPC, KC_LALT, KC_LGUI, KC_RALT, KC_RGUI, KC_SPC, RAISE \
+),
+
+/* Lower
+ * +-----------------------------------------+ +-----------------------------------------+
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO ~ |ISO | | | | |
+ * +-------------+------+------+------+------| |------+------+------+------+-------------+
+ * | | | | | | Next | Vol- | Vol+ | Play |
+ * +---------------------------+ +---------------------------+
+ */
+[_LOWER] = LAYOUT( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME, KC_END, _______, \
+ _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * +-----------------------------------------+ +-----------------------------------------+
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | F12 |ISO # |ISO / | | | |
+ * +-------------+------+------+------+------| |------+------+------+------+-------------+
+ * | | | | | | Next | Vol- | Vol+ | Play |
+ * +---------------------------+ +---------------------------+
+ */
+[_RAISE] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, \
+ _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * +-----------------------------------------+ +-----------------------------------------+
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Reset| | | | | | | | | | | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | |Aud on|AudOff|AGnorm| |AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|MusOff|MidiOn| |MidOff| | | | | |
+ * +-------------+------+------+------+------| |------+------+------+------+-------------+
+ * | | | | | | | | | |
+ * +---------------------------+ +---------------------------+
+ */
+[_ADJUST] = LAYOUT( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
diff --git a/keyboards/handwired/pteron/pteron.c b/keyboards/handwired/pteron/pteron.c
new file mode 100644
index 000000000..972b45aa2
--- /dev/null
+++ b/keyboards/handwired/pteron/pteron.c
@@ -0,0 +1 @@
+#include "pteron.h"
diff --git a/keyboards/handwired/pteron/pteron.h b/keyboards/handwired/pteron/pteron.h
new file mode 100644
index 000000000..f29c2619a
--- /dev/null
+++ b/keyboards/handwired/pteron/pteron.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, \
+ K402, K403, K404, K405, K406, K407, K408, K409 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 }, \
+ { KC_NO, KC_NO, K402, K403, K404, K405, K406, K407, K408, K409, KC_NO, KC_NO } \
+}
diff --git a/keyboards/handwired/pteron/readme.md b/keyboards/handwired/pteron/readme.md
new file mode 100644
index 000000000..a66d41edb
--- /dev/null
+++ b/keyboards/handwired/pteron/readme.md
@@ -0,0 +1,15 @@
+# Pteron
+
+![Pteron](https://i.imgur.com/9QhPlVD.jpg)
+
+An ergonomic keyboard heavily inspired by the [Atreus](https://github.com/technomancy/atreus), [Iris](https://github.com/keebio/iris-case) and [Atreis](https://github.com/dekonnection/atreis) keyboards. More info and files for laser cutting plates and case are in the [Pteron repository](https://github.com/FSund/pteron-keyboard).
+
+Keyboard Maintainer: [Filip Sund](https://github.com/FSund)
+Hardware Supported: Pro Micro
+Hardware Availability: Handwired, no PCB's available (for now)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/pteron: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/handwired/pteron/rules.mk b/keyboards/handwired/pteron/rules.mk
new file mode 100644
index 000000000..10218020e
--- /dev/null
+++ b/keyboards/handwired/pteron/rules.mk
@@ -0,0 +1,58 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader
+# 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
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no
+UNICODE_ENABLE = no
+UNICODEMAP_ENABLE = no \ No newline at end of file
diff --git a/keyboards/handwired/qc60/config.h b/keyboards/handwired/qc60/config.h
index 3b6f84390..00d095ddf 100644
--- a/keyboards/handwired/qc60/config.h
+++ b/keyboards/handwired/qc60/config.h
@@ -18,6 +18,9 @@
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
diff --git a/keyboards/handwired/qc60/proto/config.h b/keyboards/handwired/qc60/proto/config.h
index 81466b019..8c21fa926 100644
--- a/keyboards/handwired/qc60/proto/config.h
+++ b/keyboards/handwired/qc60/proto/config.h
@@ -10,5 +10,3 @@
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
#define RGBLED_NUM 1 // Number of LEDs
-// #define ws2812_PORTREG PORTD
-// #define ws2812_DDRREG DDRD
diff --git a/keyboards/handwired/qc60/rules.mk b/keyboards/handwired/qc60/rules.mk
index 1be83d5f8..e61b18b00 100644
--- a/keyboards/handwired/qc60/rules.mk
+++ b/keyboards/handwired/qc60/rules.mk
@@ -58,7 +58,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SPLIT_KEYBOARD = yes
diff --git a/keyboards/handwired/reddot/keymaps/default/keymap.c b/keyboards/handwired/reddot/keymaps/default/keymap.c
index 44ee2ce51..73aeff225 100755
--- a/keyboards/handwired/reddot/keymaps/default/keymap.c
+++ b/keyboards/handwired/reddot/keymaps/default/keymap.c
@@ -8,14 +8,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_INSERT, KC_HOME, KC_PGUP,\
KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_DELETE, KC_END, KC_PGDOWN, KC_KP_PLUS,\
KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_KP_1, KC_UP, KC_KP_3,\
- FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, NO_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
+ FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
[1] = KEYMAP(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_TAB, KC_CAPS, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_FN0, KC_KP_SLASH, KC_KP_ASTERISK, KC_KP_MINUS,\
KC_LALT, FR_AMP, FR_EACU, FR_QUOT, FR_APOS, FR_LPRN, KC_BSPACE, KC_DELETE, FR_MINS, FR_EGRV, FR_UNDS, FR_CCED, FR_AGRV, FR_RPRN, FR_EQL, KC_7, KC_8, KC_9,\
KC_LGUI, FR_A, FR_Z, KC_E, KC_R, KC_T, KC_LSFT, KC_ENT, KC_Y, KC_U, KC_I, KC_O, KC_P, FR_CIRC, FR_DLR, KC_4, KC_5, KC_6, KC_KP_PLUS,\
KC_LCTL, FR_Q, KC_S, KC_D, KC_F, KC_G, KC_ENT, KC_H, KC_J, KC_K, KC_L, FR_M, FR_UGRV, FR_ASTR, KC_1, KC_2, KC_3,\
- FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, NO_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
+ FR_LESS, FR_W, KC_X, KC_C, KC_V, KC_B, KC_SPACE, KC_SPACE, KC_N, FR_COMM, FR_SCLN, FR_COLN, FR_EXLM, KC_ALGR, KC_LEFT, KC_DOWN, KC_RIGHT, KC_KP_ENTER),
};
diff --git a/keyboards/handwired/space_oddity/config.h b/keyboards/handwired/space_oddity/config.h
index 9c9361ced..46d854099 100644
--- a/keyboards/handwired/space_oddity/config.h
+++ b/keyboards/handwired/space_oddity/config.h
@@ -49,10 +49,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 0
diff --git a/keyboards/handwired/terminus_mini/keymaps/default/rules.mk b/keyboards/handwired/terminus_mini/keymaps/default/rules.mk
index 1485c0832..42ab51f15 100644
--- a/keyboards/handwired/terminus_mini/keymaps/default/rules.mk
+++ b/keyboards/handwired/terminus_mini/keymaps/default/rules.mk
@@ -29,6 +29,6 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no # Enable Tap Dance
diff --git a/keyboards/handwired/terminus_mini/rules.mk b/keyboards/handwired/terminus_mini/rules.mk
index d7acbf7d5..9ecba25d8 100644
--- a/keyboards/handwired/terminus_mini/rules.mk
+++ b/keyboards/handwired/terminus_mini/rules.mk
@@ -63,7 +63,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. Do not enable this with audio at the same time.
+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
TAP_DANCE_ENABLE = no # Enable tap dance
diff --git a/keyboards/handwired/tradestation/config.h b/keyboards/handwired/tradestation/config.h
new file mode 100644
index 000000000..346577a92
--- /dev/null
+++ b/keyboards/handwired/tradestation/config.h
@@ -0,0 +1,52 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Flehrad
+#define PRODUCT Trade Station
+ #define DESCRIPTION A Pro Micro-powered macropad layout by Didier Luximon. 1/8U gap space top two rows and 1/4U gap between 2U bottom two rows.
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 4
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D1, C6, D4, D0 }
+#define MATRIX_COL_PINS { F7, B1, D7, E6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+ #define RGBLED_NUM 5
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
diff --git a/keyboards/handwired/tradestation/info.json b/keyboards/handwired/tradestation/info.json
new file mode 100644
index 000000000..f26d4ec37
--- /dev/null
+++ b/keyboards/handwired/tradestation/info.json
@@ -0,0 +1,15 @@
+{
+ "keyboard_name": "Tradestation",
+ "url": "",
+ "maintainer": "Flehrad",
+ "bootloader": "",
+ "width": 4.3,
+ "height": 4.5,
+ "layouts": {
+ "LAYOUT_tradestation": {
+ "layout": [{"x":0, "y":0}, {"x":1.1, "y":0}, {"x":2.2, "y":0}, {"x":3.3, "y":0}, {"x":0, "y":1.1}, {"x":1.1, "y":1.1}, {"x":2.2, "y":1.1}, {"x":3.3, "y":1.1}, {"x":0, "y":2.25, "w":2}, {"x":2.25, "y":2.25, "w":2}, {"x":0, "y":3.5, "w":2}, {"x":2.25, "y":3.5, "w":2}]
+ },
+ "LAYOUT_ortho_4x4": {
+ "layout": [{"x":0, "y":0}, {"x":1.1, "y":0}, {"x":2.2, "y":0}, {"x":3.3, "y":0}, {"x":0, "y":1.1}, {"x":1.1, "y":1.1}, {"x":2.2, "y":1.1}, {"x":3.3, "y":1.1}, {"x":0, "y":2.25}, {"x":1, "y":2.25}, {"x":2.25, "y":2.25}, {"x":3.25, "y":2.25}, {"x":0, "y":3.5}, {"x":1, "y":3.5}, {"x":2.25, "y":3.5}, {"x":3.25, "y":3.5}]
+ }
+}
diff --git a/keyboards/handwired/tradestation/keymaps/default/keymap.c b/keyboards/handwired/tradestation/keymaps/default/keymap.c
new file mode 100644
index 000000000..3497dcb94
--- /dev/null
+++ b/keyboards/handwired/tradestation/keymaps/default/keymap.c
@@ -0,0 +1,61 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_ortho_4x4(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ LAYOUT_tradestation(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS),
+};
+
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/handwired/tradestation/license b/keyboards/handwired/tradestation/license
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/keyboards/handwired/tradestation/license
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/keyboards/handwired/tradestation/readme.md b/keyboards/handwired/tradestation/readme.md
new file mode 100644
index 000000000..69c0331a9
--- /dev/null
+++ b/keyboards/handwired/tradestation/readme.md
@@ -0,0 +1,25 @@
+# Tradestation
+QMK for Tradestation Macropad
+
+This macropad was layout designed by Didier Luximon
+
+This PCB supports an overall 4x4 matrix with unique spacing.
+* Top two rows are 1U keys with 1/8U spacing
+* Bottom two rows are available with 4x2 1U as clusters of 2x1U or as 2x2 2U, spaced with 1/4U
+
+For QMK Configurator, the info.json is utilised.
+- For 2U keys , the first 1u row/column key assignment is the same as the 2u position.
+
+Build requires a pro micro.
+
+Can be built as single PCB with custom case, or as two PCB style with standoffs.
+
+If you like this simple PCB and want to make a donation, you can at https://paypal.me/theboardpodcast
+
+Check out our:
+
+YouTube (https://www.youtube.com/channel/UCg98oJZNffR9nDLJNkorjqw)
+
+Podcast (www.libsyn.com/theboardpodcast)
+
+Patreon (www.patreon.com/theboardpodcast)
diff --git a/keyboards/handwired/tradestation/rules.mk b/keyboards/handwired/tradestation/rules.mk
new file mode 100644
index 000000000..9d49888b5
--- /dev/null
+++ b/keyboards/handwired/tradestation/rules.mk
@@ -0,0 +1,65 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = caterina
+
+# Boot Section Size in *bytes*
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
+ LAYOUTS = ortho_4x4
diff --git a/keyboards/handwired/tradestation/tradestation.c b/keyboards/handwired/tradestation/tradestation.c
new file mode 100644
index 000000000..a3285a2cc
--- /dev/null
+++ b/keyboards/handwired/tradestation/tradestation.c
@@ -0,0 +1 @@
+#include "tradestation.h"
diff --git a/keyboards/handwired/tradestation/tradestation.h b/keyboards/handwired/tradestation/tradestation.h
new file mode 100644
index 000000000..15e40e3b5
--- /dev/null
+++ b/keyboards/handwired/tradestation/tradestation.h
@@ -0,0 +1,27 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_4x4( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K21, K22, K23, \
+ K30, K31, K32, K33 \
+) { \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, K23 }, \
+ { K30, K31, K32, K33 } \
+}
+
+#define LAYOUT_tradestation( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, K13, \
+ K20, K22, \
+ K30, K32 \
+) { \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, KC_NO, K22, KC_NO }, \
+ { K30, KC_NO, K32, KC_NO } \
+}
diff --git a/keyboards/handwired/woodpad/keymaps/default/rules.mk b/keyboards/handwired/woodpad/keymaps/default/rules.mk
index b8879076b..f060db79c 100644
--- a/keyboards/handwired/woodpad/keymaps/default/rules.mk
+++ b/keyboards/handwired/woodpad/keymaps/default/rules.mk
@@ -29,7 +29,7 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/handwired/woodpad/keymaps/drashna/keymap.c b/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
index fd1ff0053..f7df5eac7 100644
--- a/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
+++ b/keyboards/handwired/woodpad/keymaps/drashna/keymap.c
@@ -64,7 +64,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_RESET, KC_MUTE, KC_VOLD, KC_VOLU,\
KC_MAKE, _______, RGB_HUI, RGB_HUD, \
KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, \
- RGB_TOG, RGB_SMOD, RGB_SAI, RGB_VAI, \
+ RGB_TOG, RGB_MOD, RGB_SAI, RGB_VAI, \
_______, KC_RGB_T, RGB_SAD, RGB_VAD \
),
diff --git a/keyboards/handwired/xealous/config.h b/keyboards/handwired/xealous/config.h
new file mode 100644
index 000000000..7bce502c1
--- /dev/null
+++ b/keyboards/handwired/xealous/config.h
@@ -0,0 +1,51 @@
+/*
+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"
+
+/* Use I2C or Serial, not both */
+
+#define USE_I2C
+#define SCL_CLOCK 400000UL
+
+// #define USE_SERIAL
+/* serial.c configuration for split keyboard */
+// #define SOFT_SERIAL_PIN D0
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+
+//#define DEBUG_MATRIX_SCAN_RATE //Use this to determine scan-rate.
+#define FORCE_NKRO
+
+#define QMK_KEYS_PER_SCAN 4 //if we press four keys simultaneously, lets process them simultaneously...
+#define DIODE_DIRECTION COL2ROW
+
+#ifdef AUDIO_ENABLE
+ #define C6_AUDIO
+ #define STARTUP_SONG SONG(STARTUP_SOUND)
+ #define NO_MUSIC_MODE
+ #define TONE_QWERTY SONG(Q__NOTE(_E4));
+ #define TONE_NUMPAD SONG(Q__NOTE(_D4));
+#endif
+
diff --git a/keyboards/handwired/xealous/info.json b/keyboards/handwired/xealous/info.json
new file mode 100644
index 000000000..6d7e30f44
--- /dev/null
+++ b/keyboards/handwired/xealous/info.json
@@ -0,0 +1,91 @@
+{
+ "keyboard_name": "Xealous",
+ "url": "",
+ "maintainer": "alex-ong",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ANSI_DEFAULT": {
+ "key_count": 64,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2.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":"CapsLock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.75},
+ {"x":6.5, "y":4, "w":1.25},
+
+ {"x":7.75, "y":4, "w":1.25},
+ {"x":9, "y":4, "w":2.0},
+ {"label":"Alt", "x":11, "y":4},
+ {"label":"Win", "x":12, "y":4},
+ {"label":"Menu", "x":13, "y":4},
+ {"label":"Ctrl", "x":14, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/xealous/keymaps/default/keymap.c b/keyboards/handwired/xealous/keymaps/default/keymap.c
new file mode 100644
index 000000000..a07e64fd7
--- /dev/null
+++ b/keyboards/handwired/xealous/keymaps/default/keymap.c
@@ -0,0 +1,105 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _NUMPAD 1
+#define _FN 2
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+#define FN MO(_FN)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/*
+ * ,-----------------------------------------------------------.
+ * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
+ * |-----------------------------------------------------------|
+ * |FN | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /| Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl|Gui |Alt | NUM | Space | Space |Alt |FN |Menu |Ctrl |
+ * `-----------------------------------------------------------'
+ */
+ /* Layer 0: Qwerty */
+ [_QWERTY] = LAYOUT_split60( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ FN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, DF(_NUMPAD), KC_SPC, KC_SPC, KC_RALT, FN, KC_APP, KC_RCTL \
+ ),
+
+/*
+ * ,-----------------------------------------------------------.
+ * | | | | | | | |Nlck| /| *| -| | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | 7| 8| 9| +| | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | 4| 5| 6|Bspc| |Return |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | 1| 2| 3| .| |
+ * |-----------------------------------------------------------|
+ * | | | | QWE | | 0 | . |A_ON |A_OFF| |
+ * `-----------------------------------------------------------'
+ */
+
+ /* Layer 1: Numpad */
+ [_NUMPAD] = LAYOUT_split60( \
+ _______, _______, _______, _______, _______, _______, _______, KC_NLCK, KC_PSLS, KC_PAST, KC_MINUS, _______, _______, KC_BSPC, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PLUS, _______, _______, KC_BSLS, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_BSPC, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_DOT, _______, \
+ _______, _______, _______,DF(_QWERTY), _______, KC_P0, KC_PDOT, AU_ON, AU_OFF, _______ \
+ ),
+
+/*
+ * ,-----------------------------------------------------------.
+ * | ` |F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Delete|
+ * |-----------------------------------------------------------|
+ * | Caps|pUp| ^ |pDn| | | |pUp| ^ |pDn|PSR|SLK|Pau| |
+ * |-----------------------------------------------------------|
+ * | | < | v | > | |Hom|Hom| < | v | > |INS| DEL| |
+ * |-----------------------------------------------------------|
+ * | | | | | |End|End| |Vo-|Vo+|VoX| |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `-----------------------------------------------------------'
+ */
+
+ /* Layer 2: RAISE */
+ [_FN] = LAYOUT_split60( \
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_CAPS, KC_PGUP, KC_UP, KC_PGDN, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_SLCK, KC_PAUS, _______, \
+ _______, KC_LEFT, KC_DOWN,KC_RIGHT, _______, KC_HOME, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_INS, KC_DEL, _______, \
+ _______, _______, _______, _______, _______, KC_END, KC_END, AU_TOG, KC_VOLD, KC_VOLU, KC_MUTE, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ )
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = TONE_QWERTY;
+float tone_numpad[][2] = TONE_NUMPAD;
+
+uint32_t default_layer_state_set_kb(uint32_t state) {
+ if (state == 1UL<<_QWERTY) {
+ PLAY_SONG(tone_qwerty);
+ } else if (state == 1UL<<_NUMPAD) {
+ PLAY_SONG(tone_numpad);
+ }
+ return state;
+}
+#endif
+
+void led_set_keymap(uint8_t usb_led) {
+}
diff --git a/keyboards/handwired/xealous/matrix.c b/keyboards/handwired/xealous/matrix.c
new file mode 100644
index 000000000..27fad0008
--- /dev/null
+++ b/keyboards/handwired/xealous/matrix.c
@@ -0,0 +1,376 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "split_util.h"
+#include "pro_micro.h"
+#include "config.h"
+#include "timer.h"
+#ifdef DEBUG_MATRIX_SCAN_RATE
+ #include "matrix_scanrate.h"
+#endif
+
+
+
+#ifdef USE_I2C
+# include "i2c.h"
+#else // USE_SERIAL
+# error "only i2c supported"
+#endif
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#else
+# error "Currently only supports 8 COLS"
+#endif
+
+#define ERROR_DISCONNECT_COUNT 5
+
+#define ROWS_PER_HAND (MATRIX_ROWS/2)
+
+static uint8_t error_count = 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* debouncing_matrix_hand_offsetted; //pointer to matrix_debouncing for our hand
+static matrix_row_t* matrix_hand_offsetted; // pointer to matrix for our hand
+
+//Debouncing counters
+typedef uint8_t debounce_counter_t;
+#define DEBOUNCE_COUNTER_MODULO 250
+#define DEBOUNCE_COUNTER_INACTIVE 251
+static debounce_counter_t debounce_counters[MATRIX_ROWS * MATRIX_COLS];
+static debounce_counter_t *debounce_counters_hand_offsetted;
+
+
+#if (DIODE_DIRECTION == ROW2COL)
+ error "Only Col2Row supported";
+#endif
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+static void unselect_row(uint8_t row);
+static matrix_row_t optimized_col_reader(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) {
+}
+
+__attribute__ ((weak))
+void matrix_slave_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+#ifdef DISABLE_JTAG
+ // JTAG disable for PORT F. write JTD bit twice within four cycles.
+ MCUCR |= (1<<JTD);
+ MCUCR |= (1<<JTD);
+#endif
+
+ debug_enable = true;
+ debug_matrix = false;
+ debug_mouse = false;
+ // initialize row and col
+ unselect_rows();
+ init_cols();
+
+ TX_RX_LED_INIT;
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+ int my_hand_offset = isLeftHand ? 0 : (ROWS_PER_HAND);
+ debouncing_matrix_hand_offsetted = matrix_debouncing + my_hand_offset;
+ matrix_hand_offsetted = matrix + my_hand_offset;
+ debounce_counters_hand_offsetted = debounce_counters + my_hand_offset;
+
+ for (uint8_t i = 0; i < MATRIX_ROWS * MATRIX_COLS; i++) {
+ debounce_counters[i] = DEBOUNCE_COUNTER_INACTIVE;
+ }
+
+ matrix_init_quantum();
+
+}
+
+//#define TIMER_DIFF(a, b, max) ((a) >= (b) ? (a) - (b) : (max) - (b) + (a))
+void update_debounce_counters(uint8_t current_time)
+{
+ debounce_counter_t *debounce_pointer = debounce_counters_hand_offsetted;
+ for (uint8_t row = 0; row < ROWS_PER_HAND; row++)
+ {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++)
+ {
+ if (*debounce_pointer != DEBOUNCE_COUNTER_INACTIVE)
+ {
+ if (TIMER_DIFF(current_time, *debounce_pointer, DEBOUNCE_COUNTER_MODULO) >=
+ DEBOUNCING_DELAY) {
+ *debounce_pointer = DEBOUNCE_COUNTER_INACTIVE;
+ }
+ }
+ debounce_pointer++;
+ }
+ }
+}
+
+void transfer_matrix_values(uint8_t current_time)
+{
+ //upload from debounce_matrix to final matrix;
+ debounce_counter_t *debounce_pointer = debounce_counters_hand_offsetted;
+ for (uint8_t row = 0; row < ROWS_PER_HAND; row++)
+ {
+ matrix_row_t row_value = matrix_hand_offsetted[row];
+ matrix_row_t debounce_value = debouncing_matrix_hand_offsetted[row];
+
+ for (uint8_t col = 0; col < MATRIX_COLS; col++)
+ {
+ bool final_value = debounce_value & (1 << col);
+ bool current_value = row_value & (1 << col);
+ if (*debounce_pointer == DEBOUNCE_COUNTER_INACTIVE
+ && (current_value != final_value))
+ {
+ *debounce_pointer = current_time;
+ row_value ^= (1 << col);
+ }
+ debounce_pointer++;
+ }
+ matrix_hand_offsetted[row] = row_value;
+ }
+}
+
+uint8_t _matrix_scan(void)
+{
+ uint8_t current_time = timer_read() % DEBOUNCE_COUNTER_MODULO;
+
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
+ select_row(current_row);
+ asm volatile ("nop"); asm volatile("nop");
+
+ debouncing_matrix_hand_offsetted[current_row] = optimized_col_reader();
+ // Unselect row
+ unselect_row(current_row);
+ }
+
+ update_debounce_counters(current_time);
+ transfer_matrix_values(current_time);
+
+ return 1;
+}
+
+
+// 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(I2C_KEYMAP_START);
+ if (err) goto i2c_error;
+
+ // Start read
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
+ if (err) goto i2c_error;
+
+ if (!err) {
+ int i;
+ for (i = 0; i < ROWS_PER_HAND-1; ++i) {
+ matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
+ }
+ matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
+ i2c_master_stop();
+ } else {
+i2c_error: // the cable is disconnceted, or something else went wrong
+ i2c_reset_state();
+ return err;
+ }
+
+ return 0;
+}
+
+uint8_t matrix_scan(void)
+{
+#ifdef DEBUG_MATRIX_SCAN_RATE
+ matrix_check_scan_rate();
+ matrix_time_between_scans();
+#endif
+ uint8_t ret = _matrix_scan();
+
+ if( i2c_transaction() ) {
+ // 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;
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ i2c_slave_buffer[I2C_KEYMAP_START+i] = matrix[offset+i];
+ }
+
+ matrix_slave_scan_user();
+}
+
+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(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ uint8_t pin = col_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
+inline
+static matrix_row_t optimized_col_reader(void) {
+ //MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, F5, F4 }
+ return (PINB & (1 << 6) ? 0 : (ROW_SHIFTER << 0)) |
+ (PINB & (1 << 2) ? 0 : (ROW_SHIFTER << 1)) |
+ (PINB & (1 << 3) ? 0 : (ROW_SHIFTER << 2)) |
+ (PINB & (1 << 1) ? 0 : (ROW_SHIFTER << 3)) |
+ (PINF & (1 << 7) ? 0 : (ROW_SHIFTER << 4)) |
+ (PINF & (1 << 6) ? 0 : (ROW_SHIFTER << 5)) |
+ (PINF & (1 << 5) ? 0 : (ROW_SHIFTER << 6)) |
+ (PINF & (1 << 4) ? 0 : (ROW_SHIFTER << 7));
+}
+
+
+static void select_row(uint8_t row)
+{
+ uint8_t pin = row_pins[row];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+}
+
+static void unselect_row(uint8_t row)
+{
+ uint8_t pin = row_pins[row];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+}
+
+static void unselect_rows(void)
+{
+ for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
+ uint8_t pin = row_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
diff --git a/keyboards/handwired/xealous/matrix_scanrate.c b/keyboards/handwired/xealous/matrix_scanrate.c
new file mode 100644
index 000000000..f2c7cbe6e
--- /dev/null
+++ b/keyboards/handwired/xealous/matrix_scanrate.c
@@ -0,0 +1,39 @@
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.h"
+
+#ifdef CONSOLE_ENABLE
+static uint16_t matrix_scan_count = 0;
+static uint32_t matrix_timer = 0;
+void matrix_check_scan_rate(void) {
+ matrix_scan_count++;
+ if (matrix_scan_count > 1000) {
+ uint32_t timer_now = timer_read32();
+ uint16_t ms_per_thousand = TIMER_DIFF_32(timer_now, matrix_timer);
+ uint16_t rate_per_second = 1000000UL / ms_per_thousand;
+ print("scan_rate: ");
+ pdec(rate_per_second);
+ print("\n");
+ matrix_timer = timer_now;
+ matrix_scan_count = 0;
+ }
+}
+
+static uint32_t last_scan_time = 0;
+void matrix_time_between_scans(void) {
+ if (timer_elapsed(last_scan_time) > 1)
+ {
+ print(">1ms elapsed since last scan: ");
+ pdec(timer_elapsed(last_scan_time));
+ print("\n");
+ }
+ last_scan_time = timer_read();
+
+}
+#endif
diff --git a/keyboards/handwired/xealous/matrix_scanrate.h b/keyboards/handwired/xealous/matrix_scanrate.h
new file mode 100644
index 000000000..18d56cd5b
--- /dev/null
+++ b/keyboards/handwired/xealous/matrix_scanrate.h
@@ -0,0 +1,4 @@
+__attribute__((weak))
+void matrix_check_scan_rate(void) {}
+__attribute__((weak))
+void matrix_time_between_scans(void) {}
diff --git a/keyboards/handwired/xealous/readme.md b/keyboards/handwired/xealous/readme.md
new file mode 100644
index 000000000..14947cc90
--- /dev/null
+++ b/keyboards/handwired/xealous/readme.md
@@ -0,0 +1,166 @@
+XeaL60
+======
+
+Split keyboard firmware for Arduino Pro Micro or other ATmega32u4
+based boards.
+
+
+## Build Guide
+
+A build guide for putting together the Xealous can be found here: https://github.com/alex-ong/Split60
+
+
+## First Time Setup
+
+Download or clone the `qmk_firmware` repo and navigate to its top level directory. Once your build environment is setup, you'll be able to generate the default .hex using:
+
+```
+$ make handwired/xeal60/rev1:default
+```
+
+You will see a lot of output and if everything worked correctly you will see the built hex file:
+
+```
+handwired_xeal60_rev1_default.hex
+```
+
+If you would like to use one of the alternative keymaps, or create your own, copy one of the existing [keymaps](keymaps/) and run make like so:
+
+
+```
+$ make handwired/xeal60/rev1:YOUR_KEYMAP_NAME
+```
+
+If everything worked correctly you will see a file:
+
+```
+handwired_xeal60_rev1_YOUR_KEYMAP_NAME.hex
+```
+
+For more information on customizing keymaps, take a look at the primary documentation for [Customizing Your Keymap](/docs/faq_keymap.md) in the main readme.md.
+
+
+Features
+--------
+
+For the full Quantum Mechanical Keyboard feature list, see [the parent readme.md](/readme.md).
+
+Some features supported by the firmware:
+
+* Either half can connect to the computer via USB, or both halves can be used
+ independently.
+* I2C connection between the two halves if for some
+ reason you require a faster connection between the two halves. Note this
+ requires an extra wire between halves and pull-up resistors on the data lines.
+
+Required Hardware
+-----------------
+
+Apart from diodes and key switches for the keyboard matrix in each half, you
+will need:
+
+* 2 Arduino Pro Micros. You can find these on AliExpress for ≈3.50USD each.
+* 2 TRRS sockets and 1 TRRS cable, or 2 TRS sockets and 1 TRS cable
+
+Alternatively, you can use any sort of cable and socket that has at least 4
+wires. You will need a cable with at least 4 wires and 2x 4.7kΩ pull-up resistors
+
+Optional Hardware
+-----------------
+
+A speaker can be hooked-up to either side to the `5` (`C6`) pin and `GND`, and turned on via `AUDIO_ENABLE`.
+
+Wiring
+------
+
+The 3 wires of the TRS/TRRS cable need to connect GND, VCC, and digital pin 3 (i.e.
+PD0 on the ATmega32u4) between the two Pro Micros.
+
+Next, wire your key matrix to any of the remaining 17 IO pins of the pro micro
+and modify the `matrix.c` accordingly.
+
+The wiring for serial:
+
+![serial wiring](https://i.imgur.com/C3D1GAQ.png)
+
+
+Notes on Software Configuration
+-------------------------------
+
+Configuring the firmware is similar to any other QMK project. One thing
+to note is that `MATRIX_ROWS` in `config.h` is the total number of rows between
+the two halves, i.e. if your split keyboard has 5 rows in each half, then use
+`MATRIX_ROWS=10`.
+
+Also, the current implementation assumes a maximum of 8 columns, but it would
+not be very difficult to adapt it to support more if required.
+
+Flashing
+-------
+From the top level `qmk_firmware` directory run `make KEYBOARD:KEYMAP:avrdude` for automatic serial port resolution and flashing.
+Example: `make handwired/xeal60/rev1:default:avrdude`
+
+
+Choosing which board to plug the USB cable into (choosing Master)
+--------
+Because the two boards are identical, the firmware has logic to differentiate the left and right board.
+
+It uses two strategies to figure things out: looking at the EEPROM (memory on the chip) or looking if the current board has the usb cable.
+
+The EEPROM approach requires additional setup (flashing the eeprom) but allows you to swap the usb cable to either side.
+
+The USB cable approach is easier to setup and if you just want the usb cable on the left board, you do not need to do anything extra.
+
+### Setting the left hand as master
+If you always plug the usb cable into the left board, nothing extra is needed as this is the default. Comment out `EE_HANDS` and comment out `I2C_MASTER_RIGHT` or `MASTER_RIGHT` if for some reason it was set.
+
+### Setting the right hand as master
+If you always plug the usb cable into the right board, add an extra flag to your `config.h`
+```
+ #define MASTER_RIGHT
+```
+
+### Setting EE_hands to use either hands as master
+If you define `EE_HANDS` in your `config.h`, you will need to set the
+EEPROM for the left and right halves.
+
+The EEPROM is used to store whether the
+half is left handed or right handed. This makes it so that the same firmware
+file will run on both hands instead of having to flash left and right handed
+versions of the firmware to each half. To flash the EEPROM file for the left
+half run:
+```
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-lefthand.eep"
+// or the equivalent in dfu-programmer
+
+```
+and similarly for right half
+```
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-righthand.eep"
+// or the equivalent in dfu-programmer
+```
+
+NOTE: replace `$(COM_PORT)` with the port of your device (e.g. `/dev/ttyACM0`)
+
+After you have flashed the EEPROM, you then need to set `EE_HANDS` in your config.h, rebuild the hex files and reflash.
+
+Note that you need to program both halves, but you have the option of using
+different keymaps for each half. You could program the left half with a QWERTY
+layout and the right half with a Colemak layout using bootmagic's default layout option.
+Then if you connect the left half to a computer by USB the keyboard will use QWERTY and Colemak when the
+right half is connected.
+
+
+Notes on Using Pro Micro 3.3V
+-----------------------------
+
+Do update the `F_CPU` parameter in `rules.mk` to `8000000` which reflects
+the frequency on the 3.3V board.
+
+Also, if the slave board is producing weird characters in certain columns,
+update the following line in `matrix.c` to the following:
+
+```
+// _delay_us(30); // without this wait read unstable value.
+_delay_us(300); // without this wait read unstable value.
+```
diff --git a/keyboards/handwired/xealous/rev1/config.h b/keyboards/handwired/xealous/rev1/config.h
new file mode 100644
index 000000000..6fc769b5f
--- /dev/null
+++ b/keyboards/handwired/xealous/rev1/config.h
@@ -0,0 +1,90 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef REV1_CONFIG_H
+#define REV1_CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x4131
+#define PRODUCT_ID 0x5141
+#define DEVICE_VER 0x0001
+#define MANUFACTURER XeaLouS
+#define PRODUCT XeaL60
+#define DESCRIPTION A split keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+// wiring of each half
+// Ascii art of pro micro. Pin names PD3, PD2, etc.
+//Usage| Name | Label Label| Name | Usage
+// PORT
+// | PD3 TX0 RAW |
+// | PD2 RX1 GND |SerGnd
+// | GND RESET |
+// | GND VCC |SerVCc
+// | PD1 2 A3 PF4 | Col7
+//Ser | PD0 3 A2 PF5 | Col6
+//Row4 | PD4 4 A1 PF6 | Col5
+//AUDIO| PC6 5 A0 PF7 | Col4
+//Row3 | PD7 6 15 PB1 | Col3
+//Row2 | PE6 7 14 PB3 | Col2
+//Row1 | PB4 8 13 PB2 | Col1
+//Row0 | PB5 9 10 PB6 | Col0
+
+// Note reservation of C6 for audio
+#define MATRIX_ROW_PINS { B5, B4, E6, D7, D4 }
+#define MATRIX_COL_PINS { B6, B2, B3, B1, F7, F6, F5, F4 }
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+#define NO_ACTION_ONESHOT
+#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+#define IGNORE_MOD_TAP_INTERRUPT
+#endif
diff --git a/keyboards/handwired/xealous/rev1/rev1.c b/keyboards/handwired/xealous/rev1/rev1.c
new file mode 100644
index 000000000..3e51421d8
--- /dev/null
+++ b/keyboards/handwired/xealous/rev1/rev1.c
@@ -0,0 +1,6 @@
+#include "quantum.h"
+#include "rev1.h"
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
diff --git a/keyboards/handwired/xealous/rev1/rev1.h b/keyboards/handwired/xealous/rev1/rev1.h
new file mode 100644
index 000000000..d195af49d
--- /dev/null
+++ b/keyboards/handwired/xealous/rev1/rev1.h
@@ -0,0 +1,32 @@
+#ifndef REV1_H
+#define REV1_H
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+//void promicro_bootloader_jmp(bool program);
+#define XXX KC_NO
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, R06, R05, R04, R03, R02, R01, R00, \
+ L10, L11, L12, L13, L14, L15, R17, R16, R15, R14, R13, R12, R11, R10, \
+ L20, L21, L22, L23, L24, L25, R26, R25, R24, R23, R22, R21, R20, \
+ L30, L31, L32, L33, L34, L35, R35, R34, R33, R32, R31, R30, \
+ L40, L41, L42, L43, L44, R44, R43, R42, R41, R40 \
+ ) \
+ { \
+ { XXX, L06, L05, L04, L03, L02, L01, L00 }, \
+ { XXX, XXX, L15, L14, L13, L12, L11, L10 }, \
+ { XXX, XXX, L25, L24, L23, L22, L21, L20 }, \
+ { XXX, XXX, L35, L34, L33, L32, L31, L30 }, \
+ { XXX, XXX, XXX, L44, L43, L42, L41, L40 }, \
+ { R00, R01, R02, R03, R04, R05, R06, XXX }, \
+ { R10, R11, R12, R13, R14, R15, R16, R17 }, \
+ { R20, R21, R22, R23, R24, R25, R26, XXX }, \
+ { R30, R31, R32, R33, R34, R35, XXX, XXX }, \
+ { R40, R41, R42, R43, R44, XXX, XXX, XXX } \
+ }
+
+#define LAYOUT_split60 LAYOUT
+
+#endif
diff --git a/keyboards/handwired/xealous/rev1/rules.mk b/keyboards/handwired/xealous/rev1/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/handwired/xealous/rev1/rules.mk
diff --git a/keyboards/handwired/xealous/rules.mk b/keyboards/handwired/xealous/rules.mk
new file mode 100644
index 000000000..eebd11d86
--- /dev/null
+++ b/keyboards/handwired/xealous/rules.mk
@@ -0,0 +1,73 @@
+SRC += matrix_scanrate.c matrix.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SPLIT_KEYBOARD = yes # Use shared split_common code
+SUBPROJECT_rev1 = yes
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+CUSTOM_MATRIX = yes
+
+LAYOUTS = split60
+
+DEFAULT_FOLDER = handwired/xealous/rev1
diff --git a/keyboards/helix/pico/config.h b/keyboards/helix/pico/config.h
index b49f0173b..b8822e227 100644
--- a/keyboards/helix/pico/config.h
+++ b/keyboards/helix/pico/config.h
@@ -28,7 +28,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DESCRIPTION A split keyboard for the cheap makers
-#define PREVENT_STUCK_MODIFIERS
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 100
@@ -84,10 +83,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
//#define RGBLED_NUM 12 // Number of LEDs. see ./keymaps/default/config.h
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
// Helix keyboard RGB LED support
//#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no
diff --git a/keyboards/helix/pico/keymaps/biacco/config.h b/keyboards/helix/pico/keymaps/biacco/config.h
new file mode 100644
index 000000000..765318519
--- /dev/null
+++ b/keyboards/helix/pico/keymaps/biacco/config.h
@@ -0,0 +1,43 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+// place overrides here
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(STARTUP_SOUND)
+ #define AUDIO_CLICKY
+#endif
+
+// If you need more program area, try select and reduce rgblight modes to use.
+
+// 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
diff --git a/keyboards/helix/pico/keymaps/biacco/keymap.c b/keyboards/helix/pico/keymaps/biacco/keymap.c
new file mode 100644
index 000000000..b4ee4fcaa
--- /dev/null
+++ b/keyboards/helix/pico/keymaps/biacco/keymap.c
@@ -0,0 +1,118 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ BASE = 0,
+ META,
+ SYMB,
+ GAME
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+//Macros
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | @ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Alt | A | S | D | F | G | | H | J | K | L | ; | : |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / |\/Sft |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App | PrtSc| ESC/ |Space/|Tab/ |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
+ * | | | | | ~SYMB|RCtrl |Shift |Space |~META | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+
+[BASE] = LAYOUT( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \
+ KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO) , \
+ KC_LCTL, KC_LGUI, KC_APP, KC_PSCR, LT(SYMB, KC_ESC), RCTL_T(KC_SPC), SFT_T(KC_TAB), KC_BSPC, LT(META, KC_ENT), KC_DELT, KC_PSCR, TG(GAME), TG(SYMB), KC_JYEN \
+ ),
+
+ /* META
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | ^ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Alt | F1 | |Muhen | Henk | | | Left | Down | Up |Right | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Sft | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 |\/Sft |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ |Back |Enter/| Del |Reset |=>GAME|=>SYMB| \ |
+ * | | | | |~SYMB |RCtrl |Shift |Space |~META | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [META] = LAYOUT( \
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, \
+ _______, KC_F1, XXXXXXX, KC_MHEN, KC_HENK, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, \
+ _______, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, SFT_T(KC_RO), \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______ \
+ ),
+
+ /* SYMB
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ! | " | # | $ | % | & | | ' | ( | ) | ~ | = | ~ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Alt | | | | | | | ( | ) | { | } | + | * |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Sft | | | | | | | [ | ] | < | > | ? | \ |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc |ESC/ |Space/|Tab/ |Back |Enter/| Del |PrtSc |=>GAME|=>SYMB| \ |
+ * | | | | |~SYMB |RCtrl |Shift |Space |~META | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [SYMB] = LAYOUT( \
+ S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), S(KC_9), S(KC_0), S(KC_MINS), S(KC_EQL), \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, S(KC_8), S(KC_9), S(KC_RBRC), S(KC_BSLS), S(KC_SCLN), S(KC_QUOT), \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_RBRC, KC_BSLS, S(KC_COMM), S(KC_DOT), S(KC_SLSH), S(KC_RO), \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+ /* GAME
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | @ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Alt | A | S | D | F | G | | H | J | K | L | ; | : |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Sft | Z | X | C | V | B | | N | M | , | . | / |\/Sft |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | Ctrl | GUI | App |PrtSc | ESC |Space |Tab |Back |Enter | Del |PrtSc |=>GAME|=>SYMB| \ |
+ * | | | | | | | |Space | | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [GAME] = LAYOUT( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, \
+ KC_LALT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_RO), \
+ KC_LCTRL, KC_LGUI, KC_APP, KC_PSCR, KC_ESC, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_DELT, KC_PSCR, _______, _______, KC_JYEN \
+ )
+
+};
diff --git a/keyboards/helix/pico/keymaps/biacco/rules.mk b/keyboards/helix/pico/keymaps/biacco/rules.mk
new file mode 100644
index 000000000..d6b36580e
--- /dev/null
+++ b/keyboards/helix/pico/keymaps/biacco/rules.mk
@@ -0,0 +1,125 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port B5
+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
+
+define HELIX_CUSTOMISE_MSG
+ $(info Helix customize)
+ $(info - OLED_ENABLE=$(OLED_ENABLE))
+ $(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE))
+ $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE))
+ $(info - LED_ANIMATION=$(LED_ANIMATIONS))
+ $(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE))
+endef
+
+# Helix keyboard customize
+# you can edit follows 6 Variables
+# jp: 以下の6つの変数を必要に応じて編集します。
+OLED_ENABLE = no # OLED_ENABLE
+LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
+LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
+LED_ANIMATIONS = no # LED animations
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
+
+#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
+#### Do not enable these with audio at the same time.
+
+### Helix keyboard 'default' keymap: convenient command line option
+## make HELIX=<options> helix:defualt
+## option= oled | back | under | na | ios
+## ex.
+## make HELIX=oled helix:defualt
+## make HELIX=oled,back helix:defualt
+## make HELIX=oled,under helix:defualt
+## make HELIX=oled,back,na helix:defualt
+## make HELIX=oled,back,ios helix:defualt
+##
+ifneq ($(strip $(HELIX)),)
+ ifeq ($(findstring oled,$(HELIX)), oled)
+ OLED_ENABLE = yes
+ endif
+ ifeq ($(findstring back,$(HELIX)), back)
+ LED_BACK_ENABLE = yes
+ else ifeq ($(findstring under,$(HELIX)), under)
+ LED_UNDERGLOW_ENABLE = yes
+ endif
+ ifeq ($(findstring na,$(HELIX)), na)
+ LED_ANIMATIONS = no
+ endif
+ ifeq ($(findstring ios,$(HELIX)), ios)
+ IOS_DEVICE_ENABLE = yes
+ endif
+ $(eval $(call HELIX_CUSTOMISE_MSG))
+ $(info )
+endif
+
+# Uncomment these for checking
+# jp: コンパイル時にカスタマイズの状態を表示したい時はコメントをはずします。
+# $(eval $(call HELIX_CUSTOMISE_MSG))
+# $(info )
+
+ifeq ($(strip $(LED_BACK_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+ OPT_DEFS += -DRGBLED_BACK
+ ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ $(eval $(call HELIX_CUSTOMISE_MSG))
+ $(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes')
+ endif
+else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+else
+ RGBLIGHT_ENABLE = no
+endif
+
+ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+endif
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+ OPT_DEFS += -DLED_ANIMATIONS
+endif
+
+ifeq ($(strip $(OLED_ENABLE)), yes)
+ OPT_DEFS += -DOLED_ENABLE
+endif
+
+ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
+ OPT_DEFS += -DLOCAL_GLCDFONT
+endif
+
+ifeq ($(strip $(AUDIO_ENABLE)),yes)
+ ifeq ($(strip $(RGBLIGHT_ENABLE)),yes)
+ Link_Time_Optimization = yes
+ endif
+ ifeq ($(strip $(OLED_ENABLE)),yes)
+ Link_Time_Optimization = yes
+ endif
+endif
+
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+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
+
+# Uncomment these for debugging
+# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
+# $(info -- OPT_DEFS=$(OPT_DEFS))
+# $(info )
diff --git a/keyboards/helix/pico/keymaps/default/config.h b/keyboards/helix/pico/keymaps/default/config.h
index 6084b0970..20dfc9f98 100644
--- a/keyboards/helix/pico/keymaps/default/config.h
+++ b/keyboards/helix/pico/keymaps/default/config.h
@@ -28,4 +28,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define AUDIO_CLICKY
#endif
+// If you need more program area, try select and reduce rgblight modes to use.
+
+// 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
+
#endif /* CONFIG_USER_H */
diff --git a/keyboards/helix/pico/keymaps/default/keymap.c b/keyboards/helix/pico/keymaps/default/keymap.c
index 75221d485..5273bb4a0 100644
--- a/keyboards/helix/pico/keymaps/default/keymap.c
+++ b/keyboards/helix/pico/keymaps/default/keymap.c
@@ -164,7 +164,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, AU_ON, AU_OFF, MU_TOG, MU_MOD, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
_______, CK_TOGG, CK_RST, CK_UP, CK_DOWN, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD \
)
};
@@ -238,7 +238,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} else {
TOG_STATUS = !TOG_STATUS;
#ifdef RGBLIGHT_ENABLE
- //rgblight_mode(16);
+ //rgblight_mode(RGBLIGHT_MODE_SNAKE + 1);
#endif
}
layer_on(_LOWER);
@@ -261,7 +261,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} else {
TOG_STATUS = !TOG_STATUS;
#ifdef RGBLIGHT_ENABLE
- //rgblight_mode(15);
+ //rgblight_mode(RGBLIGHT_MODE_SNAKE);
#endif
}
layer_on(_RAISE);
diff --git a/keyboards/helix/pico/keymaps/default/rules.mk b/keyboards/helix/pico/keymaps/default/rules.mk
index afb124068..c5ee8acb2 100644
--- a/keyboards/helix/pico/keymaps/default/rules.mk
+++ b/keyboards/helix/pico/keymaps/default/rules.mk
@@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port B5
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no # Enable one-hand typing
define HELIX_CUSTOMISE_MSG
@@ -92,7 +92,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
endif
ifeq ($(strip $(LED_ANIMATIONS)), yes)
- OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
endif
ifeq ($(strip $(OLED_ENABLE)), yes)
diff --git a/keyboards/helix/pico/keymaps/mtei/config.h b/keyboards/helix/pico/keymaps/mtei/config.h
new file mode 100644
index 000000000..c5812de8d
--- /dev/null
+++ b/keyboards/helix/pico/keymaps/mtei/config.h
@@ -0,0 +1,52 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+// place overrides here
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(STARTUP_SOUND)
+ #define AUDIO_CLICKY
+#endif
+
+#undef TAPPING_TERM
+#define TAPPING_TERM 300
+#define PERMISSIVE_HOLD
+/* when TAPPING_TERM >= 500 same effect PERMISSIVE_HOLD.
+ see tmk_core/common/action_tapping.c */
+
+// If you need more program area, try select and reduce rgblight modes to use.
+
+// 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
+
+#endif /* CONFIG_USER_H */
diff --git a/keyboards/helix/pico/keymaps/mtei/keymap.c b/keyboards/helix/pico/keymaps/mtei/keymap.c
new file mode 100644
index 000000000..27bf06243
--- /dev/null
+++ b/keyboards/helix/pico/keymaps/mtei/keymap.c
@@ -0,0 +1,496 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+#ifdef CONSOLE_ENABLE
+ #include <print.h>
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ _QWERTY = 0,
+ _COLEMAK,
+ _DVORAK,
+ _EUCALYN,
+ _NUML,
+ _NUMR,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ EUCALYN,
+ NUML,
+ NUMR,
+ KC_xEISU,
+ KC_xKANA,
+ KC_ZERO2,
+ RGBRST
+};
+
+//Macros
+#define KC_LOWER MO(_LOWER)
+#define KC_NUML LT(_NUML,KC_SPC)
+#define KC_NUMR LT(_NUMR,KC_SPC)
+#define KC_RABS LT(_RAISE,KC_BSPC)
+#define KC_RAEN LT(_RAISE,KC_ENT)
+#define KC_____ _______
+#define KC_XXXX XXXXXXX
+#define KC_ADJ MO(_ADJUST)
+#define KC_LSMI LSFT(KC_MINS)
+#define KC_LSEQ LSFT(KC_EQL)
+#define KC_LSRB LSFT(KC_RBRC)
+#define KC_LSLB LSFT(KC_LBRC)
+#define KC_LSGR LSFT(KC_GRV)
+#define KC_LSQT LSFT(KC_QUOT)
+#define ___ _______
+#define KC_S0 LSFT(KC_0)
+#define KC_S1 LSFT(KC_1)
+#define KC_S2 LSFT(KC_2)
+#define KC_S3 LSFT(KC_3)
+#define KC_S4 LSFT(KC_4)
+#define KC_S5 LSFT(KC_5)
+#define KC_S6 LSFT(KC_6)
+#define KC_S7 LSFT(KC_7)
+#define KC_S8 LSFT(KC_8)
+#define KC_S9 LSFT(KC_9)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | Ctrl |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_QWERTY] = LAYOUT_kc( \
+ ESC, Q, W, E, R, T, Y, U, I, O, P, BSLS, \
+ LCTL, A, S, D, F, G, H, J, K, L, SCLN, RCTL, \
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT, \
+ LOWER,LOWER, CAPS, LALT, LGUI,NUML, RABS, RAEN,NUMR, RGUI, RALT, APP,LOWER, LOWER \
+ ),
+
+ /* Colemak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ESC | Q | W | F | P | G | | J | L | U | Y | ; | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | R | S | T | D | | H | N | E | I | O | Ctrl |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | K | M | , | . | / | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_COLEMAK] = LAYOUT_kc( \
+ ESC, Q, W, F, P, G, J, L, U, Y, SCLN, BSLS, \
+ LCTL, A, R, S, T, D, H, N, E, I, O, RCTL, \
+ LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, RSFT, \
+ LOWER,LOWER, CAPS, LALT, LGUI,NUML, RABS, RAEN,NUMR, RGUI, RALT, APP,LOWER, LOWER \
+ ),
+
+ /* Dvorak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ESC | ' | , | . | P | Y | | F | G | C | R | L | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | O | E | U | I | | D | H | T | N | S | Ctrl |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | | B | M | W | V | Z | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_DVORAK] = LAYOUT_kc( \
+ ESC, QUOT, COMM, DOT, P, Y, F, G, C, R, L, BSLS, \
+ LCTL, A, O, E, U, I, D, H, T, N, S, RCTL, \
+ LSFT, SCLN, Q, J, K, X, B, M, W, V, Z, RSFT, \
+ LOWER,LOWER, CAPS, LALT, LGUI,NUML, RABS, RAEN,NUMR, RGUI, RALT, APP,LOWER, LOWER \
+ ),
+
+ /* Eucalyn (http://eucalyn.hatenadiary.jp/entry/about-eucalyn-layout)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ESC | Q | W | , | . | ; | | M | R | D | Y | P | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | O | E | I | U | | G | T | K | S | N | Ctrl |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | F | | B | H | J | L | / | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_EUCALYN] = LAYOUT_kc( \
+ ESC, Q, W, COMM, DOT, SCLN, M, R, D, Y, P, BSLS, \
+ LCTL, A, O, E, I, U, G, T, K, S, N, RCTL, \
+ LSFT, Z, X, C, V, F, B, H, J, L, SLSH, RSFT, \
+ LOWER,LOWER, CAPS, LALT, LGUI,NUML, RABS, RAEN,NUMR, RGUI, RALT, APP,LOWER, LOWER \
+ ),
+
+ /* Num
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_NUML] = LAYOUT_kc( \
+ ____, S1, S2, S3, S4, S5, S6, S7, S8, S9, S0, ____, \
+ ____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, F12, \
+ ____, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, \
+ ____, ____, ____, ____, ____, ____, ____, ____, SPC, ____, ____, ____, ____, ____ \
+ ),
+
+ [_NUMR] = LAYOUT_kc( \
+ ____, S1, S2, S3, S4, S5, S6, S7, S8, S9, S0, ____, \
+ ____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, F12, \
+ ____, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, \
+ ____, ____, ____, ____, ____, SPC, ____, ____, ____, ____, ____, ____, ____, ____ \
+ ),
+
+ /* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | |Pause | ScrLk| Ins | | | | Ins | ScrLk|Pause | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | PgUp | | Up |Delete| Home | | Home |Delete| Up | | PgUp | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | PgDn | Left | Down | Right| End | | End | Left | Down | Right| PgDn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | PrtSc| | | |Adjust|Adjust| | | | PrtSc| | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT_kc( \
+ XXXX, XXXX, PAUS, SLCK, INS, XXXX, XXXX, INS, SLCK, PAUS, XXXX, ____, \
+ ____, HOME, XXXX, UP, DEL, PGUP, PGUP, DEL, UP, XXXX, HOME, ____, \
+ ____, END, LEFT, DOWN, RGHT, PGDN, PGDN, LEFT, DOWN, RGHT, END, ____, \
+ ____, ____, PSCR, ____, ____, ____, ADJ, ADJ, ____, ____, ____, PSCR, ____, ____ \
+ ),
+
+ /* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | TAB | | | | _ | - | | = | + | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | EISU | | | | { | [ | | ] | } | | | | KANA |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | ~ | ` | | ' | " | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT_kc( \
+ TAB, XXXX, XXXX, XXXX, LSMI, MINS, EQL, LSEQ, XXXX, XXXX, XXXX, XXXX, \
+ xEISU, XXXX, XXXX, XXXX, LSLB, LBRC, RBRC, LSRB, XXXX, XXXX, XXXX, xKANA, \
+ XXXX, XXXX, XXXX, XXXX, LSGR, GRV, QUOT, LSQT, XXXX, XXXX, XXXX, XXXX, \
+ ADJ, ADJ, XXXX, ____, ____, XXXX, ____, ____, XXXX, ____, ____, XXXX, ADJ, ADJ \
+ ),
+
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | Reset|RGBRST|RGB ON|Aud on| Win | | Win | |Qwerty|Euclyn|Colemk|Dvorak|
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | HUE+ | SAT+ | VAL+ |RGB md|Audoff| Mac | | Mac | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | HUE- | SAT- | VAL- | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT( \
+ XXXXXXX, RESET, RGBRST, RGB_TOG, AU_ON, AG_SWAP, AG_SWAP, XXXXXXX, QWERTY, EUCALYN, COLEMAK, DVORAK, \
+ RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, AU_OFF, AG_NORM, AG_NORM, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ___,___, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______ \
+ )
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+#endif
+
+static int current_default_layer;
+
+uint32_t default_layer_state_set_kb(uint32_t state) {
+ // 1<<_QWERTY - 1 == 1 - 1 == _QWERTY (=0)
+ // 1<<_COLEMAK - 1 == 2 - 1 == _COLEMAK (=1)
+ current_default_layer = state - 1;
+ // 1<<_DVORAK - 2 == 4 - 2 == _DVORAK (=2)
+ if ( current_default_layer == 3 ) current_default_layer -= 1;
+ // 1<<_EUCALYN - 5 == 8 - 5 == _EUCALYN (=3)
+ if ( current_default_layer == 7 ) current_default_layer -= 4;
+ return state;
+}
+
+void update_base_layer(int base)
+{
+ if( current_default_layer != base ) {
+ eeconfig_update_default_layer(1UL<<base);
+ default_layer_set(1UL<<base);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ update_base_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ update_base_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ update_base_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case EUCALYN:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ update_base_layer(_EUCALYN);
+ }
+ return false;
+ break;
+ case KC_xEISU:
+ 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);
+ }
+ return false;
+ break;
+ case KC_xKANA:
+ if (record->event.pressed) {
+ if(keymap_config.swap_lalt_lgui==false){
+ register_code(KC_LANG1);
+ }else{
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG1);
+ }
+ return false;
+ break;
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(50); // gets rid of tick
+}
+
+void shutdown_user()
+{
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_SONG(music_scale);
+}
+
+#endif
+
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+void matrix_scan_user(void) {
+ iota_gfx_task(); // this is what updates the display continuously
+}
+
+void matrix_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+static void render_logo(struct CharacterMatrix *matrix) {
+
+ static char logo[]={
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
+ 0};
+ matrix_write(matrix, logo);
+#if defined(RGBLIGHT_ENABLE) && defined(RGBLIGHT_ANIMATIONS)
+ char buf[30];
+ if(rgblight_config.enable) {
+ snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
+ rgblight_config.mode,
+ rgblight_config.hue/RGBLIGHT_HUE_STEP,
+ rgblight_config.sat/RGBLIGHT_SAT_STEP,
+ rgblight_config.val/RGBLIGHT_VAL_STEP);
+ matrix_write(matrix, buf);
+ }
+#endif
+ //matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
+}
+
+static const char Qwerty_name[] PROGMEM = " Qwerty";
+static const char Colemak_name[] PROGMEM = " Colemak";
+static const char Dvorak_name[] PROGMEM = " Dvorak";
+static const char Eucalyn_name[] PROGMEM = " Eucalyn";
+
+static const char NumL_name[] PROGMEM = ":NumL";
+static const char NumR_name[] PROGMEM = ":NumR";
+static const char Lower_name[] PROGMEM = ":Func";
+static const char Raise_name[] PROGMEM = ":Extra";
+static const char Adjust_name[] PROGMEM = ":Adjust";
+
+static const char *layer_names[] = {
+ [_QWERTY] = Qwerty_name,
+ [_COLEMAK] = Colemak_name,
+ [_DVORAK] = Dvorak_name,
+ [_EUCALYN] = Eucalyn_name,
+
+ [_NUML] = NumL_name,
+ [_NUMR] = NumR_name,
+ [_LOWER] = Lower_name,
+ [_RAISE] = Raise_name,
+ [_ADJUST] = Adjust_name
+};
+
+void render_status(struct CharacterMatrix *matrix) {
+
+ // Render to mode icon
+ static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
+ if(keymap_config.swap_lalt_lgui==false){
+ matrix_write(matrix, logo[0][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[0][1]);
+ }else{
+ matrix_write(matrix, logo[1][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[1][1]);
+ }
+
+ // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
+ int name_num;
+ uint32_t lstate;
+ matrix_write_P(matrix, layer_names[current_default_layer]);
+ matrix_write_P(matrix, PSTR("\n"));
+ for( lstate = layer_state, name_num = 0;
+ lstate && name_num < sizeof(layer_names)/sizeof(char *);
+ lstate >>=1, name_num++ ) {
+ if( (lstate & 1) != 0 ) {
+ if( layer_names[name_num] ) {
+ matrix_write_P(matrix, layer_names[name_num]);
+ }
+ }
+ }
+
+ // Host Keyboard LED Status
+ char led[40];
+ snprintf(led, sizeof(led), "\n%s %s %s",
+ (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
+ matrix_write(matrix, led);
+}
+
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+
+#if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+#endif
+
+ matrix_clear(&matrix);
+ if(is_master){
+ render_status(&matrix);
+ }else{
+ render_logo(&matrix);
+ }
+ matrix_update(&display, &matrix);
+}
+
+#endif
diff --git a/keyboards/helix/pico/keymaps/mtei/rules.mk b/keyboards/helix/pico/keymaps/mtei/rules.mk
new file mode 100644
index 000000000..c5ee8acb2
--- /dev/null
+++ b/keyboards/helix/pico/keymaps/mtei/rules.mk
@@ -0,0 +1,129 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = yes # Audio output on port B5
+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
+
+define HELIX_CUSTOMISE_MSG
+ $(info Helix customize)
+ $(info - OLED_ENABLE=$(OLED_ENABLE))
+ $(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE))
+ $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE))
+ $(info - LED_ANIMATION=$(LED_ANIMATIONS))
+ $(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE))
+endef
+
+# Helix keyboard customize
+# you can edit follows 6 Variables
+# jp: 以下の6つの変数を必要に応じて編集します。
+OLED_ENABLE = no # OLED_ENABLE
+LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
+LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
+LED_ANIMATIONS = yes # LED animations
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
+
+#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
+#### Do not enable these with audio at the same time.
+
+### Helix keyboard 'default' keymap: convenient command line option
+## make HELIX=<options> helix:defualt
+## option= oled | back | under | na | ios
+## ex.
+## make HELIX=oled helix:defualt
+## make HELIX=oled,back helix:defualt
+## make HELIX=oled,under helix:defualt
+## make HELIX=oled,back,na helix:defualt
+## make HELIX=oled,back,ios helix:defualt
+##
+ifneq ($(strip $(HELIX)),)
+ ifeq ($(findstring oled,$(HELIX)), oled)
+ OLED_ENABLE = yes
+ endif
+ ifeq ($(findstring back,$(HELIX)), back)
+ LED_BACK_ENABLE = yes
+ else ifeq ($(findstring under,$(HELIX)), under)
+ LED_UNDERGLOW_ENABLE = yes
+ endif
+ ifeq ($(findstring na,$(HELIX)), na)
+ LED_ANIMATIONS = no
+ endif
+ ifeq ($(findstring ios,$(HELIX)), ios)
+ IOS_DEVICE_ENABLE = yes
+ endif
+ $(eval $(call HELIX_CUSTOMISE_MSG))
+ $(info )
+endif
+
+# Uncomment these for checking
+# jp: コンパイル時にカスタマイズの状態を表示したい時はコメントをはずします。
+# $(eval $(call HELIX_CUSTOMISE_MSG))
+# $(info )
+
+ifeq ($(strip $(LED_BACK_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+ OPT_DEFS += -DRGBLED_BACK
+ ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ $(eval $(call HELIX_CUSTOMISE_MSG))
+ $(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes')
+ endif
+else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+else
+ RGBLIGHT_ENABLE = no
+endif
+
+ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+endif
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+ OPT_DEFS += -DLED_ANIMATIONS
+endif
+
+ifeq ($(strip $(OLED_ENABLE)), yes)
+ OPT_DEFS += -DOLED_ENABLE
+endif
+
+ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
+ OPT_DEFS += -DLOCAL_GLCDFONT
+endif
+
+ifeq ($(strip $(AUDIO_ENABLE)),yes)
+ ifeq ($(strip $(RGBLIGHT_ENABLE)),yes)
+ Link_Time_Optimization = yes
+ endif
+ ifeq ($(strip $(OLED_ENABLE)),yes)
+ Link_Time_Optimization = yes
+ endif
+endif
+
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+endif
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
+
+# Uncomment these for debugging
+# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
+# $(info -- OPT_DEFS=$(OPT_DEFS))
+# $(info )
diff --git a/keyboards/helix/pico/pico.c b/keyboards/helix/pico/pico.c
index 5e248ccff..bb8ba9ca2 100644
--- a/keyboards/helix/pico/pico.c
+++ b/keyboards/helix/pico/pico.c
@@ -2,6 +2,12 @@
#ifdef SSD1306OLED
+#include "ssd1306.h"
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ return process_record_gfx(keycode,record) && 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/helix/pico/pico.h b/keyboards/helix/pico/pico.h
index a3d658daa..153132775 100644
--- a/keyboards/helix/pico/pico.h
+++ b/keyboards/helix/pico/pico.h
@@ -62,4 +62,18 @@
}
#endif
+#define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35 \
+ ) \
+ LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L36, KC_##R36, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \
+ )
+
+
#endif
diff --git a/keyboards/helix/pico/rules.mk b/keyboards/helix/pico/rules.mk
index c994ac8de..75bf0a5ef 100644
--- a/keyboards/helix/pico/rules.mk
+++ b/keyboards/helix/pico/rules.mk
@@ -1,3 +1,2 @@
-SRC += pico/matrix.c \
- pico/split_util.c \
- ws2812.c
+SRC += pico/matrix.c
+SRC += pico/split_util.c
diff --git a/keyboards/helix/pico/serial_config.h b/keyboards/helix/pico/serial_config.h
index 82c6e4e83..fc8736d47 100644
--- a/keyboards/helix/pico/serial_config.h
+++ b/keyboards/helix/pico/serial_config.h
@@ -1,16 +1,9 @@
-#ifndef SOFT_SERIAL_CONFIG_H
-#define SOFT_SERIAL_CONFIG_H
+//// #error rev2 serial config
+#ifndef SOFT_SERIAL_PIN
/* Soft Serial defines */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD2)
-#define SERIAL_PIN_INTERRUPT INT2_vect
+#define SOFT_SERIAL_PIN D2
#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
-
-//// #error rev2 serial config
-
-#endif /* SOFT_SERIAL_CONFIG_H */
+#endif
diff --git a/keyboards/helix/rev1/config.h b/keyboards/helix/rev1/config.h
index 7fec62fc8..07b5c4f6f 100644
--- a/keyboards/helix/rev1/config.h
+++ b/keyboards/helix/rev1/config.h
@@ -74,11 +74,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
-#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
+#define RGBLED_NUM 12 // Number of LEDs
/*
* Feature disable options
* These options are also useful to firmware size reduction.
diff --git a/keyboards/helix/rev1/keymaps/OLED_sample/config.h b/keyboards/helix/rev1/keymaps/OLED_sample/config.h
index 0e1b787a5..5e8989d96 100644
--- a/keyboards/helix/rev1/keymaps/OLED_sample/config.h
+++ b/keyboards/helix/rev1/keymaps/OLED_sample/config.h
@@ -35,7 +35,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define SSD1306OLED
-#define PREVENT_STUCK_MODIFIERS
+#define USE_SERIAL_PD2
+
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 100
diff --git a/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c b/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c
index fa51501e6..9b81979ff 100644
--- a/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c
+++ b/keyboards/helix/rev1/keymaps/OLED_sample/keymap.c
@@ -368,7 +368,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
} else {
TOG_STATUS = !TOG_STATUS;
- rgblight_mode(16);
+ rgblight_mode(RGBLIGHT_MODE_SNAKE + 1);
}
layer_on(_LOWER);
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
@@ -387,7 +387,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
} else {
TOG_STATUS = !TOG_STATUS;
- rgblight_mode(15);
+ rgblight_mode(RGBLIGHT_MODE_SNAKE);
}
layer_on(_RAISE);
update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
diff --git a/keyboards/helix/rev1/keymaps/OLED_sample/rules.mk b/keyboards/helix/rev1/keymaps/OLED_sample/rules.mk
deleted file mode 100644
index 3f8fd5dc6..000000000
--- a/keyboards/helix/rev1/keymaps/OLED_sample/rules.mk
+++ /dev/null
@@ -1,25 +0,0 @@
-
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
-
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/helix/rev1/keymaps/OLED_sample/serial_config.h b/keyboards/helix/rev1/keymaps/OLED_sample/serial_config.h
index be2e7cb8b..f56951e70 100644
--- a/keyboards/helix/rev1/keymaps/OLED_sample/serial_config.h
+++ b/keyboards/helix/rev1/keymaps/OLED_sample/serial_config.h
@@ -1,16 +1,9 @@
-#ifndef SOFT_SERIAL_CONFIG_H
-#define SOFT_SERIAL_CONFIG_H
+//// #error rev1/keymaps/OLED_sample serial config
+#ifndef SOFT_SERIAL_PIN
/* Soft Serial defines */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD2)
-#define SERIAL_PIN_INTERRUPT INT2_vect
+#define SOFT_SERIAL_PIN D2
#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
-
-//// #error rev1/keymaps/OLED_sample serial config
-
-#endif /* SOFT_SERIAL_CONFIG_H */
+#define SERIAL_MASTER_BUFFER_LENGTH 0
+#endif
diff --git a/keyboards/helix/rev1/rev1.c b/keyboards/helix/rev1/rev1.c
index d7ea9b723..309cca010 100644
--- a/keyboards/helix/rev1/rev1.c
+++ b/keyboards/helix/rev1/rev1.c
@@ -2,6 +2,12 @@
#ifdef SSD1306OLED
+#include "ssd1306.h"
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ return process_record_gfx(keycode,record) && 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/helix/rev1/rules.mk b/keyboards/helix/rev1/rules.mk
index daba80eae..13834f5da 100644
--- a/keyboards/helix/rev1/rules.mk
+++ b/keyboards/helix/rev1/rules.mk
@@ -1,4 +1,4 @@
-SRC += rev1/matrix.c \
- rev1/split_util.c
+SRC += rev1/matrix.c
+SRC += rev1/split_util.c
BACKLIGHT_ENABLE = no
diff --git a/keyboards/helix/rev1/serial_config.h b/keyboards/helix/rev1/serial_config.h
index 2b668a6af..32218f9bb 100644
--- a/keyboards/helix/rev1/serial_config.h
+++ b/keyboards/helix/rev1/serial_config.h
@@ -1,16 +1,9 @@
-#ifndef SOFT_SERIAL_CONFIG_H
-#define SOFT_SERIAL_CONFIG_H
+/// #error rev1 serial config
+#ifndef SOFT_SERIAL_PIN
/* Soft Serial defines */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
+#define SOFT_SERIAL_PIN D0
#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
-
-/// #error rev1 serial config
-
-#endif /* SOFT_SERIAL_CONFIG_H */
+#define SERIAL_MASTER_BUFFER_LENGTH 0
+#endif
diff --git a/keyboards/helix/rev2/config.h b/keyboards/helix/rev2/config.h
index 058236122..f7d35b371 100644
--- a/keyboards/helix/rev2/config.h
+++ b/keyboards/helix/rev2/config.h
@@ -28,7 +28,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DESCRIPTION A split keyboard for the cheap makers
-#define PREVENT_STUCK_MODIFIERS
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 100
@@ -88,10 +87,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
//#define RGBLED_NUM 12 // Number of LEDs. see ./keymaps/default/config.h
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
// Helix keyboard RGB LED support
//#define RGBLIGHT_ANIMATIONS : see ./rules.mk: LED_ANIMATIONS = yes or no
diff --git a/keyboards/helix/rev2/keymaps/default/config.h b/keyboards/helix/rev2/keymaps/default/config.h
index 6da6849a1..ed3767579 100644
--- a/keyboards/helix/rev2/keymaps/default/config.h
+++ b/keyboards/helix/rev2/keymaps/default/config.h
@@ -23,4 +23,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// place overrides here
+// If you need more program area, try select and reduce rgblight modes to use.
+
+// 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
+
#endif /* CONFIG_USER_H */
diff --git a/keyboards/helix/rev2/keymaps/default/keymap.c b/keyboards/helix/rev2/keymaps/default/keymap.c
index dca9be9a4..0fb821aff 100644
--- a/keyboards/helix/rev2/keymaps/default/keymap.c
+++ b/keyboards/helix/rev2/keymaps/default/keymap.c
@@ -183,7 +183,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, RESET, RGBRST, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD \
)
};
@@ -296,7 +296,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD \
)
};
@@ -373,7 +373,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} else {
TOG_STATUS = !TOG_STATUS;
#ifdef RGBLIGHT_ENABLE
- //rgblight_mode(16);
+ //rgblight_mode(RGBLIGHT_MODE_SNAKE + 1);
#endif
}
layer_on(_LOWER);
@@ -396,7 +396,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} else {
TOG_STATUS = !TOG_STATUS;
#ifdef RGBLIGHT_ENABLE
- //rgblight_mode(15);
+ //rgblight_mode(RGBLIGHT_MODE_SNAKE);
#endif
}
layer_on(_RAISE);
@@ -512,7 +512,7 @@ void music_scale_user(void)
// hook point for 'led_test' keymap
// 'default' keymap's led_test_init() is empty function, do nothing
-// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(35);
+// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(RGBLIGHT_MODE_RGB_TEST);
__attribute__ ((weak))
void led_test_init(void) {}
diff --git a/keyboards/helix/rev2/keymaps/default/rules.mk b/keyboards/helix/rev2/keymaps/default/rules.mk
index 5340a74ba..3f84b895a 100644
--- a/keyboards/helix/rev2/keymaps/default/rules.mk
+++ b/keyboards/helix/rev2/keymaps/default/rules.mk
@@ -14,7 +14,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no # Enable one-hand typing
define HELIX_CUSTOMISE_MSG
@@ -100,7 +100,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
endif
ifeq ($(strip $(LED_ANIMATIONS)), yes)
- OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
endif
ifeq ($(strip $(OLED_ENABLE)), yes)
diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/config.h b/keyboards/helix/rev2/keymaps/edvorakjp/config.h
index a7a5f8360..769988cdb 100644
--- a/keyboards/helix/rev2/keymaps/edvorakjp/config.h
+++ b/keyboards/helix/rev2/keymaps/edvorakjp/config.h
@@ -4,5 +4,21 @@
#undef TAPPING_FORCE_HOLD
#undef TAPPING_TERM
#define TAPPING_TERM 120
+#define SWAP_SCLN
+
+// If you need more program area, try select and reduce rgblight modes to use.
+
+// 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
#endif /* CONFIG_USER_H */
diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/keymap.c b/keyboards/helix/rev2/keymaps/edvorakjp/keymap.c
index 650a39115..fd324a859 100644
--- a/keyboards/helix/rev2/keymaps/edvorakjp/keymap.c
+++ b/keyboards/helix/rev2/keymaps/edvorakjp/keymap.c
@@ -11,7 +11,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
switch(keycode) {
case KC_LOCK:
if (record->event.pressed) {
- if (edvorakjp_config.enable_kc_lang) {
+ if (get_enable_kc_lang()) {
SEND_STRING( SS_LCTRL(SS_LSFT(SS_TAP(X_POWER))) );
} else {
SEND_STRING( SS_LGUI("l") );
@@ -35,7 +35,7 @@ void matrix_scan_user(void) {
#ifdef RGBLIGHT_ENABLE
uint32_t layer_state_set_keymap(uint32_t state) {
- rgblight_mode_noeeprom(1);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT);
switch (biton32(state)) {
case _EDVORAKJ1:
case _EDVORAKJ2:
@@ -52,7 +52,7 @@ uint32_t layer_state_set_keymap(uint32_t state) {
rgblight_sethsv_noeeprom_green();
break;
default: // for any other layers, or the default layer
- rgblight_mode_noeeprom(28);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_GRADIENT + 3);
rgblight_sethsv_noeeprom_red();
break;
}
diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/keymap_4rows.c b/keyboards/helix/rev2/keymaps/edvorakjp/keymap_4rows.c
index d8257d81f..805e6b17b 100644
--- a/keyboards/helix/rev2/keymaps/edvorakjp/keymap_4rows.c
+++ b/keyboards/helix/rev2/keymaps/edvorakjp/keymap_4rows.c
@@ -5,7 +5,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_EDVORAK] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
- LBRC,RBRC,COMM,DOT , P , Y , F , G , R , W , Q ,BSLS,
+ LBRC,RBRC,COMM,DOT , Y , P , F , G , R , W , Q ,BSLS,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
EQL , A , O , E , I , U , D , T , N , S , M ,MINS,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/keymap_5rows.c b/keyboards/helix/rev2/keymaps/edvorakjp/keymap_5rows.c
index 9116b3966..ef1b9d358 100644
--- a/keyboards/helix/rev2/keymaps/edvorakjp/keymap_5rows.c
+++ b/keyboards/helix/rev2/keymaps/edvorakjp/keymap_5rows.c
@@ -7,7 +7,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
GRV ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- LBRC,RBRC,COMM,DOT , P , Y , F , G , R , W , Q ,BSLS,
+ LBRC,RBRC,COMM,DOT , Y , P , F , G , R , W , Q ,BSLS,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
EQL , A , O , E , I , U , D , T , N , S , M ,MINS,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/oled.c b/keyboards/helix/rev2/keymaps/edvorakjp/oled.c
index 5ced1d4fa..227e2c56f 100644
--- a/keyboards/helix/rev2/keymaps/edvorakjp/oled.c
+++ b/keyboards/helix/rev2/keymaps/edvorakjp/oled.c
@@ -23,15 +23,10 @@ void render_status(struct CharacterMatrix *matrix) {
// Render to mode icon
static char logo[][2][3] = {{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
- if (edvorakjp_config.enable_kc_lang) {
- matrix_write(matrix, logo[0][0]);
- matrix_write_P(matrix, PSTR("\n"));
- matrix_write(matrix, logo[0][1]);
- } else {
- matrix_write(matrix, logo[1][0]);
- matrix_write_P(matrix, PSTR("\n"));
- matrix_write(matrix, logo[1][1]);
- }
+ int mode_number = get_enable_kc_lang() ? 0 : 1;
+ matrix_write(matrix, logo[mode_number][0]);
+ matrix_write(matrix, "\n");
+ matrix_write(matrix, logo[mode_number][1]);
// Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
char buf[40];
@@ -63,7 +58,7 @@ void render_status(struct CharacterMatrix *matrix) {
// Host Keyboard LED Status
char led[40];
snprintf(led, sizeof(led), "\n%s %s %s %s",
- edvorakjp_config.enable_jp_extra_layer && japanese_mode ? "EXT" : " ",
+ get_enable_jp_extra_layer() && get_japanese_mode() ? "EXT" : " ",
(host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NMLK" : " ",
(host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
(host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
diff --git a/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk b/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk
index 67da9c370..4257d004d 100644
--- a/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk
+++ b/keyboards/helix/rev2/keymaps/edvorakjp/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no # Enable one-hand typing
define HELIX_CUSTOMISE_MSG
@@ -102,7 +102,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
endif
ifeq ($(strip $(LED_ANIMATIONS)), yes)
- OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
endif
ifeq ($(strip $(OLED_ENABLE)), yes)
diff --git a/keyboards/helix/rev2/keymaps/five_rows/README.md b/keyboards/helix/rev2/keymaps/five_rows/README.md
index 4feaac2ef..10a4fa942 100644
--- a/keyboards/helix/rev2/keymaps/five_rows/README.md
+++ b/keyboards/helix/rev2/keymaps/five_rows/README.md
@@ -46,7 +46,7 @@ Mac mode swap Alt/Win(GUI) key.
| ---- | ---- | --- |
|on/off|Adjust + e(Qwerty)|RGB_TOG|
| |Adjust + i(Qwerty)| |
-|change mode|Adjust + d(Qwerty) |RGB_SMOD|
+|change mode|Adjust + d(Qwerty) |RGB_MOD|
| |Adjust + k(Qwerty)| |
|HUE +|Adjust + Left Control|RGB_HUI|
| |Adjust + Right Control| |
diff --git a/keyboards/helix/rev2/keymaps/five_rows/README_jp.md b/keyboards/helix/rev2/keymaps/five_rows/README_jp.md
index 932e200a5..317ffdd71 100644
--- a/keyboards/helix/rev2/keymaps/five_rows/README_jp.md
+++ b/keyboards/helix/rev2/keymaps/five_rows/README_jp.md
@@ -68,7 +68,7 @@ Winモードでは、該当のキーはどちらも共に Alt + `(日本語IME
| ---- | ---- | --- |
|オン/オフ|Adjust + e(Qwerty)|RGB_TOG|
| |Adjust + i(Qwerty)| |
-|モード切り替え|Adjust + d(Qwerty) |RGB_SMOD|
+|モード切り替え|Adjust + d(Qwerty) |RGB_MOD|
| |Adjust + k(Qwerty)| |
|色相 +|Adjust + Left Control|RGB_HUI|
| |Adjust + Right Control| |
diff --git a/keyboards/helix/rev2/keymaps/five_rows/config.h b/keyboards/helix/rev2/keymaps/five_rows/config.h
index 6da6849a1..538859bc3 100644
--- a/keyboards/helix/rev2/keymaps/five_rows/config.h
+++ b/keyboards/helix/rev2/keymaps/five_rows/config.h
@@ -21,6 +21,27 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
+#undef TAPPING_TERM
+#define TAPPING_TERM 300
+#define PERMISSIVE_HOLD
+/* when TAPPING_TERM >= 500 same effect PERMISSIVE_HOLD.
+ see tmk_core/common/action_tapping.c */
+
// place overrides here
+// If you need more program area, try select and reduce rgblight modes to use.
+
+// 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
+
#endif /* CONFIG_USER_H */
diff --git a/keyboards/helix/rev2/keymaps/five_rows/keymap.c b/keyboards/helix/rev2/keymaps/five_rows/keymap.c
index 548caf822..7b7d573d6 100644
--- a/keyboards/helix/rev2/keymaps/five_rows/keymap.c
+++ b/keyboards/helix/rev2/keymaps/five_rows/keymap.c
@@ -10,6 +10,9 @@
#ifdef SSD1306OLED
#include "ssd1306.h"
#endif
+#ifdef CONSOLE_ENABLE
+ #include <print.h>
+#endif
extern keymap_config_t keymap_config;
@@ -28,6 +31,7 @@ enum layer_number {
_QWERTY = 0,
_COLEMAK,
_DVORAK,
+ _EUCALYN,
_KEYPAD,
_AUX,
_KAUX,
@@ -41,23 +45,27 @@ enum custom_keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
DVORAK,
+ EUCALYN,
KEYPAD,
- EISU,
- KANA,
- ZERO2,
+ KC_xEISU,
+ KC_xKANA,
+ KC_ZERO2,
RGBRST
};
-enum macro_keycodes {
- KC_SAMPLEMACRO,
-};
-
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
//Macros
-#define M_SAMPLE M(KC_SAMPLEMACRO)
+#define KC_LOWER MO(_LOWER)
+#define KC_RABS LT(_RAISE,KC_BSPC)
+#define KC_RAEN LT(_RAISE,KC_ENT)
+#define KC_FF12 LT(_PADFUNC,KC_F12)
+#define KC_____ _______
+#define KC_XXXX XXXXXXX
+#define KC_ADJ MO(_ADJUST)
+#define KC_LSMI LSFT(KC_MINS)
+#define KC_LSEQ LSFT(KC_EQL)
+#define KC_LSRB LSFT(KC_RBRC)
+#define KC_LSLB LSFT(KC_LBRC)
+#define ___ _______
#if HELIX_ROWS == 5
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -72,16 +80,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | ` | ' | N | M | , | . | / | Shift|
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |Lower | Lower| Caps | GUI | Alt | Space| BS | Enter| Space| Alt | GUI | Menu |Lower |Lower |
+ * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
* `-------------------------------------------------------------------------------------------------'
*/
- [_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_BSLS, \
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RCTL, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_GRV, KC_QUOT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
- MO(_LOWER),MO(_LOWER), KC_CAPS, KC_LALT, KC_LGUI, KC_SPC, LT(_RAISE,KC_BSPC), \
- LT(_RAISE,KC_ENT), KC_SPC, KC_RGUI, KC_RALT, KC_APP,MO(_LOWER),MO(_LOWER) \
+ [_QWERTY] = LAYOUT_kc( \
+ ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \
+ TAB, Q, W, E, R, T, Y, U, I, O, P, BSLS, \
+ LCTL, A, S, D, F, G, H, J, K, L, SCLN, RCTL, \
+ LSFT, Z, X, C, V, B, GRV, QUOT, N, M, COMM, DOT, SLSH, RSFT, \
+ LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \
),
/* Colemak
@@ -94,16 +101,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | ` | ' | K | M | , | . | / | Shift|
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |Lower | Lower| Caps | GUI | Alt | Space| BS | Enter| Space| Alt | GUI | Menu |Lower |Lower |
+ * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
* `-------------------------------------------------------------------------------------------------'
*/
- [_COLEMAK] = 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_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS, \
- KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_RCTL, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_GRV, KC_QUOT, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
- MO(_LOWER),MO(_LOWER), KC_CAPS, KC_LALT, KC_LGUI, KC_SPC, LT(_RAISE,KC_BSPC), \
- LT(_RAISE,KC_ENT), KC_SPC, KC_RGUI, KC_RALT, KC_APP,MO(_LOWER),MO(_LOWER) \
+ [_COLEMAK] = LAYOUT_kc( \
+ ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \
+ TAB, Q, W, F, P, G, J, L, U, Y, SCLN, BSLS, \
+ LCTL, A, R, S, T, D, H, N, E, I, O, RCTL, \
+ LSFT, Z, X, C, V, B, GRV, QUOT, K, M, COMM, DOT, SLSH, RSFT, \
+ LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \
),
/* Dvorak
@@ -116,16 +122,36 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
* | Shift| ; | Q | J | K | X | ` | / | B | M | W | V | Z | Shift|
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * |Lower | Lower| Caps | GUI | Alt | Space| BS | Enter| Space| Alt | GUI | Menu |Lower |Lower |
+ * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
* `-------------------------------------------------------------------------------------------------'
*/
- [_DVORAK] = 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_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSLS, \
- KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_RCTL, \
- KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_GRV, KC_SLSH, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \
- MO(_LOWER),MO(_LOWER), KC_CAPS, KC_LALT, KC_LGUI, KC_SPC, LT(_RAISE,KC_BSPC), \
- LT(_RAISE,KC_ENT), KC_SPC, KC_RGUI, KC_RALT, KC_APP,MO(_LOWER),MO(_LOWER) \
+ [_DVORAK] = LAYOUT_kc( \
+ ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \
+ TAB, QUOT, COMM, DOT, P, Y, F, G, C, R, L, BSLS, \
+ LCTL, A, O, E, U, I, D, H, T, N, S, RCTL, \
+ LSFT, SCLN, Q, J, K, X, GRV, SLSH, B, M, W, V, Z, RSFT, \
+ LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \
+ ),
+
+ /* Eucalyn (http://eucalyn.hatenadiary.jp/entry/about-eucalyn-layout)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | , | . | ; | | M | R | D | Y | P | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | O | E | I | U | | G | T | K | S | N | Ctrl |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | F | ` | ' | B | H | J | L | / | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Lower | Lower| Caps | Alt | GUI | Space| BS | Enter| Space| GUI | Alt | Menu |Lower |Lower |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_EUCALYN] = LAYOUT_kc( \
+ ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, BSPC, \
+ TAB, Q, W, COMM, DOT, SCLN, M, R, D, Y, P, BSLS, \
+ LCTL, A, O, E, I, U, G, T, K, S, N, RCTL, \
+ LSFT, Z, X, C, V, F, GRV, QUOT, B, H, J, L, SLSH, RSFT, \
+ LOWER, LOWER, CAPS, LALT, LGUI, SPC, RABS, RAEN, SPC, RGUI, RALT, APP,LOWER, LOWER \
),
/* Keypad
@@ -141,13 +167,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | 0 | , | . | Enter| F5 | F10 | F12 | F12 | F5 | F10 | Enter| 0 | , | . |
* `-------------------------------------------------------------------------------------------------'
*/
- [_KEYPAD] = LAYOUT( \
- KC_TAB, KC_PSLS, KC_PAST, KC_DEL, KC_F1, KC_F6, KC_F1, KC_F6, KC_DEL, KC_TAB, KC_PSLS, KC_PAST, \
- KC_KP_7, KC_KP_8, KC_KP_9, KC_BSPC, KC_F2, KC_F7, KC_F2, KC_F7, KC_BSPC, KC_KP_7, KC_KP_8, KC_KP_9, \
- KC_KP_4, KC_KP_5, KC_KP_6, KC_PMNS, KC_F3, KC_F8, KC_F3, KC_F8, KC_PMNS, KC_KP_4, KC_KP_5, KC_KP_6, \
- KC_KP_1, KC_KP_2, KC_KP_3, KC_PPLS, KC_F4, KC_F9, KC_F11, KC_F11, KC_F4, KC_F9, KC_PPLS, KC_KP_1, KC_KP_2, KC_KP_3, \
- KC_KP_0, KC_COMM, KC_PDOT, KC_PENT, KC_F5, KC_F10, LT(_PADFUNC,KC_F12),
- LT(_PADFUNC,KC_F12),KC_F5, KC_F10, KC_PENT, KC_KP_0, KC_COMM, KC_PDOT \
+ [_KEYPAD] = LAYOUT_kc( \
+ TAB, PSLS, PAST, DEL, F1, F6, F1, F6, DEL, TAB, PSLS, PAST, \
+ KP_7, KP_8, KP_9, BSPC, F2, F7, F2, F7, BSPC, KP_7, KP_8, KP_9, \
+ KP_4, KP_5, KP_6, PMNS, F3, F8, F3, F8, PMNS, KP_4, KP_5, KP_6, \
+ KP_1, KP_2, KP_3, PPLS, F4, F9, F11, F11, F4, F9, PPLS, KP_1, KP_2, KP_3, \
+ KP_0, COMM, PDOT, PENT, F5, F10, FF12, FF12, F5, F10, PENT, KP_0, COMM, PDOT \
),
/* AUX modifier key layer
@@ -163,12 +188,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | 00 | | | | | | | | | | | 00 | |
* `-------------------------------------------------------------------------------------------------'
*/
- [_KAUX] = LAYOUT( \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, ZERO2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, ZERO2, _______ \
+ [_KAUX] = LAYOUT_kc( \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____,ZERO2, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ZERO2,____ \
),
/* Keypad function layer
@@ -184,13 +209,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | | |
* `-------------------------------------------------------------------------------------------------'
*/
- [_PADFUNC] = LAYOUT( \
- XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS, KC_SLCK, KC_PSCR, KC_PSCR, KC_SLCK, KC_PAUS, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_PGUP, KC_PGUP, KC_UP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, KC_DEL, KC_INS, KC_LEFT, KC_DOWN, KC_RGHT, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_DEL, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, KC_END, XXXXXXX, KC_PGDN,MO(_ADJUST),
- MO(_ADJUST), KC_PGDN, XXXXXXX, KC_END, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+ [_PADFUNC] = LAYOUT_kc( \
+ XXXX, XXXX, XXXX, PAUS, SLCK, PSCR, PSCR, SLCK, PAUS, XXXX, XXXX, XXXX, \
+ XXXX, XXXX, XXXX, HOME, UP, PGUP, PGUP, UP, HOME, XXXX, XXXX, XXXX, \
+ XXXX, DEL, INS, LEFT, DOWN, RGHT, LEFT, DOWN, RGHT, INS, DEL, XXXX, \
+ XXXX, XXXX, XXXX, END, XXXX, PGDN, ADJ, ADJ, PGDN, XXXX, END, XXXX, XXXX, XXXX, \
+ XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, ____, ____, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX \
),
/* Lower
@@ -206,13 +230,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | PrtSc| | | | | | | | | PrtSc| | |
* `-------------------------------------------------------------------------------------------------'
*/
- [_LOWER] = LAYOUT( \
- XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, \
- XXXXXXX, XXXXXXX, KC_PAUS, KC_SLCK, KC_INS, XXXXXXX, XXXXXXX, KC_INS, KC_SLCK, KC_PAUS, XXXXXXX, KC_F12, \
- _______, KC_HOME, XXXXXXX, KC_UP, KC_DEL, KC_PGUP, KC_PGUP, KC_DEL, KC_UP, XXXXXXX, KC_HOME, _______, \
- _______, KC_END, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, XXXXXXX, XXXXXXX,KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______, \
- _______, _______, KC_PSCR, _______, _______, _______, MO(_ADJUST),
- MO(_ADJUST), _______, _______, _______, KC_PSCR, _______, _______ \
+ [_LOWER] = LAYOUT_kc( \
+ XXXX, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, \
+ XXXX, XXXX, PAUS, SLCK, INS, XXXX, XXXX, INS, SLCK, PAUS, XXXX, F12, \
+ ____, HOME, XXXX, UP, DEL, PGUP, PGUP, DEL, UP, XXXX, HOME, ____, \
+ ____, END, LEFT, DOWN, RGHT, PGDN, XXXX, XXXX, PGDN, LEFT, DOWN, RGHT, END, ____, \
+ ____, ____, PSCR, ____, ____, ____, ADJ, ADJ, ____, ____, ____, PSCR, ____, ____ \
),
/* Raise
@@ -228,18 +251,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | | |
* `-------------------------------------------------------------------------------------------------'
*/
- [_RAISE] = LAYOUT( \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, LSFT(KC_MINS), KC_MINS, KC_EQL, LSFT(KC_EQL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, LSFT(KC_LBRC), KC_LBRC, KC_RBRC, LSFT(KC_RBRC), XXXXXXX, XXXXXXX, XXXXXXX, _______, \
- _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EISU, EISU, KANA, KANA, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, \
- MO(_ADJUST),MO(_ADJUST),XXXXXXX, _______, _______, XXXXXXX, _______,
- _______, XXXXXXX, _______, _______, XXXXXXX,MO(_ADJUST),MO(_ADJUST) \
+ [_RAISE] = LAYOUT_kc( \
+ XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, XXXX, \
+ XXXX, XXXX, XXXX, XXXX, LSMI, MINS, EQL, LSEQ, XXXX, XXXX, XXXX, XXXX, \
+ ____, XXXX, XXXX, XXXX, LSLB, LBRC, RBRC, LSRB, XXXX, XXXX, XXXX, ____, \
+ ____, XXXX, XXXX, XXXX, XXXX,xEISU,xEISU, xKANA,xKANA,MNXT, VOLD, VOLU, MPLY, ____, \
+ ADJ, ADJ, XXXX, ____, ____, XXXX, ____, ____, XXXX, ____, ____, XXXX, ADJ, ADJ \
),
/* Adjust (Lower + Raise)
* ,-----------------------------------------. ,-----------------------------------------.
- * | | |Keypad|Dvorak|Colemk|Qwerty| |Qwerty|Colemk|Dvorak|Keypad| | |
+ * | |Keypad|Dvorak|Colemk|Euclyn|Qwerty| |Qwerty|Euclyn|Colemk|Dvorak|Keypad| |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | Reset|RGBRST|RGB ON|Aud on| Win | | Win |Aud on|RGB ON|RGBRST| | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
@@ -251,11 +273,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------------------------------------------------------------------------------------------------'
*/
[_ADJUST] = LAYOUT( \
- XXXXXXX, XXXXXXX, KEYPAD, DVORAK, COLEMAK, QWERTY, QWERTY, COLEMAK, DVORAK, KEYPAD, XXXXXXX, XXXXXXX, \
- XXXXXXX, RESET, RGBRST, RGB_TOG, AU_ON, AG_SWAP, AG_SWAP, AU_ON, RGB_TOG, RGBRST, XXXXXXX, XXXXXXX, \
- RGB_HUI, RGB_SAI, RGB_VAI,RGB_SMOD, AU_OFF, AG_NORM, AG_NORM, AU_OFF,RGB_SMOD, RGB_VAI, RGB_SAI, RGB_HUI, \
- RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_SAD, RGB_HUD, \
- _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______ \
+ XXXXXXX, KEYPAD, DVORAK, COLEMAK, EUCALYN, QWERTY, QWERTY, EUCALYN, COLEMAK, DVORAK, KEYPAD, XXXXXXX, \
+ XXXXXXX, RESET, RGBRST, RGB_TOG, AU_ON, AG_SWAP, AG_SWAP, AU_ON, RGB_TOG, RGBRST, XXXXXXX, XXXXXXX, \
+ RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD, AU_OFF, AG_NORM, AG_NORM, AU_OFF, RGB_MOD, RGB_VAI, RGB_SAI, RGB_HUI, \
+ RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, ___,___, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_SAD, RGB_HUD, \
+ _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ___,___, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______ \
),
/* AUX modifier key layer
@@ -271,13 +293,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | BS | Enter| | | | | | | |
* `-------------------------------------------------------------------------------------------------'
*/
- [_AUX] = LAYOUT( \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, KC_BSPC, LT(_RAISE,KC_ENT), \
- _______, _______, _______, _______, _______, _______, _______ \
+ [_AUX] = LAYOUT_kc( \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, ____, \
+ ____, ____, ____, ____, ____, BSPC, RAEN, ____, ____, ____, ____, ____, ____, ____ \
)
};
@@ -304,23 +325,25 @@ uint32_t default_layer_state_set_kb(uint32_t state) {
current_default_layer = state - 1;
// 1<<_DVORAK - 2 == 4 - 2 == _DVORAK (=2)
if ( current_default_layer == 3 ) current_default_layer -= 1;
- // 1<<_KEYPAD - 5 == 8 - 5 == _KEYPAD (=3)
+ // 1<<_EUCALYN - 5 == 8 - 5 == _EUCALYN (=3)
if ( current_default_layer == 7 ) current_default_layer -= 4;
+ // 1<<_KEYPAD - 12 == 16 - 12 == _KEYPAD (=4)
+ if ( current_default_layer == 15 ) current_default_layer -= 11;
return state;
}
void update_base_layer(int base)
{
if( current_default_layer != base ) {
- eeconfig_update_default_layer(1UL<<base);
- default_layer_set(1UL<<base);
- layer_off(_AUX);
- layer_off(_KAUX);
+ eeconfig_update_default_layer(1UL<<base);
+ default_layer_set(1UL<<base);
+ layer_off(_AUX);
+ layer_off(_KAUX);
} else {
- if( base < _KEYPAD )
- layer_invert(_AUX);
- else
- layer_invert(_KAUX);
+ if( base < _KEYPAD )
+ layer_invert(_AUX);
+ else
+ layer_invert(_KAUX);
}
}
@@ -331,7 +354,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef AUDIO_ENABLE
PLAY_SONG(tone_qwerty);
#endif
- update_base_layer(_QWERTY);
+ update_base_layer(_QWERTY);
}
return false;
break;
@@ -340,7 +363,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef AUDIO_ENABLE
PLAY_SONG(tone_colemak);
#endif
- update_base_layer(_COLEMAK);
+ update_base_layer(_COLEMAK);
}
return false;
break;
@@ -349,7 +372,16 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef AUDIO_ENABLE
PLAY_SONG(tone_dvorak);
#endif
- update_base_layer(_DVORAK);
+ update_base_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case EUCALYN:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ update_base_layer(_EUCALYN);
}
return false;
break;
@@ -358,17 +390,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef AUDIO_ENABLE
PLAY_SONG(tone_dvorak);
#endif
- update_base_layer(_KEYPAD);
+ update_base_layer(_KEYPAD);
}
return false;
break;
- case ZERO2:
+ case KC_ZERO2:
if (record->event.pressed) {
SEND_STRING("00");
}
return false;
break;
- case EISU:
+ case KC_xEISU:
if (record->event.pressed) {
if(keymap_config.swap_lalt_lgui==false){
register_code(KC_LANG2);
@@ -380,7 +412,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
break;
- case KANA:
+ case KC_xKANA:
if (record->event.pressed) {
if(keymap_config.swap_lalt_lgui==false){
register_code(KC_LANG1);
@@ -468,10 +500,10 @@ static void render_logo(struct CharacterMatrix *matrix) {
char buf[30];
if(rgblight_config.enable) {
snprintf(buf, sizeof(buf), " LED %2d: %d,%d,%d ",
- rgblight_config.mode,
- rgblight_config.hue/RGBLIGHT_HUE_STEP,
- rgblight_config.sat/RGBLIGHT_SAT_STEP,
- rgblight_config.val/RGBLIGHT_VAL_STEP);
+ rgblight_config.mode,
+ rgblight_config.hue/RGBLIGHT_HUE_STEP,
+ rgblight_config.sat/RGBLIGHT_SAT_STEP,
+ rgblight_config.val/RGBLIGHT_VAL_STEP);
matrix_write(matrix, buf);
}
#endif
@@ -481,6 +513,7 @@ static void render_logo(struct CharacterMatrix *matrix) {
static const char Qwerty_name[] PROGMEM = " Qwerty";
static const char Colemak_name[] PROGMEM = " Colemak";
static const char Dvorak_name[] PROGMEM = " Dvorak";
+static const char Eucalyn_name[] PROGMEM = " Eucalyn";
static const char Keypad_name[] PROGMEM = " Keypad";
static const char AUX_name[] PROGMEM = ":AUX";
@@ -494,6 +527,7 @@ static const char *layer_names[] = {
[_QWERTY] = Qwerty_name,
[_COLEMAK] = Colemak_name,
[_DVORAK] = Dvorak_name,
+ [_EUCALYN]= Eucalyn_name,
[_KEYPAD] = Keypad_name,
[_AUX] = AUX_name,
[_KAUX] = KAUX_name,
@@ -526,18 +560,18 @@ void render_status(struct CharacterMatrix *matrix) {
lstate && name_num < sizeof(layer_names)/sizeof(char *);
lstate >>=1, name_num++ ) {
if( (lstate & 1) != 0 ) {
- if( layer_names[name_num] ) {
- matrix_write_P(matrix, layer_names[name_num]);
- }
+ if( layer_names[name_num] ) {
+ matrix_write_P(matrix, layer_names[name_num]);
+ }
}
}
// Host Keyboard LED Status
char led[40];
snprintf(led, sizeof(led), "\n%s %s %s",
- (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
- (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
- (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
+ (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
matrix_write(matrix, led);
}
diff --git a/keyboards/helix/rev2/keymaps/five_rows/rules.mk b/keyboards/helix/rev2/keymaps/five_rows/rules.mk
index 402f855ae..bd7130cfc 100644
--- a/keyboards/helix/rev2/keymaps/five_rows/rules.mk
+++ b/keyboards/helix/rev2/keymaps/five_rows/rules.mk
@@ -6,15 +6,19 @@
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)
+CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
+# CONSOLE_ENABLE and COMMAND_ENABLE
+# yes, no +1500
+# yes, yes +3200
+# no, yes +400
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no # Enable one-hand typing
define HELIX_CUSTOMISE_MSG
@@ -66,6 +70,9 @@ ifneq ($(strip $(HELIX)),)
ifeq ($(findstring ios,$(HELIX)), ios)
IOS_DEVICE_ENABLE = yes
endif
+ ifeq ($(findstring console,$(HELIX)), console)
+ CONSOLE_ENABLE = yes
+ endif
$(eval $(call HELIX_CUSTOMISE_MSG))
$(info )
endif
@@ -100,7 +107,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
endif
ifeq ($(strip $(LED_ANIMATIONS)), yes)
- OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
endif
ifeq ($(strip $(OLED_ENABLE)), yes)
diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/config.h b/keyboards/helix/rev2/keymaps/five_rows_jis/config.h
index 34650b99a..97494c937 100644
--- a/keyboards/helix/rev2/keymaps/five_rows_jis/config.h
+++ b/keyboards/helix/rev2/keymaps/five_rows_jis/config.h
@@ -40,4 +40,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MOUSEKEY_DELAY 0
#endif
+// If you need more program area, try select and reduce rgblight modes to use.
+
+// 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
+
#endif /* CONFIG_USER_H */
diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c b/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c
index 141b22275..8c2040d5b 100644
--- a/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c
+++ b/keyboards/helix/rev2/keymaps/five_rows_jis/keymap.c
@@ -204,7 +204,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
XXXXXXX, RESET, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, RGBRST, XXXXXXX, XXXXXXX, XXXXXXX, \
XXXXXXX, DL_BAS, DL_BASE, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, DL_BAS, DL_BASE, AG_NORM, AG_SWAP, XXXXXXX, \
XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, \
- XXXXXXX, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_SMOD,RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, \
+ XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
};
@@ -214,7 +214,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#endif
#ifdef SSD1306OLED
-char keylog[20] = {};
+char keylog[24] = {};
const char code_to_name[60] = {
' ', ' ', ' ', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
@@ -223,7 +223,7 @@ const char code_to_name[60] = {
'R', 'E', 'B', 'T', ' ', '-', ' ', '@', ' ', ' ',
' ', ';', ':', ' ', ',', '.', '/', ' ', ' ', ' '};
-inline void set_keylog(uint16_t keycode, keyrecord_t *record)
+static inline void set_keylog(uint16_t keycode, keyrecord_t *record)
{
char name = ' ';
uint8_t leds = host_keyboard_leds();
@@ -246,6 +246,12 @@ inline void set_keylog(uint16_t keycode, keyrecord_t *record)
}
#endif
+#ifdef RGBLIGHT_ENABLE
+#define RGBLIGHT(mode) rgblight_mode(mode)
+#else
+#define RGBLIGHT(mode)
+#endif
+
// define variables for reactive RGB
int RGB_current_mode;
#ifdef ADJUST_MACRO_ENABLE
@@ -263,12 +269,6 @@ void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
#define ADJUST_MACRO(layer1, layer2, layer3)
#endif
-#ifdef RGBLIGHT_ENABLE
-#define RGBLIGHT(mode) rgblight_mode(mode)
-#else
-#define RGBLIGHT(mode)
-#endif
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef SSD1306OLED
if (record->event.pressed) {
@@ -344,7 +344,7 @@ void matrix_scan_user(void) {
iota_gfx_task(); // this is what updates the display continuously
}
-inline void matrix_update(struct CharacterMatrix *dest,
+static inline void matrix_update(struct CharacterMatrix *dest,
const struct CharacterMatrix *source) {
if (memcmp(dest->display, source->display, sizeof(dest->display))) {
memcpy(dest->display, source->display, sizeof(dest->display));
@@ -367,13 +367,15 @@ const char helix_logo[]={
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
0};
-inline void render_logo(struct CharacterMatrix *matrix) {
+
+static inline void render_logo(struct CharacterMatrix *matrix) {
matrix_write(matrix, helix_logo);
}
const char mac_win_logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
-inline void render_status(struct CharacterMatrix *matrix) {
+
+static inline void render_status(struct CharacterMatrix *matrix) {
char buf[20];
// Render to mode icon
diff --git a/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk b/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk
index 5340a74ba..3f84b895a 100644
--- a/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk
+++ b/keyboards/helix/rev2/keymaps/five_rows_jis/rules.mk
@@ -14,7 +14,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no # Enable one-hand typing
define HELIX_CUSTOMISE_MSG
@@ -100,7 +100,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
endif
ifeq ($(strip $(LED_ANIMATIONS)), yes)
- OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
endif
ifeq ($(strip $(OLED_ENABLE)), yes)
diff --git a/keyboards/helix/rev2/keymaps/froggy/config.h b/keyboards/helix/rev2/keymaps/froggy/config.h
index df72aef12..517368ae9 100644
--- a/keyboards/helix/rev2/keymaps/froggy/config.h
+++ b/keyboards/helix/rev2/keymaps/froggy/config.h
@@ -26,4 +26,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ONESHOT_TAP_TOGGLE 5 /* Tapping this number of times holds the key until tapped this number of times again. */
#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */
+// If you need more program area, try select and reduce rgblight modes to use.
+
+// 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
+
#endif /* CONFIG_USER_H */
diff --git a/keyboards/helix/rev2/keymaps/froggy/keymap.c b/keyboards/helix/rev2/keymaps/froggy/keymap.c
index 5ac927af3..efd8a2916 100644
--- a/keyboards/helix/rev2/keymaps/froggy/keymap.c
+++ b/keyboards/helix/rev2/keymaps/froggy/keymap.c
@@ -81,7 +81,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
* | Shift| Y | S | N | I | U |Space | | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | Alt | win | Sym | Num | OPT | Ent | | | | | | | |
+ * | Ctrl | Alt | Gui | Sym | Num | OPT | Ent | | | | | | | |
* `-------------------------------------------------------------------------------------------------'
*/
[_BASE] = LAYOUT( \
@@ -256,8 +256,31 @@ void register_delay_code(uint8_t layer){
}
}
+#ifdef RGBLIGHT_ENABLE
+struct keybuf {
+ char col, row;
+ char frame;
+};
+struct keybuf keybufs[256];
+unsigned char keybuf_begin, keybuf_end;
+
+int col, row;
+#endif
+
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ #ifdef RGBLIGHT_ENABLE
+ col = record->event.key.col;
+ row = record->event.key.row;
+ if (record->event.pressed && ((row < 5 && is_master) || (row >= 5 && !is_master))) {
+ int end = keybuf_end;
+ keybufs[end].col = col;
+ keybufs[end].row = row % 5;
+ keybufs[end].frame = 0;
+ keybuf_end ++;
+ }
+ #endif
+
if(tap_timer&&keycode!=OPT_TAP_SP){
tapping_key = true;
}
@@ -376,7 +399,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef RGBLIGHT_ENABLE
if (record->event.pressed) {
RGBAnimation = true;
- rgblight_mode(6);
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_MOOD);
RGB_current_mode = rgblight_config.mode;
}
#endif
@@ -385,7 +408,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef RGBLIGHT_ENABLE
if (record->event.pressed) {
RGBAnimation = true;
- rgblight_mode(10);
+ rgblight_mode(RGBLIGHT_MODE_RAINBOW_SWIRL + 1);
RGB_current_mode = rgblight_config.mode;
}
#endif
@@ -394,7 +417,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#ifdef RGBLIGHT_ENABLE
if (record->event.pressed) {
RGBAnimation = true;
- rgblight_mode(21);
+ rgblight_mode(RGBLIGHT_MODE_KNIGHT);
RGB_current_mode = rgblight_config.mode;
}
#endif
@@ -475,6 +498,61 @@ void music_scale_user(void)
#define L_NFNLAYER 192
#define L_MOUSECURSOR 256
+// LED Effect
+#ifdef RGBLIGHT_ENABLE
+unsigned char rgb[7][5][3];
+void led_ripple_effect(char r, char g, char b) {
+ static int scan_count = -10;
+ static int keys[] = { 6, 6, 6, 7, 7 };
+ static int keys_sum[] = { 0, 6, 12, 18, 25 };
+
+ if (scan_count == -1) {
+ rgblight_enable_noeeprom();
+ rgblight_mode(RGBLIGHT_MODE_STATIC_LIGHT);
+ } else if (scan_count >= 0 && scan_count < 5) {
+ for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) {
+ int i = c;
+ // FIXME:
+
+ int y = scan_count;
+ int dist_y = abs(y - keybufs[i].row);
+ for (int x=0; x<keys[y]; x++) {
+ int dist = abs(x - keybufs[i].col) + dist_y;
+ if (dist <= keybufs[i].frame) {
+ int elevation = MAX(0, (8 + dist - keybufs[i].frame)) << 2;
+ if (elevation) {
+ if ((rgb[x][y][0] != 255) && r) { rgb[x][y][0] = MIN(255, elevation + rgb[x][y][0]); }
+ if ((rgb[x][y][1] != 255) && g) { rgb[x][y][1] = MIN(255, elevation + rgb[x][y][1]); }
+ if ((rgb[x][y][2] != 255) && b) { rgb[x][y][2] = MIN(255, elevation + rgb[x][y][2]); }
+ }
+ }
+ }
+ }
+ } else if (scan_count == 5) {
+ for (unsigned char c=keybuf_begin; c!=keybuf_end; c++) {
+ int i = c;
+ if (keybufs[i].frame < 18) {
+ keybufs[i].frame ++;
+ } else {
+ keybuf_begin ++;
+ }
+ }
+ } else if (scan_count >= 6 && scan_count <= 10) {
+ int y = scan_count - 6;
+ for (int x=0; x<keys[y]; x++) {
+ int at = keys_sum[y] + ((y & 1) ? x : (keys[y] - x - 1));
+ led[at].r = rgb[x][y][0];
+ led[at].g = rgb[x][y][1];
+ led[at].b = rgb[x][y][2];
+ }
+ rgblight_set();
+ } else if (scan_count == 11) {
+ memset(rgb, 0, sizeof(rgb));
+ }
+ scan_count++;
+ if (scan_count >= 12) { scan_count = 0; }
+}
+#endif
uint8_t layer_state_old;
@@ -494,42 +572,64 @@ void matrix_scan_user(void) {
if(layer_state_old != layer_state){
switch (layer_state) {
case L_BASE:
- #ifdef RGBLIGHT_ENABLE
- if (!RGBAnimation){
- rgblight_sethsv(187,255,255);
- rgblight_mode(1);
- }else{
- rgblight_mode(RGB_current_mode);
- }
- #endif
break;
case L_OPT:
register_delay_code(_OPT);
break;
case L_NUM:
register_delay_code(_NUM);
- #ifdef RGBLIGHT_ENABLE
- rgblight_sethsv(25,255,255);
- rgblight_mode(1);
- #endif
break;
case L_SYM:
register_delay_code(_SYM);
- #ifdef RGBLIGHT_ENABLE
- rgblight_sethsv(96,255,255);
- rgblight_mode(1);
- #endif
break;
case L_FUNC:
register_delay_code(_FUNC);
- #ifdef RGBLIGHT_ENABLE
- rgblight_sethsv(331,255,255);
- rgblight_mode(1);
- #endif
break;
}
layer_state_old = layer_state;
}
+
+ #ifdef RGBLIGHT_ENABLE
+ if(!RGBAnimation){
+ switch (layer_state) {
+ case L_BASE:
+ #ifdef RGBLED_BACK
+ led_ripple_effect(0,112,127);
+ #else
+ rgblight_setrgb(0,112,127);
+ #endif
+ break;
+ case L_OPT:
+ #ifdef RGBLED_BACK
+ led_ripple_effect(127,0,100);
+ #else
+ rgblight_setrgb(127,0,100);
+ #endif
+ break;
+ case L_NUM:
+ #ifdef RGBLED_BACK
+ led_ripple_effect(127,23,0);
+ #else
+ rgblight_setrgb(127,23,0);
+ #endif
+ break;
+ case L_SYM:
+ #ifdef RGBLED_BACK
+ led_ripple_effect(0,127,0);
+ #else
+ rgblight_setrgb(0,127,0);
+ #endif
+ break;
+ case L_FUNC:
+ #ifdef RGBLED_BACK
+ led_ripple_effect(127,0,61);
+ #else
+ rgblight_setrgb(127,0,61);
+ #endif
+ break;
+ }
+ }
+ #endif
}
//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
diff --git a/keyboards/helix/rev2/keymaps/froggy/rules.mk b/keyboards/helix/rev2/keymaps/froggy/rules.mk
index aa9796413..f46017071 100644
--- a/keyboards/helix/rev2/keymaps/froggy/rules.mk
+++ b/keyboards/helix/rev2/keymaps/froggy/rules.mk
@@ -14,7 +14,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no # Enable one-hand typing
define HELIX_CUSTOMISE_MSG
@@ -100,7 +100,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
endif
ifeq ($(strip $(LED_ANIMATIONS)), yes)
- OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
endif
ifeq ($(strip $(OLED_ENABLE)), yes)
diff --git a/keyboards/helix/rev2/keymaps/led_test/config.h b/keyboards/helix/rev2/keymaps/led_test/config.h
index 6da6849a1..e2bdf2f32 100644
--- a/keyboards/helix/rev2/keymaps/led_test/config.h
+++ b/keyboards/helix/rev2/keymaps/led_test/config.h
@@ -23,4 +23,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// place overrides here
+// If you need more program area, try select and reduce rgblight modes to use.
+
+// 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 // led_test keymap need only this.
+ //#define RGBLIGHT_EFFECT_ALTERNATING
+#endif
+
#endif /* CONFIG_USER_H */
diff --git a/keyboards/helix/rev2/keymaps/led_test/led_test_init.c b/keyboards/helix/rev2/keymaps/led_test/led_test_init.c
index 1d9cb4ebd..85f5d1aa7 100644
--- a/keyboards/helix/rev2/keymaps/led_test/led_test_init.c
+++ b/keyboards/helix/rev2/keymaps/led_test/led_test_init.c
@@ -5,7 +5,7 @@ void led_test_init(void) {
static int scan_count = 0;
if( scan_count == 2 ) {
rgblight_enable_noeeprom();
- rgblight_mode_noeeprom(35);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_RGB_TEST);
}
if( scan_count < 3 ) scan_count ++;
}
@@ -15,6 +15,6 @@ void led_test_init(void) {
// can use this?
void startup_user(void) {
rgblight_enable_noeeprom();
- rgblight_mode_noeeprom(35);
+ rgblight_mode_noeeprom(RGBLIGHT_MODE_RGB_TEST);
}
#endif
diff --git a/keyboards/helix/rev2/keymaps/led_test/rules.mk b/keyboards/helix/rev2/keymaps/led_test/rules.mk
index c7ee75c36..a9cd251bc 100644
--- a/keyboards/helix/rev2/keymaps/led_test/rules.mk
+++ b/keyboards/helix/rev2/keymaps/led_test/rules.mk
@@ -14,7 +14,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = no # Enable one-hand typing
define HELIX_CUSTOMISE_MSG
@@ -100,7 +100,7 @@ ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
endif
ifeq ($(strip $(LED_ANIMATIONS)), yes)
- OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
endif
ifeq ($(strip $(OLED_ENABLE)), yes)
diff --git a/keyboards/helix/rev2/keymaps/yshrsmz/config.h b/keyboards/helix/rev2/keymaps/yshrsmz/config.h
new file mode 100644
index 000000000..d70f23c3e
--- /dev/null
+++ b/keyboards/helix/rev2/keymaps/yshrsmz/config.h
@@ -0,0 +1,38 @@
+/*
+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
+
+/* auto shift config */
+#define AUTO_SHIFT_TIMEOUT 150
+
+// If you need more program area, try select and reduce rgblight modes to use.
+
+// 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
diff --git a/keyboards/helix/rev2/keymaps/yshrsmz/keymap.c b/keyboards/helix/rev2/keymaps/yshrsmz/keymap.c
new file mode 100644
index 000000000..1bde66e88
--- /dev/null
+++ b/keyboards/helix/rev2/keymaps/yshrsmz/keymap.c
@@ -0,0 +1,558 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+#ifdef SSD1306OLED
+ #include "ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ _QWERTY = 0,
+ _LOWER,
+ _RAISE,
+ _FUNC,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ FUNC,
+ ADJUST,
+ EISU,
+ KANA
+};
+
+enum macro_keycodes {
+ KC_SAMPLEMACRO,
+};
+
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+//Macros
+#define M_SAMPLE M(KC_SAMPLEMACRO)
+
+#if HELIX_ROWS == 5
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ESC | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Shift | Z | X | C | V | B | Fn | Fn | N | M | , | . | / |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | EISU | Ctrl | Alt | GUI |Lower |Space | Bksp |Enter |Space |Raise | GUI | Alt | Ctrl | KANA |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_QWERTY] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \
+ KC_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, FUNC, FUNC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ EISU, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_BSPC, KC_ENT, KC_SPC, RAISE, KC_RGUI, KC_RALT, KC_RCTL, KANA \
+ ),
+
+ /* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | | F12 | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, KC_F12, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | | F12 | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, KC_F12, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Func
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | LEFT | DOWN | UP |RIGHT | PGUP | |
+ * |------+------+------+------+------+------|------+------|------+------+------+------+------+------|
+ * | | | | | | | | | HOME | END |Alt+← |Alt+→ | PGDN | |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_FUNC] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PGUP, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, LALT(KC_LEFT), LALT(KC_RGHT), KC_PGDN, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Reset| | | | | | | | | | | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | |Aud on|Audoff| Mac | | Win |Qwerty| | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | |RGB ON| HUE+ | SAT+ | VAL+ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | MODE | HUE- | SAT- | VAL- |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD \
+ )
+};
+
+#elif HELIX_ROWS == 4
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | = | Q | W | E | R | T | | Y | U | I | O | P | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | EISU | Ctrl | Alt | GUI |ESC/Lower | Func | Bksp |Enter |Space |Raise | GUI | Alt | Ctrl | KANA |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_QWERTY] = LAYOUT( \
+ KC_EQL, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \
+ 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 , \
+ EISU, KC_LCTL, KC_LALT, KC_LGUI, LT(_LOWER, KC_ESC), FUNC, KC_BSPC, KC_ENT, KC_SPC, RAISE, KC_RGUI, KC_RALT, KC_RCTL, KANA \
+ ),
+
+ /* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | | |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | | |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Func
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | LEFT | DOWN | UP |RIGHT | PGUP | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | HOME | END |Alt+← |Alt+→ | PGDN | |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_FUNC] = 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_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PGUP, _______, \
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, LALT(KC_LEFT), LALT(KC_RGHT), KC_PGDN, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | Reset| | | | | | | | | | | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | |Aud on|Audoff| Mac | | Win |Qwerty| | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | |RGB ON| HUE+ | SAT+ | VAL+ |
+ * |------+------+------+------+------+------+-------------+------+------+------+------+------+------|
+ * | | | | | | | | | | | MODE | HUE- | SAT- | VAL- |
+ * `-------------------------------------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD \
+ )
+};
+
+#else
+#error "undefined keymaps"
+#endif
+
+
+#ifdef AUDIO_ENABLE
+
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_plover_gb[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+#endif
+
+// define variables for reactive RGB
+bool TOG_STATUS = false;
+int RGB_current_mode;
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+// Setting ADJUST layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGB_current_mode);
+ #endif
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGBLIGHT_MODE_SNAKE + 1);
+ #endif
+ }
+ layer_on(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ TOG_STATUS = false;
+ layer_off(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGBLIGHT_MODE_SNAKE);
+ #endif
+ }
+ layer_on(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ layer_off(_RAISE);
+ TOG_STATUS = false;
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case FUNC:
+ if (record->event.pressed) {
+ layer_on(_FUNC);
+ } else {
+ layer_off(_FUNC);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
+ case RGB_MOD:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ rgblight_mode(RGB_current_mode);
+ rgblight_step();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ return false;
+ break;
+ case EISU:
+ 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);
+ }
+ return false;
+ break;
+ case KANA:
+ if (record->event.pressed) {
+ if(keymap_config.swap_lalt_lgui==false){
+ register_code(KC_LANG1);
+ }else{
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG1);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+}
+
+void shutdown_user()
+{
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_SONG(music_scale);
+}
+
+#endif
+
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// hook point for 'led_test' keymap
+// 'default' keymap's led_test_init() is empty function, do nothing
+// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(RGBLIGHT_MODE_RGB_TEST);
+__attribute__ ((weak))
+void led_test_init(void) {}
+
+void matrix_scan_user(void) {
+ led_test_init();
+ iota_gfx_task(); // this is what updates the display continuously
+}
+
+void matrix_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+//assign the right code to your layers for OLED display
+#define L_BASE 0
+#define L_LOWER (1<<_LOWER)
+#define L_RAISE (1<<_RAISE)
+#define L_FUNC (1<<_FUNC)
+#define L_ADJUST (1<<_ADJUST)
+#define L_ADJUST_TRI (L_ADJUST|L_RAISE|L_LOWER)
+
+static void render_logo(struct CharacterMatrix *matrix) {
+
+ static char logo[]={
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
+ 0};
+ matrix_write(matrix, logo);
+ //matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
+}
+
+
+
+void render_status(struct CharacterMatrix *matrix) {
+
+ // Render to mode icon
+ static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
+ if(keymap_config.swap_lalt_lgui==false){
+ matrix_write(matrix, logo[0][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[0][1]);
+ }else{
+ matrix_write(matrix, logo[1][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[1][1]);
+ }
+
+ // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
+ char buf[40];
+ snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
+ matrix_write_P(matrix, PSTR("\nLayer: "));
+ switch (layer_state) {
+ case L_BASE:
+ matrix_write_P(matrix, PSTR("Default"));
+ break;
+ case L_RAISE:
+ matrix_write_P(matrix, PSTR("Raise"));
+ break;
+ case L_LOWER:
+ matrix_write_P(matrix, PSTR("Lower"));
+ break;
+ case L_FUNC:
+ matrix_write_P(matrix, PSTR("Func"));
+ break;
+ case L_ADJUST:
+ case L_ADJUST_TRI:
+ matrix_write_P(matrix, PSTR("Adjust"));
+ break;
+ default:
+ matrix_write(matrix, buf);
+ }
+
+ // Host Keyboard LED Status
+ char led[40];
+ snprintf(led, sizeof(led), "\n%s %s %s",
+ (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
+ matrix_write(matrix, led);
+}
+
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+
+#if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+#endif
+
+ matrix_clear(&matrix);
+ if(is_master){
+ render_status(&matrix);
+ }else{
+ render_logo(&matrix);
+ }
+ matrix_update(&display, &matrix);
+}
+
+#endif
diff --git a/keyboards/helix/rev2/keymaps/yshrsmz/rules.mk b/keyboards/helix/rev2/keymaps/yshrsmz/rules.mk
new file mode 100644
index 000000000..3f390b48f
--- /dev/null
+++ b/keyboards/helix/rev2/keymaps/yshrsmz/rules.mk
@@ -0,0 +1,121 @@
+
+# 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
+
+define HELIX_CUSTOMISE_MSG
+ $(info Helix customize)
+ $(info - OLED_ENABLE=$(OLED_ENABLE))
+ $(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE))
+ $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE))
+ $(info - LED_ANIMATION=$(LED_ANIMATIONS))
+ $(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE))
+endef
+
+# Helix keyboard customize
+# you can edit follows 7 Variables
+# jp: 以下の7つの変数を必要に応じて編集します。
+HELIX_ROWS = 4 # Helix Rows is 4 or 5
+OLED_ENABLE = yes # OLED_ENABLE
+LOCAL_GLCDFONT = no # use each keymaps "helixfont.h" insted of "common/glcdfont.c"
+LED_BACK_ENABLE = no # LED backlight (Enable WS2812 RGB underlight.)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight.)
+LED_ANIMATIONS = no # LED animations
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+
+#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
+#### Do not enable these with audio at the same time.
+
+### Helix keyboard 'default' keymap: convenient command line option
+## make HELIX=<options> helix:defualt
+## option= oled | back | under | na | ios
+## ex.
+## make HELIX=oled helix:defualt
+## make HELIX=oled,back helix:defualt
+## make HELIX=oled,under helix:defualt
+## make HELIX=oled,back,na helix:defualt
+## make HELIX=oled,back,ios helix:defualt
+##
+ifneq ($(strip $(HELIX)),)
+ ifeq ($(findstring oled,$(HELIX)), oled)
+ OLED_ENABLE = yes
+ endif
+ ifeq ($(findstring back,$(HELIX)), back)
+ LED_BACK_ENABLE = yes
+ else ifeq ($(findstring under,$(HELIX)), under)
+ LED_UNDERGLOW_ENABLE = yes
+ endif
+ ifeq ($(findstring na,$(HELIX)), na)
+ LED_ANIMATIONS = no
+ endif
+ ifeq ($(findstring ios,$(HELIX)), ios)
+ IOS_DEVICE_ENABLE = yes
+ endif
+ $(eval $(call HELIX_CUSTOMISE_MSG))
+ $(info )
+endif
+
+# Uncomment these for checking
+# jp: コンパイル時にカスタマイズの状態を表示したい時はコメントをはずします。
+# $(eval $(call HELIX_CUSTOMISE_MSG))
+# $(info )
+
+ifneq ($(strip $(HELIX_ROWS)), 4)
+ ifneq ($(strip $(HELIX_ROWS)), 5)
+ $(error HELIX_ROWS = $(strip $(HELIX_ROWS)) is unexpected value)
+ endif
+endif
+OPT_DEFS += -DHELIX_ROWS=$(strip $(HELIX_ROWS))
+
+ifeq ($(strip $(LED_BACK_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+ OPT_DEFS += -DRGBLED_BACK
+ ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ $(eval $(call HELIX_CUSTOMISE_MSG))
+ $(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes')
+ endif
+else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+else
+ RGBLIGHT_ENABLE = no
+endif
+
+ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+endif
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+ OPT_DEFS += -DLED_ANIMATIONS
+endif
+
+ifeq ($(strip $(OLED_ENABLE)), yes)
+ OPT_DEFS += -DOLED_ENABLE
+endif
+
+ifeq ($(strip $(LOCAL_GLCDFONT)), yes)
+ OPT_DEFS += -DLOCAL_GLCDFONT
+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
+
+AUTO_SHIFT_ENABLE = yes
+
+# Uncomment these for debugging
+# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
+# $(info -- OPT_DEFS=$(OPT_DEFS))
+# $(info )
diff --git a/keyboards/helix/rev2/matrix.c b/keyboards/helix/rev2/matrix.c
index 8a1ce3af1..322959dbb 100644
--- a/keyboards/helix/rev2/matrix.c
+++ b/keyboards/helix/rev2/matrix.c
@@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdint.h>
#include <stdbool.h>
+#include <string.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
@@ -34,7 +35,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef USE_MATRIX_I2C
# include "i2c.h"
#else // USE_SERIAL
-# include "serial.h"
+# include "split_scomm.h"
#endif
#ifndef DEBOUNCE
@@ -102,6 +103,8 @@ void matrix_init(void)
init_cols();
TX_RX_LED_INIT;
+ TXLED0;
+ RXLED0;
// initialize matrix state: all keys off
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
@@ -178,17 +181,20 @@ i2c_error: // the cable is disconnceted, or something else went wrong
#else // USE_SERIAL
-int serial_transaction(void) {
+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;
+ if(ret==2) RXLED1;
return 1;
}
-RXLED0;
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_slave_buffer[i];
- }
+ RXLED0;
+ memcpy(&matrix[slaveOffset],
+ (void *)serial_slave_buffer, sizeof(serial_slave_buffer));
return 0;
}
#endif
@@ -199,19 +205,9 @@ uint8_t matrix_scan(void)
matrix_master_scan();
}else{
matrix_slave_scan();
-
-// if(serial_slave_DATA_CORRUPT()){
-// TXLED0;
- int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[offset+i] = serial_master_buffer[i];
- }
-
-// }else{
-// TXLED1;
-// }
-
+ int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
+ memcpy(&matrix[offset],
+ (void *)serial_master_buffer, sizeof(serial_master_buffer));
matrix_scan_quantum();
}
return 1;
@@ -221,6 +217,7 @@ uint8_t matrix_scan(void)
uint8_t matrix_master_scan(void) {
int ret = _matrix_scan();
+ int mchanged = 1;
#ifndef KEYBOARD_helix_rev1
int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
@@ -231,16 +228,19 @@ uint8_t matrix_master_scan(void) {
// i2c_slave_buffer[i] = matrix[offset+i];
// }
#else // USE_SERIAL
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_master_buffer[i] = matrix[offset+i];
- }
+ #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
#endif
#ifdef USE_MATRIX_I2C
if( i2c_transaction() ) {
#else // USE_SERIAL
- if( serial_transaction() ) {
+ if( serial_transaction(mchanged) ) {
#endif
// turn on the indicator led when halves are disconnected
TXLED1;
@@ -274,9 +274,19 @@ void matrix_slave_scan(void) {
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
}
diff --git a/keyboards/helix/rev2/rev2.c b/keyboards/helix/rev2/rev2.c
index 75765f1d3..abaa02cdb 100644
--- a/keyboards/helix/rev2/rev2.c
+++ b/keyboards/helix/rev2/rev2.c
@@ -2,6 +2,12 @@
#ifdef SSD1306OLED
+#include "ssd1306.h"
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ return process_record_gfx(keycode,record) && 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/helix/rev2/rules.mk b/keyboards/helix/rev2/rules.mk
index 6ab01f44b..5582a0f9c 100644
--- a/keyboards/helix/rev2/rules.mk
+++ b/keyboards/helix/rev2/rules.mk
@@ -1,3 +1,3 @@
-SRC += rev2/matrix.c \
- rev2/split_util.c \
- ws2812.c
+SRC += rev2/matrix.c
+SRC += rev2/split_util.c
+SRC += rev2/split_scomm.c
diff --git a/keyboards/helix/rev2/serial_config.h b/keyboards/helix/rev2/serial_config.h
index 82c6e4e83..37135213d 100644
--- a/keyboards/helix/rev2/serial_config.h
+++ b/keyboards/helix/rev2/serial_config.h
@@ -1,16 +1,8 @@
-#ifndef SOFT_SERIAL_CONFIG_H
-#define SOFT_SERIAL_CONFIG_H
+//// #error rev2 serial config
+#ifndef SOFT_SERIAL_PIN
/* Soft Serial defines */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD2)
-#define SERIAL_PIN_INTERRUPT INT2_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
-
-//// #error rev2 serial config
+#define SOFT_SERIAL_PIN D2
-#endif /* SOFT_SERIAL_CONFIG_H */
+#define SERIAL_USE_MULTI_TRANSACTION
+#endif
diff --git a/keyboards/helix/rev2/serial_config_simpleapi.h b/keyboards/helix/rev2/serial_config_simpleapi.h
new file mode 100644
index 000000000..e2d22a41e
--- /dev/null
+++ b/keyboards/helix/rev2/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/helix/rev2/split_scomm.c b/keyboards/helix/rev2/split_scomm.c
new file mode 100644
index 000000000..ada786796
--- /dev/null
+++ b/keyboards/helix/rev2/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/helix/rev2/split_scomm.h b/keyboards/helix/rev2/split_scomm.h
new file mode 100644
index 000000000..873d8939d
--- /dev/null
+++ b/keyboards/helix/rev2/split_scomm.h
@@ -0,0 +1,24 @@
+#ifndef SPLIT_COMM_H
+#define SPLIT_COMM_H
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (OLD API, compatible with let's split serial.c) --- */
+#include "serial.h"
+
+#else
+/* --- USE flexible API (using multi-type transaction function) --- */
+// Buffers for master - slave communication
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
+extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+extern uint8_t slave_buffer_change_count;
+
+void serial_master_init(void);
+void serial_slave_init(void);
+int serial_update_buffers(int master_changed);
+
+#endif
+
+#endif /* SPLIT_COMM_H */
diff --git a/keyboards/helix/rev2/split_util.c b/keyboards/helix/rev2/split_util.c
index beb39fa00..e1ff8b437 100644
--- a/keyboards/helix/rev2/split_util.c
+++ b/keyboards/helix/rev2/split_util.c
@@ -11,7 +11,7 @@
#ifdef USE_MATRIX_I2C
# include "i2c.h"
#else
-# include "serial.h"
+# include "split_scomm.h"
#endif
volatile bool isLeftHand = true;
diff --git a/keyboards/helix/rules.mk b/keyboards/helix/rules.mk
index c35f93fb0..be234e60e 100644
--- a/keyboards/helix/rules.mk
+++ b/keyboards/helix/rules.mk
@@ -1,6 +1,6 @@
-SRC += i2c.c \
- serial.c \
- ssd1306.c
+SRC += i2c.c
+SRC += serial.c
+SRC += ssd1306.c
# MCU name
#MCU = at90usb1287
@@ -62,7 +62,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = no
USE_I2C = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/helix/serial.c b/keyboards/helix/serial.c
index 591941587..6006ebf1b 100644
--- a/keyboards/helix/serial.c
+++ b/keyboards/helix/serial.c
@@ -1,5 +1,10 @@
/*
* WARNING: be careful changing this code, it is very timing dependent
+ *
+ * 2018-10-28 checked
+ * avr-gcc 4.9.2
+ * avr-gcc 5.4.0
+ * avr-gcc 7.3.0
*/
#ifndef F_CPU
@@ -9,133 +14,304 @@
#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
-#ifdef USE_SERIAL
+#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)
-// Serial pulse period in microseconds.
-#define SELECT_SERIAL_SPEED 1
-#if SELECT_SERIAL_SPEED == 0
+// 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
- #define READ_WRITE_START_ADJUST 30 // cycles
- #define READ_WRITE_WIDTH_ADJUST 10 // cycles
-#elif SELECT_SERIAL_SPEED == 1
+ #if __GNUC__ < 6
+ #define READ_WRITE_START_ADJUST 33 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_START_ADJUST 34 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 1
// High speed
#define SERIAL_DELAY 6 // micro sec
- #define READ_WRITE_START_ADJUST 23 // cycles
- #define READ_WRITE_WIDTH_ADJUST 10 // cycles
-#elif SELECT_SERIAL_SPEED == 2
+ #if __GNUC__ < 6
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+ #else
+ #define READ_WRITE_START_ADJUST 33 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 7 // cycles
+ #endif
+#elif SELECT_SOFT_SERIAL_SPEED == 2
// Middle speed
#define SERIAL_DELAY 12 // micro sec
- #define READ_WRITE_START_ADJUST 25 // cycles
- #define READ_WRITE_WIDTH_ADJUST 10 // cycles
-#elif SELECT_SERIAL_SPEED == 3
+ #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 25 // cycles
- #define READ_WRITE_WIDTH_ADJUST 10 // cycles
-#elif SELECT_SERIAL_SPEED == 4
+ #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 50 // micro sec
- #define READ_WRITE_START_ADJUST 25 // cycles
- #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+ #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 Illegal Serial Speed
-#endif
-
+#error invalid SELECT_SOFT_SERIAL_SPEED value
+#endif /* SELECT_SOFT_SERIAL_SPEED */
+#endif /* SERIAL_DELAY */
#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2)
#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2)
-#define SLAVE_INT_WIDTH 1
-#define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY
-
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
+#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
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
+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 serial_master_init(void) {
- serial_output();
- serial_high();
+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 serial_slave_init(void) {
- serial_input_with_pullup();
-
-#if SERIAL_PIN_MASK == _BV(PD0)
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
-#elif SERIAL_PIN_MASK == _BV(PD2)
- // Enable INT2
- EIMSK |= _BV(INT2);
- // Trigger on falling edge of INT2
- EICRA &= ~(_BV(ISC20) | _BV(ISC21));
+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
- #error unknown SERIAL_PIN_MASK value
+ // 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 (int i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
+ for (uint8_t i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
}
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
+ // 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();
@@ -144,152 +320,271 @@ void sync_send(void) {
}
// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
+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 ( uint8_t i = 0; i < 8; ++i) {
- serial_delay_half1(); // read the middle of pulses
- byte = (byte << 1) | serial_read_pin();
- _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
- serial_delay_half2();
+ 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
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 1<<7;
- while( b ) {
- if(data & b) {
- serial_high();
- } else {
- serial_low();
+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();
}
- b >>= 1;
+ /* send parity bit */
+ if(p & 1) { serial_high(); }
+ else { serial_low(); }
serial_delay();
- }
- serial_low(); // sync_send() / senc_recv() need raise edge
-}
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- serial_output();
+ serial_low(); // sync_send() / senc_recv() need raise edge
+}
- // slave send phase
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
+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_byte(serial_slave_buffer[i]);
- checksum += serial_slave_buffer[i];
+ serial_write_chunk(data,8);
}
- sync_send();
- serial_write_byte(checksum);
-
- // slave switch to input
- sync_send(); //0
- serial_delay_half1(); //1
- serial_low(); //2
- serial_input_with_pullup(); //2
- serial_delay_half1(); //3
-
- // slave recive phase
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
+}
+
+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();
- serial_master_buffer[i] = serial_read_byte();
- checksum_computed += serial_master_buffer[i];
+ 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();
- uint8_t checksum_received = serial_read_byte();
+ 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();
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
+ 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 {
- status &= ~SLAVE_DATA_CORRUPT;
+ *trans->status = TRANSACTION_ACCEPTED;
}
- sync_recv(); //weit master output to high
+ sync_recv(); //weit initiator output to high
}
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
-}
-
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
+/////////
+// start transaction by initiator
+//
+// int soft_serial_transaction(int sstd_index)
//
// Returns:
-// 0 => no error
-// 1 => slave did not respond
-// 2 => checksum error
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
+// 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 slave that we want to start a transaction
+ // signal to the target that we want to start a transaction
serial_output();
serial_low();
- _delay_us(SLAVE_INT_WIDTH);
+ _delay_us(SLAVE_INT_WIDTH_US);
- // wait for the slaves response
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+ // wait for the target response
serial_input_with_pullup();
_delay_us(SLAVE_INT_RESPONSE_TIME);
- // check if the slave is present
+ // check if the target is present
if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
+ // target failed to pull the line low, assume not present
serial_output();
serial_high();
+ *trans->status = TRANSACTION_NO_RESPONSE;
sei();
- return 1;
+ return TRANSACTION_NO_RESPONSE;
}
- // master recive phase
- // if the slave is present syncronize with it
+#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();
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- sync_recv();
- serial_slave_buffer[i] = serial_read_byte();
- checksum_computed += serial_slave_buffer[i];
+ // wait for the target response (step1 low->high)
+ serial_input_with_pullup();
+ while( !serial_read_pin() ) {
+ _delay_sub_us(2);
}
- sync_recv();
- uint8_t checksum_received = serial_read_byte();
- if (checksum_computed != checksum_received) {
- serial_output();
- serial_high();
- sei();
- return 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
- // master switch to output
- sync_recv(); //0
- serial_delay(); //1
- serial_low(); //3
- serial_output(); // 3
- serial_delay_half1(); //4
-
- // master send phase
- uint8_t checksum = 0;
-
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- sync_send();
- serial_write_byte(serial_master_buffer[i]);
- checksum += serial_master_buffer[i];
+ // 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);
}
- sync_send();
- serial_write_byte(checksum);
// always, release the line when not in use
sync_send();
+ *trans->status = TRANSACTION_END;
sei();
- return 0;
+ 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/helix/serial.h b/keyboards/helix/serial.h
index c3c9569b2..2e53928df 100644
--- a/keyboards/helix/serial.h
+++ b/keyboards/helix/serial.h
@@ -3,25 +3,87 @@
#include <stdbool.h>
-// ////////////////////////////////////////////
-// Need Soft Serial defines in serial_config.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_PIN_DDR DDRD
-// #define SERIAL_PIN_PORT PORTD
-// #define SERIAL_PIN_INPUT PIND
-// #define SERIAL_PIN_MASK _BV(PD?) ?=0,2
-// #define SERIAL_PIN_INTERRUPT INT?_vect ?=0,2
// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-// #define SERIAL_MASTER_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);
-// Buffers for master - slave communication
-extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
-extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+// 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
-void serial_master_init(void);
-void serial_slave_init(void);
-int serial_update_buffers(void);
-bool serial_slave_data_corrupt(void);
+// 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
#endif /* SOFT_SERIAL_H */
diff --git a/keyboards/helix/ssd1306.c b/keyboards/helix/ssd1306.c
index b3e55a67c..dd3290ba0 100644
--- a/keyboards/helix/ssd1306.c
+++ b/keyboards/helix/ssd1306.c
@@ -1,3 +1,4 @@
+
#ifdef SSD1306OLED
#include "ssd1306.h"
@@ -27,12 +28,17 @@
//static uint16_t last_battery_update;
//static uint32_t vbat;
//#define BatteryUpdateInterval 10000 /* milliseconds */
-#define ScreenOffInterval 300000 /* milliseconds */
+
+// 'last_flush' is declared as uint16_t,
+// so this must be less than 65535
+#define ScreenOffInterval 60000 /* milliseconds */
#if DEBUG_TO_SCREEN
static uint8_t displaying;
#endif
static uint16_t last_flush;
+static bool force_dirty = true;
+
// Write command sequence.
// Returns true on success.
static inline bool _send_cmd1(uint8_t cmd) {
@@ -318,12 +324,19 @@ void iota_gfx_task_user(void) {
void iota_gfx_task(void) {
iota_gfx_task_user();
- if (display.dirty) {
+ if (display.dirty|| force_dirty) {
iota_gfx_flush();
+ force_dirty = false;
}
if (timer_elapsed(last_flush) > ScreenOffInterval) {
iota_gfx_off();
}
}
+
+bool process_record_gfx(uint16_t keycode, keyrecord_t *record) {
+ force_dirty = true;
+ return true;
+}
+
#endif
diff --git a/keyboards/helix/ssd1306.h b/keyboards/helix/ssd1306.h
index 77ce7c211..9cf6983b7 100644
--- a/keyboards/helix/ssd1306.h
+++ b/keyboards/helix/ssd1306.h
@@ -4,6 +4,7 @@
#include <stdbool.h>
#include <stdio.h>
#include "pincontrol.h"
+#include "action.h"
enum ssd1306_cmds {
DisplayOff = 0xAE,
@@ -87,6 +88,6 @@ void matrix_write(struct CharacterMatrix *matrix, const char *data);
void matrix_write_P(struct CharacterMatrix *matrix, const char *data);
void matrix_render(struct CharacterMatrix *matrix);
-
+bool process_record_gfx(uint16_t keycode, keyrecord_t *record);
#endif
diff --git a/keyboards/hhkb/keymaps/blakedietz/rules.mk b/keyboards/hhkb/keymaps/blakedietz/rules.mk
index 7c16b2c98..7d97e7a52 100644
--- a/keyboards/hhkb/keymaps/blakedietz/rules.mk
+++ b/keyboards/hhkb/keymaps/blakedietz/rules.mk
@@ -1,2 +1,3 @@
TAP_DANCE_ENABLE = no
UNICODE_ENABLE = no
+LEADER_ENABLE = yes
diff --git a/keyboards/hhkb/keymaps/cinaeco/rules.mk b/keyboards/hhkb/keymaps/cinaeco/rules.mk
index 05b724051..efed95492 100644
--- a/keyboards/hhkb/keymaps/cinaeco/rules.mk
+++ b/keyboards/hhkb/keymaps/cinaeco/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/hhkb/rn42/rn42.c b/keyboards/hhkb/rn42/rn42.c
index 859e40149..154da4e10 100644
--- a/keyboards/hhkb/rn42/rn42.c
+++ b/keyboards/hhkb/rn42/rn42.c
@@ -1,7 +1,7 @@
#include <avr/io.h>
#include "host.h"
#include "host_driver.h"
-#include "serial.h"
+#include "../serial.h"
#include "rn42.h"
#include "print.h"
#include "timer.h"
diff --git a/keyboards/hs60/config.h b/keyboards/hs60/config.h
deleted file mode 100644
index 31f7c0790..000000000
--- a/keyboards/hs60/config.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-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/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0257
-#define DEVICE_VER 0x0001
-#define MANUFACTURER Yiancar-Designs
-#define PRODUCT HS60
-#define DESCRIPTION GH60 compatible, tool free RGB keyboard
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 14
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-#define MATRIX_ROW_PINS { B0, B1, B2, B3, F7 }
-#define MATRIX_COL_PINS { F1, F4, F5, E6, F0, B7, D2, D3, D5, D4, D6, D7, B4, B5 }
-#define UNUSED_PINS { B6, C6, C7, F6 }
-
-/* bootloader configuration */
-
-#define QMK_ESC_OUTPUT B5 // usually COL
-#define QMK_ESC_INPUT B2 // usually ROW
-
-/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
-#define DIODE_DIRECTION COL2ROW
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
- * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
- */
-// #define GRAVE_ESC_CTRL_OVERRIDE
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-//#define FORCE_NKRO
-
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
-/* key combination for magic key command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* Backlight options */
-
-//This is experimental do not enable yet
-//#define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
-
-#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
-#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
-#define RGB_MATRIX_SKIP_FRAMES 0
-#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 215
-
-#define DRIVER_ADDR_1 0b1110100
-#define DRIVER_ADDR_2 0b1110101
-
-#define DRIVER_COUNT 2
-#define DRIVER_1_LED_TOTAL 30
-
-#ifdef HS60_ANSI
-#define DRIVER_2_LED_TOTAL 31
-#else
-#define DRIVER_2_LED_TOTAL 32
-#endif
-
-#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL
-
-#endif
diff --git a/keyboards/hs60/hs60.c b/keyboards/hs60/hs60.c
deleted file mode 100644
index 169f84b02..000000000
--- a/keyboards/hs60/hs60.c
+++ /dev/null
@@ -1,496 +0,0 @@
-/* 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 "hs60.h"
-#include "config.h"
-
-// Please ignore this is for upcoming features
-/*#ifdef RAW_ENABLE
-
-void raw_hid_receive( uint8_t *data, uint8_t length )
-{
- uint8_t command = data[0];
- switch ( command )
- {
- case id_protocol_version:
- {
- msg_protocol_version *msg = (msg_protocol_version*)&data[1];
- msg->version = PROTOCOL_VERSION;
- break;
- }
-#if USE_KEYMAPS_IN_EEPROM
- case id_keymap_keycode_load:
- {
- msg_keymap_keycode_load *msg = (msg_keymap_keycode_load*)&data[1];
- msg->keycode = keymap_keycode_load( msg->layer, msg->row, msg->column );
- break;
- }
- case id_keymap_keycode_save:
- {
- msg_keymap_keycode_save *msg = (msg_keymap_keycode_save*)&data[1];
- keymap_keycode_save( msg->layer, msg->row, msg->column, msg->keycode);
- break;
- }
- case id_keymap_default_save:
- {
- keymap_default_save();
- break;
- }
-#endif // USE_KEYMAPS_IN_EEPROM
- case id_backlight_config_set_values:
- {
- msg_backlight_config_set_values *msg = (msg_backlight_config_set_values*)&data[1];
- backlight_config_set_values(msg);
- backlight_config_save();
- break;
- }
- case id_backlight_config_set_alphas_mods:
- {
- msg_backlight_config_set_alphas_mods *msg = (msg_backlight_config_set_alphas_mods*)&data[1];
- backlight_config_set_alphas_mods( msg->alphas_mods );
- backlight_config_save();
- break;
- }
- case id_backlight_set_key_color:
- {
- msg_backlight_set_key_color *msg = (msg_backlight_set_key_color*)&data[1];
- backlight_set_key_color(msg->row, msg->column, msg->hsv);
- break;
- }
- case id_system_get_state:
- {
- msg_system_state *msg = (msg_system_state*)&data[1];
- msg->value = backlight_get_tick();
- break;
- }
- default:
- {
- // Unhandled message.
- data[0] = id_unhandled;
- break;
- }
- }
-
- // Return same buffer with values changed
- raw_hid_send( data, length );
-
-}
-
-#endif*/
-
-#ifdef HS60_ANSI
-
-const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
-/* Refer to IS31 manual for these locations
- * driver
- * | R location
- * | | G location
- * | | | B location
- * | | | | */
- {0, C1_1, C3_2, C4_2}, //A1
- {0, C1_2, C2_2, C4_3}, //A2
- {0, C1_3, C2_3, C3_3}, //A3
- {0, C1_4, C2_4, C3_4}, //A4
- {0, C1_5, C2_5, C3_5}, //A5
- {0, C1_6, C2_6, C3_6}, //A6
- {0, C1_7, C2_7, C3_7}, //A7
- {0, C1_8, C2_8, C3_8}, //A8
- {0, C9_1, C8_1, C7_1}, //A9
- {0, C9_2, C8_2, C7_2}, //A10
- {0, C9_3, C8_3, C7_3}, //A11
- {0, C9_4, C8_4, C7_4}, //A12
- {0, C9_5, C8_5, C7_5}, //A13
- {0, C9_6, C8_6, C7_6}, //A14
- {0, C9_7, C8_7, C6_6}, //A15
- {0, C9_8, C7_7, C6_7}, //A16
-
- {0, C1_9, C3_10, C4_10}, //B1
- {0, C1_10, C2_10, C4_11}, //B2
- {0, C1_11, C2_11, C3_11}, //B3
- {0, C1_12, C2_12, C3_12}, //B4
- {0, C1_13, C2_13, C3_13}, //B5
- {0, C1_14, C2_14, C3_14}, //B6
- {0, C1_15, C2_15, C3_15}, //B7
- {0, C1_16, C2_16, C3_16}, //B8
- {0, C9_9, C8_9, C7_9}, //B9
- {0, C9_10, C8_10, C7_10}, //B10
- {0, C9_11, C8_11, C7_11}, //B11
- {0, C9_12, C8_12, C7_12}, //B12
- {0, C9_13, C8_13, C7_13}, //B13
- {0, C9_14, C8_14, C7_14}, //B14
-
- {1, C1_1, C3_2, C4_2}, //C1
- {1, C1_2, C2_2, C4_3}, //C2
- {1, C1_3, C2_3, C3_3}, //C3
- {1, C1_4, C2_4, C3_4}, //C4
- {1, C1_5, C2_5, C3_5}, //C5
- {1, C1_6, C2_6, C3_6}, //C6
- {1, C1_7, C2_7, C3_7}, //C7
- {1, C1_8, C2_8, C3_8}, //C8
- {1, C9_1, C8_1, C7_1}, //C9
- {1, C9_2, C8_2, C7_2}, //C10
- {1, C9_3, C8_3, C7_3}, //C11
- {1, C9_4, C8_4, C7_4}, //C12
- {1, C9_5, C8_5, C7_5}, //C13
- {1, C9_6, C8_6, C7_6}, //C14
- {1, C9_7, C8_7, C6_6}, //C15
- {1, C9_8, C7_7, C6_7}, //C16
-
- {1, C1_9, C3_10, C4_10}, //D1
- //D2
- {1, C1_11, C2_11, C3_11}, //D3
- {1, C1_12, C2_12, C3_12}, //D4
- {1, C1_13, C2_13, C3_13}, //D5
- {1, C1_14, C2_14, C3_14}, //D6
- {1, C1_15, C2_15, C3_15}, //D7
- {1, C1_16, C2_16, C3_16}, //D8
- {1, C9_9, C8_9, C7_9}, //D9
- {1, C9_10, C8_10, C7_10}, //D10
- {1, C9_11, C8_11, C7_11}, //D11
- {1, C9_12, C8_12, C7_12}, //D12
- {1, C9_13, C8_13, C7_13}, //D13
- {1, C9_14, C8_14, C7_14}, //D14
- {1, C9_15, C8_15, C6_14}, //D15
- {1, C9_16, C7_15, C6_15} //D16
-};
-
-const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
-//
-// C7, C6, C5, C4, C3, C2, C1, A7, A6, A5, A4, A3, A2, A1,
-// C8, C9, C10, C11, C12, C13, C14, A8, A9, A10, A11, A12, A13, A15,
-// D4, D5, D6, D7, D8, C16, C15, B5, B6, B7, B8, A16, ---, A14,
-// D3, ---, D1, D9, D10, D11, D12, B4, B3, B2, B1, B9, ---, B10,
-// D16, D15, D14, ---, ---, ---, D13, ---, ---, ---, B14, B13, B12, B11
-/* {row | col << 4}
- * | {x=0..224, y=0..64}
- * | | modifier
- * | | | */
- {{0|(13<<4)}, {224, 0}, 1}, //A1-A16
- {{0|(12<<4)}, {204, 0}, 0},
- {{0|(11<<4)}, {187, 0}, 0},
- {{0|(10<<4)}, {170, 0}, 0},
- {{0|(9<<4)}, {153, 0}, 0},
- {{0|(8<<4)}, {136, 0}, 0},
- {{0|(7<<4)}, {119, 0}, 0},
- {{1|(7<<4)}, {119, 16}, 0},
- {{1|(8<<4)}, {136, 16}, 0},
- {{1|(9<<4)}, {153, 16}, 0},
- {{1|(10<<4)}, {170, 16}, 0},
- {{1|(11<<4)}, {187, 16}, 0},
- {{1|(12<<4)}, {204, 16}, 0},
- {{2|(13<<4)}, {224, 32}, 1},
- {{2|(12<<4)}, {224, 16}, 0},
- {{2|(11<<4)}, {197, 32}, 0},
-
- {{3|(10<<4)}, {170, 48}, 0}, //B1-B14
- {{3|(9<<4)}, {153, 48}, 0},
- {{3|(8<<4)}, {136, 48}, 0},
- {{3|(7<<4)}, {119, 48}, 0},
- {{2|(7<<4)}, {119, 32}, 0},
- {{2|(8<<4)}, {136, 32}, 0},
- {{2|(9<<4)}, {153, 32}, 0},
- {{2|(10<<4)}, {170, 32}, 0},
- {{3|(11<<4)}, {187, 48}, 0},
- {{3|(13<<4)}, {214, 48}, 1},
- {{4|(13<<4)}, {224, 64}, 1},
- {{4|(12<<4)}, {204, 64}, 1},
- {{4|(11<<4)}, {187, 64}, 1},
- {{4|(10<<4)}, {170, 64}, 1},
-
- {{0|(6<<4)}, {102, 0}, 0}, //C1-C16
- {{0|(5<<4)}, { 85, 0}, 0},
- {{0|(4<<4)}, { 68, 0}, 0},
- {{0|(3<<4)}, { 51, 0}, 0},
- {{0|(2<<4)}, { 34, 0}, 0},
- {{0|(1<<4)}, { 17, 0}, 0},
- {{0|(0<<4)}, { 0, 0}, 1},
- {{1|(0<<4)}, { 0, 16}, 1},
- {{1|(1<<4)}, { 17, 16}, 0},
- {{1|(2<<4)}, { 34, 16}, 0},
- {{1|(3<<4)}, { 51, 16}, 0},
- {{1|(4<<4)}, { 68, 16}, 0},
- {{1|(5<<4)}, { 85, 16}, 0},
- {{1|(6<<4)}, {102, 16}, 0},
- {{2|(6<<4)}, {102, 32}, 0},
- {{2|(5<<4)}, { 85, 32}, 0},
-
- {{3|(2<<4)}, { 32, 48}, 0}, //D1-D16
- //D2
- {{3|(0<<4)}, { 10, 48}, 1},
- {{2|(0<<4)}, { 0, 32}, 1},
- {{2|(1<<4)}, { 17, 32}, 0},
- {{2|(2<<4)}, { 34, 32}, 0},
- {{2|(3<<4)}, { 51, 32}, 0},
- {{2|(4<<4)}, { 68, 32}, 0},
- {{3|(3<<4)}, { 51, 48}, 0},
- {{3|(4<<4)}, { 68, 48}, 0},
- {{3|(5<<4)}, { 85, 48}, 0},
- {{3|(6<<4)}, {102, 48}, 0},
- {{4|(3<<4)}, {102, 64}, 0},
- {{4|(2<<4)}, { 34, 68}, 1},
- {{4|(1<<4)}, { 17, 68}, 1},
- {{4|(0<<4)}, { 0, 68}, 1}
-};
-
-#else
-
-const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
-/* Refer to IS31 manual for these locations
- * driver
- * | R location
- * | | G location
- * | | | B location
- * | | | | */
- {0, C1_1, C3_2, C4_2}, //A1
- {0, C1_2, C2_2, C4_3}, //A2
- {0, C1_3, C2_3, C3_3}, //A3
- {0, C1_4, C2_4, C3_4}, //A4
- {0, C1_5, C2_5, C3_5}, //A5
- {0, C1_6, C2_6, C3_6}, //A6
- {0, C1_7, C2_7, C3_7}, //A7
- {0, C1_8, C2_8, C3_8}, //A8
- {0, C9_1, C8_1, C7_1}, //A9
- {0, C9_2, C8_2, C7_2}, //A10
- {0, C9_3, C8_3, C7_3}, //A11
- {0, C9_4, C8_4, C7_4}, //A12
- {0, C9_5, C8_5, C7_5}, //A13
- {0, C9_6, C8_6, C7_6}, //A14
- {0, C9_7, C8_7, C6_6}, //A15
- {0, C9_8, C7_7, C6_7}, //A16
-
- {0, C1_9, C3_10, C4_10}, //B1
- {0, C1_10, C2_10, C4_11}, //B2
- {0, C1_11, C2_11, C3_11}, //B3
- {0, C1_12, C2_12, C3_12}, //B4
- {0, C1_13, C2_13, C3_13}, //B5
- {0, C1_14, C2_14, C3_14}, //B6
- {0, C1_15, C2_15, C3_15}, //B7
- {0, C1_16, C2_16, C3_16}, //B8
- {0, C9_9, C8_9, C7_9}, //B9
- {0, C9_10, C8_10, C7_10}, //B10
- {0, C9_11, C8_11, C7_11}, //B11
- {0, C9_12, C8_12, C7_12}, //B12
- {0, C9_13, C8_13, C7_13}, //B13
- {0, C9_14, C8_14, C7_14}, //B14
-
- {1, C1_1, C3_2, C4_2}, //C1
- {1, C1_2, C2_2, C4_3}, //C2
- {1, C1_3, C2_3, C3_3}, //C3
- {1, C1_4, C2_4, C3_4}, //C4
- {1, C1_5, C2_5, C3_5}, //C5
- {1, C1_6, C2_6, C3_6}, //C6
- {1, C1_7, C2_7, C3_7}, //C7
- {1, C1_8, C2_8, C3_8}, //C8
- {1, C9_1, C8_1, C7_1}, //C9
- {1, C9_2, C8_2, C7_2}, //C10
- {1, C9_3, C8_3, C7_3}, //C11
- {1, C9_4, C8_4, C7_4}, //C12
- {1, C9_5, C8_5, C7_5}, //C13
- {1, C9_6, C8_6, C7_6}, //C14
- {1, C9_7, C8_7, C6_6}, //C15
- {1, C9_8, C7_7, C6_7}, //C16
-
- {1, C1_9, C3_10, C4_10}, //D1
- {1, C1_10, C2_10, C4_11}, //D2
- {1, C1_11, C2_11, C3_11}, //D3
- {1, C1_12, C2_12, C3_12}, //D4
- {1, C1_13, C2_13, C3_13}, //D5
- {1, C1_14, C2_14, C3_14}, //D6
- {1, C1_15, C2_15, C3_15}, //D7
- {1, C1_16, C2_16, C3_16}, //D8
- {1, C9_9, C8_9, C7_9}, //D9
- {1, C9_10, C8_10, C7_10}, //D10
- {1, C9_11, C8_11, C7_11}, //D11
- {1, C9_12, C8_12, C7_12}, //D12
- {1, C9_13, C8_13, C7_13}, //D13
- {1, C9_14, C8_14, C7_14}, //D14
- {1, C9_15, C8_15, C6_14}, //D15
- {1, C9_16, C7_15, C6_15} //D16
-};
-
-const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
-//
-// C7, C6, C5, C4, C3, C2, C1, A7, A6, A5, A4, A3, A2, A1,
-// C8, C9, C10, C11, C12, C13, C14, A8, A9, A10, A11, A12, A13, ---,
-// D4, D5, D6, D7, D8, C16, C15, B5, B6, B7, B8, A16, A15, A14,
-// D3, D2, D1, D9, D10, D11, D12, B4, B3, B2, B1, B9, ---, B10,
-// D16, D15, D14, ---, ---, ---, D13, ---, ---, ---, B14, B13, B12, B11
-/* {row | col << 4}
- * | {x=0..224, y=0..64}
- * | | modifier
- * | | | */
- {{0|(13<<4)}, {224, 0}, 1}, //A1-A16
- {{0|(12<<4)}, {204, 0}, 0},
- {{0|(11<<4)}, {187, 0}, 0},
- {{0|(10<<4)}, {170, 0}, 0},
- {{0|(9<<4)}, {153, 0}, 0},
- {{0|(8<<4)}, {136, 0}, 0},
- {{0|(7<<4)}, {119, 0}, 0},
- {{1|(7<<4)}, {119, 16}, 0},
- {{1|(8<<4)}, {136, 16}, 0},
- {{1|(9<<4)}, {153, 16}, 0},
- {{1|(10<<4)}, {170, 16}, 0},
- {{1|(11<<4)}, {187, 16}, 0},
- {{1|(12<<4)}, {204, 16}, 0},
- {{2|(13<<4)}, {224, 8}, 1},
- {{2|(12<<4)}, {204, 32}, 0},
- {{2|(11<<4)}, {187, 32}, 0},
-
- {{3|(10<<4)}, {170, 48}, 0}, //B1-B14
- {{3|(9<<4)}, {153, 48}, 0},
- {{3|(8<<4)}, {136, 48}, 0},
- {{3|(7<<4)}, {119, 48}, 0},
- {{2|(7<<4)}, {119, 32}, 0},
- {{2|(8<<4)}, {136, 32}, 0},
- {{2|(9<<4)}, {153, 32}, 0},
- {{2|(10<<4)}, {170, 32}, 0},
- {{3|(11<<4)}, {187, 48}, 0},
- {{3|(13<<4)}, {214, 48}, 1},
- {{4|(13<<4)}, {224, 64}, 1},
- {{4|(12<<4)}, {204, 64}, 1},
- {{4|(11<<4)}, {187, 64}, 1},
- {{4|(10<<4)}, {170, 64}, 1},
-
- {{0|(6<<4)}, {102, 0}, 0}, //C1-C16
- {{0|(5<<4)}, { 85, 0}, 0},
- {{0|(4<<4)}, { 68, 0}, 0},
- {{0|(3<<4)}, { 51, 0}, 0},
- {{0|(2<<4)}, { 34, 0}, 0},
- {{0|(1<<4)}, { 17, 0}, 0},
- {{0|(0<<4)}, { 0, 0}, 1},
- {{1|(0<<4)}, { 0, 16}, 1},
- {{1|(1<<4)}, { 17, 16}, 0},
- {{1|(2<<4)}, { 34, 16}, 0},
- {{1|(3<<4)}, { 51, 16}, 0},
- {{1|(4<<4)}, { 68, 16}, 0},
- {{1|(5<<4)}, { 85, 16}, 0},
- {{1|(6<<4)}, {102, 16}, 0},
- {{2|(6<<4)}, {102, 32}, 0},
- {{2|(5<<4)}, { 85, 32}, 0},
-
- {{3|(2<<4)}, { 32, 48}, 0}, //D1-D16
- {{3|(1<<4)}, { 17, 48}, 0},
- {{3|(0<<4)}, { 0, 48}, 1},
- {{2|(0<<4)}, { 0, 32}, 1},
- {{2|(1<<4)}, { 17, 32}, 0},
- {{2|(2<<4)}, { 34, 32}, 0},
- {{2|(3<<4)}, { 51, 32}, 0},
- {{2|(4<<4)}, { 68, 32}, 0},
- {{3|(3<<4)}, { 51, 48}, 0},
- {{3|(4<<4)}, { 68, 48}, 0},
- {{3|(5<<4)}, { 85, 48}, 0},
- {{3|(6<<4)}, {102, 48}, 0},
- {{4|(3<<4)}, {102, 64}, 0},
- {{4|(2<<4)}, { 34, 68}, 1},
- {{4|(1<<4)}, { 17, 68}, 1},
- {{4|(0<<4)}, { 0, 68}, 1}
-};
-
-#endif
-
-void bootmagic_lite(void)
-{
- // The lite version of TMK's bootmagic made by Wilba.
- // 100% less potential for accidentally making the
- // keyboard do stupid things.
-
- // We need multiple scans because debouncing can't be turned off.
- matrix_scan();
- wait_ms(DEBOUNCING_DELAY);
- matrix_scan();
-
- // If the Esc and space bar are held down on power up,
- // reset the EEPROM valid state and jump to bootloader.
- // Assumes Esc is at [0,0] and spacebar is at [4,6].
- // This isn't very generalized, but we need something that doesn't
- // rely on user's keymaps in firmware or EEPROM.
- if ( ( matrix_get_row(0) & (1<<0) ) &&
- ( matrix_get_row(4) & (1<<6) ) )
- {
- // Set the TMK/QMK EEPROM state as invalid.
- eeconfig_disable();
- //eeprom_set_valid(false);
- // Jump to bootloader.
- bootloader_jump();
- }
-}
-
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
-
- bootmagic_lite();
-
- // Please ignore this is for upcoming features
- // If the EEPROM has the magic, the data is good.
- // OK to load from EEPROM.
- /*if (eeprom_is_valid())
- {
- backlight_config_load();
-
- // TODO: do something to "turn on" keymaps in EEPROM?
- }
- else
- {
- // If the EEPROM has not been saved before, or is out of date,
- // save the default values to the EEPROM. Default values
- // come from construction of the zeal_backlight_config instance.
- backlight_config_save();
-
- // Clear the LED colors stored in EEPROM
- for ( int row=0; row < MATRIX_ROWS; row++ )
- {
- HSV hsv;
- for ( int column=0; column < MATRIX_COLS; column++ )
- {
- hsv.h = rand() & 0xFF;
- hsv.s = rand() & 0x7F;
- hsv.v = 255;
- backlight_set_key_color( row, column, hsv );
- }
- }
- #ifdef USE_KEYMAPS_IN_EEPROM
- keymap_default_save();
- #endif
- // Save the magic number last, in case saving was interrupted
- eeprom_set_valid(true);
- }*/
-
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
-
- matrix_scan_user();
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
-
- return process_record_user(keycode, record);
-}
-
-void led_set_kb(uint8_t usb_led) {
- //backlight_set_indicator_state(usb_led);
-}
-
-void suspend_power_down_kb(void)
-{
- rgb_matrix_set_suspend_state(true);
-}
-
-void suspend_wakeup_init_kb(void)
-{
- rgb_matrix_set_suspend_state(false);
-} \ No newline at end of file
diff --git a/keyboards/hs60/keymaps/ansi/config.h b/keyboards/hs60/keymaps/ansi/config.h
deleted file mode 100644
index bab67fd55..000000000
--- a/keyboards/hs60/keymaps/ansi/config.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-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/>.
-*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-/* Include overwrites for specific keymap */
-
-#define HS60_ANSI
-
-#endif \ No newline at end of file
diff --git a/keyboards/hs60/readme.md b/keyboards/hs60/readme.md
deleted file mode 100644
index 939b58828..000000000
--- a/keyboards/hs60/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-HS60
-====
-
-[HS60](https://mechboards.co.uk/wp-content/uploads/2018/04/IMG_20180420_140353.jpg)
-
-This is a standard fixed layout 60% PCB. It comes in two varians, ISO and ANSI and support full per-key RGB.
-
-Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
-Hardware Supported: HS60 ISO and ANSI PCBs with Atmega 32u4
-Hardware Availability: https://mechboards.co.uk/shop/all/hs60-pcb/
-
-Due to the RGB implementation, the HS60 is currently not compatible with community layouts.
-
-Make example for this keyboard (after setting up your build environment):
-
- make hs60:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/hs60/rules.mk b/keyboards/hs60/rules.mk
deleted file mode 100644
index bff965948..000000000
--- a/keyboards/hs60/rules.mk
+++ /dev/null
@@ -1,74 +0,0 @@
-# MCU name
-#MCU = at90usb1286
-MCU = atmega32u4
-
-# project specific files
-#SRC =
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-# Boot Section
-BOOTLOADER = qmk-dfu
-
-# Do not put the microcontroller into power saving mode
-# when we get USB suspend event. We want it to keep updating
-# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = yes # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
-MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6
-FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
-RGB_MATRIX_ENABLE = yes # Use RGB matrix
-
-# Experimental features for zealcmd please do no enable
-#RAW_ENABLE = yes
-#USE_KEYMAPS_IN_EEPROM = yes
diff --git a/keyboards/hs60/v1/config.h b/keyboards/hs60/v1/config.h
new file mode 100644
index 000000000..c297a6e19
--- /dev/null
+++ b/keyboards/hs60/v1/config.h
@@ -0,0 +1,143 @@
+/*
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0257
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Yiancar-Designs
+#define PRODUCT HS60
+#define DESCRIPTION GH60 compatible, tool free RGB keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, F7 }
+#define MATRIX_COL_PINS { F1, F4, F5, E6, F0, B7, D2, D3, D5, D4, D6, D7, B4, B5 }
+#define UNUSED_PINS { B6, C6, C7, F6 }
+
+/* bootloader configuration */
+
+#define QMK_ESC_OUTPUT B5 // usually COL
+#define QMK_ESC_INPUT B2 // usually ROW
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* Backlight options */
+
+//This is experimental do not enable yet
+//#define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
+
+#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
+#define RGB_MATRIX_SKIP_FRAMES 0
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 215
+
+#define DRIVER_ADDR_1 0b1110100
+#define DRIVER_ADDR_2 0b1110101
+
+#define DRIVER_COUNT 2
+#define DRIVER_1_LED_TOTAL 30
+
+#ifdef HS60_ANSI
+#define DRIVER_2_LED_TOTAL 31
+#else
+#define DRIVER_2_LED_TOTAL 32
+#endif
+
+#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL
diff --git a/keyboards/hs60/info.json b/keyboards/hs60/v1/info.json
index 677054cc6..677054cc6 100644
--- a/keyboards/hs60/info.json
+++ b/keyboards/hs60/v1/info.json
diff --git a/keyboards/hs60/v1/keymaps/ansi/config.h b/keyboards/hs60/v1/keymaps/ansi/config.h
new file mode 100644
index 000000000..82cdc2689
--- /dev/null
+++ b/keyboards/hs60/v1/keymaps/ansi/config.h
@@ -0,0 +1,23 @@
+/*
+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/>.
+*/
+#pragma once
+
+/* Include overwrites for specific keymap */
+
+#ifdef KEYBOARD_hs60
+ #define HS60_ANSI
+#endif
diff --git a/keyboards/hs60/keymaps/ansi/keymap.c b/keyboards/hs60/v1/keymaps/ansi/keymap.c
index 923af9e2c..923af9e2c 100644
--- a/keyboards/hs60/keymaps/ansi/keymap.c
+++ b/keyboards/hs60/v1/keymaps/ansi/keymap.c
diff --git a/keyboards/hs60/keymaps/ansi/readme.md b/keyboards/hs60/v1/keymaps/ansi/readme.md
index fa811319d..fa811319d 100644
--- a/keyboards/hs60/keymaps/ansi/readme.md
+++ b/keyboards/hs60/v1/keymaps/ansi/readme.md
diff --git a/keyboards/hs60/keymaps/default/keymap.c b/keyboards/hs60/v1/keymaps/default/keymap.c
index 2a5e82361..2a5e82361 100644
--- a/keyboards/hs60/keymaps/default/keymap.c
+++ b/keyboards/hs60/v1/keymaps/default/keymap.c
diff --git a/keyboards/hs60/keymaps/default/readme.md b/keyboards/hs60/v1/keymaps/default/readme.md
index 9125cb349..9125cb349 100644
--- a/keyboards/hs60/keymaps/default/readme.md
+++ b/keyboards/hs60/v1/keymaps/default/readme.md
diff --git a/keyboards/hs60/v1/readme.md b/keyboards/hs60/v1/readme.md
new file mode 100644
index 000000000..9034e9b88
--- /dev/null
+++ b/keyboards/hs60/v1/readme.md
@@ -0,0 +1,22 @@
+HS60
+====
+
+[HS60](https://mechboards.co.uk/wp-content/uploads/2018/04/IMG_20180420_140353.jpg)
+
+This is a standard fixed layout 60% PCB. It comes in two varians, ISO and ANSI and support full per-key RGB.
+
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+Hardware Supported: HS60 ISO and ANSI PCBs with Atmega 32u4
+Hardware Availability: https://mechboards.co.uk/shop/all/hs60-pcb/
+
+If you're using the [community layouts feature](https://docs.qmk.fm/#/feature_layouts) and using the 60_ansi layout, you need to make sure that you include this on your config.h to ensure that the RGB Matrix is properly configured:
+
+ #ifdef KEYBOARD_hs60
+ #define HS60_ANSI
+ #endif
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hs60/v1:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/hs60/v1/rules.mk b/keyboards/hs60/v1/rules.mk
new file mode 100644
index 000000000..29e91aa24
--- /dev/null
+++ b/keyboards/hs60/v1/rules.mk
@@ -0,0 +1,76 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# project specific files
+#SRC =
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Boot Section
+BOOTLOADER = qmk-dfu
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+RGB_MATRIX_ENABLE = yes # Use RGB matrix
+
+LAYOUTS = 60_ansi 60_iso
+
+# Experimental features for zealcmd please do no enable
+#RAW_ENABLE = yes
+#USE_KEYMAPS_IN_EEPROM = yes
diff --git a/keyboards/hs60/v1/v1.c b/keyboards/hs60/v1/v1.c
new file mode 100644
index 000000000..882611030
--- /dev/null
+++ b/keyboards/hs60/v1/v1.c
@@ -0,0 +1,495 @@
+/* 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 "v1.h"
+
+// Please ignore this is for upcoming features
+/*#ifdef RAW_ENABLE
+
+void raw_hid_receive( uint8_t *data, uint8_t length )
+{
+ uint8_t command = data[0];
+ switch ( command )
+ {
+ case id_protocol_version:
+ {
+ msg_protocol_version *msg = (msg_protocol_version*)&data[1];
+ msg->version = PROTOCOL_VERSION;
+ break;
+ }
+#if USE_KEYMAPS_IN_EEPROM
+ case id_keymap_keycode_load:
+ {
+ msg_keymap_keycode_load *msg = (msg_keymap_keycode_load*)&data[1];
+ msg->keycode = keymap_keycode_load( msg->layer, msg->row, msg->column );
+ break;
+ }
+ case id_keymap_keycode_save:
+ {
+ msg_keymap_keycode_save *msg = (msg_keymap_keycode_save*)&data[1];
+ keymap_keycode_save( msg->layer, msg->row, msg->column, msg->keycode);
+ break;
+ }
+ case id_keymap_default_save:
+ {
+ keymap_default_save();
+ break;
+ }
+#endif // USE_KEYMAPS_IN_EEPROM
+ case id_backlight_config_set_values:
+ {
+ msg_backlight_config_set_values *msg = (msg_backlight_config_set_values*)&data[1];
+ backlight_config_set_values(msg);
+ backlight_config_save();
+ break;
+ }
+ case id_backlight_config_set_alphas_mods:
+ {
+ msg_backlight_config_set_alphas_mods *msg = (msg_backlight_config_set_alphas_mods*)&data[1];
+ backlight_config_set_alphas_mods( msg->alphas_mods );
+ backlight_config_save();
+ break;
+ }
+ case id_backlight_set_key_color:
+ {
+ msg_backlight_set_key_color *msg = (msg_backlight_set_key_color*)&data[1];
+ backlight_set_key_color(msg->row, msg->column, msg->hsv);
+ break;
+ }
+ case id_system_get_state:
+ {
+ msg_system_state *msg = (msg_system_state*)&data[1];
+ msg->value = backlight_get_tick();
+ break;
+ }
+ default:
+ {
+ // Unhandled message.
+ data[0] = id_unhandled;
+ break;
+ }
+ }
+
+ // Return same buffer with values changed
+ raw_hid_send( data, length );
+
+}
+
+#endif*/
+
+#ifdef HS60_ANSI
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, C1_1, C3_2, C4_2}, //A1
+ {0, C1_2, C2_2, C4_3}, //A2
+ {0, C1_3, C2_3, C3_3}, //A3
+ {0, C1_4, C2_4, C3_4}, //A4
+ {0, C1_5, C2_5, C3_5}, //A5
+ {0, C1_6, C2_6, C3_6}, //A6
+ {0, C1_7, C2_7, C3_7}, //A7
+ {0, C1_8, C2_8, C3_8}, //A8
+ {0, C9_1, C8_1, C7_1}, //A9
+ {0, C9_2, C8_2, C7_2}, //A10
+ {0, C9_3, C8_3, C7_3}, //A11
+ {0, C9_4, C8_4, C7_4}, //A12
+ {0, C9_5, C8_5, C7_5}, //A13
+ {0, C9_6, C8_6, C7_6}, //A14
+ {0, C9_7, C8_7, C6_6}, //A15
+ {0, C9_8, C7_7, C6_7}, //A16
+
+ {0, C1_9, C3_10, C4_10}, //B1
+ {0, C1_10, C2_10, C4_11}, //B2
+ {0, C1_11, C2_11, C3_11}, //B3
+ {0, C1_12, C2_12, C3_12}, //B4
+ {0, C1_13, C2_13, C3_13}, //B5
+ {0, C1_14, C2_14, C3_14}, //B6
+ {0, C1_15, C2_15, C3_15}, //B7
+ {0, C1_16, C2_16, C3_16}, //B8
+ {0, C9_9, C8_9, C7_9}, //B9
+ {0, C9_10, C8_10, C7_10}, //B10
+ {0, C9_11, C8_11, C7_11}, //B11
+ {0, C9_12, C8_12, C7_12}, //B12
+ {0, C9_13, C8_13, C7_13}, //B13
+ {0, C9_14, C8_14, C7_14}, //B14
+
+ {1, C1_1, C3_2, C4_2}, //C1
+ {1, C1_2, C2_2, C4_3}, //C2
+ {1, C1_3, C2_3, C3_3}, //C3
+ {1, C1_4, C2_4, C3_4}, //C4
+ {1, C1_5, C2_5, C3_5}, //C5
+ {1, C1_6, C2_6, C3_6}, //C6
+ {1, C1_7, C2_7, C3_7}, //C7
+ {1, C1_8, C2_8, C3_8}, //C8
+ {1, C9_1, C8_1, C7_1}, //C9
+ {1, C9_2, C8_2, C7_2}, //C10
+ {1, C9_3, C8_3, C7_3}, //C11
+ {1, C9_4, C8_4, C7_4}, //C12
+ {1, C9_5, C8_5, C7_5}, //C13
+ {1, C9_6, C8_6, C7_6}, //C14
+ {1, C9_7, C8_7, C6_6}, //C15
+ {1, C9_8, C7_7, C6_7}, //C16
+
+ {1, C1_9, C3_10, C4_10}, //D1
+ //D2
+ {1, C1_11, C2_11, C3_11}, //D3
+ {1, C1_12, C2_12, C3_12}, //D4
+ {1, C1_13, C2_13, C3_13}, //D5
+ {1, C1_14, C2_14, C3_14}, //D6
+ {1, C1_15, C2_15, C3_15}, //D7
+ {1, C1_16, C2_16, C3_16}, //D8
+ {1, C9_9, C8_9, C7_9}, //D9
+ {1, C9_10, C8_10, C7_10}, //D10
+ {1, C9_11, C8_11, C7_11}, //D11
+ {1, C9_12, C8_12, C7_12}, //D12
+ {1, C9_13, C8_13, C7_13}, //D13
+ {1, C9_14, C8_14, C7_14}, //D14
+ {1, C9_15, C8_15, C6_14}, //D15
+ {1, C9_16, C7_15, C6_15} //D16
+};
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+//
+// C7, C6, C5, C4, C3, C2, C1, A7, A6, A5, A4, A3, A2, A1,
+// C8, C9, C10, C11, C12, C13, C14, A8, A9, A10, A11, A12, A13, A15,
+// D4, D5, D6, D7, D8, C16, C15, B5, B6, B7, B8, A16, ---, A14,
+// D3, ---, D1, D9, D10, D11, D12, B4, B3, B2, B1, B9, ---, B10,
+// D16, D15, D14, ---, ---, ---, D13, ---, ---, ---, B14, B13, B12, B11
+/* {row | col << 4}
+ * | {x=0..224, y=0..64}
+ * | | modifier
+ * | | | */
+ {{0|(13<<4)}, {224, 0}, 1}, //A1-A16
+ {{0|(12<<4)}, {204, 0}, 0},
+ {{0|(11<<4)}, {187, 0}, 0},
+ {{0|(10<<4)}, {170, 0}, 0},
+ {{0|(9<<4)}, {153, 0}, 0},
+ {{0|(8<<4)}, {136, 0}, 0},
+ {{0|(7<<4)}, {119, 0}, 0},
+ {{1|(7<<4)}, {119, 16}, 0},
+ {{1|(8<<4)}, {136, 16}, 0},
+ {{1|(9<<4)}, {153, 16}, 0},
+ {{1|(10<<4)}, {170, 16}, 0},
+ {{1|(11<<4)}, {187, 16}, 0},
+ {{1|(12<<4)}, {204, 16}, 0},
+ {{2|(13<<4)}, {224, 32}, 1},
+ {{2|(12<<4)}, {224, 16}, 0},
+ {{2|(11<<4)}, {197, 32}, 0},
+
+ {{3|(10<<4)}, {170, 48}, 0}, //B1-B14
+ {{3|(9<<4)}, {153, 48}, 0},
+ {{3|(8<<4)}, {136, 48}, 0},
+ {{3|(7<<4)}, {119, 48}, 0},
+ {{2|(7<<4)}, {119, 32}, 0},
+ {{2|(8<<4)}, {136, 32}, 0},
+ {{2|(9<<4)}, {153, 32}, 0},
+ {{2|(10<<4)}, {170, 32}, 0},
+ {{3|(11<<4)}, {187, 48}, 0},
+ {{3|(13<<4)}, {214, 48}, 1},
+ {{4|(13<<4)}, {224, 64}, 1},
+ {{4|(12<<4)}, {204, 64}, 1},
+ {{4|(11<<4)}, {187, 64}, 1},
+ {{4|(10<<4)}, {170, 64}, 1},
+
+ {{0|(6<<4)}, {102, 0}, 0}, //C1-C16
+ {{0|(5<<4)}, { 85, 0}, 0},
+ {{0|(4<<4)}, { 68, 0}, 0},
+ {{0|(3<<4)}, { 51, 0}, 0},
+ {{0|(2<<4)}, { 34, 0}, 0},
+ {{0|(1<<4)}, { 17, 0}, 0},
+ {{0|(0<<4)}, { 0, 0}, 1},
+ {{1|(0<<4)}, { 0, 16}, 1},
+ {{1|(1<<4)}, { 17, 16}, 0},
+ {{1|(2<<4)}, { 34, 16}, 0},
+ {{1|(3<<4)}, { 51, 16}, 0},
+ {{1|(4<<4)}, { 68, 16}, 0},
+ {{1|(5<<4)}, { 85, 16}, 0},
+ {{1|(6<<4)}, {102, 16}, 0},
+ {{2|(6<<4)}, {102, 32}, 0},
+ {{2|(5<<4)}, { 85, 32}, 0},
+
+ {{3|(2<<4)}, { 32, 48}, 0}, //D1-D16
+ //D2
+ {{3|(0<<4)}, { 10, 48}, 1},
+ {{2|(0<<4)}, { 0, 32}, 1},
+ {{2|(1<<4)}, { 17, 32}, 0},
+ {{2|(2<<4)}, { 34, 32}, 0},
+ {{2|(3<<4)}, { 51, 32}, 0},
+ {{2|(4<<4)}, { 68, 32}, 0},
+ {{3|(3<<4)}, { 51, 48}, 0},
+ {{3|(4<<4)}, { 68, 48}, 0},
+ {{3|(5<<4)}, { 85, 48}, 0},
+ {{3|(6<<4)}, {102, 48}, 0},
+ {{4|(3<<4)}, {102, 64}, 0},
+ {{4|(2<<4)}, { 34, 68}, 1},
+ {{4|(1<<4)}, { 17, 68}, 1},
+ {{4|(0<<4)}, { 0, 68}, 1}
+};
+
+#else
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, C1_1, C3_2, C4_2}, //A1
+ {0, C1_2, C2_2, C4_3}, //A2
+ {0, C1_3, C2_3, C3_3}, //A3
+ {0, C1_4, C2_4, C3_4}, //A4
+ {0, C1_5, C2_5, C3_5}, //A5
+ {0, C1_6, C2_6, C3_6}, //A6
+ {0, C1_7, C2_7, C3_7}, //A7
+ {0, C1_8, C2_8, C3_8}, //A8
+ {0, C9_1, C8_1, C7_1}, //A9
+ {0, C9_2, C8_2, C7_2}, //A10
+ {0, C9_3, C8_3, C7_3}, //A11
+ {0, C9_4, C8_4, C7_4}, //A12
+ {0, C9_5, C8_5, C7_5}, //A13
+ {0, C9_6, C8_6, C7_6}, //A14
+ {0, C9_7, C8_7, C6_6}, //A15
+ {0, C9_8, C7_7, C6_7}, //A16
+
+ {0, C1_9, C3_10, C4_10}, //B1
+ {0, C1_10, C2_10, C4_11}, //B2
+ {0, C1_11, C2_11, C3_11}, //B3
+ {0, C1_12, C2_12, C3_12}, //B4
+ {0, C1_13, C2_13, C3_13}, //B5
+ {0, C1_14, C2_14, C3_14}, //B6
+ {0, C1_15, C2_15, C3_15}, //B7
+ {0, C1_16, C2_16, C3_16}, //B8
+ {0, C9_9, C8_9, C7_9}, //B9
+ {0, C9_10, C8_10, C7_10}, //B10
+ {0, C9_11, C8_11, C7_11}, //B11
+ {0, C9_12, C8_12, C7_12}, //B12
+ {0, C9_13, C8_13, C7_13}, //B13
+ {0, C9_14, C8_14, C7_14}, //B14
+
+ {1, C1_1, C3_2, C4_2}, //C1
+ {1, C1_2, C2_2, C4_3}, //C2
+ {1, C1_3, C2_3, C3_3}, //C3
+ {1, C1_4, C2_4, C3_4}, //C4
+ {1, C1_5, C2_5, C3_5}, //C5
+ {1, C1_6, C2_6, C3_6}, //C6
+ {1, C1_7, C2_7, C3_7}, //C7
+ {1, C1_8, C2_8, C3_8}, //C8
+ {1, C9_1, C8_1, C7_1}, //C9
+ {1, C9_2, C8_2, C7_2}, //C10
+ {1, C9_3, C8_3, C7_3}, //C11
+ {1, C9_4, C8_4, C7_4}, //C12
+ {1, C9_5, C8_5, C7_5}, //C13
+ {1, C9_6, C8_6, C7_6}, //C14
+ {1, C9_7, C8_7, C6_6}, //C15
+ {1, C9_8, C7_7, C6_7}, //C16
+
+ {1, C1_9, C3_10, C4_10}, //D1
+ {1, C1_10, C2_10, C4_11}, //D2
+ {1, C1_11, C2_11, C3_11}, //D3
+ {1, C1_12, C2_12, C3_12}, //D4
+ {1, C1_13, C2_13, C3_13}, //D5
+ {1, C1_14, C2_14, C3_14}, //D6
+ {1, C1_15, C2_15, C3_15}, //D7
+ {1, C1_16, C2_16, C3_16}, //D8
+ {1, C9_9, C8_9, C7_9}, //D9
+ {1, C9_10, C8_10, C7_10}, //D10
+ {1, C9_11, C8_11, C7_11}, //D11
+ {1, C9_12, C8_12, C7_12}, //D12
+ {1, C9_13, C8_13, C7_13}, //D13
+ {1, C9_14, C8_14, C7_14}, //D14
+ {1, C9_15, C8_15, C6_14}, //D15
+ {1, C9_16, C7_15, C6_15} //D16
+};
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+//
+// C7, C6, C5, C4, C3, C2, C1, A7, A6, A5, A4, A3, A2, A1,
+// C8, C9, C10, C11, C12, C13, C14, A8, A9, A10, A11, A12, A13, ---,
+// D4, D5, D6, D7, D8, C16, C15, B5, B6, B7, B8, A16, A15, A14,
+// D3, D2, D1, D9, D10, D11, D12, B4, B3, B2, B1, B9, ---, B10,
+// D16, D15, D14, ---, ---, ---, D13, ---, ---, ---, B14, B13, B12, B11
+/* {row | col << 4}
+ * | {x=0..224, y=0..64}
+ * | | modifier
+ * | | | */
+ {{0|(13<<4)}, {224, 0}, 1}, //A1-A16
+ {{0|(12<<4)}, {204, 0}, 0},
+ {{0|(11<<4)}, {187, 0}, 0},
+ {{0|(10<<4)}, {170, 0}, 0},
+ {{0|(9<<4)}, {153, 0}, 0},
+ {{0|(8<<4)}, {136, 0}, 0},
+ {{0|(7<<4)}, {119, 0}, 0},
+ {{1|(7<<4)}, {119, 16}, 0},
+ {{1|(8<<4)}, {136, 16}, 0},
+ {{1|(9<<4)}, {153, 16}, 0},
+ {{1|(10<<4)}, {170, 16}, 0},
+ {{1|(11<<4)}, {187, 16}, 0},
+ {{1|(12<<4)}, {204, 16}, 0},
+ {{2|(13<<4)}, {224, 8}, 1},
+ {{2|(12<<4)}, {204, 32}, 0},
+ {{2|(11<<4)}, {187, 32}, 0},
+
+ {{3|(10<<4)}, {170, 48}, 0}, //B1-B14
+ {{3|(9<<4)}, {153, 48}, 0},
+ {{3|(8<<4)}, {136, 48}, 0},
+ {{3|(7<<4)}, {119, 48}, 0},
+ {{2|(7<<4)}, {119, 32}, 0},
+ {{2|(8<<4)}, {136, 32}, 0},
+ {{2|(9<<4)}, {153, 32}, 0},
+ {{2|(10<<4)}, {170, 32}, 0},
+ {{3|(11<<4)}, {187, 48}, 0},
+ {{3|(13<<4)}, {214, 48}, 1},
+ {{4|(13<<4)}, {224, 64}, 1},
+ {{4|(12<<4)}, {204, 64}, 1},
+ {{4|(11<<4)}, {187, 64}, 1},
+ {{4|(10<<4)}, {170, 64}, 1},
+
+ {{0|(6<<4)}, {102, 0}, 0}, //C1-C16
+ {{0|(5<<4)}, { 85, 0}, 0},
+ {{0|(4<<4)}, { 68, 0}, 0},
+ {{0|(3<<4)}, { 51, 0}, 0},
+ {{0|(2<<4)}, { 34, 0}, 0},
+ {{0|(1<<4)}, { 17, 0}, 0},
+ {{0|(0<<4)}, { 0, 0}, 1},
+ {{1|(0<<4)}, { 0, 16}, 1},
+ {{1|(1<<4)}, { 17, 16}, 0},
+ {{1|(2<<4)}, { 34, 16}, 0},
+ {{1|(3<<4)}, { 51, 16}, 0},
+ {{1|(4<<4)}, { 68, 16}, 0},
+ {{1|(5<<4)}, { 85, 16}, 0},
+ {{1|(6<<4)}, {102, 16}, 0},
+ {{2|(6<<4)}, {102, 32}, 0},
+ {{2|(5<<4)}, { 85, 32}, 0},
+
+ {{3|(2<<4)}, { 32, 48}, 0}, //D1-D16
+ {{3|(1<<4)}, { 17, 48}, 0},
+ {{3|(0<<4)}, { 0, 48}, 1},
+ {{2|(0<<4)}, { 0, 32}, 1},
+ {{2|(1<<4)}, { 17, 32}, 0},
+ {{2|(2<<4)}, { 34, 32}, 0},
+ {{2|(3<<4)}, { 51, 32}, 0},
+ {{2|(4<<4)}, { 68, 32}, 0},
+ {{3|(3<<4)}, { 51, 48}, 0},
+ {{3|(4<<4)}, { 68, 48}, 0},
+ {{3|(5<<4)}, { 85, 48}, 0},
+ {{3|(6<<4)}, {102, 48}, 0},
+ {{4|(3<<4)}, {102, 64}, 0},
+ {{4|(2<<4)}, { 34, 68}, 1},
+ {{4|(1<<4)}, { 17, 68}, 1},
+ {{4|(0<<4)}, { 0, 68}, 1}
+};
+
+#endif
+
+void bootmagic_lite(void)
+{
+ // The lite version of TMK's bootmagic made by Wilba.
+ // 100% less potential for accidentally making the
+ // keyboard do stupid things.
+
+ // We need multiple scans because debouncing can't be turned off.
+ matrix_scan();
+ wait_ms(DEBOUNCING_DELAY);
+ matrix_scan();
+
+ // If the Esc and space bar are held down on power up,
+ // reset the EEPROM valid state and jump to bootloader.
+ // Assumes Esc is at [0,0] and spacebar is at [4,6].
+ // This isn't very generalized, but we need something that doesn't
+ // rely on user's keymaps in firmware or EEPROM.
+ if ( ( matrix_get_row(0) & (1<<0) ) &&
+ ( matrix_get_row(4) & (1<<6) ) )
+ {
+ // Set the TMK/QMK EEPROM state as invalid.
+ eeconfig_disable();
+ //eeprom_set_valid(false);
+ // Jump to bootloader.
+ bootloader_jump();
+ }
+}
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ bootmagic_lite();
+
+ // Please ignore this is for upcoming features
+ // If the EEPROM has the magic, the data is good.
+ // OK to load from EEPROM.
+ /*if (eeprom_is_valid())
+ {
+ backlight_config_load();
+
+ // TODO: do something to "turn on" keymaps in EEPROM?
+ }
+ else
+ {
+ // If the EEPROM has not been saved before, or is out of date,
+ // save the default values to the EEPROM. Default values
+ // come from construction of the zeal_backlight_config instance.
+ backlight_config_save();
+
+ // Clear the LED colors stored in EEPROM
+ for ( int row=0; row < MATRIX_ROWS; row++ )
+ {
+ HSV hsv;
+ for ( int column=0; column < MATRIX_COLS; column++ )
+ {
+ hsv.h = rand() & 0xFF;
+ hsv.s = rand() & 0x7F;
+ hsv.v = 255;
+ backlight_set_key_color( row, column, hsv );
+ }
+ }
+ #ifdef USE_KEYMAPS_IN_EEPROM
+ keymap_default_save();
+ #endif
+ // Save the magic number last, in case saving was interrupted
+ eeprom_set_valid(true);
+ }*/
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ //backlight_set_indicator_state(usb_led);
+}
+
+void suspend_power_down_kb(void)
+{
+ rgb_matrix_set_suspend_state(true);
+}
+
+void suspend_wakeup_init_kb(void)
+{
+ rgb_matrix_set_suspend_state(false);
+} \ No newline at end of file
diff --git a/keyboards/hs60/hs60.h b/keyboards/hs60/v1/v1.h
index 4de781e5f..4de781e5f 100644
--- a/keyboards/hs60/hs60.h
+++ b/keyboards/hs60/v1/v1.h
diff --git a/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.c b/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.c
new file mode 100644
index 000000000..4331155df
--- /dev/null
+++ b/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.c
@@ -0,0 +1,126 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#include "hal.h"
+
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+/**
+ * @brief PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ * This variable is used by the HAL when initializing the PAL driver.
+ */
+const PALConfig pal_default_config = {
+#if STM32_HAS_GPIOA
+ {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
+ VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
+#endif
+#if STM32_HAS_GPIOB
+ {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
+ VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
+#endif
+#if STM32_HAS_GPIOC
+ {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
+ VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
+#endif
+#if STM32_HAS_GPIOD
+ {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
+ VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
+#endif
+#if STM32_HAS_GPIOE
+ {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
+ VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
+#endif
+#if STM32_HAS_GPIOF
+ {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
+ VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
+#endif
+#if STM32_HAS_GPIOG
+ {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
+ VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
+#endif
+#if STM32_HAS_GPIOH
+ {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
+ VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
+#endif
+#if STM32_HAS_GPIOI
+ {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
+ VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}
+#endif
+};
+#endif
+
+void enter_bootloader_mode_if_requested(void);
+
+/**
+ * @brief Early initialization code.
+ * @details This initialization must be performed just after stack setup
+ * and before any other initialization.
+ */
+void __early_init(void) {
+ enter_bootloader_mode_if_requested();
+ stm32_clock_init();
+}
+
+#if HAL_USE_SDC || defined(__DOXYGEN__)
+/**
+ * @brief SDC card detection.
+ */
+bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
+
+ (void)sdcp;
+ /* TODO: Fill the implementation.*/
+ return true;
+}
+
+/**
+ * @brief SDC card write protection detection.
+ */
+bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
+
+ (void)sdcp;
+ /* TODO: Fill the implementation.*/
+ return false;
+}
+#endif /* HAL_USE_SDC */
+
+#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
+/**
+ * @brief MMC_SPI card detection.
+ */
+bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return true;
+}
+
+/**
+ * @brief MMC_SPI card write protection detection.
+ */
+bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return false;
+}
+#endif
+
+/**
+ * @brief Board-specific initialization code.
+ * @todo Add your board-specific code, if any.
+ */
+void boardInit(void) {
+}
diff --git a/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.h b/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.h
new file mode 100644
index 000000000..fb7283add
--- /dev/null
+++ b/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.h
@@ -0,0 +1,1187 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+/*
+ * Setup for Clueboard 60% Keyboard
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_GENERIC_STM32_F303XC
+#define BOARD_NAME "HS60 V2.0 PCB"
+
+/*
+ * Board oscillators-related settings.
+ * NOTE: LSE not fitted.
+ */
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK 0U
+#endif
+
+#define STM32_LSEDRV (3U << 3U)
+
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK 8000000U
+#endif
+
+// #define STM32_HSE_BYPASS
+
+/*
+ * MCU type as defined in the ST header.
+ */
+#define STM32F303xC
+
+/*
+ * IO pins assignments.
+ */
+#define GPIOA_PIN0 0U
+#define GPIOA_PIN1 1U
+#define GPIOA_PIN2 2U
+#define GPIOA_PIN3 3U
+#define GPIOA_PIN4 4U
+#define GPIOA_PIN5 5U
+#define GPIOA_PIN6 6U
+#define GPIOA_PIN7 7U
+#define GPIOA_PIN8 8U
+#define GPIOA_PIN9 9U
+#define GPIOA_PIN10 10U
+#define GPIOA_USB_DM 11U
+#define GPIOA_USB_DP 12U
+#define GPIOA_SWDIO 13U
+#define GPIOA_SWCLK 14U
+#define GPIOA_PIN15 15U
+
+#define GPIOB_PIN0 0U
+#define GPIOB_PIN1 1U
+#define GPIOB_PIN2 2U
+#define GPIOB_PIN3 3U
+#define GPIOB_PIN4 4U
+#define GPIOB_PIN5 5U
+#define GPIOB_PIN6 6U
+#define GPIOB_PIN7 7U
+#define GPIOB_PIN8 8U
+#define GPIOB_PIN9 9U
+#define GPIOB_PIN10 10U
+#define GPIOB_PIN11 11U
+#define GPIOB_PIN12 12U
+#define GPIOB_PIN13 13U
+#define GPIOB_PIN14 14U
+#define GPIOB_PIN15 15U
+
+#define GPIOC_PIN0 0U
+#define GPIOC_PIN1 1U
+#define GPIOC_PIN2 2U
+#define GPIOC_PIN3 3U
+#define GPIOC_PIN4 4U
+#define GPIOC_PIN5 5U
+#define GPIOC_PIN6 6U
+#define GPIOC_PIN7 7U
+#define GPIOC_PIN8 8U
+#define GPIOC_PIN9 9U
+#define GPIOC_PIN10 10U
+#define GPIOC_PIN11 11U
+#define GPIOC_PIN12 12U
+#define GPIOC_PIN13 13U
+#define GPIOC_PIN14 14U
+#define GPIOC_PIN15 15U
+
+#define GPIOD_PIN0 0U
+#define GPIOD_PIN1 1U
+#define GPIOD_PIN2 2U
+#define GPIOD_PIN3 3U
+#define GPIOD_PIN4 4U
+#define GPIOD_PIN5 5U
+#define GPIOD_PIN6 6U
+#define GPIOD_PIN7 7U
+#define GPIOD_PIN8 8U
+#define GPIOD_PIN9 9U
+#define GPIOD_PIN10 10U
+#define GPIOD_PIN11 11U
+#define GPIOD_PIN12 12U
+#define GPIOD_PIN13 13U
+#define GPIOD_PIN14 14U
+#define GPIOD_PIN15 15U
+
+#define GPIOE_PIN0 0U
+#define GPIOE_PIN1 1U
+#define GPIOE_PIN2 2U
+#define GPIOE_PIN3 3U
+#define GPIOE_PIN4 4U
+#define GPIOE_PIN5 5U
+#define GPIOE_PIN6 6U
+#define GPIOE_PIN7 7U
+#define GPIOE_PIN8 8U
+#define GPIOE_PIN9 9U
+#define GPIOE_PIN10 10U
+#define GPIOE_PIN11 11U
+#define GPIOE_PIN12 12U
+#define GPIOE_PIN13 13U
+#define GPIOE_PIN14 14U
+#define GPIOE_PIN15 15U
+
+#define GPIOF_I2C2_SDA 0U
+#define GPIOF_I2C2_SCL 1U
+#define GPIOF_PIN2 2U
+#define GPIOF_PIN3 3U
+#define GPIOF_PIN4 4U
+#define GPIOF_PIN5 5U
+#define GPIOF_PIN6 6U
+#define GPIOF_PIN7 7U
+#define GPIOF_PIN8 8U
+#define GPIOF_PIN9 9U
+#define GPIOF_PIN10 10U
+#define GPIOF_PIN11 11U
+#define GPIOF_PIN12 12U
+#define GPIOF_PIN13 13U
+#define GPIOF_PIN14 14U
+#define GPIOF_PIN15 15U
+
+#define GPIOG_PIN0 0U
+#define GPIOG_PIN1 1U
+#define GPIOG_PIN2 2U
+#define GPIOG_PIN3 3U
+#define GPIOG_PIN4 4U
+#define GPIOG_PIN5 5U
+#define GPIOG_PIN6 6U
+#define GPIOG_PIN7 7U
+#define GPIOG_PIN8 8U
+#define GPIOG_PIN9 9U
+#define GPIOG_PIN10 10U
+#define GPIOG_PIN11 11U
+#define GPIOG_PIN12 12U
+#define GPIOG_PIN13 13U
+#define GPIOG_PIN14 14U
+#define GPIOG_PIN15 15U
+
+#define GPIOH_PIN0 0U
+#define GPIOH_PIN1 1U
+#define GPIOH_PIN2 2U
+#define GPIOH_PIN3 3U
+#define GPIOH_PIN4 4U
+#define GPIOH_PIN5 5U
+#define GPIOH_PIN6 6U
+#define GPIOH_PIN7 7U
+#define GPIOH_PIN8 8U
+#define GPIOH_PIN9 9U
+#define GPIOH_PIN10 10U
+#define GPIOH_PIN11 11U
+#define GPIOH_PIN12 12U
+#define GPIOH_PIN13 13U
+#define GPIOH_PIN14 14U
+#define GPIOH_PIN15 15U
+
+/*
+ * IO lines assignments.
+ */
+#define LINE_L3GD20_SDI PAL_LINE(GPIOA, 7U)
+#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
+#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
+#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
+#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
+
+#define LINE_PIN6 PAL_LINE(GPIOF, 0U)
+#define LINE_PIN7 PAL_LINE(GPIOF, 1U)
+
+#define LINE_CAPS_LOCK PAL_LINE(GPIOB, 7U)
+
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
+#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
+#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
+#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
+#define PIN_ODR_LOW(n) (0U << (n))
+#define PIN_ODR_HIGH(n) (1U << (n))
+#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
+#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
+#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
+#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
+#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
+#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
+#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
+#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
+#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
+#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
+
+/*
+ * GPIOA setup:
+ *
+ * PA0 - NC
+ * PA1 - NC
+ * PA2 - COL1
+ * PA3 - COL2
+ * PA4 - SPEAKER1
+ * PA5 - SPEAKER2
+ * PA6 - COL3
+ * PA7 - COL8
+ * PA8 - COL6
+ * PA9 - COL7
+ * PA10 - ROW5
+ * PA11 - USB_DM (alternate 14).
+ * PA12 - USB_DP (alternate 14).
+ * PA13 - SWDIO (alternate 0).
+ * PA14 - SWCLK (alternate 0).
+ * PA15 - ROW4
+ */
+#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_PIN0) | \
+ PIN_MODE_ALTERNATE(GPIOA_PIN1) | \
+ PIN_MODE_INPUT(GPIOA_PIN2) | \
+ PIN_MODE_INPUT(GPIOA_PIN3) | \
+ PIN_MODE_INPUT(GPIOA_PIN4) | \
+ PIN_MODE_INPUT(GPIOA_PIN5) | \
+ PIN_MODE_INPUT(GPIOA_PIN6) | \
+ PIN_MODE_INPUT(GPIOA_PIN7) | \
+ PIN_MODE_INPUT(GPIOA_PIN8) | \
+ PIN_MODE_INPUT(GPIOA_PIN9) | \
+ PIN_MODE_INPUT(GPIOA_PIN10) | \
+ PIN_MODE_ALTERNATE(GPIOA_USB_DM) | \
+ PIN_MODE_ALTERNATE(GPIOA_USB_DP) | \
+ PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \
+ PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \
+ PIN_MODE_INPUT(GPIOA_PIN15))
+#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
+#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOA_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOA_USB_DM) | \
+ PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
+ PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
+ PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN15))
+#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_PIN0) | \
+ PIN_PUPDR_FLOATING(GPIOA_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
+ PIN_PUPDR_FLOATING(GPIOA_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
+ PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
+ PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
+ PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
+ PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN15))
+#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_PIN0) | \
+ PIN_ODR_HIGH(GPIOA_PIN1) | \
+ PIN_ODR_HIGH(GPIOA_PIN2) | \
+ PIN_ODR_HIGH(GPIOA_PIN3) | \
+ PIN_ODR_HIGH(GPIOA_PIN4) | \
+ PIN_ODR_HIGH(GPIOA_PIN5) | \
+ PIN_ODR_HIGH(GPIOA_PIN6) | \
+ PIN_ODR_HIGH(GPIOA_PIN7) | \
+ PIN_ODR_HIGH(GPIOA_PIN8) | \
+ PIN_ODR_HIGH(GPIOA_PIN9) | \
+ PIN_ODR_HIGH(GPIOA_PIN10) | \
+ PIN_ODR_HIGH(GPIOA_USB_DM) | \
+ PIN_ODR_HIGH(GPIOA_USB_DP) | \
+ PIN_ODR_HIGH(GPIOA_SWDIO) | \
+ PIN_ODR_HIGH(GPIOA_SWCLK) | \
+ PIN_ODR_HIGH(GPIOA_PIN15))
+#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN1, 1) | \
+ PIN_AFIO_AF(GPIOA_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN5, 5) | \
+ PIN_AFIO_AF(GPIOA_PIN6, 5) | \
+ PIN_AFIO_AF(GPIOA_PIN7, 5))
+#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOA_USB_DM, 14) | \
+ PIN_AFIO_AF(GPIOA_USB_DP, 14) | \
+ PIN_AFIO_AF(GPIOA_SWDIO, 0) | \
+ PIN_AFIO_AF(GPIOA_SWCLK, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN15, 0))
+
+/*
+ * GPIOB setup:
+ *
+ * PB0 - PIN0 (input pullup).
+ * PB1 - PIN1 (input pullup).
+ * PB2 - PIN2 (input pullup).
+ * PB3 - PIN3 (alternate 0).
+ * PB4 - PIN4 (input pullup).
+ * PB5 - PIN5 (input pullup).
+ * PB6 - PIN6 LSM303DLHC_SCL (alternate 4).
+ * PB7 - PIN7 LSM303DLHC_SDA (alternate 4).
+ * PB8 - PIN8 (input pullup).
+ * PB9 - PIN9 (input pullup).
+ * PB10 - PIN10 (input pullup).
+ * PB11 - PIN11 (input pullup).
+ * PB12 - PIN12 (input pullup).
+ * PB13 - PIN13 (input pullup).
+ * PB14 - PIN14 (input pullup).
+ * PB15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
+ PIN_MODE_INPUT(GPIOB_PIN1) | \
+ PIN_MODE_INPUT(GPIOB_PIN2) | \
+ PIN_MODE_ALTERNATE(GPIOB_PIN3) | \
+ PIN_MODE_INPUT(GPIOB_PIN4) | \
+ PIN_MODE_INPUT(GPIOB_PIN5) | \
+ PIN_MODE_ALTERNATE(GPIOB_PIN6) | \
+ PIN_MODE_OUTPUT(GPIOB_PIN7) | \
+ PIN_MODE_INPUT(GPIOB_PIN8) | \
+ PIN_MODE_INPUT(GPIOB_PIN9) | \
+ PIN_MODE_INPUT(GPIOB_PIN10) | \
+ PIN_MODE_INPUT(GPIOB_PIN11) | \
+ PIN_MODE_INPUT(GPIOB_PIN12) | \
+ PIN_MODE_INPUT(GPIOB_PIN13) | \
+ PIN_MODE_INPUT(GPIOB_PIN14) | \
+ PIN_MODE_INPUT(GPIOB_PIN15))
+#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
+ PIN_OTYPE_OPENDRAIN(GPIOB_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN15))
+#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN15))
+#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
+ PIN_PUPDR_FLOATING(GPIOB_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
+ PIN_PUPDR_FLOATING(GPIOB_PIN6) | \
+ PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN15))
+#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
+ PIN_ODR_HIGH(GPIOB_PIN1) | \
+ PIN_ODR_HIGH(GPIOB_PIN2) | \
+ PIN_ODR_HIGH(GPIOB_PIN3) | \
+ PIN_ODR_HIGH(GPIOB_PIN4) | \
+ PIN_ODR_HIGH(GPIOB_PIN5) | \
+ PIN_ODR_HIGH(GPIOB_PIN6) | \
+ PIN_ODR_LOW(GPIOB_PIN7) | \
+ PIN_ODR_HIGH(GPIOB_PIN8) | \
+ PIN_ODR_HIGH(GPIOB_PIN9) | \
+ PIN_ODR_HIGH(GPIOB_PIN10) | \
+ PIN_ODR_HIGH(GPIOB_PIN11) | \
+ PIN_ODR_HIGH(GPIOB_PIN12) | \
+ PIN_ODR_HIGH(GPIOB_PIN13) | \
+ PIN_ODR_HIGH(GPIOB_PIN14) | \
+ PIN_ODR_HIGH(GPIOB_PIN15))
+#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN6, 4) | \
+ PIN_AFIO_AF(GPIOB_PIN7, 0))
+#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN15, 0))
+
+/*
+ * GPIOC setup:
+ *
+ * PC0 - PIN0 (input pullup).
+ * PC1 - PIN1 (input pullup).
+ * PC2 - PIN2 (input pullup).
+ * PC3 - PIN3 (input pullup).
+ * PC4 - PIN4 (input pullup).
+ * PC5 - PIN5 (input pullup).
+ * PC6 - PIN6 (input pullup).
+ * PC7 - PIN7 (input pullup).
+ * PC8 - PIN8 (input pullup).
+ * PC9 - PIN9 (input pullup).
+ * PC10 - PIN10 (input pullup).
+ * PC11 - PIN11 (input pullup).
+ * PC12 - PIN12 (input pullup).
+ * PC13 - PIN13 (input pullup).
+ * PC14 - PIN14 (input floating).
+ * PC15 - PIN15 (input floating).
+ */
+#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_PIN0) | \
+ PIN_MODE_INPUT(GPIOC_PIN1) | \
+ PIN_MODE_INPUT(GPIOC_PIN2) | \
+ PIN_MODE_INPUT(GPIOC_PIN3) | \
+ PIN_MODE_INPUT(GPIOC_PIN4) | \
+ PIN_MODE_INPUT(GPIOC_PIN5) | \
+ PIN_MODE_INPUT(GPIOC_PIN6) | \
+ PIN_MODE_INPUT(GPIOC_PIN7) | \
+ PIN_MODE_INPUT(GPIOC_PIN8) | \
+ PIN_MODE_INPUT(GPIOC_PIN9) | \
+ PIN_MODE_INPUT(GPIOC_PIN10) | \
+ PIN_MODE_INPUT(GPIOC_PIN11) | \
+ PIN_MODE_INPUT(GPIOC_PIN12) | \
+ PIN_MODE_INPUT(GPIOC_PIN13) | \
+ PIN_MODE_INPUT(GPIOC_PIN14) | \
+ PIN_MODE_INPUT(GPIOC_PIN15))
+#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN15))
+#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOC_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN15))
+#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
+ PIN_PUPDR_FLOATING(GPIOC_PIN14) | \
+ PIN_PUPDR_FLOATING(GPIOC_PIN15))
+#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \
+ PIN_ODR_HIGH(GPIOC_PIN1) | \
+ PIN_ODR_HIGH(GPIOC_PIN2) | \
+ PIN_ODR_HIGH(GPIOC_PIN3) | \
+ PIN_ODR_HIGH(GPIOC_PIN4) | \
+ PIN_ODR_HIGH(GPIOC_PIN5) | \
+ PIN_ODR_HIGH(GPIOC_PIN6) | \
+ PIN_ODR_HIGH(GPIOC_PIN7) | \
+ PIN_ODR_HIGH(GPIOC_PIN8) | \
+ PIN_ODR_HIGH(GPIOC_PIN9) | \
+ PIN_ODR_HIGH(GPIOC_PIN10) | \
+ PIN_ODR_HIGH(GPIOC_PIN11) | \
+ PIN_ODR_HIGH(GPIOC_PIN12) | \
+ PIN_ODR_HIGH(GPIOC_PIN13) | \
+ PIN_ODR_HIGH(GPIOC_PIN14) | \
+ PIN_ODR_HIGH(GPIOC_PIN15))
+#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN7, 0))
+#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN15, 0))
+
+/*
+ * GPIOD setup:
+ *
+ * PD0 - PIN0 (input pullup).
+ * PD1 - PIN1 (input pullup).
+ * PD2 - PIN2 (input pullup).
+ * PD3 - PIN3 (input pullup).
+ * PD4 - PIN4 (input pullup).
+ * PD5 - PIN5 (input pullup).
+ * PD6 - PIN6 (input pullup).
+ * PD7 - PIN7 (input pullup).
+ * PD8 - PIN8 (input pullup).
+ * PD9 - PIN9 (input pullup).
+ * PD11 - PIN10 (input pullup).
+ * PD11 - PIN11 (input pullup).
+ * PD12 - PIN12 (input pullup).
+ * PD13 - PIN13 (input pullup).
+ * PD14 - PIN14 (input pullup).
+ * PD15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
+ PIN_MODE_INPUT(GPIOD_PIN1) | \
+ PIN_MODE_INPUT(GPIOD_PIN2) | \
+ PIN_MODE_INPUT(GPIOD_PIN3) | \
+ PIN_MODE_INPUT(GPIOD_PIN4) | \
+ PIN_MODE_INPUT(GPIOD_PIN5) | \
+ PIN_MODE_INPUT(GPIOD_PIN6) | \
+ PIN_MODE_INPUT(GPIOD_PIN7) | \
+ PIN_MODE_INPUT(GPIOD_PIN8) | \
+ PIN_MODE_INPUT(GPIOD_PIN9) | \
+ PIN_MODE_INPUT(GPIOD_PIN10) | \
+ PIN_MODE_INPUT(GPIOD_PIN11) | \
+ PIN_MODE_INPUT(GPIOD_PIN12) | \
+ PIN_MODE_INPUT(GPIOD_PIN13) | \
+ PIN_MODE_INPUT(GPIOD_PIN14) | \
+ PIN_MODE_INPUT(GPIOD_PIN15))
+#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
+#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN15))
+#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN15))
+#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
+ PIN_ODR_HIGH(GPIOD_PIN1) | \
+ PIN_ODR_HIGH(GPIOD_PIN2) | \
+ PIN_ODR_HIGH(GPIOD_PIN3) | \
+ PIN_ODR_HIGH(GPIOD_PIN4) | \
+ PIN_ODR_HIGH(GPIOD_PIN5) | \
+ PIN_ODR_HIGH(GPIOD_PIN6) | \
+ PIN_ODR_HIGH(GPIOD_PIN7) | \
+ PIN_ODR_HIGH(GPIOD_PIN8) | \
+ PIN_ODR_HIGH(GPIOD_PIN9) | \
+ PIN_ODR_HIGH(GPIOD_PIN10) | \
+ PIN_ODR_HIGH(GPIOD_PIN11) | \
+ PIN_ODR_HIGH(GPIOD_PIN12) | \
+ PIN_ODR_HIGH(GPIOD_PIN13) | \
+ PIN_ODR_HIGH(GPIOD_PIN14) | \
+ PIN_ODR_HIGH(GPIOD_PIN15))
+#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN7, 0))
+#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN15, 0))
+
+/*
+ * GPIOE setup:
+ *
+ * PE0 - PIN0 (input pullup).
+ * PE1 - PIN1 (input pullup).
+ * PE2 - PIN2 (input pullup).
+ * PE3 - PIN3 L3GD20_CS (output pushpull maximum).
+ * PE4 - PIN4 (input pullup).
+ * PE5 - PIN5 (input pullup).
+ * PE6 - PIN6 (input pullup).
+ * PE7 - PIN7 (input pullup).
+ * PE8 - PIN8 (output pushpull maximum).
+ * PE9 - PIN9 (output pushpull maximum).
+ * PE10 - PIN10 (output pushpull maximum).
+ * PE11 - PIN11 (output pushpull maximum).
+ * PE12 - PIN12 (output pushpull maximum).
+ * PE13 - PIN13 (output pushpull maximum).
+ * PE14 - PIN14 (output pushpull maximum).
+ * PE15 - PIN15 (output pushpull maximum).
+ */
+#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
+ PIN_MODE_INPUT(GPIOE_PIN1) | \
+ PIN_MODE_INPUT(GPIOE_PIN2) |\
+ PIN_MODE_OUTPUT(GPIOE_PIN3) | \
+ PIN_MODE_INPUT(GPIOE_PIN4) |\
+ PIN_MODE_INPUT(GPIOE_PIN5) |\
+ PIN_MODE_INPUT(GPIOE_PIN6) | \
+ PIN_MODE_INPUT(GPIOE_PIN7) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN8) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN9) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN10) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN11) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN12) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN13) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN14) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN15))
+#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN10) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN14) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
+#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN1) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN2) |\
+ PIN_OSPEED_HIGH(GPIOE_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN4) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN5) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN15))
+#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN2) |\
+ PIN_PUPDR_FLOATING(GPIOE_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN4) |\
+ PIN_PUPDR_PULLUP(GPIOE_PIN5) |\
+ PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
+ PIN_PUPDR_FLOATING(GPIOE_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
+ PIN_PUPDR_FLOATING(GPIOE_PIN13) | \
+ PIN_PUPDR_FLOATING(GPIOE_PIN14) |\
+ PIN_PUPDR_FLOATING(GPIOE_PIN15))
+#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
+ PIN_ODR_HIGH(GPIOE_PIN1) | \
+ PIN_ODR_HIGH(GPIOE_PIN2) | \
+ PIN_ODR_HIGH(GPIOE_PIN3) | \
+ PIN_ODR_HIGH(GPIOE_PIN4) | \
+ PIN_ODR_HIGH(GPIOE_PIN5) | \
+ PIN_ODR_HIGH(GPIOE_PIN6) | \
+ PIN_ODR_HIGH(GPIOE_PIN7) | \
+ PIN_ODR_LOW(GPIOE_PIN8) | \
+ PIN_ODR_LOW(GPIOE_PIN9) | \
+ PIN_ODR_LOW(GPIOE_PIN10) | \
+ PIN_ODR_LOW(GPIOE_PIN11) | \
+ PIN_ODR_LOW(GPIOE_PIN12) | \
+ PIN_ODR_LOW(GPIOE_PIN13) | \
+ PIN_ODR_LOW(GPIOE_PIN14) | \
+ PIN_ODR_LOW(GPIOE_PIN15))
+#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN2, 0) |\
+ PIN_AFIO_AF(GPIOE_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN4, 0) |\
+ PIN_AFIO_AF(GPIOE_PIN5, 0) |\
+ PIN_AFIO_AF(GPIOE_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN7, 0))
+#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN15, 0))
+
+/*
+ * GPIOF setup:
+ *
+ * PF0 - I2C2_SDA (input floating).
+ * PF1 - I2C2_SCL (input floating).
+ * PF2 - PIN2 (input pullup).
+ * PF3 - PIN3 (input pullup).
+ * PF4 - PIN4 (input pullup).
+ * PF5 - PIN5 (input pullup).
+ * PF6 - PIN6 (input pullup).
+ * PF7 - PIN7 (input pullup).
+ * PF8 - PIN8 (input pullup).
+ * PF9 - PIN9 (input pullup).
+ * PF10 - PIN10 (input pullup).
+ * PF11 - PIN11 (input pullup).
+ * PF12 - PIN12 (input pullup).
+ * PF13 - PIN13 (input pullup).
+ * PF14 - PIN14 (input pullup).
+ * PF15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_I2C2_SDA) | \
+ PIN_MODE_INPUT(GPIOF_I2C2_SCL) | \
+ PIN_MODE_INPUT(GPIOF_PIN2) | \
+ PIN_MODE_INPUT(GPIOF_PIN3) | \
+ PIN_MODE_INPUT(GPIOF_PIN4) | \
+ PIN_MODE_INPUT(GPIOF_PIN5) | \
+ PIN_MODE_INPUT(GPIOF_PIN6) | \
+ PIN_MODE_INPUT(GPIOF_PIN7) | \
+ PIN_MODE_INPUT(GPIOF_PIN8) | \
+ PIN_MODE_INPUT(GPIOF_PIN9) | \
+ PIN_MODE_INPUT(GPIOF_PIN10) | \
+ PIN_MODE_INPUT(GPIOF_PIN11) | \
+ PIN_MODE_INPUT(GPIOF_PIN12) | \
+ PIN_MODE_INPUT(GPIOF_PIN13) | \
+ PIN_MODE_INPUT(GPIOF_PIN14) | \
+ PIN_MODE_INPUT(GPIOF_PIN15))
+#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SDA) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SCL) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
+#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_HIGH(GPIOF_I2C2_SDA) | \
+ PIN_OSPEED_HIGH(GPIOF_I2C2_SCL) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN15))
+#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_I2C2_SDA) | \
+ PIN_PUPDR_FLOATING(GPIOF_I2C2_SCL) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN15))
+#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_I2C2_SDA) | \
+ PIN_ODR_HIGH(GPIOF_I2C2_SCL) | \
+ PIN_ODR_HIGH(GPIOF_PIN2) | \
+ PIN_ODR_HIGH(GPIOF_PIN3) | \
+ PIN_ODR_HIGH(GPIOF_PIN4) | \
+ PIN_ODR_HIGH(GPIOF_PIN5) | \
+ PIN_ODR_HIGH(GPIOF_PIN6) | \
+ PIN_ODR_HIGH(GPIOF_PIN7) | \
+ PIN_ODR_HIGH(GPIOF_PIN8) | \
+ PIN_ODR_HIGH(GPIOF_PIN9) | \
+ PIN_ODR_HIGH(GPIOF_PIN10) | \
+ PIN_ODR_HIGH(GPIOF_PIN11) | \
+ PIN_ODR_HIGH(GPIOF_PIN12) | \
+ PIN_ODR_HIGH(GPIOF_PIN13) | \
+ PIN_ODR_HIGH(GPIOF_PIN14) | \
+ PIN_ODR_HIGH(GPIOF_PIN15))
+#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_I2C2_SDA, 0) | \
+ PIN_AFIO_AF(GPIOF_I2C2_SCL, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN7, 0))
+#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN15, 0))
+
+/*
+ * GPIOG setup:
+ *
+ * PG0 - PIN0 (input pullup).
+ * PG1 - PIN1 (input pullup).
+ * PG2 - PIN2 (input pullup).
+ * PG3 - PIN3 (input pullup).
+ * PG4 - PIN4 (input pullup).
+ * PG5 - PIN5 (input pullup).
+ * PG6 - PIN6 (input pullup).
+ * PG7 - PIN7 (input pullup).
+ * PG8 - PIN8 (input pullup).
+ * PG9 - PIN9 (input pullup).
+ * PG10 - PIN10 (input pullup).
+ * PG11 - PIN11 (input pullup).
+ * PG12 - PIN12 (input pullup).
+ * PG13 - PIN13 (input pullup).
+ * PG14 - PIN14 (input pullup).
+ * PG15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOG_MODER (PIN_MODE_INPUT(GPIOG_PIN0) | \
+ PIN_MODE_INPUT(GPIOG_PIN1) | \
+ PIN_MODE_INPUT(GPIOG_PIN2) | \
+ PIN_MODE_INPUT(GPIOG_PIN3) | \
+ PIN_MODE_INPUT(GPIOG_PIN4) | \
+ PIN_MODE_INPUT(GPIOG_PIN5) | \
+ PIN_MODE_INPUT(GPIOG_PIN6) | \
+ PIN_MODE_INPUT(GPIOG_PIN7) | \
+ PIN_MODE_INPUT(GPIOG_PIN8) | \
+ PIN_MODE_INPUT(GPIOG_PIN9) | \
+ PIN_MODE_INPUT(GPIOG_PIN10) | \
+ PIN_MODE_INPUT(GPIOG_PIN11) | \
+ PIN_MODE_INPUT(GPIOG_PIN12) | \
+ PIN_MODE_INPUT(GPIOG_PIN13) | \
+ PIN_MODE_INPUT(GPIOG_PIN14) | \
+ PIN_MODE_INPUT(GPIOG_PIN15))
+#define VAL_GPIOG_OTYPER (PIN_OTYPE_PUSHPULL(GPIOG_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN15))
+#define VAL_GPIOG_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOG_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN15))
+#define VAL_GPIOG_PUPDR (PIN_PUPDR_PULLUP(GPIOG_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN15))
+#define VAL_GPIOG_ODR (PIN_ODR_HIGH(GPIOG_PIN0) | \
+ PIN_ODR_HIGH(GPIOG_PIN1) | \
+ PIN_ODR_HIGH(GPIOG_PIN2) | \
+ PIN_ODR_HIGH(GPIOG_PIN3) | \
+ PIN_ODR_HIGH(GPIOG_PIN4) | \
+ PIN_ODR_HIGH(GPIOG_PIN5) | \
+ PIN_ODR_HIGH(GPIOG_PIN6) | \
+ PIN_ODR_HIGH(GPIOG_PIN7) | \
+ PIN_ODR_HIGH(GPIOG_PIN8) | \
+ PIN_ODR_HIGH(GPIOG_PIN9) | \
+ PIN_ODR_HIGH(GPIOG_PIN10) | \
+ PIN_ODR_HIGH(GPIOG_PIN11) | \
+ PIN_ODR_HIGH(GPIOG_PIN12) | \
+ PIN_ODR_HIGH(GPIOG_PIN13) | \
+ PIN_ODR_HIGH(GPIOG_PIN14) | \
+ PIN_ODR_HIGH(GPIOG_PIN15))
+#define VAL_GPIOG_AFRL (PIN_AFIO_AF(GPIOG_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN7, 0))
+#define VAL_GPIOG_AFRH (PIN_AFIO_AF(GPIOG_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN15, 0))
+
+/*
+ * GPIOH setup:
+ *
+ * PH0 - PIN0 (input pullup).
+ * PH1 - PIN1 (input pullup).
+ * PH2 - PIN2 (input pullup).
+ * PH3 - PIN3 (input pullup).
+ * PH4 - PIN4 (input pullup).
+ * PH5 - PIN5 (input pullup).
+ * PH6 - PIN6 (input pullup).
+ * PH7 - PIN7 (input pullup).
+ * PH8 - PIN8 (input pullup).
+ * PH9 - PIN9 (input pullup).
+ * PH10 - PIN10 (input pullup).
+ * PH11 - PIN11 (input pullup).
+ * PH12 - PIN12 (input pullup).
+ * PH13 - PIN13 (input pullup).
+ * PH14 - PIN14 (input pullup).
+ * PH15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOH_MODER (PIN_MODE_INPUT(GPIOH_PIN0) | \
+ PIN_MODE_INPUT(GPIOH_PIN1) | \
+ PIN_MODE_INPUT(GPIOH_PIN2) | \
+ PIN_MODE_INPUT(GPIOH_PIN3) | \
+ PIN_MODE_INPUT(GPIOH_PIN4) | \
+ PIN_MODE_INPUT(GPIOH_PIN5) | \
+ PIN_MODE_INPUT(GPIOH_PIN6) | \
+ PIN_MODE_INPUT(GPIOH_PIN7) | \
+ PIN_MODE_INPUT(GPIOH_PIN8) | \
+ PIN_MODE_INPUT(GPIOH_PIN9) | \
+ PIN_MODE_INPUT(GPIOH_PIN10) | \
+ PIN_MODE_INPUT(GPIOH_PIN11) | \
+ PIN_MODE_INPUT(GPIOH_PIN12) | \
+ PIN_MODE_INPUT(GPIOH_PIN13) | \
+ PIN_MODE_INPUT(GPIOH_PIN14) | \
+ PIN_MODE_INPUT(GPIOH_PIN15))
+#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(GPIOH_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN15))
+#define VAL_GPIOH_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOH_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN15))
+#define VAL_GPIOH_PUPDR (PIN_PUPDR_PULLUP(GPIOH_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN15))
+#define VAL_GPIOH_ODR (PIN_ODR_HIGH(GPIOH_PIN0) | \
+ PIN_ODR_HIGH(GPIOH_PIN1) | \
+ PIN_ODR_HIGH(GPIOH_PIN2) | \
+ PIN_ODR_HIGH(GPIOH_PIN3) | \
+ PIN_ODR_HIGH(GPIOH_PIN4) | \
+ PIN_ODR_HIGH(GPIOH_PIN5) | \
+ PIN_ODR_HIGH(GPIOH_PIN6) | \
+ PIN_ODR_HIGH(GPIOH_PIN7) | \
+ PIN_ODR_HIGH(GPIOH_PIN8) | \
+ PIN_ODR_HIGH(GPIOH_PIN9) | \
+ PIN_ODR_HIGH(GPIOH_PIN10) | \
+ PIN_ODR_HIGH(GPIOH_PIN11) | \
+ PIN_ODR_HIGH(GPIOH_PIN12) | \
+ PIN_ODR_HIGH(GPIOH_PIN13) | \
+ PIN_ODR_HIGH(GPIOH_PIN14) | \
+ PIN_ODR_HIGH(GPIOH_PIN15))
+#define VAL_GPIOH_AFRL (PIN_AFIO_AF(GPIOH_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN7, 0))
+#define VAL_GPIOH_AFRH (PIN_AFIO_AF(GPIOH_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN15, 0))
+
+
+/*
+ * USB bus activation macro, required by the USB driver.
+ */
+// #define usb_lld_connect_bus(usbp)
+#define usb_lld_connect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_ALTERNATE(14)))
+// #define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT)
+/*
+ * USB bus de-activation macro, required by the USB driver.
+ */
+// #define usb_lld_disconnect_bus(usbp)
+#define usb_lld_disconnect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_OUTPUT_PUSHPULL)); palClearPad(GPIOA, GPIOA_USB_DP)
+// #define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12)
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* _BOARD_H_ */
diff --git a/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.mk b/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.mk
new file mode 100644
index 000000000..43377629a
--- /dev/null
+++ b/keyboards/hs60/v2/boards/GENERIC_STM32_F303XC/board.mk
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC
diff --git a/keyboards/hs60/v2/bootloader_defs.h b/keyboards/hs60/v2/bootloader_defs.h
new file mode 100644
index 000000000..3b0e9d20a
--- /dev/null
+++ b/keyboards/hs60/v2/bootloader_defs.h
@@ -0,0 +1,7 @@
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here:
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ * This also requires a patch to chibios:
+ * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+ */
+#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
diff --git a/keyboards/hs60/v2/chconf.h b/keyboards/hs60/v2/chconf.h
new file mode 100644
index 000000000..1d9f12ff1
--- /dev/null
+++ b/keyboards/hs60/v2/chconf.h
@@ -0,0 +1,520 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION 32
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY 100000
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#define CH_CFG_ST_TIMEDELTA 2
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM 0
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE 0
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM TRUE
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY TRUE
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT TRUE
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES TRUE
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES TRUE
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS TRUE
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS TRUE
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES TRUE
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY TRUE
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES TRUE
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE TRUE
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP TRUE
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS TRUE
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS FALSE
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS FALSE
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS FALSE
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK TRUE
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS FALSE
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note It is invoked from within @p chThdInit() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/hs60/v2/config.h b/keyboards/hs60/v2/config.h
new file mode 100644
index 000000000..192f7d6f2
--- /dev/null
+++ b/keyboards/hs60/v2/config.h
@@ -0,0 +1,117 @@
+/*
+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/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0258
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Yiancar-Designs
+#define PRODUCT HS60 V2
+#define DESCRIPTION GH60 compatible, tool free RGB keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+#define MATRIX_ROW_PINS { B3, B4, B5, A8, A4 }
+#define MATRIX_COL_PINS { A13, A10, A9, A14, A15, B8, B9, C13, C14, C15, A0, A1, A2, A3 }
+// To enable debugger set A13 A14 -> A5 A6
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 0
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* Backlight options */
+
+#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+#define RGB_DISABLE_WHEN_USB_SUSPENDED false // turn off effects when suspended
+#define RGB_MATRIX_SKIP_FRAMES 3
+
+#define DRIVER_ADDR_1 0b1010000
+#define DRIVER_ADDR_2 0b1010000 // this is here for compliancy reasons.
+
+#define DRIVER_COUNT 2
+#ifdef HS60_ANSI
+#define DRIVER_1_LED_TOTAL 61
+#else
+#define DRIVER_1_LED_TOTAL 62
+#endif
+
+#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
diff --git a/keyboards/hs60/v2/halconf.h b/keyboards/hs60/v2/halconf.h
new file mode 100644
index 000000000..eda293c49
--- /dev/null
+++ b/keyboards/hs60/v2/halconf.h
@@ -0,0 +1,388 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef HALCONF_H
+#define HALCONF_H
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC TRUE
+#endif
+
+/**
+ * @brief Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT TRUE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C TRUE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM FALSE
+#endif
+
+/**
+ * @brief Enables the QSPI subsystem.
+ */
+#if !defined(HAL_USE_QSPI) || defined(__DOXYGEN__)
+#define HAL_USE_QSPI FALSE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB FALSE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 16 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 256 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 1
+#endif
+
+/**
+ * @brief Serial over USB number of buffers.
+ * @note The default is 2 buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_NUMBER 2
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* UART driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
+#define UART_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define UART_USE_MUTUAL_EXCLUSION FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+#endif /* HALCONF_H */
+
+/** @} */
diff --git a/keyboards/hs60/v2/info.json b/keyboards/hs60/v2/info.json
new file mode 100644
index 000000000..abafb69f9
--- /dev/null
+++ b/keyboards/hs60/v2/info.json
@@ -0,0 +1,1650 @@
+{
+ "keyboard_name": "clueboard/60",
+ "maintainer": "skullydazed",
+ "url": "",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "key_count": 61,
+ "layout": [
+ {
+ "label": "~",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "!",
+ "x": 1,
+ "y": 0
+ },
+ {
+ "label": "@",
+ "x": 2,
+ "y": 0
+ },
+ {
+ "label": "#",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "$",
+ "x": 4,
+ "y": 0
+ },
+ {
+ "label": "%",
+ "x": 5,
+ "y": 0
+ },
+ {
+ "label": "^",
+ "x": 6,
+ "y": 0
+ },
+ {
+ "label": "&",
+ "x": 7,
+ "y": 0
+ },
+ {
+ "label": "*",
+ "x": 8,
+ "y": 0
+ },
+ {
+ "label": "(",
+ "x": 9,
+ "y": 0
+ },
+ {
+ "label": ")",
+ "x": 10,
+ "y": 0
+ },
+ {
+ "label": "_",
+ "x": 11,
+ "y": 0
+ },
+ {
+ "label": "+",
+ "x": 12,
+ "y": 0
+ },
+ {
+ "label": "Backspace",
+ "x": 13,
+ "y": 0,
+ "w": 2
+ },
+ {
+ "label": "Tab",
+ "x": 0,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Q",
+ "x": 1.5,
+ "y": 1
+ },
+ {
+ "label": "W",
+ "x": 2.5,
+ "y": 1
+ },
+ {
+ "label": "E",
+ "x": 3.5,
+ "y": 1
+ },
+ {
+ "label": "R",
+ "x": 4.5,
+ "y": 1
+ },
+ {
+ "label": "T",
+ "x": 5.5,
+ "y": 1
+ },
+ {
+ "label": "Y",
+ "x": 6.5,
+ "y": 1
+ },
+ {
+ "label": "U",
+ "x": 7.5,
+ "y": 1
+ },
+ {
+ "label": "I",
+ "x": 8.5,
+ "y": 1
+ },
+ {
+ "label": "O",
+ "x": 9.5,
+ "y": 1
+ },
+ {
+ "label": "P",
+ "x": 10.5,
+ "y": 1
+ },
+ {
+ "label": "{",
+ "x": 11.5,
+ "y": 1
+ },
+ {
+ "label": "}",
+ "x": 12.5,
+ "y": 1
+ },
+ {
+ "label": "|",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Caps Lock",
+ "x": 0,
+ "y": 2,
+ "w": 1.75
+ },
+ {
+ "label": "A",
+ "x": 1.75,
+ "y": 2
+ },
+ {
+ "label": "S",
+ "x": 2.75,
+ "y": 2
+ },
+ {
+ "label": "D",
+ "x": 3.75,
+ "y": 2
+ },
+ {
+ "label": "F",
+ "x": 4.75,
+ "y": 2
+ },
+ {
+ "label": "G",
+ "x": 5.75,
+ "y": 2
+ },
+ {
+ "label": "H",
+ "x": 6.75,
+ "y": 2
+ },
+ {
+ "label": "J",
+ "x": 7.75,
+ "y": 2
+ },
+ {
+ "label": "K",
+ "x": 8.75,
+ "y": 2
+ },
+ {
+ "label": "L",
+ "x": 9.75,
+ "y": 2
+ },
+ {
+ "label": ":",
+ "x": 10.75,
+ "y": 2
+ },
+ {
+ "label": "\"",
+ "x": 11.75,
+ "y": 2
+ },
+ {
+ "label": "Enter",
+ "x": 12.75,
+ "y": 2,
+ "w": 2.25
+ },
+ {
+ "label": "Shift",
+ "x": 0,
+ "y": 3,
+ "w": 2.25
+ },
+ {
+ "label": "Z",
+ "x": 2.25,
+ "y": 3
+ },
+ {
+ "label": "X",
+ "x": 3.25,
+ "y": 3
+ },
+ {
+ "label": "C",
+ "x": 4.25,
+ "y": 3
+ },
+ {
+ "label": "V",
+ "x": 5.25,
+ "y": 3
+ },
+ {
+ "label": "B",
+ "x": 6.25,
+ "y": 3
+ },
+ {
+ "label": "N",
+ "x": 7.25,
+ "y": 3
+ },
+ {
+ "label": "M",
+ "x": 8.25,
+ "y": 3
+ },
+ {
+ "label": "<",
+ "x": 9.25,
+ "y": 3
+ },
+ {
+ "label": ">",
+ "x": 10.25,
+ "y": 3
+ },
+ {
+ "label": "?",
+ "x": 11.25,
+ "y": 3
+ },
+ {
+ "label": "Shift",
+ "x": 12.25,
+ "y": 3,
+ "w": 2.75
+ },
+ {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Win",
+ "x": 1.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "x": 3.75,
+ "y": 4,
+ "w": 6.25
+ },
+ {
+ "label": "Alt",
+ "x": 10,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Win",
+ "x": 11.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Menu",
+ "x": 12.5,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Ctrl",
+ "x": 13.75,
+ "y": 4,
+ "w": 1.25
+ }
+ ]
+ },
+ "LAYOUT_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
+ }
+ ]
+ },
+ "KEYMAP_AEK": {
+ "key_count": 60,
+ "layout": [
+ {
+ "label": "~",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "!",
+ "x": 1,
+ "y": 0
+ },
+ {
+ "label": "@",
+ "x": 2,
+ "y": 0
+ },
+ {
+ "label": "#",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "$",
+ "x": 4,
+ "y": 0
+ },
+ {
+ "label": "%",
+ "x": 5,
+ "y": 0
+ },
+ {
+ "label": "^",
+ "x": 6,
+ "y": 0
+ },
+ {
+ "label": "&",
+ "x": 7,
+ "y": 0
+ },
+ {
+ "label": "*",
+ "x": 8,
+ "y": 0
+ },
+ {
+ "label": "(",
+ "x": 9,
+ "y": 0
+ },
+ {
+ "label": ")",
+ "x": 10,
+ "y": 0
+ },
+ {
+ "label": "_",
+ "x": 11,
+ "y": 0
+ },
+ {
+ "label": "+",
+ "x": 12,
+ "y": 0
+ },
+ {
+ "label": "Backspace",
+ "x": 13,
+ "y": 0,
+ "w": 2
+ },
+ {
+ "label": "Tab",
+ "x": 0,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Q",
+ "x": 1.5,
+ "y": 1
+ },
+ {
+ "label": "W",
+ "x": 2.5,
+ "y": 1
+ },
+ {
+ "label": "E",
+ "x": 3.5,
+ "y": 1
+ },
+ {
+ "label": "R",
+ "x": 4.5,
+ "y": 1
+ },
+ {
+ "label": "T",
+ "x": 5.5,
+ "y": 1
+ },
+ {
+ "label": "Y",
+ "x": 6.5,
+ "y": 1
+ },
+ {
+ "label": "U",
+ "x": 7.5,
+ "y": 1
+ },
+ {
+ "label": "I",
+ "x": 8.5,
+ "y": 1
+ },
+ {
+ "label": "O",
+ "x": 9.5,
+ "y": 1
+ },
+ {
+ "label": "P",
+ "x": 10.5,
+ "y": 1
+ },
+ {
+ "label": "{",
+ "x": 11.5,
+ "y": 1
+ },
+ {
+ "label": "}",
+ "x": 12.5,
+ "y": 1
+ },
+ {
+ "label": "|",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Caps Lock",
+ "x": 0,
+ "y": 2,
+ "w": 1.75
+ },
+ {
+ "label": "A",
+ "x": 1.75,
+ "y": 2
+ },
+ {
+ "label": "S",
+ "x": 2.75,
+ "y": 2
+ },
+ {
+ "label": "D",
+ "x": 3.75,
+ "y": 2
+ },
+ {
+ "label": "F",
+ "x": 4.75,
+ "y": 2
+ },
+ {
+ "label": "G",
+ "x": 5.75,
+ "y": 2
+ },
+ {
+ "label": "H",
+ "x": 6.75,
+ "y": 2
+ },
+ {
+ "label": "J",
+ "x": 7.75,
+ "y": 2
+ },
+ {
+ "label": "K",
+ "x": 8.75,
+ "y": 2
+ },
+ {
+ "label": "L",
+ "x": 9.75,
+ "y": 2
+ },
+ {
+ "label": ":",
+ "x": 10.75,
+ "y": 2
+ },
+ {
+ "label": "\"",
+ "x": 11.75,
+ "y": 2
+ },
+ {
+ "label": "Enter",
+ "x": 12.75,
+ "y": 2,
+ "w": 2.25
+ },
+ {
+ "label": "Shift",
+ "x": 0,
+ "y": 3,
+ "w": 2.25
+ },
+ {
+ "label": "Z",
+ "x": 2.25,
+ "y": 3
+ },
+ {
+ "label": "X",
+ "x": 3.25,
+ "y": 3
+ },
+ {
+ "label": "C",
+ "x": 4.25,
+ "y": 3
+ },
+ {
+ "label": "V",
+ "x": 5.25,
+ "y": 3
+ },
+ {
+ "label": "B",
+ "x": 6.25,
+ "y": 3
+ },
+ {
+ "label": "N",
+ "x": 7.25,
+ "y": 3
+ },
+ {
+ "label": "M",
+ "x": 8.25,
+ "y": 3
+ },
+ {
+ "label": "<",
+ "x": 9.25,
+ "y": 3
+ },
+ {
+ "label": ">",
+ "x": 10.25,
+ "y": 3
+ },
+ {
+ "label": "?",
+ "x": 11.25,
+ "y": 3
+ },
+ {
+ "label": "Shift",
+ "x": 12.25,
+ "y": 3,
+ "w": 2.75
+ },
+ {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "Win",
+ "x": 1.5,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Alt",
+ "x": 2.75,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "x": 4.25,
+ "y": 4,
+ "w": 6.5
+ },
+ {
+ "label": "AltGr",
+ "x": 10.75,
+ "y": 4,
+ "w": 1.5
+ },
+ {
+ "label": "Win",
+ "x": 12.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Ctrl",
+ "x": 13.5,
+ "y": 4,
+ "w": 1.5
+ }
+ ]
+ },
+ "KEYMAP": {
+ "key_count": 65,
+ "layout": [
+ {
+ "label": "~",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "!",
+ "x": 1,
+ "y": 0
+ },
+ {
+ "label": "@",
+ "x": 2,
+ "y": 0
+ },
+ {
+ "label": "#",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "$",
+ "x": 4,
+ "y": 0
+ },
+ {
+ "label": "%",
+ "x": 5,
+ "y": 0
+ },
+ {
+ "label": "^",
+ "x": 6,
+ "y": 0
+ },
+ {
+ "label": "&",
+ "x": 7,
+ "y": 0
+ },
+ {
+ "label": "*",
+ "x": 8,
+ "y": 0
+ },
+ {
+ "label": "(",
+ "x": 9,
+ "y": 0
+ },
+ {
+ "label": ")",
+ "x": 10,
+ "y": 0
+ },
+ {
+ "label": "_",
+ "x": 11,
+ "y": 0
+ },
+ {
+ "label": "+",
+ "x": 12,
+ "y": 0
+ },
+ {
+ "x": 13,
+ "y": 0
+ },
+ {
+ "label": "Back",
+ "x": 14,
+ "y": 0
+ },
+ {
+ "label": "Tab",
+ "x": 0,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Q",
+ "x": 1.5,
+ "y": 1
+ },
+ {
+ "label": "W",
+ "x": 2.5,
+ "y": 1
+ },
+ {
+ "label": "E",
+ "x": 3.5,
+ "y": 1
+ },
+ {
+ "label": "R",
+ "x": 4.5,
+ "y": 1
+ },
+ {
+ "label": "T",
+ "x": 5.5,
+ "y": 1
+ },
+ {
+ "label": "Y",
+ "x": 6.5,
+ "y": 1
+ },
+ {
+ "label": "U",
+ "x": 7.5,
+ "y": 1
+ },
+ {
+ "label": "I",
+ "x": 8.5,
+ "y": 1
+ },
+ {
+ "label": "O",
+ "x": 9.5,
+ "y": 1
+ },
+ {
+ "label": "P",
+ "x": 10.5,
+ "y": 1
+ },
+ {
+ "label": "{",
+ "x": 11.5,
+ "y": 1
+ },
+ {
+ "label": "}",
+ "x": 12.5,
+ "y": 1
+ },
+ {
+ "label": "|",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Caps Lock",
+ "x": 0,
+ "y": 2,
+ "w": 1.75
+ },
+ {
+ "label": "A",
+ "x": 1.75,
+ "y": 2
+ },
+ {
+ "label": "S",
+ "x": 2.75,
+ "y": 2
+ },
+ {
+ "label": "D",
+ "x": 3.75,
+ "y": 2
+ },
+ {
+ "label": "F",
+ "x": 4.75,
+ "y": 2
+ },
+ {
+ "label": "G",
+ "x": 5.75,
+ "y": 2
+ },
+ {
+ "label": "H",
+ "x": 6.75,
+ "y": 2
+ },
+ {
+ "label": "J",
+ "x": 7.75,
+ "y": 2
+ },
+ {
+ "label": "K",
+ "x": 8.75,
+ "y": 2
+ },
+ {
+ "label": "L",
+ "x": 9.75,
+ "y": 2
+ },
+ {
+ "label": ":",
+ "x": 10.75,
+ "y": 2
+ },
+ {
+ "label": "\"",
+ "x": 11.75,
+ "y": 2
+ },
+ {
+ "x": 12.75,
+ "y": 2
+ },
+ {
+ "label": "Enter",
+ "x": 13.75,
+ "y": 2,
+ "w": 1.25
+ },
+ {
+ "x": 0,
+ "y": 3
+ },
+ {
+ "label": "Shift",
+ "x": 1,
+ "y": 3,
+ "w": 1.25
+ },
+ {
+ "label": "Z",
+ "x": 2.25,
+ "y": 3
+ },
+ {
+ "label": "X",
+ "x": 3.25,
+ "y": 3
+ },
+ {
+ "label": "C",
+ "x": 4.25,
+ "y": 3
+ },
+ {
+ "label": "V",
+ "x": 5.25,
+ "y": 3
+ },
+ {
+ "label": "B",
+ "x": 6.25,
+ "y": 3
+ },
+ {
+ "label": "N",
+ "x": 7.25,
+ "y": 3
+ },
+ {
+ "label": "M",
+ "x": 8.25,
+ "y": 3
+ },
+ {
+ "label": "<",
+ "x": 9.25,
+ "y": 3
+ },
+ {
+ "label": ">",
+ "x": 10.25,
+ "y": 3
+ },
+ {
+ "label": "?",
+ "x": 11.25,
+ "y": 3
+ },
+ {
+ "label": "Shift",
+ "x": 12.25,
+ "y": 3,
+ "w": 1.75
+ },
+ {
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Win",
+ "x": 1.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "x": 3.75,
+ "y": 4,
+ "w": 6.25
+ },
+ {
+ "label": "Alt",
+ "x": 10,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Win",
+ "x": 11.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Menu",
+ "x": 12.5,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Ctrl",
+ "x": 13.75,
+ "y": 4,
+ "w": 1.25
+ }
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "key_count": 63,
+ "layout": [
+ {
+ "label": "~",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "!",
+ "x": 1,
+ "y": 0
+ },
+ {
+ "label": "@",
+ "x": 2,
+ "y": 0
+ },
+ {
+ "label": "#",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "$",
+ "x": 4,
+ "y": 0
+ },
+ {
+ "label": "%",
+ "x": 5,
+ "y": 0
+ },
+ {
+ "label": "^",
+ "x": 6,
+ "y": 0
+ },
+ {
+ "label": "&",
+ "x": 7,
+ "y": 0
+ },
+ {
+ "label": "*",
+ "x": 8,
+ "y": 0
+ },
+ {
+ "label": "(",
+ "x": 9,
+ "y": 0
+ },
+ {
+ "label": ")",
+ "x": 10,
+ "y": 0
+ },
+ {
+ "label": "_",
+ "x": 11,
+ "y": 0
+ },
+ {
+ "label": "+",
+ "x": 12,
+ "y": 0
+ },
+ {
+ "x": 13,
+ "y": 0
+ },
+ {
+ "label": "Back",
+ "x": 14,
+ "y": 0
+ },
+ {
+ "label": "Tab",
+ "x": 0,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Q",
+ "x": 1.5,
+ "y": 1
+ },
+ {
+ "label": "W",
+ "x": 2.5,
+ "y": 1
+ },
+ {
+ "label": "E",
+ "x": 3.5,
+ "y": 1
+ },
+ {
+ "label": "R",
+ "x": 4.5,
+ "y": 1
+ },
+ {
+ "label": "T",
+ "x": 5.5,
+ "y": 1
+ },
+ {
+ "label": "Y",
+ "x": 6.5,
+ "y": 1
+ },
+ {
+ "label": "U",
+ "x": 7.5,
+ "y": 1
+ },
+ {
+ "label": "I",
+ "x": 8.5,
+ "y": 1
+ },
+ {
+ "label": "O",
+ "x": 9.5,
+ "y": 1
+ },
+ {
+ "label": "P",
+ "x": 10.5,
+ "y": 1
+ },
+ {
+ "label": "{",
+ "x": 11.5,
+ "y": 1
+ },
+ {
+ "label": "}",
+ "x": 12.5,
+ "y": 1
+ },
+ {
+ "label": "|",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Caps Lock",
+ "x": 0,
+ "y": 2,
+ "w": 1.75
+ },
+ {
+ "label": "A",
+ "x": 1.75,
+ "y": 2
+ },
+ {
+ "label": "S",
+ "x": 2.75,
+ "y": 2
+ },
+ {
+ "label": "D",
+ "x": 3.75,
+ "y": 2
+ },
+ {
+ "label": "F",
+ "x": 4.75,
+ "y": 2
+ },
+ {
+ "label": "G",
+ "x": 5.75,
+ "y": 2
+ },
+ {
+ "label": "H",
+ "x": 6.75,
+ "y": 2
+ },
+ {
+ "label": "J",
+ "x": 7.75,
+ "y": 2
+ },
+ {
+ "label": "K",
+ "x": 8.75,
+ "y": 2
+ },
+ {
+ "label": "L",
+ "x": 9.75,
+ "y": 2
+ },
+ {
+ "label": ":",
+ "x": 10.75,
+ "y": 2
+ },
+ {
+ "label": "\"",
+ "x": 11.75,
+ "y": 2
+ },
+ {
+ "label": "Enter",
+ "x": 12.75,
+ "y": 2,
+ "w": 2.25
+ },
+ {
+ "label": "Shift",
+ "x": 0,
+ "y": 3,
+ "w": 2.25
+ },
+ {
+ "label": "Z",
+ "x": 2.25,
+ "y": 3
+ },
+ {
+ "label": "X",
+ "x": 3.25,
+ "y": 3
+ },
+ {
+ "label": "C",
+ "x": 4.25,
+ "y": 3
+ },
+ {
+ "label": "V",
+ "x": 5.25,
+ "y": 3
+ },
+ {
+ "label": "B",
+ "x": 6.25,
+ "y": 3
+ },
+ {
+ "label": "N",
+ "x": 7.25,
+ "y": 3
+ },
+ {
+ "label": "M",
+ "x": 8.25,
+ "y": 3
+ },
+ {
+ "label": "<",
+ "x": 9.25,
+ "y": 3
+ },
+ {
+ "label": ">",
+ "x": 10.25,
+ "y": 3
+ },
+ {
+ "label": "?",
+ "x": 11.25,
+ "y": 3
+ },
+ {
+ "label": "Shift",
+ "x": 12.25,
+ "y": 3,
+ "w": 1.75
+ },
+ {
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Win",
+ "x": 1.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "x": 3.75,
+ "y": 4,
+ "w": 6.25
+ },
+ {
+ "label": "Alt",
+ "x": 10,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Win",
+ "x": 11.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Menu",
+ "x": 12.5,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Ctrl",
+ "x": 13.75,
+ "y": 4,
+ "w": 1.25
+ }
+ ]
+ }
+ }
+}
diff --git a/keyboards/hs60/v2/keymaps/ansi/config.h b/keyboards/hs60/v2/keymaps/ansi/config.h
new file mode 100644
index 000000000..f51cc16d8
--- /dev/null
+++ b/keyboards/hs60/v2/keymaps/ansi/config.h
@@ -0,0 +1,21 @@
+/*
+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/>.
+*/
+#pragma once
+
+/* Include overwrites for specific keymap */
+
+#define HS60_ANSI
diff --git a/keyboards/hs60/v2/keymaps/ansi/keymap.c b/keyboards/hs60/v2/keymaps/ansi/keymap.c
new file mode 100644
index 000000000..923af9e2c
--- /dev/null
+++ b/keyboards/hs60/v2/keymaps/ansi/keymap.c
@@ -0,0 +1,46 @@
+/* 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( /* Base */
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,\
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,\
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,\
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
+
+[1] = LAYOUT_60_ansi( /* FN */
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL ,\
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET , KC_TRNS,\
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_TRNS,\
+ KC_VOLU, KC_VOLD, KC_MUTE, 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/hs60/v2/keymaps/ansi/readme.md b/keyboards/hs60/v2/keymaps/ansi/readme.md
new file mode 100644
index 000000000..fa811319d
--- /dev/null
+++ b/keyboards/hs60/v2/keymaps/ansi/readme.md
@@ -0,0 +1,6 @@
+The default keymap for ANSI HS60
+================================
+
+![Layout image](https://imgur.com/CSyPw0J.png)
+
+Default layer is normal ANSI and Fn layer is used for RGB functions, Volume control and arrow cluster \ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/default/keymap.c b/keyboards/hs60/v2/keymaps/default/keymap.c
new file mode 100644
index 000000000..2a5e82361
--- /dev/null
+++ b/keyboards/hs60/v2/keymaps/default/keymap.c
@@ -0,0 +1,46 @@
+/* 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( /* Base */
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,\
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,\
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
+
+[1] = LAYOUT_60_iso( /* FN */
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL ,\
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET , \
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,\
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_TRNS, KC_TRNS,\
+ KC_VOLU, KC_VOLD, KC_MUTE, 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/hs60/v2/keymaps/default/readme.md b/keyboards/hs60/v2/keymaps/default/readme.md
new file mode 100644
index 000000000..9125cb349
--- /dev/null
+++ b/keyboards/hs60/v2/keymaps/default/readme.md
@@ -0,0 +1,6 @@
+The default keymap for ISO HS60
+===============================
+
+![Layout image](https://imgur.com/HXj4tYL.png)
+
+Default layer is normal ISO and Fn layer is used for RGB functions, Volume control and arrow cluster \ No newline at end of file
diff --git a/keyboards/hs60/v2/keymaps/hhkb/config.h b/keyboards/hs60/v2/keymaps/hhkb/config.h
new file mode 100644
index 000000000..3db403ecc
--- /dev/null
+++ b/keyboards/hs60/v2/keymaps/hhkb/config.h
@@ -0,0 +1,21 @@
+/*
+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/>.
+*/
+#pragma once
+
+/* Include overwrites for specific keymap */
+
+#define HS60_HHKB
diff --git a/keyboards/hs60/v2/keymaps/hhkb/keymap.c b/keyboards/hs60/v2/keymaps/hhkb/keymap.c
new file mode 100644
index 000000000..d52fc4bac
--- /dev/null
+++ b/keyboards/hs60/v2/keymaps/hhkb/keymap.c
@@ -0,0 +1,46 @@
+/* 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 HHKB version of the PCB
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_60_hhkb( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSLS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), \
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL ),
+
+[1] = LAYOUT_60_hhkb( /* FN */
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,\
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_SPI, RGB_SPD, KC_UP, KC_TRNS, KC_DEL, \
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS )
+};
+
+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/hs60/v2/mcuconf.h b/keyboards/hs60/v2/mcuconf.h
new file mode 100644
index 000000000..226da48d5
--- /dev/null
+++ b/keyboards/hs60/v2/mcuconf.h
@@ -0,0 +1,257 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef MCUCONF_H
+#define MCUCONF_H
+
+/*
+ * STM32F3xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F3xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PREDIV_VALUE 1
+#define STM32_PLLMUL_VALUE 9
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV2
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_ADC12PRES STM32_ADC12PRES_DIV1
+#define STM32_ADC34PRES STM32_ADC34PRES_DIV1
+#define STM32_USART1SW STM32_USART1SW_PCLK
+#define STM32_USART2SW STM32_USART2SW_PCLK
+#define STM32_USART3SW STM32_USART3SW_PCLK
+#define STM32_UART4SW STM32_UART4SW_PCLK
+#define STM32_UART5SW STM32_UART5SW_PCLK
+#define STM32_I2C1SW STM32_I2C1SW_SYSCLK
+#define STM32_I2C2SW STM32_I2C2SW_SYSCLK
+#define STM32_TIM1SW STM32_TIM1SW_PCLK2
+#define STM32_TIM8SW STM32_TIM8SW_PCLK2
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+#define STM32_USB_CLOCK_REQUIRED TRUE
+#define STM32_USBPRE STM32_USBPRE_DIV1P5
+
+#undef STM32_HSE_BYPASS
+// #error "oh no"
+// #endif
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_DUAL_MODE FALSE
+#define STM32_ADC_COMPACT_SAMPLES FALSE
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_USE_ADC2 FALSE
+#define STM32_ADC_USE_ADC3 FALSE
+#define STM32_ADC_USE_ADC4 FALSE
+#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
+#define STM32_ADC_ADC2_DMA_STREAM STM32_DMA_STREAM_ID(2, 1)
+#define STM32_ADC_ADC3_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
+#define STM32_ADC_ADC4_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_ADC2_DMA_PRIORITY 2
+#define STM32_ADC_ADC3_DMA_PRIORITY 2
+#define STM32_ADC_ADC4_DMA_PRIORITY 2
+#define STM32_ADC_ADC12_IRQ_PRIORITY 5
+#define STM32_ADC_ADC3_IRQ_PRIORITY 5
+#define STM32_ADC_ADC4_IRQ_PRIORITY 5
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC4_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC12_CLOCK_MODE ADC_CCR_CKMODE_AHB_DIV1
+#define STM32_ADC_ADC34_CLOCK_MODE ADC_CCR_CKMODE_AHB_DIV1
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1 FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY 11
+
+/*
+ * DAC driver system settings.
+ */
+#define STM32_DAC_DUAL_MODE FALSE
+#define STM32_DAC_USE_DAC1_CH1 TRUE
+#define STM32_DAC_USE_DAC1_CH2 TRUE
+#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY 10
+#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY 10
+#define STM32_DAC_DAC1_CH1_DMA_PRIORITY 2
+#define STM32_DAC_DAC1_CH2_DMA_PRIORITY 2
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI20_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI21_22_29_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI30_32_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI33_IRQ_PRIORITY 6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM6 TRUE
+#define STM32_GPT_USE_TIM7 TRUE
+#define STM32_GPT_USE_TIM8 TRUE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM6_IRQ_PRIORITY 7
+#define STM32_GPT_TIM7_IRQ_PRIORITY 7
+#define STM32_GPT_TIM8_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 TRUE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 10
+#define STM32_I2C_I2C2_IRQ_PRIORITY 10
+#define STM32_I2C_USE_DMA TRUE
+#define STM32_I2C_I2C1_DMA_PRIORITY 1
+#define STM32_I2C_I2C2_DMA_PRIORITY 1
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM8 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM8_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_USE_TIM4 FALSE
+#define STM32_PWM_USE_TIM8 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM8_IRQ_PRIORITY 7
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USE_USART3 FALSE
+#define STM32_SERIAL_USE_UART4 FALSE
+#define STM32_SERIAL_USE_UART5 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART3_PRIORITY 12
+#define STM32_SERIAL_UART4_PRIORITY 12
+#define STM32_SERIAL_UART5_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USE_USART3 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART3_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART3_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
+
+/*
+ * WDG driver system settings.
+ */
+#define STM32_WDG_USE_IWDG FALSE
+
+#endif /* MCUCONF_H */
diff --git a/keyboards/hs60/v2/readme.md b/keyboards/hs60/v2/readme.md
new file mode 100644
index 000000000..50c91698d
--- /dev/null
+++ b/keyboards/hs60/v2/readme.md
@@ -0,0 +1,18 @@
+HS60 V2.0
+=========
+
+[HS60](https://mechboards.co.uk/wp-content/uploads/2018/04/IMG_20180420_140353.jpg)
+
+This is a standard fixed layout 60% PCB. It comes in three variants; ISO, ANSI and HHKB and support full per-key RGB.
+
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [github](https://github.com/yiancar)
+Hardware Supported: HS60 ISO, ANSI and HHKB PCBs with STM32F303CC
+Hardware Availability: http://groupbuys.mechboards.co.uk/shop/hs60-hotswap-60-pcb/
+
+Due to the RGB implementation, the HS60 is currently not compatible with community layouts.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make hs60/v2:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
diff --git a/keyboards/hs60/v2/rules.mk b/keyboards/hs60/v2/rules.mk
new file mode 100644
index 000000000..51e3cf0a3
--- /dev/null
+++ b/keyboards/hs60/v2/rules.mk
@@ -0,0 +1,58 @@
+# project specific files
+
+## chip/board settings
+# the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F3xx
+
+# Linker script to use
+# it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F303xC
+
+# Startup code to use
+# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f3xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+BOARD = GENERIC_STM32_F303XC
+
+# Cortex version
+MCU = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+
+USE_FPU = yes
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# 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
+#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover
+AUDIO_ENABLE = no
+RGB_MATRIX_ENABLE = IS31FL3733 # Use RGB matrix
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
+#SERIAL_LINK_ENABLE = yes
diff --git a/keyboards/hs60/v2/v2.c b/keyboards/hs60/v2/v2.c
new file mode 100644
index 000000000..4289c1fed
--- /dev/null
+++ b/keyboards/hs60/v2/v2.c
@@ -0,0 +1,635 @@
+/* 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 "v2.h"
+
+//#include "is31fl3733.h"
+
+// Please ignore this is for upcoming features
+/*#ifdef RAW_ENABLE
+
+void raw_hid_receive( uint8_t *data, uint8_t length )
+{
+ uint8_t command = data[0];
+ switch ( command )
+ {
+ case id_protocol_version:
+ {
+ msg_protocol_version *msg = (msg_protocol_version*)&data[1];
+ msg->version = PROTOCOL_VERSION;
+ break;
+ }
+#if USE_KEYMAPS_IN_EEPROM
+ case id_keymap_keycode_load:
+ {
+ msg_keymap_keycode_load *msg = (msg_keymap_keycode_load*)&data[1];
+ msg->keycode = keymap_keycode_load( msg->layer, msg->row, msg->column );
+ break;
+ }
+ case id_keymap_keycode_save:
+ {
+ msg_keymap_keycode_save *msg = (msg_keymap_keycode_save*)&data[1];
+ keymap_keycode_save( msg->layer, msg->row, msg->column, msg->keycode);
+ break;
+ }
+ case id_keymap_default_save:
+ {
+ keymap_default_save();
+ break;
+ }
+#endif // USE_KEYMAPS_IN_EEPROM
+ case id_backlight_config_set_values:
+ {
+ msg_backlight_config_set_values *msg = (msg_backlight_config_set_values*)&data[1];
+ backlight_config_set_values(msg);
+ backlight_config_save();
+ break;
+ }
+ case id_backlight_config_set_alphas_mods:
+ {
+ msg_backlight_config_set_alphas_mods *msg = (msg_backlight_config_set_alphas_mods*)&data[1];
+ backlight_config_set_alphas_mods( msg->alphas_mods );
+ backlight_config_save();
+ break;
+ }
+ case id_backlight_set_key_color:
+ {
+ msg_backlight_set_key_color *msg = (msg_backlight_set_key_color*)&data[1];
+ backlight_set_key_color(msg->row, msg->column, msg->hsv);
+ break;
+ }
+ case id_system_get_state:
+ {
+ msg_system_state *msg = (msg_system_state*)&data[1];
+ msg->value = backlight_get_tick();
+ break;
+ }
+ default:
+ {
+ // Unhandled message.
+ data[0] = id_unhandled;
+ break;
+ }
+ }
+
+ // Return same buffer with values changed
+ raw_hid_send( data, length );
+
+}
+
+#endif*/
+
+#ifdef HS60_ANSI
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, B_1, A_1, C_1}, //MX1
+ {0, E_1, D_1, F_1}, //MX2
+ {0, H_1, G_1, I_1}, //MX3
+ {0, K_1, J_1, L_1}, //MX4
+ {0, B_2, A_2, C_2}, //MX6
+ {0, E_2, D_2, F_2}, //MX7
+ {0, H_2, G_2, I_2}, //MX8
+ {0, K_2, J_2, L_2}, //MX14
+ {0, B_3, A_3, C_3}, //MX11
+ {0, E_3, D_3, F_3}, //MX12
+ {0, H_3, G_3, I_3}, //MX13
+ {0, K_3, J_3, L_3}, //MX19
+ {0, B_4, A_4, C_4}, //MX16
+ {0, E_4, D_4, F_4}, //MX17
+ {0, H_4, G_4, I_4}, //MX18
+ {0, K_4, J_4, L_4}, //MX23
+ {0, B_5, A_5, C_5}, //MX20
+ {0, E_5, D_5, F_5}, //MX21
+ {0, H_5, G_5, I_5}, //MX22
+ {0, K_5, J_5, L_5}, //MX27
+ {0, B_6, A_6, C_6}, //MX24
+ {0, E_6, D_6, F_6}, //MX25
+ {0, H_6, G_6, I_6}, //MX26
+ {0, K_6, J_6, L_6}, //MX31
+ {0, B_7, A_7, C_7}, //MX28
+ {0, E_7, D_7, F_7}, //MX29
+ {0, H_7, G_7, I_7}, //MX30
+ {0, K_7, J_7, L_7}, //MX36
+ {0, B_8, A_8, C_8}, //MX33
+ {0, E_8, D_8, F_8}, //MX34
+ {0, H_8, G_8, I_8}, //MX35
+ {0, K_8, J_8, L_8}, //MX40
+ {0, B_9, A_9, C_9}, //MX37
+ {0, E_9, D_9, F_9}, //MX38
+ {0, H_9, G_9, I_9}, //MX39
+ {0, K_9, J_9, L_9}, //MX44
+ {0, B_10, A_10, C_10}, //MX41
+ {0, E_10, D_10, F_10}, //MX42
+ {0, H_10, G_10, I_10}, //MX43
+ {0, K_10, J_10, L_10}, //MX48
+ {0, B_11, A_11, C_11}, //MX45
+ {0, E_11, D_11, F_11}, //MX46
+ {0, H_11, G_11, I_11}, //MX47
+ {0, K_11, J_11, L_11}, //MX53
+ {0, B_12, A_12, C_12}, //MX50
+ {0, E_12, D_12, F_12}, //MX51
+ {0, H_12, G_12, I_12}, //MX52
+
+ {0, B_13, A_13, C_13}, //MX55
+ {0, E_13, D_13, F_13}, //MX56
+
+ {0, K_13, J_13, L_13}, //MX61
+ {0, B_14, A_14, C_14}, //MX59
+ {0, E_14, D_14, F_14}, //MX57
+ {0, H_14, G_14, I_14}, //MX60
+ {0, K_14, J_14, L_14}, //MX62
+ {0, B_15, A_15, C_15}, //MX5
+ {0, E_15, D_15, F_15}, //MX10
+ {0, H_15, G_15, I_15}, //MX15
+ {0, K_15, J_15, L_15}, //MX32
+
+ {0, E_16, D_16, F_16}, //MX49
+ {0, H_16, G_16, I_16}, //MX54
+ {0, K_16, J_16, L_16}, //MX58
+};
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+//
+// MX1, MX6, MX11, MX16, MX20, MX24, MX28, MX33, MX37, MX41, MX45, MX50, MX55, MX59,
+// MX2, MX7, MX12, MX17, MX21, MX25, MX29, MX34, MX38, MX42, MX46, MX51, MX56, ---,
+// MX3, MX8, MX13, MX18, MX22, MX26, MX30, MX35, MX39, MX43, MX47, MX52, MX57, MX60,
+// MX4, ---, MX14, MX19, MX23, MX27, MX31, MX36, MX40, MX44, MX48, MX53, ---, MX61,
+// MX5, MX10, MX15, ---, ---, ---, MX32, ---, ---, ---, MX49, MX54, MX58, MX62
+/* {row | col << 4}
+ * | {x=0..224, y=0..64}
+ * | | modifier
+ * | | | */
+ {{0|(0<<4)}, { 0, 0}, 1}, //MX1
+ {{1|(0<<4)}, { 0, 16}, 1}, //MX2
+ {{2|(0<<4)}, { 0, 32}, 1}, //MX3
+ {{3|(0<<4)}, { 0, 48}, 1}, //MX4
+ {{0|(1<<4)}, { 17, 0}, 0}, //MX6
+ {{1|(1<<4)}, { 17, 16}, 0}, //MX7
+ {{2|(1<<4)}, { 17, 32}, 0}, //MX8
+ {{3|(2<<4)}, { 34, 48}, 0}, //MX14
+ {{0|(2<<4)}, { 34, 0}, 0}, //MX11
+ {{1|(2<<4)}, { 34, 16}, 0}, //MX12
+ {{2|(2<<4)}, { 34, 32}, 0}, //MX13
+ {{3|(3<<4)}, { 51, 48}, 0}, //MX19
+ {{0|(3<<4)}, { 51, 0}, 0}, //MX16
+ {{1|(3<<4)}, { 51, 16}, 0}, //MX17
+ {{2|(3<<4)}, { 51, 32}, 0}, //MX18
+ {{3|(4<<4)}, { 68, 48}, 0}, //MX23
+ {{0|(4<<4)}, { 68, 0}, 0}, //MX20
+ {{1|(4<<4)}, { 68, 16}, 0}, //MX21
+ {{2|(4<<4)}, { 68, 32}, 0}, //MX22
+ {{3|(5<<4)}, { 85, 48}, 0}, //MX27
+ {{0|(5<<4)}, { 85, 0}, 0}, //MX24
+ {{1|(5<<4)}, { 85, 16}, 0}, //MX25
+ {{2|(5<<4)}, { 85, 32}, 0}, //MX26
+ {{3|(6<<4)}, {102, 48}, 0}, //MX31
+ {{0|(6<<4)}, {102, 0}, 0}, //MX28
+ {{1|(6<<4)}, {102, 16}, 0}, //MX29
+ {{2|(6<<4)}, {102, 32}, 0}, //MX30
+ {{3|(7<<4)}, {119, 48}, 0}, //MX36
+ {{0|(7<<4)}, {119, 0}, 0}, //MX33
+ {{1|(7<<4)}, {119, 16}, 0}, //MX34
+ {{2|(7<<4)}, {119, 32}, 0}, //MX35
+ {{3|(8<<4)}, {136, 48}, 0}, //MX40
+ {{0|(8<<4)}, {136, 0}, 0}, //MX37
+ {{1|(8<<4)}, {136, 16}, 0}, //MX38
+ {{2|(8<<4)}, {136, 32}, 0}, //MX39
+ {{3|(9<<4)}, {153, 48}, 0}, //MX44
+ {{0|(9<<4)}, {153, 0}, 0}, //MX41
+ {{1|(9<<4)}, {153, 16}, 0}, //MX42
+ {{2|(9<<4)}, {153, 32}, 0}, //MX43
+ {{3|(10<<4)}, {170, 48}, 0}, //MX48
+ {{0|(10<<4)}, {170, 0}, 0}, //MX45
+ {{1|(10<<4)}, {170, 16}, 0}, //MX46
+ {{2|(10<<4)}, {170, 32}, 0}, //MX47
+ {{3|(11<<4)}, {187, 48}, 0}, //MX53
+ {{0|(11<<4)}, {187, 0}, 0}, //MX50
+ {{1|(11<<4)}, {187, 16}, 0}, //MX51
+ {{2|(11<<4)}, {187, 32}, 0}, //MX52
+
+ {{0|(12<<4)}, {204, 0}, 0}, //MX55
+ {{1|(12<<4)}, {204, 16}, 0}, //MX56
+
+ {{3|(13<<4)}, {221, 48}, 1}, //MX61
+ {{0|(13<<4)}, {221, 0}, 1}, //MX59
+ {{2|(12<<4)}, {221, 16}, 0}, //MX57
+ {{2|(13<<4)}, {221, 32}, 1}, //MX60
+ {{4|(13<<4)}, {221, 64}, 1}, //MX62
+ {{4|(0<<4)}, { 0, 64}, 1}, //MX5
+ {{4|(1<<4)}, { 17, 64}, 1}, //MX10
+ {{4|(2<<4)}, { 34, 64}, 1}, //MX15
+ {{4|(5<<4)}, {102, 64}, 0}, //MX32
+
+ {{4|(10<<4)}, {170, 64}, 1}, //MX49
+ {{4|(11<<4)}, {187, 64}, 1}, //MX54
+ {{4|(12<<4)}, {204, 64}, 1} //MX58
+};
+
+#elif defined(HS60_HHKB)
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, B_1, A_1, C_1}, //MX1
+ {0, E_1, D_1, F_1}, //MX2
+ {0, H_1, G_1, I_1}, //MX3
+ {0, K_1, J_1, L_1}, //MX4
+ {0, B_2, A_2, C_2}, //MX6
+ {0, E_2, D_2, F_2}, //MX7
+ {0, H_2, G_2, I_2}, //MX8
+ {0, K_2, J_2, L_2}, //MX14
+ {0, B_3, A_3, C_3}, //MX11
+ {0, E_3, D_3, F_3}, //MX12
+ {0, H_3, G_3, I_3}, //MX13
+ {0, K_3, J_3, L_3}, //MX19
+ {0, B_4, A_4, C_4}, //MX16
+ {0, E_4, D_4, F_4}, //MX17
+ {0, H_4, G_4, I_4}, //MX18
+ {0, K_4, J_4, L_4}, //MX23
+ {0, B_5, A_5, C_5}, //MX20
+ {0, E_5, D_5, F_5}, //MX21
+ {0, H_5, G_5, I_5}, //MX22
+ {0, K_5, J_5, L_5}, //MX27
+ {0, B_6, A_6, C_6}, //MX24
+ {0, E_6, D_6, F_6}, //MX25
+ {0, H_6, G_6, I_6}, //MX26
+ {0, K_6, J_6, L_6}, //MX31
+ {0, B_7, A_7, C_7}, //MX28
+ {0, E_7, D_7, F_7}, //MX29
+ {0, H_7, G_7, I_7}, //MX30
+ {0, K_7, J_7, L_7}, //MX36
+ {0, B_8, A_8, C_8}, //MX33
+ {0, E_8, D_8, F_8}, //MX34
+ {0, H_8, G_8, I_8}, //MX35
+ {0, K_8, J_8, L_8}, //MX40
+ {0, B_9, A_9, C_9}, //MX37
+ {0, E_9, D_9, F_9}, //MX38
+ {0, H_9, G_9, I_9}, //MX39
+ {0, K_9, J_9, L_9}, //MX44
+ {0, B_10, A_10, C_10}, //MX41
+ {0, E_10, D_10, F_10}, //MX42
+ {0, H_10, G_10, I_10}, //MX43
+ {0, K_10, J_10, L_10}, //MX48
+ {0, B_11, A_11, C_11}, //MX45
+ {0, E_11, D_11, F_11}, //MX46
+ {0, H_11, G_11, I_11}, //MX47
+ {0, K_11, J_11, L_11}, //MX53
+ {0, B_12, A_12, C_12}, //MX50
+ {0, E_12, D_12, F_12}, //MX51
+ {0, H_12, G_12, I_12}, //MX52
+ {0, K_12, J_12, L_12}, //MX64
+ {0, B_13, A_13, C_13}, //MX55
+ {0, E_13, D_13, F_13}, //MX56
+ {0, H_13, G_13, I_13}, //MX63
+ {0, K_13, J_13, L_13}, //MX61
+ {0, B_14, A_14, C_14}, //MX59
+ {0, E_14, D_14, F_14}, //MX57
+ {0, H_14, G_14, I_14}, //MX60
+ {0, K_14, J_14, L_14}, //MX62
+ {0, B_15, A_15, C_15}, //MX5
+ {0, E_15, D_15, F_15}, //MX10
+ {0, H_15, G_15, I_15}, //MX15
+ {0, K_15, J_15, L_15}, //MX32
+
+
+ {0, H_16, G_16, I_16}, //MX54
+ {0, K_16, J_16, L_16}, //MX58
+};
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+//
+// MX1, MX6, MX11, MX16, MX20, MX24, MX28, MX33, MX37, MX41, MX45, MX50, MX55, MX59,
+// MX2, MX7, MX12, MX17, MX21, MX25, MX29, MX34, MX38, MX42, MX46, MX51, MX56, MX64,
+// MX3, MX8, MX13, MX18, MX22, MX26, MX30, MX35, MX39, MX43, MX47, MX52, MX57, MX60,
+// MX4, ----, MX14, MX19, MX23, MX27, MX31, MX36, MX40, MX44, MX48, MX53, MX63, MX61,
+// MX5, MX10, MX15, ----, ----, ----, MX32, ----, ---, ----, ----, MX54, MX58, MX62
+/* {row | col << 4}
+ * | {x=0..224, y=0..64}
+ * | | modifier
+ * | | | */
+ {{0|(0<<4)}, { 0, 0}, 1}, //MX1
+ {{1|(0<<4)}, { 0, 16}, 1}, //MX2
+ {{2|(0<<4)}, { 0, 32}, 1}, //MX3
+ {{3|(0<<4)}, { 0, 48}, 1}, //MX4
+ {{0|(1<<4)}, { 17, 0}, 0}, //MX6
+ {{1|(1<<4)}, { 17, 16}, 0}, //MX7
+ {{2|(1<<4)}, { 17, 32}, 0}, //MX8
+ {{3|(2<<4)}, { 34, 48}, 0}, //MX14
+ {{0|(2<<4)}, { 34, 0}, 0}, //MX11
+ {{1|(2<<4)}, { 34, 16}, 0}, //MX12
+ {{2|(2<<4)}, { 34, 32}, 0}, //MX13
+ {{3|(3<<4)}, { 51, 48}, 0}, //MX19
+ {{0|(3<<4)}, { 51, 0}, 0}, //MX16
+ {{1|(3<<4)}, { 51, 16}, 0}, //MX17
+ {{2|(3<<4)}, { 51, 32}, 0}, //MX18
+ {{3|(4<<4)}, { 68, 48}, 0}, //MX23
+ {{0|(4<<4)}, { 68, 0}, 0}, //MX20
+ {{1|(4<<4)}, { 68, 16}, 0}, //MX21
+ {{2|(4<<4)}, { 68, 32}, 0}, //MX22
+ {{3|(5<<4)}, { 85, 48}, 0}, //MX27
+ {{0|(5<<4)}, { 85, 0}, 0}, //MX24
+ {{1|(5<<4)}, { 85, 16}, 0}, //MX25
+ {{2|(5<<4)}, { 85, 32}, 0}, //MX26
+ {{3|(6<<4)}, {102, 48}, 0}, //MX31
+ {{0|(6<<4)}, {102, 0}, 0}, //MX28
+ {{1|(6<<4)}, {102, 16}, 0}, //MX29
+ {{2|(6<<4)}, {102, 32}, 0}, //MX30
+ {{3|(7<<4)}, {119, 48}, 0}, //MX36
+ {{0|(7<<4)}, {119, 0}, 0}, //MX33
+ {{1|(7<<4)}, {119, 16}, 0}, //MX34
+ {{2|(7<<4)}, {119, 32}, 0}, //MX35
+ {{3|(8<<4)}, {136, 48}, 0}, //MX40
+ {{0|(8<<4)}, {136, 0}, 0}, //MX37
+ {{1|(8<<4)}, {136, 16}, 0}, //MX38
+ {{2|(8<<4)}, {136, 32}, 0}, //MX39
+ {{3|(9<<4)}, {153, 48}, 0}, //MX44
+ {{0|(9<<4)}, {153, 0}, 0}, //MX41
+ {{1|(9<<4)}, {153, 16}, 0}, //MX42
+ {{2|(9<<4)}, {153, 32}, 0}, //MX43
+ {{3|(10<<4)}, {170, 48}, 0}, //MX48
+ {{0|(10<<4)}, {170, 0}, 0}, //MX45
+ {{1|(10<<4)}, {170, 16}, 0}, //MX46
+ {{2|(10<<4)}, {170, 32}, 0}, //MX47
+ {{3|(11<<4)}, {187, 48}, 0}, //MX53
+ {{0|(11<<4)}, {187, 0}, 0}, //MX50
+ {{1|(11<<4)}, {187, 16}, 0}, //MX51
+ {{2|(11<<4)}, {187, 32}, 0}, //MX52
+ {{1|(13<<4)}, {221, 0}, 1}, //MX64
+ {{0|(12<<4)}, {204, 0}, 0}, //MX55
+ {{1|(12<<4)}, {204, 16}, 0}, //MX56
+ {{3|(12<<4)}, {204, 48}, 0}, //MX63
+ {{3|(13<<4)}, {212, 48}, 1}, //MX61
+ {{0|(13<<4)}, {221, 0}, 0}, //MX59
+ {{2|(12<<4)}, {221, 16}, 0}, //MX57
+ {{2|(13<<4)}, {221, 32}, 1}, //MX60
+ {{4|(13<<4)}, {221, 64}, 1}, //MX62
+ {{4|(0<<4)}, { 0, 64}, 1}, //MX5
+ {{4|(1<<4)}, { 17, 64}, 1}, //MX10
+ {{4|(2<<4)}, { 34, 64}, 1}, //MX15
+ {{4|(5<<4)}, {102, 64}, 0}, //MX32
+
+
+ {{4|(11<<4)}, {187, 64}, 1}, //MX54
+ {{4|(12<<4)}, {204, 64}, 1} //MX58
+};
+
+#else //ISO layout
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, B_1, A_1, C_1}, //MX1
+ {0, E_1, D_1, F_1}, //MX2
+ {0, H_1, G_1, I_1}, //MX3
+ {0, K_1, J_1, L_1}, //MX4
+ {0, B_2, A_2, C_2}, //MX6
+ {0, E_2, D_2, F_2}, //MX7
+ {0, H_2, G_2, I_2}, //MX8
+ {0, K_2, J_2, L_2}, //MX14
+ {0, B_3, A_3, C_3}, //MX11
+ {0, E_3, D_3, F_3}, //MX12
+ {0, H_3, G_3, I_3}, //MX13
+ {0, K_3, J_3, L_3}, //MX19
+ {0, B_4, A_4, C_4}, //MX16
+ {0, E_4, D_4, F_4}, //MX17
+ {0, H_4, G_4, I_4}, //MX18
+ {0, K_4, J_4, L_4}, //MX23
+ {0, B_5, A_5, C_5}, //MX20
+ {0, E_5, D_5, F_5}, //MX21
+ {0, H_5, G_5, I_5}, //MX22
+ {0, K_5, J_5, L_5}, //MX27
+ {0, B_6, A_6, C_6}, //MX24
+ {0, E_6, D_6, F_6}, //MX25
+ {0, H_6, G_6, I_6}, //MX26
+ {0, K_6, J_6, L_6}, //MX31
+ {0, B_7, A_7, C_7}, //MX28
+ {0, E_7, D_7, F_7}, //MX29
+ {0, H_7, G_7, I_7}, //MX30
+ {0, K_7, J_7, L_7}, //MX36
+ {0, B_8, A_8, C_8}, //MX33
+ {0, E_8, D_8, F_8}, //MX34
+ {0, H_8, G_8, I_8}, //MX35
+ {0, K_8, J_8, L_8}, //MX40
+ {0, B_9, A_9, C_9}, //MX37
+ {0, E_9, D_9, F_9}, //MX38
+ {0, H_9, G_9, I_9}, //MX39
+ {0, K_9, J_9, L_9}, //MX44
+ {0, B_10, A_10, C_10}, //MX41
+ {0, E_10, D_10, F_10}, //MX42
+ {0, H_10, G_10, I_10}, //MX43
+ {0, K_10, J_10, L_10}, //MX48
+ {0, B_11, A_11, C_11}, //MX45
+ {0, E_11, D_11, F_11}, //MX46
+ {0, H_11, G_11, I_11}, //MX47
+ {0, K_11, J_11, L_11}, //MX53
+ {0, B_12, A_12, C_12}, //MX50
+ {0, E_12, D_12, F_12}, //MX51
+ {0, H_12, G_12, I_12}, //MX52
+ {0, K_12, J_12, L_12}, //MX9
+ {0, B_13, A_13, C_13}, //MX55
+ {0, E_13, D_13, F_13}, //MX56
+
+ {0, K_13, J_13, L_13}, //MX61
+ {0, B_14, A_14, C_14}, //MX59
+ {0, E_14, D_14, F_14}, //MX57
+ {0, H_14, G_14, I_14}, //MX60
+ {0, K_14, J_14, L_14}, //MX62
+ {0, B_15, A_15, C_15}, //MX5
+ {0, E_15, D_15, F_15}, //MX10
+ {0, H_15, G_15, I_15}, //MX15
+ {0, K_15, J_15, L_15}, //MX32
+
+ {0, E_16, D_16, F_16}, //MX49
+ {0, H_16, G_16, I_16}, //MX54
+ {0, K_16, J_16, L_16}, //MX58
+};
+
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+//
+// MX1, MX6, MX11, MX16, MX20, MX24, MX28, MX33, MX37, MX41, MX45, MX50, MX55, MX59,
+// MX2, MX7, MX12, MX17, MX21, MX25, MX29, MX34, MX38, MX42, MX46, MX51, MX56, ---,
+// MX3, MX8, MX13, MX18, MX22, MX26, MX30, MX35, MX39, MX43, MX47, MX52, MX57, MX60,
+// MX4, ---, MX14, MX19, MX23, MX27, MX31, MX36, MX40, MX44, MX48, MX53, ---, MX61,
+// MX5, MX10, MX15, ---, ---, ---, MX32, ---, ---, ---, MX49, MX54, MX58, MX62
+/* {row | col << 4}
+ * | {x=0..224, y=0..64}
+ * | | modifier
+ * | | | */
+ {{0|(0<<4)}, { 0, 0}, 1}, //MX1
+ {{1|(0<<4)}, { 0, 16}, 1}, //MX2
+ {{2|(0<<4)}, { 0, 32}, 1}, //MX3
+ {{3|(0<<4)}, { 0, 48}, 1}, //MX4
+ {{0|(1<<4)}, { 17, 0}, 0}, //MX6
+ {{1|(1<<4)}, { 17, 16}, 0}, //MX7
+ {{2|(1<<4)}, { 17, 32}, 0}, //MX8
+ {{3|(2<<4)}, { 34, 48}, 0}, //MX14
+ {{0|(2<<4)}, { 34, 0}, 0}, //MX11
+ {{1|(2<<4)}, { 34, 16}, 0}, //MX12
+ {{2|(2<<4)}, { 34, 32}, 0}, //MX13
+ {{3|(3<<4)}, { 51, 48}, 0}, //MX19
+ {{0|(3<<4)}, { 51, 0}, 0}, //MX16
+ {{1|(3<<4)}, { 51, 16}, 0}, //MX17
+ {{2|(3<<4)}, { 51, 32}, 0}, //MX18
+ {{3|(4<<4)}, { 68, 48}, 0}, //MX23
+ {{0|(4<<4)}, { 68, 0}, 0}, //MX20
+ {{1|(4<<4)}, { 68, 16}, 0}, //MX21
+ {{2|(4<<4)}, { 68, 32}, 0}, //MX22
+ {{3|(5<<4)}, { 85, 48}, 0}, //MX27
+ {{0|(5<<4)}, { 85, 0}, 0}, //MX24
+ {{1|(5<<4)}, { 85, 16}, 0}, //MX25
+ {{2|(5<<4)}, { 85, 32}, 0}, //MX26
+ {{3|(6<<4)}, {102, 48}, 0}, //MX31
+ {{0|(6<<4)}, {102, 0}, 0}, //MX28
+ {{1|(6<<4)}, {102, 16}, 0}, //MX29
+ {{2|(6<<4)}, {102, 32}, 0}, //MX30
+ {{3|(7<<4)}, {119, 48}, 0}, //MX36
+ {{0|(7<<4)}, {119, 0}, 0}, //MX33
+ {{1|(7<<4)}, {119, 16}, 0}, //MX34
+ {{2|(7<<4)}, {119, 32}, 0}, //MX35
+ {{3|(8<<4)}, {136, 48}, 0}, //MX40
+ {{0|(8<<4)}, {136, 0}, 0}, //MX37
+ {{1|(8<<4)}, {136, 16}, 0}, //MX38
+ {{2|(8<<4)}, {136, 32}, 0}, //MX39
+ {{3|(9<<4)}, {153, 48}, 0}, //MX44
+ {{0|(9<<4)}, {153, 0}, 0}, //MX41
+ {{1|(9<<4)}, {153, 16}, 0}, //MX42
+ {{2|(9<<4)}, {153, 32}, 0}, //MX43
+ {{3|(10<<4)}, {170, 48}, 0}, //MX48
+ {{0|(10<<4)}, {170, 0}, 0}, //MX45
+ {{1|(10<<4)}, {170, 16}, 0}, //MX46
+ {{2|(10<<4)}, {170, 32}, 0}, //MX47
+ {{3|(11<<4)}, {187, 48}, 0}, //MX53
+ {{0|(11<<4)}, {187, 0}, 0}, //MX50
+ {{1|(11<<4)}, {187, 16}, 0}, //MX51
+ {{2|(11<<4)}, {187, 32}, 0}, //MX52
+ {{3|(2<<4)}, { 17, 32}, 1}, //MX9
+ {{0|(12<<4)}, {204, 0}, 0}, //MX55
+ {{1|(12<<4)}, {204, 16}, 0}, //MX56
+
+ {{3|(13<<4)}, {221, 48}, 1}, //MX61
+ {{0|(13<<4)}, {221, 0}, 1}, //MX59
+ {{2|(12<<4)}, {204, 32}, 0}, //MX57
+ {{2|(13<<4)}, {221, 24}, 1}, //MX60
+ {{4|(13<<4)}, {221, 64}, 1}, //MX62
+ {{4|(0<<4)}, { 0, 64}, 1}, //MX5
+ {{4|(1<<4)}, { 17, 64}, 1}, //MX10
+ {{4|(2<<4)}, { 34, 64}, 1}, //MX15
+ {{4|(5<<4)}, {102, 64}, 0}, //MX32
+
+ {{4|(10<<4)}, {170, 64}, 1}, //MX49
+ {{4|(11<<4)}, {187, 64}, 1}, //MX54
+ {{4|(12<<4)}, {204, 64}, 1} //MX58
+};
+
+#endif
+
+void bootmagic_lite(void)
+{
+ // The lite version of TMK's bootmagic made by Wilba.
+ // 100% less potential for accidentally making the
+ // keyboard do stupid things.
+
+ // We need multiple scans because debouncing can't be turned off.
+ matrix_scan();
+ wait_ms(10);
+ matrix_scan();
+
+ // If the Esc and space bar are held down on power up,
+ // reset the EEPROM valid state and jump to bootloader.
+ // Assumes Esc is at [0,0] and spacebar is at [4,6].
+ // This isn't very generalized, but we need something that doesn't
+ // rely on user's keymaps in firmware or EEPROM.
+ if ( ( matrix_get_row(0) & (1<<0) ) &&
+ ( matrix_get_row(4) & (1<<6) ) )
+ {
+ // Set the TMK/QMK EEPROM state as invalid.
+ eeconfig_disable();
+ //eeprom_set_valid(false);
+ // Jump to bootloader.
+ bootloader_jump();
+ }
+}
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ bootmagic_lite();
+
+ // Please ignore this is for upcoming features
+ // If the EEPROM has the magic, the data is good.
+ // OK to load from EEPROM.
+ /*if (eeprom_is_valid())
+ {
+ backlight_config_load();
+
+ // TODO: do something to "turn on" keymaps in EEPROM?
+ }
+ else
+ {
+ // If the EEPROM has not been saved before, or is out of date,
+ // save the default values to the EEPROM. Default values
+ // come from construction of the zeal_backlight_config instance.
+ backlight_config_save();
+
+ // Clear the LED colors stored in EEPROM
+ for ( int row=0; row < MATRIX_ROWS; row++ )
+ {
+ HSV hsv;
+ for ( int column=0; column < MATRIX_COLS; column++ )
+ {
+ hsv.h = rand() & 0xFF;
+ hsv.s = rand() & 0x7F;
+ hsv.v = 255;
+ backlight_set_key_color( row, column, hsv );
+ }
+ }
+ #ifdef USE_KEYMAPS_IN_EEPROM
+ keymap_default_save();
+ #endif
+ // Save the magic number last, in case saving was interrupted
+ eeprom_set_valid(true);
+ }*/
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ //backlight_set_indicator_state(usb_led);
+} \ No newline at end of file
diff --git a/keyboards/hs60/v2/v2.h b/keyboards/hs60/v2/v2.h
new file mode 100644
index 000000000..86aeb68a7
--- /dev/null
+++ b/keyboards/hs60/v2/v2.h
@@ -0,0 +1,67 @@
+/* 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/>.
+ */
+#ifndef HS60_H
+#define HS60_H
+
+#define XXX KC_NO
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+
+#define LAYOUT_60_iso( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K41, K42, 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, XXX }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, XXX, K3D }, \
+ { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, 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, 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, XXX }, \
+ { 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, XXX, K3D }, \
+ { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_hhkb( \
+ 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, 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, XXX, K4B, K4C, K4D } \
+}
+
+#endif \ No newline at end of file
diff --git a/keyboards/idobo/config.h b/keyboards/idobo/config.h
new file mode 100644
index 000000000..f6b552bad
--- /dev/null
+++ b/keyboards/idobo/config.h
@@ -0,0 +1,227 @@
+/*
+Copyright 2018 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER You
+#define PRODUCT idobo
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B0, B3, C7, B6, C6 }
+#define MATRIX_COL_PINS { F6, F5, F4, F1, E6, D5, D3, D2, D1, D0, D4, D6, D7, B4, B5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN F0
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 16
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/idobo/idobo.c b/keyboards/idobo/idobo.c
new file mode 100644
index 000000000..3f870835e
--- /dev/null
+++ b/keyboards/idobo/idobo.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "idobo.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/idobo/idobo.h b/keyboards/idobo/idobo.h
new file mode 100644
index 000000000..386fcee1a
--- /dev/null
+++ b/keyboards/idobo/idobo.h
@@ -0,0 +1,44 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef IDOBO_H
+#define IDOBO_H
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_ortho_5x15( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E }, \
+}
+
+#endif
diff --git a/keyboards/idobo/info.json b/keyboards/idobo/info.json
new file mode 100644
index 000000000..69c5e4e06
--- /dev/null
+++ b/keyboards/idobo/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "IDOBO",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ortho_5x15": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/idobo/keymaps/default/config.h b/keyboards/idobo/keymaps/default/config.h
new file mode 100644
index 000000000..a3ed4f762
--- /dev/null
+++ b/keyboards/idobo/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/idobo/keymaps/default/keymap.c b/keyboards/idobo/keymaps/default/keymap.c
new file mode 100644
index 000000000..f54e3359b
--- /dev/null
+++ b/keyboards/idobo/keymaps/default/keymap.c
@@ -0,0 +1,66 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#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_ortho_5x15( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_ENT, KC_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, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RCTL, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/idobo/keymaps/default/readme.md b/keyboards/idobo/keymaps/default/readme.md
new file mode 100644
index 000000000..577c62b51
--- /dev/null
+++ b/keyboards/idobo/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for idobo
diff --git a/keyboards/idobo/keymaps/default75/config.h b/keyboards/idobo/keymaps/default75/config.h
new file mode 100644
index 000000000..17c7addb3
--- /dev/null
+++ b/keyboards/idobo/keymaps/default75/config.h
@@ -0,0 +1,21 @@
+/* Copyright 2017 Benjamin Kesselring
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/idobo/keymaps/default75/keymap.c b/keyboards/idobo/keymaps/default75/keymap.c
new file mode 100644
index 000000000..d607e11f6
--- /dev/null
+++ b/keyboards/idobo/keymaps/default75/keymap.c
@@ -0,0 +1,67 @@
+/* Copyright 2018 Milton Griffin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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
+
+// Keyboard Layers
+#define _QW 0
+#define _FN 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | - | ` | = | 6 | 7 | 8 | 9 | 0 | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | [ | \ | ] | Y | U | I | O | P | ' |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | HOME | DEL | PG UP | H | J | K | L | ; | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | END | UP | PG DN | N | M | , | . | / | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL | LGUI | LALT | FN | SPACE | SPACE | LEFT | DOWN | RIGHT | SPACE | SPACE | FN | RALT | RGUI | RCTRL |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW] = LAYOUT_ortho_5x15( /* QWERTY */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_GRV, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_BSLS, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_DEL, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_UP, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, MO(_FN), KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC, KC_SPC, MO(_FN), KC_RALT, KC_RGUI, KC_RCTL \
+ ),
+
+/* FUNCTION
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | NUM LK | P/ | P* | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | SELECT | CALC | MYCOMP | MAIL | RGB HD | RGB HI | P7 | P8 | P9 | - | | | PR SCR | SCR LK | PAUSE |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | PREV | PLAY | NEXT | STOP | RGB SD | RGB SI | P4 | P5 | P6 | + | | RESET | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | VOL- | MUTE | VOL+ | APP | RGB VD | RGB VI | P1 | P2 | P3 | PENT | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | RGB TG | FN | RGB RMD| RGB MD | P0 | | P. | PENT | PENT | FN | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_FN] = LAYOUT_ortho_5x15( /* FUNCTION */
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_NLCK, KC_SLSH, KC_ASTR, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ KC_MSEL, KC_CALC, KC_MYCM, KC_MAIL, RGB_HUD, RGB_HUI, KC_P7, KC_P8, KC_P9, KC_MINS, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, \
+ KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP, RGB_SAD, RGB_SAI, KC_P4, KC_P5, KC_P6, KC_PLUS, _______, RESET, _______, _______, _______, \
+ KC_VOLD, KC_MUTE, KC_VOLU, KC_APP, RGB_VAD, RGB_VAI, KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______, _______, _______, _______, \
+ _______, _______, RGB_TOG, MO(_FN), RGB_RMOD,RGB_MOD, KC_P0, _______, KC_PDOT, KC_PENT, KC_PENT, MO(_FN), _______, _______, _______ \
+ ),
+};
diff --git a/keyboards/idobo/keymaps/default75/readme.md b/keyboards/idobo/keymaps/default75/readme.md
new file mode 100644
index 000000000..a1c0236ed
--- /dev/null
+++ b/keyboards/idobo/keymaps/default75/readme.md
@@ -0,0 +1 @@
+# The default keymap for xd75, with led controls \ No newline at end of file
diff --git a/keyboards/idobo/keymaps/default75/rules.mk b/keyboards/idobo/keymaps/default75/rules.mk
new file mode 100644
index 000000000..7efceba50
--- /dev/null
+++ b/keyboards/idobo/keymaps/default75/rules.mk
@@ -0,0 +1,14 @@
+# Copyright 2013 Jun Wako <wakojun@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/keyboards/idobo/keymaps/revok75/config.h b/keyboards/idobo/keymaps/revok75/config.h
new file mode 100644
index 000000000..f5c465988
--- /dev/null
+++ b/keyboards/idobo/keymaps/revok75/config.h
@@ -0,0 +1,15 @@
+/* Copyright 2017 Benjamin Kesselring
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
diff --git a/keyboards/idobo/keymaps/revok75/keymap.c b/keyboards/idobo/keymaps/revok75/keymap.c
new file mode 100644
index 000000000..a38024032
--- /dev/null
+++ b/keyboards/idobo/keymaps/revok75/keymap.c
@@ -0,0 +1,90 @@
+/* Copyright 2017 Wunder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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
+
+// Layer shorthand
+#define _QW_M 0
+#define _QW_W 1
+#define _FN 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* QWERTY-Mac
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | % | 6 | 7 | 8 | 9 | 0 | - | = | Cut | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | Copy | Paste |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | ENTER | REF |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | \ | RSHIFT| UP | SAVE |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LALT | LGUI | LALT | FIND | CMD T | SPACE | SPACE | ALFRED | FN-MO | RALT | RGUI | RCTRL | LEFT | DOWN | RIGHT |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW_M] = LAYOUT_ortho_5x15( /* QWERTY MAC*/
+ 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, LGUI(KC_X), 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_LCBR, KC_RCBR, LGUI(KC_C), LGUI(KC_V), \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, LGUI(KC_R), KC_NO, 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_BSLS, KC_RSFT, KC_UP, LGUI(KC_S), \
+ KC_LCTL, KC_LALT, KC_LGUI, LGUI(KC_F), LGUI(KC_T), KC_SPC, KC_NO, LALT(KC_SPACE), MO(_FN), KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+ /* QWERTY-Win
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | % | 6 | 7 | 8 | 9 | 0 | - | = | Cut | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | Copy | Paste |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | ENTER | REF |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | \ | RSHIFT | UP | SAVE |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LALT | LGUI | LALT | FIND | CMD T | SPACE | SPACE | START | FN-MO | RALT | RGUI | RCTRL | LEFT | DOWN | RIGHT |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW_W] = LAYOUT_ortho_5x15( /* QWERTY WIN*/
+ 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, LCTL(KC_X), 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_LCBR, KC_RCBR, LCTL(KC_C), LCTL(KC_V), \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, LCTL(KC_R), KC_NO, 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_BSLS, KC_RSFT, KC_UP, LCTL(KC_S), \
+ KC_LCTL, KC_LALT, KC_LGUI, LCTL(KC_F), LCTL(KC_T), KC_SPC, KC_NO, LCTL(KC_GESC), MO(_FN), KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+ /* FUNCTION
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | VOLDN | VOLUP | MUTE | DEL |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | - | WIN | - | - | RGB_TOG| - | - | OPTION | RESET | - | [ | ] | - | - |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | MAC | RAINBOW| PLAIN | - | - | - | - | - | - | ; | ' | ENTER | ENTER | REF |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | INC | DEC | HUE I | HUE D | SAT I | SAT D | - | - | . | / | \ | RSHIFT| HOME | SAVE |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LALT | LGUI | LALT | FIND | CMD T | SPACE | SPACE | ALFRED | FN-MO | RALT | RGUI | RCTRL | PGUP | END | PGDN |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_FN] = LAYOUT_ortho_5x15( /* OSLAYOUT + NUMPAD + MEDIA + LIGHTING */
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_VOLD, KC_VOLU, KC_MUTE, KC_DEL, \
+ KC_TRNS, KC_NO, DF(_QW_W), KC_NO, KC_NO, RGB_TOG, KC_NO, KC_NO, KC_RALT, RESET, KC_NO, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, \
+ KC_TRNS, DF(_QW_M), RGB_MODE_RAINBOW, RGB_MODE_PLAIN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_NO, KC_NO, KC_DOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_END, KC_PGDN \
+ ),
+};
diff --git a/keyboards/idobo/keymaps/revok75/readme.md b/keyboards/idobo/keymaps/revok75/readme.md
new file mode 100644
index 000000000..780c5401c
--- /dev/null
+++ b/keyboards/idobo/keymaps/revok75/readme.md
@@ -0,0 +1 @@
+# The default keymap for Revok 75 --idobo version
diff --git a/keyboards/idobo/keymaps/revok75/rules.mk b/keyboards/idobo/keymaps/revok75/rules.mk
new file mode 100644
index 000000000..7efceba50
--- /dev/null
+++ b/keyboards/idobo/keymaps/revok75/rules.mk
@@ -0,0 +1,14 @@
+# Copyright 2013 Jun Wako <wakojun@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
diff --git a/keyboards/idobo/keymaps/xaceofspaidsx/config.h b/keyboards/idobo/keymaps/xaceofspaidsx/config.h
new file mode 100644
index 000000000..a3ed4f762
--- /dev/null
+++ b/keyboards/idobo/keymaps/xaceofspaidsx/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/idobo/keymaps/xaceofspaidsx/keymap.c b/keyboards/idobo/keymaps/xaceofspaidsx/keymap.c
new file mode 100644
index 000000000..c157317e2
--- /dev/null
+++ b/keyboards/idobo/keymaps/xaceofspaidsx/keymap.c
@@ -0,0 +1,67 @@
+/* Copyright 2018 xAceOfSpaidsx
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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
+
+// Layer shorthand
+#define _QW 0
+#define _FN 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY - based off xd75 default map with a couple modifications for my preference
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | F2 | ` | F5 | 6 | 7 | 8 | 9 | 0 | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | - | \ | = | Y | U | I | O | P | ' |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | HOME | DEL | PG UP | H | J | K | L | ; | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | END | UP | PG DN | N | M | , | . | / | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL | LGUI | LALT | FN | SPACE | SPACE | LEFT | DOWN | RIGHT | [ | ] | FN | RALT | RGUI | RCTRL |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW] = LAYOUT_ortho_5x15( /* QWERTY */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F2, KC_GRV, KC_F5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_MINS, KC_BSLS, KC_EQL, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_DEL, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_UP, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, MO(_FN), KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_LBRC, KC_RBRC, MO(_FN), KC_RALT, KC_RGUI, KC_RCTL \
+ ),
+
+/* FUNCTION Layer - removed the rgb hue saturation and vibrance for audio controls and added some functionality I use from other boards.
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | NUM LK | P/ | P* | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | SELECT | CALC | UP | | | NEXT | P7 | P8 | P9 | - | | | PR SCR | SCR LK | PAUSE |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | PREV | LEFT | DOWN | RIGHT | DEL | PLAY | P4 | P5 | P6 | + | | RESET | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | VOL- | MUTE | VOL+ | APP | | STOP | P1 | P2 | P3 | PENT | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | RGB TG | FN | RGB RMD| RGB MD | P0 | | P. | PENT | PENT | FN | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_FN] = LAYOUT_ortho_5x15( /* FUNCTION */
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_NLCK, KC_SLSH, KC_ASTR, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ KC_MSEL, KC_CALC, KC_UP , _______, _______, KC_MNXT, KC_P7, KC_P8, KC_P9, KC_MINS, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, \
+ KC_MPRV, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL , KC_MPLY, KC_P4, KC_P5, KC_P6, KC_PLUS, _______, RESET, _______, _______, _______, \
+ KC_VOLD, KC_MUTE, KC_VOLU, KC_APP, _______, KC_MSTP, KC_P1, KC_P2, KC_P3, KC_PENT, _______, _______, _______, _______, _______, \
+ _______, _______, RGB_TOG, MO(_FN), RGB_RMOD,RGB_MOD, KC_P0, _______, KC_PDOT, KC_PENT, KC_PENT, MO(_FN), _______, _______, _______ \
+ ),
+};
diff --git a/keyboards/idobo/keymaps/xaceofspaidsx/readme.md b/keyboards/idobo/keymaps/xaceofspaidsx/readme.md
new file mode 100644
index 000000000..ac6e74702
--- /dev/null
+++ b/keyboards/idobo/keymaps/xaceofspaidsx/readme.md
@@ -0,0 +1 @@
+# Updated the keymap, based off XD75 default, to meet my needs. Refer to rules.mk to enable or disable rgb and other features.
diff --git a/keyboards/idobo/keymaps/xaceofspaidsx/rules.mk b/keyboards/idobo/keymaps/xaceofspaidsx/rules.mk
new file mode 100644
index 000000000..b973e9d8b
--- /dev/null
+++ b/keyboards/idobo/keymaps/xaceofspaidsx/rules.mk
@@ -0,0 +1,19 @@
+# Copyright 2013 Jun Wako <wakojun@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+#Had to disable the first 2 to get the firmware size down enough after enabling the rgb controls.
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+COMMAND_ENABLE = no # Commands for debug and configuration
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
diff --git a/keyboards/idobo/readme.md b/keyboards/idobo/readme.md
new file mode 100644
index 000000000..7f2c68446
--- /dev/null
+++ b/keyboards/idobo/readme.md
@@ -0,0 +1,17 @@
+# IDOBO
+
+![IDOBO](imgur.com image replace me!)
+
+75Keys Aluminum Mechanical Keyboard.
+
+Firmware here originally appeared on qmkeyboard.cn
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: IDOBO PCB
+Hardware Availability: [IDOBO on Massdrop](https://www.massdrop.com/buy/xd75-aluminum-mechanical-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make idobo: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/idobo/rules.mk b/keyboards/idobo/rules.mk
new file mode 100644
index 000000000..246d152c9
--- /dev/null
+++ b/keyboards/idobo/rules.mk
@@ -0,0 +1,83 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = 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_5x15
diff --git a/keyboards/infinity60/config.h b/keyboards/infinity60/config.h
index 8306c8f7e..c1e9ec5b1 100644
--- a/keyboards/infinity60/config.h
+++ b/keyboards/infinity60/config.h
@@ -18,8 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef CONFIG_H
#define CONFIG_H
-#define PREVENT_STUCK_MODIFIERS
-
/* USB Device descriptor parameter */
#define VENDOR_ID 0x1c11
#define PRODUCT_ID 0xb04d
diff --git a/keyboards/infinity60/infinity60.h b/keyboards/infinity60/infinity60.h
index 21b8eeba2..a71921045 100644
--- a/keyboards/infinity60/infinity60.h
+++ b/keyboards/infinity60/infinity60.h
@@ -14,16 +14,14 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef KEYMAP_COMMON_H
-#define KEYMAP_COMMON_H
+#pragma once
#include "quantum.h"
-#define LAYOUT_60_ansi_split_bs_rshift KEYMAP
-
#ifdef INFINITY_PROTOTYPE
+
/* Infinity prototype */
-#define KEYMAP( \
+#define LAYOUT_60_ansi_split_bs_rshift( \
K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K86, \
K51, K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, \
K13, K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, \
@@ -44,7 +42,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#else
/* Infinity production */
-#define KEYMAP( \
+#define LAYOUT_60_ansi_split_bs_rshift( \
K00, K10, K20, K30, K40, K50, K60, K70, K80, K01, K11, K21, K31, K41, K51, \
K61, K71, K81, K02, K12, K22, K32, K42, K52, K62, K72, K82, K03, K13, \
K23, K33, K43, K53, K63, K73, K83, K04, K14, K24, K34, K44, K54, \
@@ -64,4 +62,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#endif
-#endif
diff --git a/keyboards/infinity60/info.json b/keyboards/infinity60/info.json
new file mode 100644
index 000000000..06df911e5
--- /dev/null
+++ b/keyboards/infinity60/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "Infinity 60%",
+ "keyboard_folder": "infinity60",
+ "url": "https://input.club/devices/infinity-keyboard/",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "key_count": 63,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"-", "x":11, "y":0},
+ {"label":"=", "x":12, "y":0},
+ {"label":"\\", "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":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":";", "x":10.75, "y":2},
+ {"label":"'", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":",", "x":9.25, "y":3},
+ {"label":".", "x":10.25, "y":3},
+ {"label":"/", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"Fn", "x":14, "y":3},
+ {"label":"Ctrl", "x":0, "y":4, "w":1.5},
+ {"label":"GUI", "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":"GUI", "x":11.5, "y":4},
+ {"label":"Fn", "x":12.5, "y":4},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/infinity60/keymaps/default/keymap.c b/keyboards/infinity60/keymaps/default/keymap.c
index 8347c94b4..5d310e3b2 100644
--- a/keyboards/infinity60/keymaps/default/keymap.c
+++ b/keyboards/infinity60/keymaps/default/keymap.c
@@ -1,11 +1,11 @@
-#include "infinity60.h"
+#include QMK_KEYBOARD_H
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer
* ,-----------------------------------------------------------.
- * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| `|BSp|
+ * |Esc| 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| [| ]| Bksp|
* |-----------------------------------------------------------|
* |Contro| A| S| D| F| G| H| J| K| L| ;| '|Enter |
* |-----------------------------------------------------------|
@@ -14,7 +14,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | |Gui|Alt | Space |Alt |Gui| | |
* `-----------------------------------------------------------'
*/
- [0] = KEYMAP(
+ [0] = LAYOUT_60_ansi_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS, KC_GRV, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \
KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT, \
@@ -34,7 +34,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | |Gui|Alt | Space |Alt |Gui| | |
* `-----------------------------------------------------------'
*/
- [1] = KEYMAP(
+ [1] = LAYOUT_60_ansi_split_bs_rshift(
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS, KC_BSPC, \
KC_TRNS,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_PENT, \
diff --git a/keyboards/infinity60/keymaps/depariel/keymap.c b/keyboards/infinity60/keymaps/depariel/keymap.c
index 57f9487f2..d1a1a04a4 100755
--- a/keyboards/infinity60/keymaps/depariel/keymap.c
+++ b/keyboards/infinity60/keymaps/depariel/keymap.c
@@ -1,4 +1,4 @@
-#include "infinity60.h"
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer
@@ -14,7 +14,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Fn2 |Gui |Alt | Space |RAlt|Prv|PlPs|Next|
* `-----------------------------------------------------------'
*/
- [0] = KEYMAP(
+ [0] = LAYOUT_60_ansi_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, LT(5, KC_ENT), \
@@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 1: "Toggle" off SpaceFn for League of Legends
*/
- [1] = KEYMAP(
+ [1] = LAYOUT_60_ansi_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
@@ -32,7 +32,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 2: "Toggle" off SpaceFn for MapleRoyals
*/
- [2] = KEYMAP(
+ [2] = LAYOUT_60_ansi_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 3: FN layer 1
*/
- [3] = KEYMAP(
+ [3] = LAYOUT_60_ansi_split_bs_rshift(
KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NO, KC_NO, \
KC_NO, KC_BTN1, KC_MS_U, KC_BTN2, LALT(KC_F4), KC_HOME, KC_PGUP, KC_PSCR, KC_SLCK, KC_UP, KC_NO, KC_LPRN, KC_RPRN, KC_DEL, \
MO(6), KC_MS_L, KC_MS_D, KC_MS_R, KC_NO, KC_END, KC_PGDN, KC_TILD, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, \
@@ -50,7 +50,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 4: FN layer 2
*/
- [4] = KEYMAP(
+ [4] = LAYOUT_60_ansi_split_bs_rshift(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PMNS, KC_PPLS, KC_PSLS, TG(2), \
KC_CAPS, KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR, KC_NO, KC_P7, KC_P8, KC_P9, KC_PAST, KC_BSPC, \
KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_P4, KC_P5, KC_P6, KC_PENT, \
@@ -59,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 5: FN layer 3
*/
- [5] = KEYMAP(
+ [5] = LAYOUT_60_ansi_split_bs_rshift(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
KC_TAB , KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F13, KC_F14, KC_F15, KC_F16, KC_NO, KC_TRNS, \
KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F17, KC_F18, KC_F19, KC_F20, LT(5, KC_ENT), \
@@ -68,7 +68,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 6: FN layer 4
*/
- [6] = KEYMAP(
+ [6] = LAYOUT_60_ansi_split_bs_rshift(
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
LCTL(LSFT(KC_TAB)), KC_NO, LGUI(KC_UP), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
MO(6), LGUI(KC_LEFT), LGUI(KC_DOWN), LGUI(KC_RGHT), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
diff --git a/keyboards/infinity60/keymaps/hasu/keymap.c b/keyboards/infinity60/keymaps/hasu/keymap.c
index 9982078c1..ec0d32183 100644
--- a/keyboards/infinity60/keymaps/hasu/keymap.c
+++ b/keyboards/infinity60/keymaps/hasu/keymap.c
@@ -1,4 +1,4 @@
-#include "infinity60.h"
+#include QMK_KEYBOARD_H
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0: Default Layer
@@ -14,7 +14,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | |Gui|Alt | Space |Alt |Gui| | |
* `-----------------------------------------------------------'
*/
- [0] = KEYMAP(
+ [0] = LAYOUT_60_ansi_split_bs_rshift(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_GRV, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \
KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_SCLN), KC_QUOT,MT(KC_RCTL, KC_ENT), \
@@ -34,7 +34,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | |Gui|Alt | Space |Alt |Gui| | |
* `-----------------------------------------------------------'
*/
- [1] = KEYMAP(
+ [1] = LAYOUT_60_ansi_split_bs_rshift(
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
KC_CAPS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP, KC_TRNS,KC_BSPC, \
KC_LCTL,KC_VOLD,KC_VOLU,KC_MUTE,KC_TRNS,KC_TRNS,KC_PAST,KC_PSLS,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT,KC_ENT, \
@@ -54,7 +54,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |Gui|Alt | Space |Alt |Gui|
* `-------------------------------------------'
*/
- [2] = KEYMAP(
+ [2] = LAYOUT_60_ansi_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
KC_TAB, KC_HOME,KC_PGDN,KC_UP, KC_PGUP,KC_END, KC_HOME,KC_PGDN,KC_PGUP,KC_END, KC_NO, KC_NO, KC_NO, KC_BSPC, \
KC_LCTL,KC_NO, KC_LEFT,KC_DOWN,KC_RGHT,KC_NO, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT,KC_NO, KC_NO, KC_ENT, \
@@ -75,7 +75,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------------------------------'
* Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
*/
- [3] = KEYMAP(
+ [3] = LAYOUT_60_ansi_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_MS_U, KC_WH_U, KC_WH_R, ALT_T(KC_LEFT), ALT_T(KC_RGHT),LALT(KC_TAB), \
KC_LCTL, KC_ACL0,KC_ACL1,KC_ACL2,KC_ACL2,KC_NO, KC_NO, KC_MS_L,KC_MS_D, KC_MS_R, LT(3, KC_SCLN), KC_NO, KC_ENT, \
@@ -96,7 +96,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `--------------------------------------------'
* Mc: Mouse Cursor / Mb: Mouse Button / Mw: Mouse Wheel
*/
- [4] = KEYMAP(
+ [4] = LAYOUT_60_ansi_split_bs_rshift(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
LALT(KC_TAB), KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_WH_L,KC_WH_D,KC_MS_U, KC_WH_U, KC_WH_R,KC_BTN4,KC_BTN5,LALT(KC_TAB), \
KC_LCTL, KC_VOLD,KC_VOLU,KC_MUTE,KC_NO, KC_NO, KC_NO, KC_MS_L,KC_MS_D, KC_MS_R, KC_BTN1,KC_NO, KC_ENT, \
diff --git a/keyboards/infinity60/keymaps/jpetermans/config.h b/keyboards/infinity60/keymaps/jpetermans/config.h
index 72a2ed081..1949a9ad9 100644
--- a/keyboards/infinity60/keymaps/jpetermans/config.h
+++ b/keyboards/infinity60/keymaps/jpetermans/config.h
@@ -1,11 +1,6 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-
-#include "../../config.h"
+#pragma once
//overrides
#undef TAPPING_TOGGLE
#define TAPPING_TOGGLE 2
-#endif
diff --git a/keyboards/infinity60/keymaps/jpetermans/keymap.c b/keyboards/infinity60/keymaps/jpetermans/keymap.c
index 59249ff72..c99b05e4c 100644
--- a/keyboards/infinity60/keymaps/jpetermans/keymap.c
+++ b/keyboards/infinity60/keymaps/jpetermans/keymap.c
@@ -1,9 +1,6 @@
-#include "infinity60.h"
+#include QMK_KEYBOARD_H
#include "led_controller.h"
-//Helpful Defines
-#define _______ KC_TRNS
-
//Define Layer Names
#define _BASE 0
#define _NUMPAD 1
@@ -54,7 +51,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------'
*/
/* default */
- [_BASE] = KEYMAP( \
+ [_BASE] = LAYOUT_60_ansi_split_bs_rshift( \
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSLS,KC_NO,\
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,KC_RBRC,KC_BSPC, \
TT(_FNAV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,KC_ENT, \
@@ -63,7 +60,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* numpad */
- [_NUMPAD] = KEYMAP( \
+ [_NUMPAD] = LAYOUT_60_ansi_split_bs_rshift( \
_______,_______,_______,_______,_______,_______,_______, KC_P7, KC_P8, KC_P9, KC_PSLS, _______,_______,_______,KC_NO,\
_______,_______,_______,_______,_______,_______,_______, KC_P4, KC_P5, KC_P6, KC_PAST, _______,_______,_______, \
MO(_FNAV),_______,_______,_______,_______,_______,_______, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,_______, \
@@ -72,7 +69,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* F-, arrow, and media keys */
- [_FNAV] = KEYMAP( \
+ [_FNAV] = LAYOUT_60_ansi_split_bs_rshift( \
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_NO,\
KC_CAPS,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,_______,_______,KC_DEL, \
_______,_______,KC_BTN2,_______,_______,_______,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_INS,_______,_______, \
@@ -81,7 +78,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
/* media */
- [_MEDIA] = KEYMAP( \
+ [_MEDIA] = LAYOUT_60_ansi_split_bs_rshift( \
_______,F(MODE_SINGLE),F(MODE_PAGE),F(MODE_FLASH),_______,_______,_______, _______, _______, _______,KC_MUTE, KC_VOLD, KC_VOLU,_______,KC_NO,\
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
_______,_______,_______,_______,_______,F(GAME),_______, _______, _______, _______,_______, _______,_______, \
@@ -89,7 +86,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______, KC_MPLY, _______,_______, _______,_______ \
),
/* ~ */
- [_TILDE] = KEYMAP( \
+ [_TILDE] = LAYOUT_60_ansi_split_bs_rshift( \
KC_GRV,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______, \
@@ -97,7 +94,7 @@ const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______,_______,_______, _______, _______,_______, _______,_______ \
),
/* template */
- [5] = KEYMAP( \
+ [5] = LAYOUT_60_ansi_split_bs_rshift( \
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,KC_NO,\
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______,_______,\
_______,_______,_______,_______,_______,_______,_______, _______, _______, _______,_______, _______,_______, \
diff --git a/keyboards/infinity60/keymaps/jpetermans/rules.mk b/keyboards/infinity60/keymaps/jpetermans/rules.mk
deleted file mode 100644
index df3d1e952..000000000
--- a/keyboards/infinity60/keymaps/jpetermans/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/infinity60/matrix.c b/keyboards/infinity60/matrix.c
index bf86591cc..ba16e6900 100644
--- a/keyboards/infinity60/matrix.c
+++ b/keyboards/infinity60/matrix.c
@@ -177,3 +177,22 @@ void matrix_print(void)
xprintf("\n");
}
}
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
diff --git a/keyboards/infinity60/readme.md b/keyboards/infinity60/readme.md
index 94f65d370..01f3a8a2f 100644
--- a/keyboards/infinity60/readme.md
+++ b/keyboards/infinity60/readme.md
@@ -3,12 +3,13 @@ Infinity 60%
A compact community driven keyboard.
-Keyboard Maintainer: QMK Community
-Hardware Supported: Infinity 60% PCB
+Keyboard Maintainer: QMK Community
+Hardware Supported: Infinity 60% PCB
Hardware Availability: https://input.club/devices/infinity-keyboard/
Make example for this keyboard (after setting up your build environment):
make infinity60:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
diff --git a/keyboards/iris/info.json b/keyboards/iris/info.json
index a26ffae87..f7b017b97 100644
--- a/keyboards/iris/info.json
+++ b/keyboards/iris/info.json
@@ -1,9 +1,9 @@
{
- "keyboard_name": "Iris",
- "url": "Keeb.io",
- "maintainer": "qmk",
- "width": 14.5,
- "height": 5,
+ "keyboard_name": "Iris",
+ "url": "https://keeb.io",
+ "maintainer": "Keebio",
+ "width": 14.5,
+ "height": 5,
"layouts": {
"LAYOUT": {
"layout": [
diff --git a/keyboards/iris/iris.h b/keyboards/iris/iris.h
index 56ba15473..afad9a0d6 100644
--- a/keyboards/iris/iris.h
+++ b/keyboards/iris/iris.h
@@ -1,12 +1,13 @@
-#ifndef IRIS_H
-#define IRIS_H
+#pragma once
#ifdef KEYBOARD_iris_rev1
#include "rev1.h"
#elif KEYBOARD_iris_rev1_led
#include "rev1_led.h"
-#else
+#elif KEYBOARD_iris_rev2
#include "rev2.h"
+#else
+ #include "rev3.h"
#endif
#include "quantum.h"
@@ -26,5 +27,3 @@
KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##LT4, KC_##RT4, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, \
KC_##LT1, KC_##LT2, KC_##LT3, KC_##RT3, KC_##RT2, KC_##RT1 \
)
-
-#endif
diff --git a/keyboards/iris/keymaps/bmoorey/config.h b/keyboards/iris/keymaps/bmoorey/config.h
new file mode 100644
index 000000000..9f8a9afab
--- /dev/null
+++ b/keyboards/iris/keymaps/bmoorey/config.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2017 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_RIGHT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define NO_ACTION_TAPPING
+#define NO_ACTION_ONESHOT \ No newline at end of file
diff --git a/keyboards/iris/keymaps/bmoorey/keymap.c b/keyboards/iris/keymaps/bmoorey/keymap.c
new file mode 100644
index 000000000..9484ccb3f
--- /dev/null
+++ b/keyboards/iris/keymaps/bmoorey/keymap.c
@@ -0,0 +1,114 @@
+#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,
+ RAISE,
+ ADJUST,
+};
+
+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_DEL,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_SPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_LCTL, LOWER, KC_SPC, KC_SPC, LOWER, RAISE
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_TILD, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, KC_DEL,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RESET, _______, KC_UP, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_LBRC, KC_RBRC, KC_P1, KC_P2, KC_P3, KC_PLUS, KC_PIPE,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_LCBR, _______, _______, KC_RCBR, KC_P0, KC_P0, _______, KC_MINS, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_RAISE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_MPRV, KC_MNXT, KC_VOLU, KC_PGUP, KC_UNDS, KC_EQL, KC_HOME, _______, _______, _______, KC_BSLS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, KC_PGDN, KC_MINS, _______, _______, KC_PLUS, KC_END, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ RGB_TOG, RGB_RMOD, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, RGB_VAD, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/iris/keymaps/bmoorey/readme.md b/keyboards/iris/keymaps/bmoorey/readme.md
new file mode 100644
index 000000000..353f59449
--- /dev/null
+++ b/keyboards/iris/keymaps/bmoorey/readme.md
@@ -0,0 +1,5 @@
+This is (what I consider to be) an improvement over the default Iris keymap.
+It includes a QWERTY layer, a general system layer with arrows, volume control
+and a numpad on the right board; a second raised layer with function keys and
+more extensive media controls; and an adjust layer with controls for RGB
+underlighting.
diff --git a/keyboards/iris/keymaps/bmoorey/rules.mk b/keyboards/iris/keymaps/bmoorey/rules.mk
new file mode 100644
index 000000000..c9465948e
--- /dev/null
+++ b/keyboards/iris/keymaps/bmoorey/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+EXTRAKEY_ENABLE = yes
diff --git a/keyboards/iris/keymaps/broswen/config.h b/keyboards/iris/keymaps/broswen/config.h
new file mode 100644
index 000000000..19c47780d
--- /dev/null
+++ b/keyboards/iris/keymaps/broswen/config.h
@@ -0,0 +1,52 @@
+/*
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 5
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define C6_AUDIO
+
+#define NO_MUSIC_MODE
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(NO_SOUND)
+#endif
+
+
+#if !defined(NO_DEBUG) && !defined(CONSOLE_ENABLE)
+#define NO_DEBUG
+#endif // !NO_DEBUG
+#if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE)
+#define NO_PRINT
+#endif // !NO_PRINT
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+#define DISABLE_LEADER
diff --git a/keyboards/iris/keymaps/broswen/keymap.c b/keyboards/iris/keymaps/broswen/keymap.c
new file mode 100644
index 000000000..6d783142e
--- /dev/null
+++ b/keyboards/iris/keymaps/broswen/keymap.c
@@ -0,0 +1,126 @@
+#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,
+ RAISE,
+ ADJUST,
+};
+
+#define KC_ KC_TRNS
+#define _______ KC_TRNS
+
+#define KC_LOWR LOWER
+#define KC_RASE RAISE
+#define KC_RST RESET
+#define KC_BL_S BL_STEP
+#define KC_DBUG DEBUG
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , DEL,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,BSPC ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LCTL, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ LSFT, Z , X , C , V , B ,LBRC, RBRC , N , M ,COMM,DOT ,SLSH,RSFT,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ LALT,LGUI,SPC, ENT ,LOWR,RASE
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_LOWER] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ , , , , , , , , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , ,PGDN,PGUP, , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,TILD,PIPE,MINS,PLUS, , LEFT,DOWN, UP ,RGHT, , ,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ , GRV,BSLS,UNDS, EQL, , , , , , , , , ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_RAISE] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , , , ,F12 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , MUTE,VOLD,VOLU, , , ,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ , , , , , , , , , , , , , ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------.
+ AU_TOG, CK_UP, CK_DOWN, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
+ RESET , DEBUG , RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------+--------. ,--------|--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //`--------+--------+--------+----+---+--------+--------+--------/ \--------+--------+--------+---+----+--------+--------+--------'
+ _______, _______, _______, _______, _______, _______
+ // `--------+--------+--------' `--------+--------+--------'
+ )
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ // case QWERTY:
+ // if (record->event.pressed) {
+ // persistent_default_layer_set(1UL<<_QWERTY);
+ // }
+ // return false;
+ // break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/iris/keymaps/broswen/rules.mk b/keyboards/iris/keymaps/broswen/rules.mk
new file mode 100644
index 000000000..14fa11289
--- /dev/null
+++ b/keyboards/iris/keymaps/broswen/rules.mk
@@ -0,0 +1,8 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = no
+MOUSEKEY_ENABLE = no
+MIDI_ENABLE = no
+BLUETOOTH_ENABLE = no
+COMMAND_ENABLE = no
+TERMINAL_ENABLE = no
+AUDIO_ENABLE = yes
diff --git a/keyboards/iris/keymaps/davidrambo/config.h b/keyboards/iris/keymaps/davidrambo/config.h
index 01e078e32..2cdff4213 100644
--- a/keyboards/iris/keymaps/davidrambo/config.h
+++ b/keyboards/iris/keymaps/davidrambo/config.h
@@ -27,7 +27,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Select hand configuration */
#define PERMISSIVE_HOLD
-#define PREVENT_STUCK_MODIFIERS
#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
diff --git a/keyboards/iris/keymaps/dbroqua/keymap.c b/keyboards/iris/keymaps/dbroqua/keymap.c
index eed288c50..4cbb8af54 100644
--- a/keyboards/iris/keymaps/dbroqua/keymap.c
+++ b/keyboards/iris/keymaps/dbroqua/keymap.c
@@ -49,7 +49,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----+-----+-----+-----+-----+-----+ ,-----+-----+-----+-----+-----+-----+
* | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BSPC|
* |-----+-----+-----+-----+-----+-----+ +-----+-----+-----+-----+-----+-----+
- * | RST | 1 | 2 | 3 | 5 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * | RST | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
* +-----+-----+-----+-----+-----+-----+ +-----+-----+-----+-----+-----+-----+
* | DEL | | LEFT| RGHT| UP | [ | | ] | 4 | 5 | 6 | + | | |
* +-----+-----+-----+-----+-----+-----+-----. ,-----+-----+-----+-----+-----+-----+-----+
diff --git a/keyboards/iris/keymaps/drashna/config.h b/keyboards/iris/keymaps/drashna/config.h
index 47276845f..dd247a42a 100644
--- a/keyboards/iris/keymaps/drashna/config.h
+++ b/keyboards/iris/keymaps/drashna/config.h
@@ -31,7 +31,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef RGBLIGHT_ENABLE
#undef RGBLED_NUM
#define RGBLED_NUM 18 // Number of LEDs
-#define RGBLIGHT_ANIMATIONS
+
#define RGBLIGHT_HUE_STEP 12
#define RGBLIGHT_SAT_STEP 12
#define RGBLIGHT_VAL_STEP 12
@@ -68,3 +68,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ALT_LED1 8
#define GUI_LED1 9
+#define BOOTMAGIC_LITE_ROW 4
+#define BOOTMAGIC_LITE_COLUMN 3
diff --git a/keyboards/iris/keymaps/drashna/keymap.c b/keyboards/iris/keymaps/drashna/keymap.c
index 70d13cac2..d89656b7e 100644
--- a/keyboards/iris/keymaps/drashna/keymap.c
+++ b/keyboards/iris/keymaps/drashna/keymap.c
@@ -2,44 +2,53 @@
#include QMK_KEYBOARD_H
#include "drashna.h"
-#define KC_ALAP ALT_T(KC_APP)
-#define KC_OSLG OSM(MOD_LGUI)
+
+#define LAYOUT_iris_base( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
+ ) \
+ LAYOUT_wrapper( \
+ KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS, \
+ KC_TAB , K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSLS, \
+ KC_C1R3, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, KC_QUOT, \
+ OS_LSFT, CTL_T(K21), K22, K23, K24, K25, OS_LALT, OS_RGUI, K26, K27, K28, K29, CTL_T(K2A), OS_RSFT, \
+ LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE \
+ )
+#define LAYOUT_iris_base_wrapper(...) LAYOUT_iris_base(__VA_ARGS__)
+
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_wrapper(
- KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
- KC_TAB , _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSLS,
- KC_CCCV, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT,
- KC_MLSF, _________________QWERTY_L3_________________, KC_ALAP, KC_OSLG, _________________QWERTY_R3_________________, KC_MRSF,
- LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
+ [_QWERTY] = LAYOUT_iris_base_wrapper(
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
),
- [_COLEMAK] = LAYOUT_wrapper(
- KC_ESC , ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
- KC_TAB , _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSLS,
- KC_CCCV, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_QUOT,
- KC_MLSF, _________________COLEMAK_L3________________, KC_ALAP, KC_OSLG, _________________COLEMAK_R3________________, KC_MRSF,
- LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
+
+ [_COLEMAK] = LAYOUT_iris_base_wrapper(
+ _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
+ _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
+ _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
),
- [_DVORAK] = LAYOUT_wrapper(
- KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
- KC_TAB , _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSLS,
- KC_CCCV, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_QUOT,
- KC_MLSF, _________________DVORAK_L3_________________, KC_ALAP, KC_OSLG, _________________DVORAK_R3_________________, KC_MRSF,
- LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
+
+ [_DVORAK] = LAYOUT_iris_base_wrapper(
+ _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
+ _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
+ _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
),
- [_WORKMAN] = LAYOUT_wrapper(
- KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_MINS,
- KC_TAB , _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, KC_BSLS,
- KC_CCCV, _________________WORKMAN_L2________________, _________________WORKMAN_R2________________, KC_QUOT,
- KC_MLSF, _________________WORKMAN_L3________________, KC_ALAP, KC_OSLG, _________________WORKMAN_R3________________, KC_MRSF,
- LT(_LOWER,KC_GRV), KC_SPC, KC_BSPC, KC_DEL, KC_ENT, RAISE
+
+ [_WORKMAN] = LAYOUT_iris_base_wrapper(
+ _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
+ _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
+ _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
),
[_MODS] = LAYOUT_wrapper(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT,
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ _______, ___________________BLANK___________________, ___________________BLANK___________________, _______,
+ KC_LSFT, ___________________BLANK___________________, _______, _______, ___________________BLANK___________________, KC_RSFT,
_______, _______, _______, _______, _______, _______
),
@@ -53,7 +62,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LOWER] = LAYOUT_wrapper(
- _______, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, _______,
+ KC_F12, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, KC_F11,
KC_TILD, _________________LOWER_L1__________________, _________________LOWER_R1__________________, _______,
_______, ___________________BLANK___________________, _________________LOWER_R2__________________, KC_PIPE,
_______, ___________________BLANK___________________, _______, _______, _________________LOWER_R3__________________, _______,
@@ -61,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
[_RAISE] = LAYOUT_wrapper(
- _______, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, _______,
+ KC_F12, _________________FUNC_LEFT_________________, _________________FUNC_RIGHT________________, KC_F11,
KC_GRV, _________________RAISE_L1__________________, _________________RAISE_R1__________________, _______,
_______, _________________RAISE_L2__________________, _________________RAISE_R2__________________, KC_BSLS,
_______, _________________RAISE_L3__________________, _______, _______, _________________RAISE_R3__________________, _______,
@@ -70,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJUST] = LAYOUT_wrapper(
KC_MAKE, _______, _______, _______, _______, _______, _________________ADJUST_R1_________________, KC_RST,
- VRSN, _________________ADJUST_L1_________________, KC_NUKE, _______, _______, _______, _______, EPRM,
+ VRSN, _________________ADJUST_L1_________________, KC_NUKE, _______, _______, _______, _______, EEP_RST,
_______, _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, TG_MODS,
_______, _________________ADJUST_L3_________________, TG_GAME, _______, _________________ADJUST_R3_________________, KC_MPLY,
_______, _______, _______, _______, _______, _______
@@ -80,10 +89,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
void matrix_init_keymap(void) {
- DDRD &= ~(1<<5);
- PORTD &= ~(1<<5);
+ #ifndef CONVERT_TO_PROTON_C
+ setPinOutput(D5);
+ writePinHigh(D5);
- DDRB &= ~(1<<0);
- PORTB &= ~(1<<0);
+ setPinOutput(B0);
+ writePinHigh(B0);
+ #endif
}
-
diff --git a/keyboards/iris/keymaps/drashna_old/config.h b/keyboards/iris/keymaps/drashna_old/config.h
index 6152ca5b6..b985c4dfc 100644
--- a/keyboards/iris/keymaps/drashna_old/config.h
+++ b/keyboards/iris/keymaps/drashna_old/config.h
@@ -15,60 +15,32 @@ 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_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
-
-#define USE_SERIAL
-#undef USE_I2C
-
-/* Select hand configuration */
-
-// #define MASTER_LEFT
-// #define MASTER_RIGHT
-#define EE_HANDS
+#include "../drashna/config.h"
#ifdef RGBLIGHT_ENABLE
#undef RGBLED_NUM
#define RGBLED_NUM 16 // Number of LEDs
-#define RGBLIGHT_ANIMATIONS
-#define RGBLIGHT_HUE_STEP 12
-#define RGBLIGHT_SAT_STEP 12
-#define RGBLIGHT_VAL_STEP 12
-#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
-#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
-#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
-
-#define RGBLIGHT_LIMIT_VAL 225
-#endif // RGBLIGHT_ENABLE
-
-#ifdef AUDIO_ENABLE
-#define C6_AUDIO
-#ifdef RGBLIGHT_ENABLE
-#define NO_MUSIC_MODE
-#endif //RGBLIGHT_ENABLE
-#endif //AUDIO_ENABLE
-
-#define QMK_ESC_OUTPUT F6 // usually COL
-#define QMK_ESC_INPUT D7 // usually ROW
-#define QMK_LED B0
-#define QMK_SPEAKER C6
+#endif
#undef PRODUCT
#ifdef KEYBOARD_iris_rev2
-#define PRODUCT Drashna Hacked Iris Rev.2
+#define PRODUCT Drashna Hacked Iris Rev.2 (16 LED)
#endif
+#undef SHFT_LED1
#define SHFT_LED1 5
+#undef SHFT_LED2
#define SHFT_LED2 10
+#undef CTRL_LED1
#define CTRL_LED1 6
+#undef CTRL_LED2
#define CTRL_LED2 9
+#undef ALT_LED1
#define ALT_LED1 7
+#undef GUI_LED1
#define GUI_LED1 8
-
-#endif
diff --git a/keyboards/iris/keymaps/drashna_old/rules.mk b/keyboards/iris/keymaps/drashna_old/rules.mk
index f6ec9d1e5..73f37c6c5 100644
--- a/keyboards/iris/keymaps/drashna_old/rules.mk
+++ b/keyboards/iris/keymaps/drashna_old/rules.mk
@@ -1,21 +1,4 @@
USER_NAME := drashna
-
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-TAP_DANCE_ENABLE = no
-RGBLIGHT_ENABLE = yes
-AUDIO_ENABLE = yes
-NKRO_ENABLE = yes
-BACKLIGHT_ENABLE = no
-SWAP_HANDS_ENABLE = no
-
-INDICATOR_LIGHTS = yes
-MACROS_ENABLED = no
-RGBLIGHT_TWINKLE = yes
-
SRC += ../drashna/keymap.c
-BOOTLOADER = qmk-dfu
+include $(KEYBOARD_PATH_2)/keymaps/drashna/rules.mk
diff --git a/keyboards/iris/keymaps/edvorakjp/config.h b/keyboards/iris/keymaps/edvorakjp/config.h
index cc24ffc31..1610c4b12 100644
--- a/keyboards/iris/keymaps/edvorakjp/config.h
+++ b/keyboards/iris/keymaps/edvorakjp/config.h
@@ -26,5 +26,6 @@
#define MOUSEKEY_WHEEL_TIME_TO_MAX 20
#define TAPPING_TERM 120
+#define SWAP_SCLN
#endif
diff --git a/keyboards/iris/keymaps/edvorakjp/keymap.c b/keyboards/iris/keymaps/edvorakjp/keymap.c
index 74aff9131..f5d305f7f 100644
--- a/keyboards/iris/keymaps/edvorakjp/keymap.c
+++ b/keyboards/iris/keymaps/edvorakjp/keymap.c
@@ -1,7 +1,4 @@
#include QMK_KEYBOARD_H
-#include "action_layer.h"
-#include "eeconfig.h"
-
#include "edvorakjp.h"
enum custom_keycodes {
@@ -32,7 +29,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
GRV ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- LBRC,RBRC,COMM,DOT , P , Y , F , G , R , W , Q ,BSLS,
+ LBRC,RBRC,COMM,DOT , Y , P , F , G , R , W , Q ,BSLS,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
EQL , A , O , E , I , U , D , T , N , S , M ,MINS,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
@@ -134,7 +131,7 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
switch(keycode) {
case KC_LOCK:
if (record->event.pressed) {
- if (edvorakjp_config.enable_kc_lang) {
+ if (get_enable_kc_lang()) {
SEND_STRING( SS_LCTRL(SS_LSFT(SS_TAP(X_POWER))) );
} else {
SEND_STRING( SS_LGUI("l") );
diff --git a/keyboards/iris/keymaps/edvorakjp/rules.mk b/keyboards/iris/keymaps/edvorakjp/rules.mk
index 1c88fbc7b..58d244c38 100644
--- a/keyboards/iris/keymaps/edvorakjp/rules.mk
+++ b/keyboards/iris/keymaps/edvorakjp/rules.mk
@@ -13,4 +13,4 @@ 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 this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
diff --git a/keyboards/iris/keymaps/gsigler/config.h b/keyboards/iris/keymaps/gsigler/config.h
new file mode 100644
index 000000000..e1793fb1b
--- /dev/null
+++ b/keyboards/iris/keymaps/gsigler/config.h
@@ -0,0 +1,33 @@
+/*
+Copyright 2018 Grady Sigler <gradysigler@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define AUTO_SHIFT_TIMEOUT 95
+#define ONESHOT_TAP_TOGGLE 5 /* Tapping this number of times holds the key until tapped this number of times again. */
+#define ONESHOT_TIMEOUT 5000 /* Time (in ms) before the one shot key is released */
diff --git a/keyboards/iris/keymaps/gsigler/keymap.c b/keyboards/iris/keymaps/gsigler/keymap.c
new file mode 100644
index 000000000..f8753cbdc
--- /dev/null
+++ b/keyboards/iris/keymaps/gsigler/keymap.c
@@ -0,0 +1,74 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum iris_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ //| `/~ | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | _/- |
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ //| TAB | Q | W | E | R | T | | Y | U | I | O | P | +/= |
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQL,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ //| RAISE | A | S | D | F | G | | H | J | K | L | :/; | "/' |
+ RAISE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ //| LOWER | Z | X | C | V | B | ESC | | ALT | N | M | </, | >/. | ?-/ | |-\ |
+ LOWER, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ESC, KC_LALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ // | CTRL | COMMAND| BKSPACE| | SPACE | ENTER | SHIFT |
+ KC_LCTL, KC_LGUI, KC_BSPC, KC_SPC, KC_ENT, KC_LSFT
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+//KC_LALT ALT
+ [_RAISE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ //| `/~ | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ //| TAB | ! | @ | { | } | | | | | | ↑ | | | F12 |
+ KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, KC_F12,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ //| RAISE | # | $ | ( | ) | ` | | ? | ← | ↓ | → | | VOLUP |
+ KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, KC_QUES, KC_LEFT,KC_DOWN, KC_RGHT, XXXXXXX, KC__VOLUP,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ //| | % | ^ | [ | ] | ~ | ESC | ALT | & | | | | MUTE | VOLDN |
+ XXXXXXX, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, KC_AMPR, XXXXXXX, XXXXXXX,XXXXXXX, KC__MUTE,KC__VOLDOWN,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ // | CTRL | COMMAND| BKSPACE| | SPACE | ENTER | SHIFT|
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ //| | | | | | | | | 7 | 8 | 9 | * | / |
+ KC_ASUP, KC_ASON, KC_ASRP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ //| | | | | | | | | 4 | 5 | 6 | + | - |
+ KC_ASDN, KC_ASOFF, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PMNS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ //| | | | | | | | | 1 | 2 | 3 | | |
+ XXXXXXX, KC_ASTG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_P1, KC_P2, KC_P3, XXXXXXX, XXXXXXX,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ //| LOWER | | | | | | ESC | | ALT | | 0 | . | ENTER | = | |
+ KC_TRNS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_TRNS, KC_TRNS, XXXXXXX, KC_P0, KC_PDOT, KC_PENT, KC_PEQL, XXXXXXX,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ // | CTRL | COMMAND| BKSPACE | | SPACE | ENTER | SHIFT |
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+};
diff --git a/keyboards/iris/keymaps/gsigler/rules.mk b/keyboards/iris/keymaps/gsigler/rules.mk
new file mode 100644
index 000000000..0abc28fc5
--- /dev/null
+++ b/keyboards/iris/keymaps/gsigler/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+AUTO_SHIFT_ENABLE = yes
diff --git a/keyboards/iris/keymaps/impstyle/keymap.c b/keyboards/iris/keymaps/impstyle/keymap.c
index ba49cf72c..30b4bf2d9 100644
--- a/keyboards/iris/keymaps/impstyle/keymap.c
+++ b/keyboards/iris/keymaps/impstyle/keymap.c
@@ -94,17 +94,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+----+----+----+----+----| |----+----+----+----+----+----|
// , , , , , , MS_WH_UP, , , , , ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- // MS_LEFT,MS_UP,MS_DOWN,MS_RGHT,,, MS_WH_DN,MS_BT1,MS_BT2,MS_BT3, , ,
+ // ,,MS_LEFT,MS_UP,MS_DOWN,MS_RGHT,, MS_WH_DN,MS_BT1,MS_BT2,MS_BT3, , ,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
// , , , , , , , , , , ,MS_ACC0,MS_ACC1MS_ACC2
//`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
// , , , , ,
// `----+----+----' `----+----+----'
[_MOUSE] = LAYOUT(
- _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
+ _______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______,
_______,_______,_______,_______,_______,_______, KC_MS_WH_UP,_______,_______,_______,_______,_______,
- KC_MS_LEFT,KC_MS_UP,KC_MS_DOWN,KC_MS_RIGHT,_______,_______, KC_MS_WH_DOWN,KC_MS_BTN1,KC_MS_BTN2,KC_MS_BTN3,_______,_______,
- _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,
+ _______,KC_MS_LEFT,KC_MS_UP,KC_MS_DOWN,KC_MS_RIGHT,_______, KC_MS_WH_DOWN,KC_MS_BTN1,KC_MS_BTN2,KC_MS_BTN3,_______,_______,
+ _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,KC_MS_ACCEL0,KC_MS_ACCEL1,KC_MS_ACCEL2,
_______,_______,_______, _______,_______,_______
),
diff --git a/keyboards/iris/keymaps/jennetters/config.h b/keyboards/iris/keymaps/jennetters/config.h
index a3c0634f5..42f91bd02 100644
--- a/keyboards/iris/keymaps/jennetters/config.h
+++ b/keyboards/iris/keymaps/jennetters/config.h
@@ -19,9 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TAPPING_TERM 150
-/* Try to prevent sticky keys */
-#define PREVENT_STUCK_MODIFIERS
-
/* Use I2C or Serial, not both */
#define USE_SERIAL
@@ -38,4 +35,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLED_NUM 12
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8 \ No newline at end of file
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/iris/keymaps/khord/config.h b/keyboards/iris/keymaps/khord/config.h
new file mode 100644
index 000000000..9b44bca79
--- /dev/null
+++ b/keyboards/iris/keymaps/khord/config.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2017 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#define TAPPING_TERM 150
+
+#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/iris/keymaps/khord/keymap.c b/keyboards/iris/keymaps/khord/keymap.c
new file mode 100644
index 000000000..379617a8b
--- /dev/null
+++ b/keyboards/iris/keymaps/khord/keymap.c
@@ -0,0 +1,136 @@
+#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,
+ RAISE,
+ ADJUST,
+ ADMIN,
+ SMSPC1
+};
+
+enum {
+ SFT_CAP = 0
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ TD(SFT_CAP),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, SFT_T(KC_ENT),
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_HOME, KC_END, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_LGUI, LOWER, KC_ENT, KC_SPC, RAISE, KC_LALT
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RESET, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_DEL, _______, KC_LEFT, KC_RGHT, KC_UP, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_PIPE,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ BL_STEP, _______, _______, _______, KC_DOWN, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_P1, KC_P2, KC_P3, KC_MINS, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, KC_DEL, KC_DEL, _______, KC_P0
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_RAISE] = 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,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_TOG, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_MOD, KC_MPRV, KC_MNXT, KC_VOLU, KC_PGUP, KC_UNDS, KC_EQL, KC_HOME, RGB_HUI, RGB_SAI, RGB_VAI, KC_BSLS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, KC_PGDN, KC_MINS, KC_LPRN, _______, KC_PLUS, KC_END, RGB_HUD, RGB_SAD, RGB_VAD, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [SFT_CAP] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ case ADMIN:
+ if (record->event.pressed) {
+ SEND_STRING("Administrator");
+ }
+ return false;
+ break;
+ case SMSPC1:
+ if (record->event.pressed) {
+ SEND_STRING("Simspace1!");
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/iris/keymaps/khord/rules.mk b/keyboards/iris/keymaps/khord/rules.mk
new file mode 100644
index 000000000..c46edbd12
--- /dev/null
+++ b/keyboards/iris/keymaps/khord/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/iris/keymaps/krusli/config.h b/keyboards/iris/keymaps/krusli/config.h
index a53c746ad..72e35c472 100644
--- a/keyboards/iris/keymaps/krusli/config.h
+++ b/keyboards/iris/keymaps/krusli/config.h
@@ -20,8 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
-// #define PREVENT_STUCK_MODIFIERS
-
/* Use I2C or Serial, not both */
#define USE_SERIAL
diff --git a/keyboards/iris/keymaps/olligranlund_nordic/config.h b/keyboards/iris/keymaps/olligranlund_nordic/config.h
new file mode 100644
index 000000000..259f2a742
--- /dev/null
+++ b/keyboards/iris/keymaps/olligranlund_nordic/config.h
@@ -0,0 +1,36 @@
+/*
+Copyright 2017 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+//#define USE_I2C
+
+/* Select hand configuration */
+
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 18
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/iris/keymaps/olligranlund_nordic/keymap.c b/keyboards/iris/keymaps/olligranlund_nordic/keymap.c
new file mode 100644
index 000000000..65ed6d289
--- /dev/null
+++ b/keyboards/iris/keymaps/olligranlund_nordic/keymap.c
@@ -0,0 +1,131 @@
+#include QMK_KEYBOARD_H
+#include "keymap_swedish.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,
+ RAISE,
+ ADJUST
+};
+
+#define KC_ KC_TRNS
+
+#define KC_LOWER LOWER
+#define KC_RAISE RAISE
+#define KC_ADJ ADJUST
+#define KC_RST RESET
+
+#define KC_AA NO_AA
+#define KC_AE NO_AE
+#define KC_OE NO_OSLH
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+LT(_LOWER, KC_TAB),KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_AA,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_OE, KC_AE,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, RAISE, KC_BSPC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_LGUI, KC_LALT, KC_SPC, KC_ENT, ADJUST, KC_RALT
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ NO_TILD, KC_EXLM, NO_AT, KC_HASH, NO_DLR, KC_PERC, NO_CIRC, NO_AMPR, NO_ASTR, NO_SLSH, NO_LPRN, NO_RPRN,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_UP, KC_PGDOWN, NO_LCBR, NO_RCBR,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TRNS, KC_VOLD, KC_MUTE, KC_VOLU, KC_TRNS, NO_BSLS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, NO_LBRC, NO_RBRC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_GRAVE, KC_CIRC, KC_QUOTE, NO_LESS, NO_GRTR,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_RAISE] = 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,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ NO_GRV, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_7, KC_8, KC_9, NO_MINS, NO_ASTR,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_4, KC_5, KC_6, NO_PLUS, NO_SLSH,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_1, KC_2, KC_3, KC_0, KC_TRNS,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ BL_TOGG, BL_STEP, BL_BRTG, RGB_TOG, RGB_RMOD, RGB_MOD, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ BL_DEC, _______, BL_INC, RGB_VAD, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, RGB_HUD, RGB_SAD, RGB_HUI, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/iris/keymaps/olligranlund_nordic/readme.md b/keyboards/iris/keymaps/olligranlund_nordic/readme.md
new file mode 100644
index 000000000..72eccde10
--- /dev/null
+++ b/keyboards/iris/keymaps/olligranlund_nordic/readme.md
@@ -0,0 +1,11 @@
+# Iris Nordic Layout
+### by Oliver Granlund
+
+![Finished product](https://i.imgur.com/zqSBc3t.jpg)
+
+This is for those who insist to use keyboard with ÅÄÖ. Also thought about the
+gaming aspect with this keyboard, therefore space on left side.
+
+At first I thought about having backspace in the upper right corner of the
+slave side, but that made it really clunky to fix your text. Thumbs should take
+care of this job instead.
diff --git a/keyboards/iris/keymaps/olligranlund_nordic/rules.mk b/keyboards/iris/keymaps/olligranlund_nordic/rules.mk
new file mode 100644
index 000000000..d7463419b
--- /dev/null
+++ b/keyboards/iris/keymaps/olligranlund_nordic/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/iris/keymaps/omgvee/config.h b/keyboards/iris/keymaps/omgvee/config.h
new file mode 100644
index 000000000..c29201fe1
--- /dev/null
+++ b/keyboards/iris/keymaps/omgvee/config.h
@@ -0,0 +1,49 @@
+/*
+Copyright 2017 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 15
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+//tap dance shenanigans
+#define TAPPING_TERM 200
+
+//force n-key rollover to be enabled every boot
+#define FORCE_NKRO
+
+//some mouse keys tweaking, as it is generally too slow by default
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0 \ No newline at end of file
diff --git a/keyboards/iris/keymaps/omgvee/keymap.c b/keyboards/iris/keymaps/omgvee/keymap.c
new file mode 100644
index 000000000..da76b593b
--- /dev/null
+++ b/keyboards/iris/keymaps/omgvee/keymap.c
@@ -0,0 +1,173 @@
+#include QMK_KEYBOARD_H
+#include <print.h>
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _MOUSE 3
+#define _ADJUST 4
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ MOUSE,
+ ADJUST,
+};
+
+#define KC_MOUS TT(_MOUSE) // double tab toggle mouse layer
+#define MS_L KC_MS_LEFT
+#define MS_R KC_MS_RIGHT
+#define MS_U KC_MS_UP
+#define MS_D KC_MS_DOWN
+#define MS_B1 KC_MS_BTN1
+#define MS_B2 KC_MS_BTN2
+#define MW_U KC_MS_WH_UP
+#define MW_D KC_MS_WH_DOWN
+#define MW_L KC_MS_WH_LEFT
+#define MW_R KC_MS_WH_RIGHT
+
+//Tap Dance Declarations
+enum {
+ TD_SCL = 0
+};
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for Shift, twice for Caps Lock
+ [TD_SCL] = ACTION_TAP_DANCE_DOUBLE(KC_LSFT, KC_CAPS)
+};
+enum {
+ TD_EBT = 0
+};
+
+
+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,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ TD(TD_SCL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MOUS, KC_MOUS, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_LALT, LOWER, KC_ENT, KC_SPC, RAISE, KC_LGUI
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_MINS, KC_EQL, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_PIPE,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,_______, KC_ENT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LCTL, _______, _______, _______, KC_LCBR, KC_LBRC, KC_LPRN, KC_RPRN, KC_RBRC, KC_RCBR, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, KC_DEL, KC_DEL, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_RAISE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ RGB_MOD, KC_MPRV, KC_MNXT, _______, KC_PGUP, KC_UNDS, KC_EQL, KC_HOME, RGB_HUI, RGB_SAI, RGB_VAI, KC_ENT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_MSTP, KC_MPLY, _______, KC_PGDN, KC_MINS, KC_LPRN, KC_RPRN, KC_PLUS, KC_END, RGB_HUD, RGB_SAD, RGB_VAD, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_MOUSE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ BL_BRTG, _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, RESET,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ BL_TOGG, MS_B1, MS_U, MS_B2, MW_U, _______, _______, MS_B1, MS_B2, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, MS_L, MS_D, MS_R, MW_D, _______, MS_L, MS_D , MS_U, MS_R ,_______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ BL_STEP, _______, _______, MW_L, MW_R, _______, _______, _______, KC_BRID, KC_BRIU, KC_VOLD, KC_VOLU, KC_MUTE, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, RESET,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_BRID, KC_BRIU, KC_VOLD, KC_VOLU, KC_MUTE, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ dprintf("Got on layer %s ", LOWER);
+ update_tri_layer(_LOWER, _RAISE, _MOUSE);
+ } else {
+ layer_off(_LOWER);
+ dprintf("Got off layer %s ", LOWER);
+ update_tri_layer(_LOWER, _RAISE, _MOUSE);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ dprintf("Got on layer %s ", RAISE);
+ update_tri_layer(_LOWER, _RAISE, _MOUSE);
+ } else {
+ layer_off(_RAISE);
+ dprintf("Got off layer %s ", RAISE);
+ update_tri_layer(_LOWER, _RAISE, _MOUSE);
+ }
+ return false;
+ break;
+ case MOUSE:
+ if (record->event.pressed) {
+ layer_on(_MOUSE);
+ dprintf("Got on layer %s ", MOUSE);
+ update_tri_layer(_LOWER, _RAISE, _MOUSE);
+ } else {
+ layer_off(_MOUSE);
+ dprintf("Got off layer %s ", MOUSE);
+ update_tri_layer(_LOWER, _RAISE, _MOUSE);
+ }
+ 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/iris/keymaps/omgvee/readme.md b/keyboards/iris/keymaps/omgvee/readme.md
new file mode 100644
index 000000000..bf9a5acb1
--- /dev/null
+++ b/keyboards/iris/keymaps/omgvee/readme.md
@@ -0,0 +1,17 @@
+# Reade.md for what I want from an Iris perfect layout
+======================================================
+
+
+![My beloved IRIS keeb](https://i.imgur.com/wgsb37e.jpg)
+
+- mouse keys
+- media keys and media controls
+- in-switch LED intensity controls (+/-)
+- underglow RGB hue/color controls
+- underglow RGB intensity controls
+- familiar key arrangement with Enter and symbols on the usual keys (to the right hand side)
+- navigation keys should be the vim ones really, and same ones used for mouse;
+- also have alternates on the same layer, in the form of AWSD, as well as HJKL (keep in mind the order is Left, Up, Down, Right)
+- arrow keys on one layer, however with another modifier key, they become left=home, right=end, up=page up, down=page Down
+
+See keymap.c for layouts \ No newline at end of file
diff --git a/keyboards/iris/keymaps/omgvee/rules.mk b/keyboards/iris/keymaps/omgvee/rules.mk
new file mode 100644
index 000000000..281f64c7e
--- /dev/null
+++ b/keyboards/iris/keymaps/omgvee/rules.mk
@@ -0,0 +1,7 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+NKRO_ENABLE = yes
diff --git a/keyboards/iris/keymaps/saviof/config.h b/keyboards/iris/keymaps/saviof/config.h
new file mode 100644
index 000000000..eb4c7328e
--- /dev/null
+++ b/keyboards/iris/keymaps/saviof/config.h
@@ -0,0 +1,39 @@
+/*
+Copyright 2018 Savio Fernandes
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+//#define USE_SERIAL
+#define USE_I2C
+
+/* Select hand configuration */
+
+//#define MASTER_LEFT
+#define MASTER_RIGHT
+// #define BACKLIGHT_BREATHING
+// #define EE_HANDS
+
+#define TAPPING_TERM 200
+
+// #undef RGBLED_NUM
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 30
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/iris/keymaps/saviof/keymap.c b/keyboards/iris/keymaps/saviof/keymap.c
new file mode 100644
index 000000000..a63e60682
--- /dev/null
+++ b/keyboards/iris/keymaps/saviof/keymap.c
@@ -0,0 +1,107 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _ADJ 3
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJ,
+};
+
+//Tap Dance Declarations
+enum {
+ TD_SPC_ENT = 0
+};
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT)
+};
+
+#define KC_ KC_TRNS
+
+#define KC_LOWR LT(_LOWER, KC_LEFT) //LOWER
+#define KC_RASE LT(_RAISE, KC_RIGHT) //RAISE
+#define KC_ADJT LT(_ADJ, KC_LGUI) //RAISE
+#define KC_SCET TD(TD_SPC_ENT)
+#define KC_RST RESET
+#define KC_BL_S BL_STEP
+#define KC_DBUG DEBUG
+#define KC_RTOG RGB_TOG
+#define KC_RMOD RGB_MOD
+#define KC_LMOD RGB_RMOD
+#define KC_RHUI RGB_HUI
+#define KC_RHUD RGB_HUD
+#define KC_RSAI RGB_SAI
+#define KC_RSAD RGB_SAD
+#define KC_RVAI RGB_VAI
+#define KC_RVAD RGB_VAD
+#define KC_BTOG BL_TOGG
+#define KC_BLVL BL_STEP
+#define KC_BRTG BL_BRTG
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ LSFT, A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ LCTL, Z , X , C , V , B ,HOME, END , N , M ,COMM,DOT ,SLSH,RSFT,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ ADJT,LOWR, SPC, SCET,RASE, ENT
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_LOWER] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ TILD,EXLM, AT ,HASH, DLR,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,BSPC,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ RST , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ DEL , ,LEFT,RGHT, UP ,LBRC, RBRC, P4 , P5 , P6 ,PLUS,PIPE,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ BL_S, , , ,DOWN,LCBR,LPRN, RPRN,RCBR, P1 , P2 , P3 ,MINS, ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , ,DEL , DEL , , P0
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_RAISE] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,MPRV,MNXT,VOLU,PGUP,UNDS, EQL ,HOME, , , ,BSLS,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ MUTE,MSTP,MPLY,VOLD,PGDN,MINS, , ,PLUS,END , , , , ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ ),
+
+ [_ADJ] = LAYOUT_kc(
+ //,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ ,LMOD, , , , , , , , , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ RTOG,RMOD,RHUI,RSAI,RVAI, , BTOG,BLVL,BRTG, , , ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,DBUG,RHUD,RSAD,RVAD, , , , , , , ,
+ //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
+ BL_S,RST , , , , , , , , , , , , ,
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ , , , , ,
+ // `----+----+----' `----+----+----'
+ )
+
+};
diff --git a/keyboards/iris/keymaps/saviof/rules.mk b/keyboards/iris/keymaps/saviof/rules.mk
new file mode 100644
index 000000000..0e1023be1
--- /dev/null
+++ b/keyboards/iris/keymaps/saviof/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE=yes
diff --git a/keyboards/iris/keymaps/transmogrified/Readme.md b/keyboards/iris/keymaps/transmogrified/Readme.md
new file mode 100644
index 000000000..96e27411d
--- /dev/null
+++ b/keyboards/iris/keymaps/transmogrified/Readme.md
@@ -0,0 +1,9 @@
+This layout is an attempt to make switching between the Iris and my laptop keyboard as seemless as possible. I switch caps lock and Ctrl/ESC on my laptop and I am able to adjust well with everything else... I still miss the Iris, but I am able to get work done.
+
+I use the following lighting queues to indicate layer changes.
+
+* Momentary toggled layer : LEDs brighten and dim when layer is released.
+* Locked layer : LEDs breath.
+* Config layer locked : LEDs off.
+
+NOTE you will need to flash both sides to update the brightness_levels so that breathing works on both sides as expected.
diff --git a/keyboards/iris/keymaps/transmogrified/config.h b/keyboards/iris/keymaps/transmogrified/config.h
index 8df0824b7..12f2d7d6d 100644
--- a/keyboards/iris/keymaps/transmogrified/config.h
+++ b/keyboards/iris/keymaps/transmogrified/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2017 Danny Nguyen <danny@keeb.io>
+Copyright 2017 Adam Roberts <adam+gh@bikuman.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -15,11 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -27,8 +23,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// #define USE_I2C
/* Select hand configuration */
-
-// #define MASTER_LEFT
+//#define MASTER_LEFT
#define MASTER_RIGHT
// #define EE_HANDS
@@ -39,4 +34,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-#endif
+#define NO_USB_STARTUP_CHECK //keep both sides on when pc is sleeping.
+#define TAPPING_TERM 200
+
+// Remove features i don't use
+#define NO_ACTION_ONESHOT
+#define NO_ACTION_MACRO
+
+// Override the rev2 config.h BACKLIGHT_LEVELS setting
+#undef BACKLIGHT_LEVELS
+#define BACKLIGHT_LEVELS 125
diff --git a/keyboards/iris/keymaps/transmogrified/keymap.c b/keyboards/iris/keymaps/transmogrified/keymap.c
index 43d6cc600..67545f08e 100644
--- a/keyboards/iris/keymaps/transmogrified/keymap.c
+++ b/keyboards/iris/keymaps/transmogrified/keymap.c
@@ -2,64 +2,55 @@
#include "action_layer.h"
#include "eeconfig.h"
-// config settings
-#define TAPPING_TERM 250
-#define ONESHOT_TAP_TOGGLE 1
-#define ONESHOT_TIMEOUT 10000
-
extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _COLEMAK 1
-#define _DVORAK 2
-#define _ONEHANDR 3
-#define _ONEHANDL 4
-#define _RLAYER 5
-#define _LLAYER 6
-#define _DUAL 7
-#define _CONFIG 8
+#define _RLAYER 2
+#define _LLAYER 3
+#define _DUAL 4
+#define _CONFIG 5
enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- ONEHANDR,
- ONEHANDL,
- RLAYER,
- LLAYER,
- RLOCK,
- LLOCK,
- DUAL,
- CONFIG,
+ QWERTY = SAFE_RANGE, // qwerty base layer
+ COLEMAK, // colemak base layer
+ RLAYER, // right layer
+ LLAYER, // left layer
+ RLOCK, // right layer LOCK
+ LLOCK, // left layer LOCK
+ DUAL, // right and left combo layer
+ CONFIG, // config layer
+ LEDUP, // custom LED brightness increase keycode
+ LEDDOWN, // custom LED brightness decrease keycode
};
/* Tap Dance */
enum {
- TD_LGUIAPP,
- TD_SHIFTCAPS,
+ TD_LGUIAPP, // LGUI x1, app/menu x2
+ TD_SHIFTCAPS, // LSHIFT x1, CAPS x3
+ TD_CTRLALTDL, // CTRL+ALT+DEL x3
+ TD_SHIFTCLAT, // LSHIFT x1, LCRTL x2, LALT x3, CTRL+ALT x4
};
/* NOOP Key and Transparent */
#define KC_ KC_TRNS
#define KC_XXXX KC_NO
-/* LAYERS */
+/* LAYERS / CUSTOM KEYS */
#define KC_LLAY LLAYER
#define KC_RLAY RLAYER
#define KC_RLOK RLOCK
#define KC_LLOK LLOCK
#define KC_QWER QWERTY
-#define KC_DVOR DVORAK
#define KC_COLE COLEMAK
-#define KC_ONER ONEHANDR
-#define KC_ONEL ONEHANDL
#define KC_DUAL DUAL
#define KC_CONF CONFIG
+#define KC_BLUP LEDUP
+#define KC_BLDN LEDDOWN
-/* Custom Shortened Keys */
+/* Custom Shortened Keys (4 digits so they fit in my grid) */
#define KC_MCTB LCTL(KC_TAB)
#define KC_MCST LCTL(LSFT(KC_TAB))
-#define KC_MCAD LALT(LCTL(KC_DEL))
#define KC_CTEC CTL_T(KC_ESC)
#define KC_SINS LSFT(KC_INS)
#define KC_LGU1 LGUI(KC_1)
@@ -72,27 +63,27 @@ enum {
#define KC_LGU8 LGUI(KC_8)
#define KC_LGU9 LGUI(KC_9)
#define KC_LGU0 LGUI(KC_0)
-#define KC_BLUP BL_INC
-#define KC_BLDN BL_DEC
#define KC_SYSR KC_SYSREQ
#define KC_REST RESET
/* Tap Dance */
#define KC_LGUA TD(TD_LGUIAPP)
-#define KC_SHCL TD(TD_SHIFTCAPS)
+#define KC_SHCP TD(TD_SHIFTCAPS)
+#define KC_CADL TD(TD_CTRLALTDL)
+#define KC_SHCA TD(TD_SHIFTCLAT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
- XXXX, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
+ CADL, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
TAB , Q , W , E , R , T , Y , U , I , O , P ,DEL ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
CTEC, A , S , D , F , G , H , J , K , L ,SCLN,ENT ,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
- SHCL, Z , X , C , V , B ,LLOK, RLOK, N , M ,COMM,DOT ,SLSH,RSFT,
+ SHCP, Z , X , C , V , B ,LLOK, RLOK, N , M ,COMM,DOT ,SLSH,SHCA,
//`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
LALT,LLAY,TAB , SPC ,RLAY,LGUA
// `----+----+----' `----+----+----'
@@ -100,60 +91,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_COLEMAK] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
- XXXX, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
+ CADL, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
TAB , Q , W , F , P , G , J , L , U , Y ,SCLN,DEL ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
CTEC, A , R , S , T , D , H , N , E , I , O ,ENT ,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
- SHCL, Z , X , C , V , B ,LLOK, RLOK, K , M ,COMM,DOT ,SLSH,RSFT,
- //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
- LALT,LLAY,TAB , SPC ,RLAY,LGUA
- // `----+----+----' `----+----+----'
- ),
-
- [_DVORAK] = LAYOUT_kc(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- XXXX, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,BSPC,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,SLSH,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- CTEC, A , O , E , U , I , D , H , T , N , S ,ENT ,
- //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
- SHCL,SCLN, Q , J , K , X ,LLOK, RLOK, B , M , W , V , Z ,EQL ,
+ SHCP, Z , X , C , V , B ,LLOK, RLOK, K , M ,COMM,DOT ,SLSH,SHCA,
//`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
LALT,LLAY,TAB , SPC ,RLAY,LGUA
// `----+----+----' `----+----+----'
),
- [_ONEHANDR] = LAYOUT_kc(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, 6 , 7 , 8 , 9 , 0 ,BSPC,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, Y , U , I , O , P ,DEL ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, H , J , K , L ,SCLN,QUOT,
- //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
- XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,QWER, XXXX, N , M ,COMM,DOT ,SLSH,RSFT,
- //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
- XXXX,XXXX,XXXX, SPC ,ONEL,ENT
- // `----+----+----' `----+----+----'
- ),
-
- [_ONEHANDL] = LAYOUT_kc(
- //,----+----+----+----+----+----. ,----+----+----+----+----+----.
- XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, 5 , 4 , 3 , 2 , 1 ,XXXX,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, T , R , E , W , Q ,TAB ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
- XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, G , F , D , S , A ,ENT ,
- //|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
- XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX, B , V , C , X , Z ,SHCL,
- //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
- XXXX,XXXX,XXXX, SPC ,ONEL,ENT
- // `----+----+----' `----+----+----'
- ),
-
[_RLAYER] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
,SLCK,SYSR,PSCR,INS ,PAUS, MUTE,VOLD,VOLU,BLDN,BLUP, ,
@@ -163,7 +112,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
,EXLM,PIPE,DLR ,LPRN,RPRN, AMPR,LEFT,DOWN,RGHT,MINS,QUOT,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
, AT ,HASH,PERC,LCBR,RCBR, , ,CIRC,END ,UNDS,PGDN,BSLS, ,
- //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
+ //`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
, , , , ,
// `----+----+----' `----+----+----'
),
@@ -186,7 +135,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- ,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,MS_U,XXXX,XXXX,MCAD,
+ ,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,MS_U,XXXX,XXXX,XXXX,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
,XXXX,XXXX,XXXX,XXXX,XXXX, BTN2,MS_L,MS_D,MS_R,BTN1,XXXX,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
@@ -200,9 +149,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
REST,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- XXXX,QWER,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,ONER,XXXX,XXXX,
+ XXXX,QWER,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- XXXX,XXXX,XXXX,DVOR,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
+ XXXX,XXXX,XXXX,XXXX,XXXX,XXXX, XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
//|----+----+----+----+----+----+----. ,----|----+----+----+----+----+----|
XXXX,XXXX,XXXX,COLE,XXXX,XXXX, , ,XXXX,XXXX,XXXX,XXXX,XXXX,XXXX,
//`----+----+----+--+-+----+----+----/ \----+----+----+----+----+----+----'
@@ -212,6 +161,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
+/* VARIABLES */
+// Configurable Variables for layer toggled light
+int layerBLStep = 20; // change how much the brightness changes when holding layer key
+int breathPulse = 5; // timing of the breathing
+int breathPulseStall = 3; // time to pause at top and bottom of breath cycle
+int blSteps = 6; // blSteps + 1 is the amount of brightness settings when manually adjusting
+
+// Variables needed for layer locked breathing and layer toggling lighting to work
+int counter = 0;
+bool breathUp = true;
+bool resetBL = false;
+bool rlocked = false;
+bool llocked = false;
+bool configOn = false;
+int lockedBLLevel;
+int momentaryLBLLevel;
+int momentaryRBLLevel;
+int currentBL;
+/* END VARIABLES */
+
/* TAP DANCE */
void shift_caps_down (qk_tap_dance_state_t *state, void *user_data) {
if (state->count >= 3) {
@@ -220,7 +189,6 @@ void shift_caps_down (qk_tap_dance_state_t *state, void *user_data) {
register_code (KC_LSFT);
}
}
-
void shift_caps_up (qk_tap_dance_state_t *state, void *user_data) {
if (state->count >= 3) {
unregister_code (KC_CAPS);
@@ -228,54 +196,90 @@ void shift_caps_up (qk_tap_dance_state_t *state, void *user_data) {
unregister_code (KC_LSFT);
}
}
+void shift_ctrlalt_down (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count >= 4) {
+ register_code (KC_LCTL);
+ register_code (KC_LALT);
+ } else if (state->count == 3) {
+ register_code (KC_LALT);
+ } else if (state->count == 2) {
+ register_code (KC_LCTL);
+ } else {
+ register_code (KC_RSFT);
+ }
+}
+void shift_ctlalt_up (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count >= 4) {
+ unregister_code (KC_LALT);
+ unregister_code (KC_LCTL);
+ } else if (state->count == 3) {
+ unregister_code (KC_LALT);
+ } else if (state->count == 2) {
+ unregister_code (KC_LCTL);
+ } else {
+ unregister_code (KC_RSFT);
+ }
+}
+void ctrlaltdel_up (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count >= 3) {
+ unregister_code (KC_DEL);
+ unregister_code (KC_LALT);
+ unregister_code (KC_LCTL);
+ } else {
+ }
+}
+void ctrlaltdel_down (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count >= 3) {
+ register_code (KC_LCTL);
+ register_code (KC_LALT);
+ register_code (KC_DEL);
+ } else {
+ }
+}
qk_tap_dance_action_t tap_dance_actions[] = {
[TD_LGUIAPP] = ACTION_TAP_DANCE_DOUBLE(KC_LGUI, KC_APP),
- [TD_SHIFTCAPS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, shift_caps_down, shift_caps_up)
+ [TD_SHIFTCAPS] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, shift_caps_down, shift_caps_up),
+ [TD_SHIFTCLAT] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, shift_ctrlalt_down, shift_ctlalt_up),
+ [TD_CTRLALTDL] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, ctrlaltdel_down, ctrlaltdel_up)
};
-
/* END TAP DANCE */
+
void persistent_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);
}
-/* Variables for layer light toggling */
-static uint16_t currentBL = 0;
-static uint16_t rlocked = 0;
-static uint16_t llocked = 0;
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
+ configOn = false;
+ if (momentaryRBLLevel != 0 || momentaryLBLLevel != 0){
+ backlight_toggle();
+ }
}
return false;
break;
case COLEMAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK);
- }
- return false;
- break;
- case ONEHANDR:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_ONEHANDR);
- }
- return false;
- break;
- case DVORAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_DVORAK);
+ configOn = false;
+ if (momentaryRBLLevel != 0 || momentaryLBLLevel != 0){
+ backlight_toggle();
+ }
}
return false;
break;
case CONFIG:
if (record->event.pressed) {
set_single_persistent_default_layer(_CONFIG);
- backlight_toggle();
+ configOn = true;
+ if (momentaryRBLLevel != 0 || momentaryLBLLevel != 0){
+ backlight_toggle();
+ }
}
return false;
break;
@@ -283,22 +287,23 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
layer_on(_RLAYER);
update_tri_layer(_RLAYER, _LLAYER, _DUAL);
- /* add logic to toggle backlight change when on a layer */
- currentBL = get_backlight_level();
- if ( currentBL == 0 || currentBL == 1 ) {
- backlight_set(5);
- } else {
- backlight_set(0);
+ momentaryRBLLevel = get_backlight_level();
+ if (momentaryRBLLevel != 0 || momentaryLBLLevel != 0){
+ for (int i = 0; i < layerBLStep ; i++){
+ backlight_increase();
+ }
}
} else {
unregister_code(KC_LGUI);
- rlocked = 0;
layer_off(_RLAYER);
update_tri_layer(_RLAYER, _LLAYER, _DUAL);
- if ( llocked == 0 ) {
- backlight_set(currentBL);
+ if ( llocked == false && configOn == false ) {
+ for (int i = 0; i < layerBLStep ; i++){
+ backlight_decrease();
+ }
} else {
}
+ rlocked = false;
}
return false;
break;
@@ -306,21 +311,22 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
layer_on(_LLAYER);
update_tri_layer(_RLAYER, _LLAYER, _DUAL);
- /* add logic to toggle backlight change when on a layer */
- currentBL = get_backlight_level();
- if ( currentBL == 0 || currentBL == 1 ) {
- backlight_set(5);
- } else {
- backlight_set(0);
+ momentaryLBLLevel = get_backlight_level();
+ if (momentaryRBLLevel != 0 || momentaryLBLLevel != 0){
+ for (int i = 0; i < layerBLStep ; i++){
+ backlight_increase();
+ }
}
} else {
- llocked = 0;
layer_off(_LLAYER);
update_tri_layer(_RLAYER, _LLAYER, _DUAL);
- if ( rlocked == 0 ) {
- backlight_set(currentBL);
+ if ( rlocked == false && configOn == false ) {
+ for (int i = 0; i < layerBLStep ; i++){
+ backlight_decrease();
+ }
} else {
}
+ llocked = false;
}
return false;
break;
@@ -328,13 +334,10 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
layer_on(_RLAYER);
/* add logic to toggle backlight change when on a layer */
- rlocked = 1;
- currentBL = get_backlight_level();
- if ( currentBL == 0 || currentBL == 1 ) {
- backlight_set(5);
- } else {
- backlight_set(0);
+ if (rlocked == false && llocked == false){
+ lockedBLLevel = get_backlight_level();
}
+ rlocked = true;
} else {
}
return false;
@@ -343,25 +346,76 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
layer_on(_LLAYER);
/* add logic to toggle backlight change when on a layer */
- llocked = 1;
- currentBL = get_backlight_level();
- if ( currentBL == 0 || currentBL == 1 ) {
- backlight_set(5);
- } else {
- backlight_set(0);
+ if (rlocked == false && llocked == false){
+ lockedBLLevel = get_backlight_level();
+ }
+ llocked = true;
+ } else {
+ }
+ return false;
+ break;
+ case LEDUP:
+ if (record->event.pressed) {
+ for (int i = 0; i < (BACKLIGHT_LEVELS / blSteps ) ; i++ ){
+ backlight_increase();
}
} else {
}
return false;
break;
- case ONEHANDL:
+ case LEDDOWN:
if (record->event.pressed) {
- layer_on(_ONEHANDL);
+ for (int i = 0; i < (BACKLIGHT_LEVELS / blSteps ) ; i++ ){
+ backlight_decrease();
+ }
} else {
- layer_off(_ONEHANDL);
}
return false;
break;
}
return true;
}
+
+
+// LED breathing when a layer is locked
+void matrix_scan_user(void) {
+ // Only breath if layer is locked
+ if (lockedBLLevel != 0 && (rlocked || llocked)){
+ // counter to slow down the breathing
+ if (counter >= breathPulse) {
+ counter = 0;
+ // iterate brightness up or down
+ if (breathUp){
+ backlight_increase();
+ } else {
+ backlight_decrease();
+ }
+ // figure out if we need to change directions
+ currentBL = get_backlight_level();
+ if (currentBL >= BACKLIGHT_LEVELS){
+ breathUp = false;
+ // make counter a big negative number to add some stall time
+ counter = ((BACKLIGHT_LEVELS * breathPulseStall) * (-1));
+ } else if (currentBL == 0){
+ breathUp = true;
+ // make counter a big negative number to add some stall time
+ counter = ((BACKLIGHT_LEVELS * breathPulseStall) * (-1));
+ }
+ // make not that we need to change the brightness back to when we started the breathing
+ resetBL = true;
+ } else {
+ counter++;
+ }
+ } else {
+ // get the brightness back to the level it started at
+ if (resetBL){
+ int i = 0;
+ // i is just there to make sure i don't get stuck in a loop if for some reason get_backlight_level isn't working as expected
+ while (get_backlight_level() != lockedBLLevel && i <= BACKLIGHT_LEVELS ){
+ backlight_step();
+ i++;
+ }
+ resetBL = false;
+ }
+ }
+}
diff --git a/keyboards/iris/keymaps/vyolle/config.h b/keyboards/iris/keymaps/vyolle/config.h
new file mode 100644
index 000000000..1adbd65b5
--- /dev/null
+++ b/keyboards/iris/keymaps/vyolle/config.h
@@ -0,0 +1,44 @@
+/*
+Copyright 2017 Danny Nguyen <danny@hexwire.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_I2C
+// #define USE_SERIAL
+
+
+#define FORCE_NKRO //Cause it's suprisingly handy.
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+
+#define MOUSEKEY_INTERVAL 16
+
+#define MOUSEKEY_DELAY 0
+
+#define MOUSEKEY_TIME_TO_MAX 60
+
+#define MOUSEKEY_MAX_SPEED 7
+
+#define MOUSEKEY_WHEEL_DELAY 0
+
diff --git a/keyboards/iris/keymaps/vyolle/keymap.c b/keyboards/iris/keymaps/vyolle/keymap.c
new file mode 100644
index 000000000..33e171821
--- /dev/null
+++ b/keyboards/iris/keymaps/vyolle/keymap.c
@@ -0,0 +1,115 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _ADJUST 4
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+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_QUOT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RSFT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LGUI, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_RALT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RGUI,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ KC_LCTL, LOWER, KC_SPC, KC_ENT, RAISE, KC_RCTL
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_7, KC_8, KC_9, KC_PLUS, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSLS, KC_4, KC_5, KC_6, KC_MINUS, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_VOLU, KC_HOME, KC_LEFT, KC_UP, KC_RGHT, KC_PGUP, KC_PAST, KC_1, KC_2, KC_3, KC_EQL, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_VOLD, KC_END, KC_INS, KC_DOWN, KC_DEL, KC_PGDN, KC_MUTE, _______, _______, KC_0, KC_COMM, KC_DOT, KC_ENT, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_RAISE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_GRAVE, KC_TILD, KC_UNDS, KC_EQL, KC_PIPE, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_BSLASH,KC_LCBR, KC_RCBR, KC_MINUS, KC_LBRC, KC_RBRC, _______, KC_LEFT, KC_UP, KC_RGHT, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_COLN, KC_LT, KC_GT, KC_PLUS, KC_LPRN, KC_RPRN, _______, _______, _______, _______, KC_DOWN, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, KC_CAPS, KC_MENU, KC_APP, KC_PSCR, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_PAUS, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_SLCK, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ ),
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/iris/keymaps/vyolle/rules.mk b/keyboards/iris/keymaps/vyolle/rules.mk
new file mode 100644
index 000000000..e7cbfb83d
--- /dev/null
+++ b/keyboards/iris/keymaps/vyolle/rules.mk
@@ -0,0 +1,7 @@
+EXTRAKEY_ENABLE = yes # Disable if you run out of usb endpoints. Media keys need this to work.
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700) Uses extra usb endpoints.
+STENO_ENABLE = no # Additional protocols for Stenography(+1700), requires VIRTSER.
+AUDIO_ENABLE = no # Audio output on port C6
+MIDI_ENABLE = no # MIDI controls
+NKRO_ENABLE = yes
+BOOTMAGIC_ENABLE = yes
diff --git a/keyboards/iris/keymaps/wanleg/config.h b/keyboards/iris/keymaps/wanleg/config.h
new file mode 100644
index 000000000..9b9000768
--- /dev/null
+++ b/keyboards/iris/keymaps/wanleg/config.h
@@ -0,0 +1,33 @@
+/*
+Copyright 2017 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+#undef USE_I2C
+
+/* Select hand configuration */
+
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
+
+#define QMK_ESC_OUTPUT F6 // usually COL
+#define QMK_ESC_INPUT D7 // usually ROW
+#define QMK_LED B0
diff --git a/keyboards/iris/keymaps/wanleg/keymap.c b/keyboards/iris/keymaps/wanleg/keymap.c
new file mode 100644
index 000000000..6f8ff9066
--- /dev/null
+++ b/keyboards/iris/keymaps/wanleg/keymap.c
@@ -0,0 +1,76 @@
+
+#include QMK_KEYBOARD_H
+#include "wanleg.h"
+
+
+#define LAYOUT_iris_base( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C \
+ ) \
+ LAYOUT_wrapper( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K31, K32, K33, K34, K35, K36, _______, _______, K37, K38, K39, K3A, K3B, K3C, \
+ _______, _______, _______, _______, _______, _______ \
+ )
+#define LAYOUT_iris_base_wrapper(...) LAYOUT_iris_base(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_GK] = LAYOUT_iris_base_wrapper(
+ _______________GherkinLike_0_______________,
+ _______________GherkinLike_1_______________,
+ _______________GherkinLike_2_______________,
+ _______________GherkinLike_3_OneHand_______
+ ),
+ [ONE] = LAYOUT_wrapper(
+ _______________Qwerty_Row__0_______________,
+ _______________Qwerty_Row__1_______________,
+ _______________Qwerty_Row__2_______________,
+ KC_LCTL, KC_LGUI, KC_LALT, GHERKIN, SUBTER, SH_T(KC_SPC), _______, _______, SH_T(KC_SPC), SUPRA, KC_RGUI, KC_RALT, GHERKIN, KC_RCTL,
+ _______, _______, _______, _______, _______, _______
+ ),
+ [SUP] = LAYOUT_iris_base_wrapper(
+ ________________SUPRA_Row_0________________,
+ ________________SUPRA_Row_1________________,
+ ________________SUPRA_Row_2________________,
+ ________________SUPRA_Row_3________________
+ ),
+ [SUB] = LAYOUT_iris_base_wrapper(
+ _______________SUBTER_Row__0_______________,
+ _______________SUBTER_Row__1_______________,
+ _______________SUBTER_Row__2_______________,
+ _______________SUBTER_Row__3_______________
+ ),
+ [NUM] = LAYOUT_iris_base_wrapper(
+ _______________NUMBERS_Row_0_______________,
+ _______________NUMBERS_Row_1_______________,
+ _______________NUMBERS_Row_2_______________,
+ _______________NUMBERS_Row_3_______________
+ ),
+ [DIR] = LAYOUT_iris_base_wrapper(
+ _____________DIRECTIONS_Row__0_____________,
+ _____________DIRECTIONS_Row__1_____________,
+ _____________DIRECTIONS_Row__2_____________,
+ _______, _______, ONEHAND, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [ETC] = LAYOUT_iris_base_wrapper(
+ ______________ETCETERA_Row__0______________,
+ ______________ETCETERA_Row__1______________,
+ ______________ETCETERA_Row__2______________,
+ ______________ETCETERA_Row__3______________
+ )
+
+};
+
+
+void matrix_init_keymap(void) {
+ DDRD &= ~(1<<5);
+ PORTD &= ~(1<<5);
+
+ DDRB &= ~(1<<0);
+ PORTB &= ~(1<<0);
+}
diff --git a/keyboards/iris/keymaps/wanleg/rules.mk b/keyboards/iris/keymaps/wanleg/rules.mk
new file mode 100644
index 000000000..bbb05a5b4
--- /dev/null
+++ b/keyboards/iris/keymaps/wanleg/rules.mk
@@ -0,0 +1,5 @@
+RGBLIGHT_ENABLE = no
+BACKLIGHT_ENABLE = no
+
+SWAP_HANDS_ENABLE = yes
+BOOTLOADER = qmk-dfu
diff --git a/keyboards/iris/keymaps/xyverz/config.h b/keyboards/iris/keymaps/xyverz/config.h
index 0c61a8eac..b820a0753 100644
--- a/keyboards/iris/keymaps/xyverz/config.h
+++ b/keyboards/iris/keymaps/xyverz/config.h
@@ -23,8 +23,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define USE_SERIAL
#define EE_HANDS
-#define PREVENT_STUCK_MODIFIERS
-
#undef PRODUCT
#define PRODUCT Iris Keyboard
diff --git a/keyboards/iris/rev1/config.h b/keyboards/iris/rev1/config.h
index c22d49b26..3b31ca0d7 100644
--- a/keyboards/iris/rev1/config.h
+++ b/keyboards/iris/rev1/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef REV1_CONFIG_H
-#define REV1_CONFIG_H
+#pragma once
#include QMK_KEYBOARD_CONFIG_H
@@ -49,6 +48,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -64,10 +66,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
@@ -86,5 +85,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/iris/rev1/rev1.c b/keyboards/iris/rev1/rev1.c
index 3fdfaa94b..fe91fa3ea 100644
--- a/keyboards/iris/rev1/rev1.c
+++ b/keyboards/iris/rev1/rev1.c
@@ -1,6 +1,5 @@
#include "rev1.h"
-
#ifdef SSD1306OLED
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
diff --git a/keyboards/iris/rev1/rev1.h b/keyboards/iris/rev1/rev1.h
index 4db6bd197..da5c9cdc0 100644
--- a/keyboards/iris/rev1/rev1.h
+++ b/keyboards/iris/rev1/rev1.h
@@ -1,5 +1,4 @@
-#ifndef REV1_H
-#define REV1_H
+#pragma once
#include "iris.h"
@@ -36,5 +35,3 @@
{ R35, R34, R33, R32, R31, R30 }, \
{ KC_NO, KC_NO, RT4, RT1, RT2, RT3 } \
}
-
-#endif
diff --git a/keyboards/iris/rev1_led/config.h b/keyboards/iris/rev1_led/config.h
index 957776022..e9739c003 100644
--- a/keyboards/iris/rev1_led/config.h
+++ b/keyboards/iris/rev1_led/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef REV1_CONFIG_H
-#define REV1_CONFIG_H
+#pragma once
#include QMK_KEYBOARD_CONFIG_H
@@ -49,6 +48,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -64,10 +66,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
@@ -86,5 +85,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/iris/rev1_led/rev1_led.c b/keyboards/iris/rev1_led/rev1_led.c
index 681625f4b..d08eaea66 100644
--- a/keyboards/iris/rev1_led/rev1_led.c
+++ b/keyboards/iris/rev1_led/rev1_led.c
@@ -1,6 +1,5 @@
#include "rev1_led.h"
-
#ifdef SSD1306OLED
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
diff --git a/keyboards/iris/rev1_led/rev1_led.h b/keyboards/iris/rev1_led/rev1_led.h
index bac5e7bec..da5c9cdc0 100644
--- a/keyboards/iris/rev1_led/rev1_led.h
+++ b/keyboards/iris/rev1_led/rev1_led.h
@@ -1,5 +1,4 @@
-#ifndef REV1_LED_H
-#define REV1_LED_H
+#pragma once
#include "iris.h"
@@ -36,5 +35,3 @@
{ R35, R34, R33, R32, R31, R30 }, \
{ KC_NO, KC_NO, RT4, RT1, RT2, RT3 } \
}
-
-#endif
diff --git a/keyboards/iris/rev2/config.h b/keyboards/iris/rev2/config.h
index 4aa8cda17..d43d4b1c6 100644
--- a/keyboards/iris/rev2/config.h
+++ b/keyboards/iris/rev2/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef REV1_CONFIG_H
-#define REV1_CONFIG_H
+#pragma once
#include QMK_KEYBOARD_CONFIG_H
@@ -49,6 +48,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -64,10 +66,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
@@ -86,5 +85,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/iris/rev2/rev2.h b/keyboards/iris/rev2/rev2.h
index d581b346d..da5c9cdc0 100644
--- a/keyboards/iris/rev2/rev2.h
+++ b/keyboards/iris/rev2/rev2.h
@@ -1,5 +1,4 @@
-#ifndef REV2_H
-#define REV2_H
+#pragma once
#include "iris.h"
@@ -36,5 +35,3 @@
{ R35, R34, R33, R32, R31, R30 }, \
{ KC_NO, KC_NO, RT4, RT1, RT2, RT3 } \
}
-
-#endif
diff --git a/keyboards/iris/rev3/config.h b/keyboards/iris/rev3/config.h
new file mode 100644
index 000000000..5642512f3
--- /dev/null
+++ b/keyboards/iris/rev3/config.h
@@ -0,0 +1,87 @@
+/*
+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
+
+#include QMK_KEYBOARD_CONFIG_H
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCEEB
+#define PRODUCT_ID 0x1256
+#define DEVICE_VER 0x0300
+#define MANUFACTURER Keebio
+#define PRODUCT Iris Keyboard
+#define DESCRIPTION Split 50 percent ergonomic keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { D2, D3, D5, D7, D6 }
+#define MATRIX_COL_PINS { F1, F4, F5, F6, D4, B4 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define BACKLIGHT_PIN B6
+#define BACKLIGHT_LEVELS 5
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN F7
+#define RGBLED_NUM 12 // Number of LEDs
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/iris/rev3/rev3.c b/keyboards/iris/rev3/rev3.c
new file mode 100644
index 000000000..d8272db0f
--- /dev/null
+++ b/keyboards/iris/rev3/rev3.c
@@ -0,0 +1,42 @@
+#include "rev3.h"
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
+
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+// swap-hands action needs a matrix to define the swap
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+ /* Left hand, matrix positions */
+ {{0,5}, {1,5}, {2,5}, {3,5}, {4,5}, {5,5}},
+ {{0,6}, {1,6}, {2,6}, {3,6}, {4,6}, {5,6}},
+ {{0,7}, {1,7}, {2,7}, {3,7}, {4,7}, {5,7}},
+ {{0,8}, {1,8}, {2,8}, {3,8}, {4,8}, {5,8}},
+ {{0,9}, {1,9}, {2,9}, {3,9}, {4,9}, {5,9}},
+ /* Right hand, matrix positions */
+ {{0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}},
+ {{0,1}, {1,1}, {2,1}, {3,1}, {4,1}, {5,1}},
+ {{0,2}, {1,2}, {2,2}, {3,2}, {4,2}, {5,2}},
+ {{0,3}, {1,3}, {2,3}, {3,3}, {4,3}, {5,3}},
+ {{0,4}, {1,4}, {2,4}, {3,4}, {4,4}, {5,4}},
+};
+#endif
+
diff --git a/keyboards/iris/rev3/rev3.h b/keyboards/iris/rev3/rev3.h
new file mode 100644
index 000000000..d44cef9a6
--- /dev/null
+++ b/keyboards/iris/rev3/rev3.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#include "iris.h"
+#include "quantum.h"
+
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, LT4, RT4, R30, R31, R32, R33, R34, R35, \
+ LT1, LT2, LT3, RT3, RT2, RT1 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { KC_NO, KC_NO, LT4, LT1, LT2, LT3 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { R35, R34, R33, R32, R31, R30 }, \
+ { KC_NO, KC_NO, RT4, RT1, RT2, RT3 } \
+ }
diff --git a/keyboards/iris/rev3/rules.mk b/keyboards/iris/rev3/rules.mk
new file mode 100644
index 000000000..d7463419b
--- /dev/null
+++ b/keyboards/iris/rev3/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/iris/rules.mk b/keyboards/iris/rules.mk
index 07d78059e..e93d7dae8 100644
--- a/keyboards/iris/rules.mk
+++ b/keyboards/iris/rules.mk
@@ -1,5 +1,4 @@
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -36,9 +35,13 @@ F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
-# different sizes, comment this out, and the correct address will be loaded
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
-BOOTLOADER = caterina
+ifeq ($(strip $(KEYBOARD)), iris/rev3)
+ BOOTLOADER = dfu
+else
+ BOOTLOADER = caterina
+endif
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
@@ -58,9 +61,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SUBPROJECT_rev1 = yes
-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/jc65/v32a/config.h b/keyboards/jc65/v32a/config.h
index dc6d280f5..466cb7a28 100644
--- a/keyboards/jc65/v32a/config.h
+++ b/keyboards/jc65/v32a/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -43,4 +42,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* key combination for command */
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
-#endif
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
diff --git a/keyboards/jc65/v32a/rules.mk b/keyboards/jc65/v32a/rules.mk
index 1ea19fe00..fac85172e 100644
--- a/keyboards/jc65/v32a/rules.mk
+++ b/keyboards/jc65/v32a/rules.mk
@@ -26,13 +26,13 @@ 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
+# 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 = yes
-MOUSEKEY_ENABLE = yes
+BOOTMAGIC_ENABLE = full
+MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes
CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
diff --git a/keyboards/jc65/v32u4/keymaps/gam3cat/config.h b/keyboards/jc65/v32u4/keymaps/gam3cat/config.h
index a3819d3a5..e4df94be7 100644
--- a/keyboards/jc65/v32u4/keymaps/gam3cat/config.h
+++ b/keyboards/jc65/v32u4/keymaps/gam3cat/config.h
@@ -1,7 +1,10 @@
-#include "../../config.h"
+#pragma once
+
+//Force NKRO to be enabled.
+#define FORCE_NKRO
+
//GRAVE_ESC override for CTRL+SHIFT+ESC Windows task manager shortcut.
#define GRAVE_ESC_CTRL_OVERRIDE
-#define PREVENT_STUCK_MODIFIERS
//Delay matrix scan for tap dance, reduce to activate modifier keys faster.
//#define TAPPING_TERM 200
diff --git a/keyboards/jc65/v32u4/keymaps/gam3cat/keymap.c b/keyboards/jc65/v32u4/keymaps/gam3cat/keymap.c
index af45fb608..aa5709a37 100644
--- a/keyboards/jc65/v32u4/keymaps/gam3cat/keymap.c
+++ b/keyboards/jc65/v32u4/keymaps/gam3cat/keymap.c
@@ -11,13 +11,16 @@ enum layers {
_AL, // Adjust Layer
};
-enum jc65_keycodes {
+enum custom_keycodes {
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
+ QMK_REV,
+ KC_WEB,
+ KC_SP4
};
+extern backlight_config_t backlight_config;
+
#include "dynamic_macro.h"
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
#define FN_CAPS LT(_FL, KC_CAPS)
#define KC_DMR1 DYN_REC_START1
#define KC_DMR2 DYN_REC_START2
@@ -25,18 +28,16 @@ enum jc65_keycodes {
#define KC_DMP2 DYN_MACRO_PLAY2
#define KC_DMRS DYN_REC_STOP
-static uint8_t current_layer;
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* _BL: Base Layer, mostly standard 65% QWERTY layout.
+ /*#### _BL: Base Layer - Mostly standard 65% QWERTY layout.
* .---------------------------------------------------------------.
- * |GrE| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|
+ * |GrE|1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|
* |---------------------------------------------------------------|
- * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|
+ * |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|
* |---------------------------------------------------------------|
- * |FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return |PgU|
+ * |FnCaps|A |S |D |F |G |H |J |K |L |; |' |Return |PgU|
* |---------------------------------------------------------------|
- * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
+ * |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Up |PgD|
* |---------------------------------------------------------------|
* |Ctrl|Gui |Alt | Space |RAlt |Ctrl |Lft|Dwn|Rgt|
* *---------------------------------------------------------------*
@@ -48,16 +49,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LSFT, XXXXXXX, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
-
- /* _WL: Workman Layer.
+ /*#### _WL: Workman Layer.
* .---------------------------------------------------------------.
- * | | | | | | | | | | | | -| =| | |
+ * | | | | | | | | | | | |- |= | | |
* |---------------------------------------------------------------|
- * | | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| |
+ * | |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | |
* |---------------------------------------------------------------|
- * | | A| S| H| T| G| Y| N| E| O| I| '| | |
+ * | |A |S |H |T |G |Y |N |E |O |I |' | | |
* |---------------------------------------------------------------|
- * | | Z| X| M| C| V| K| L| ,| .| /| | | |
+ * | |Z |X |M |C |V |K |L |, |. |/ | | | |
* |---------------------------------------------------------------|
* | | | | | | | | | |
* *---------------------------------------------------------------*
@@ -69,16 +69,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_Z , KC_X , KC_M , KC_C , KC_V , KC_K , KC_L , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-
- /* _NL: Norman Layer.
+ /*#### _NL: Norman Layer.
* .---------------------------------------------------------------.
- * | | | | | | | | | | | | -| =| | |
+ * | | | | | | | | | | | |- |= | | |
* |---------------------------------------------------------------|
- * | | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| |
+ * | |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | |
* |---------------------------------------------------------------|
- * | | A| S| E| T| G| Y| N| I| O| H| '| | |
+ * | |A |S |E |T |G |Y |N |I |O |H |' | | |
* |---------------------------------------------------------------|
- * | | Z| X| C| V| B| P| M| ,| .| /| | | |
+ * | |Z |X |C |V |B |P |M |, |. |/ | | | |
* |---------------------------------------------------------------|
* | | | | | | | | | |
* *---------------------------------------------------------------*
@@ -90,16 +89,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_P , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-
- /* _DL: Dvorak Layer.
+ /*#### _DL: Dvorak Layer.
* .---------------------------------------------------------------.
- * | | | | | | | | | | | | [| ]| | |
+ * | | | | | | | | | | | |[ |] | | |
* |---------------------------------------------------------------|
- * | | '| ,| .| P| Y| F| G| C| R| L| /| =| \| |
+ * | |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | |
* |---------------------------------------------------------------|
- * | | A| O| E| U| I| D| H| T| N| S| -| | |
+ * | |A |O |E |U |I |D |H |T |N |S |- | | |
* |---------------------------------------------------------------|
- * | | ;| Q| J| K| X| B| M| W| V| Z| | | |
+ * | |; |Q |J |K |X |B |M |W |V |Z | | | |
* |---------------------------------------------------------------|
* | | | | | | | | | |
* *---------------------------------------------------------------*
@@ -111,16 +109,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_SCLN, KC_Q , KC_J , KC_K , KC_X , KC_B , KC_M , KC_W , KC_V , KC_Z , _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-
- /* _CL: Colmak Layer.
+ /*#### _CL: Colmak Layer.
* .---------------------------------------------------------------.
- * | | | | | | | | | | | | -| =| | |
+ * | | | | | | | | | | | |- |= | | |
* |---------------------------------------------------------------|
- * | | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| |
+ * | |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | |
* |---------------------------------------------------------------|
- * | | A| R| S| T| D| H| N| E| I| O| '| | |
+ * | |A |R |S |T |D |H |N |E |I |O |' | | |
* |---------------------------------------------------------------|
- * | | Z| X| C| V| B| K| M| ,| .| /| | | |
+ * | |Z |X |C |V |B |K |M |, |. |/ | | | |
* |---------------------------------------------------------------|
* | | | | | | | | | |
* *---------------------------------------------------------------*
@@ -132,11 +129,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_K , KC_M , KC_COMM, KC_DOT , KC_SLSH, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
-
- /* _FL: Function Layer.
- * M0 opens Chrome
+ /*#### _FL: Function Layer.
* .---------------------------------------------------------------.
- * |M0 | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|SLock |PSc|
+ * |Web|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|SLock |PSc|
* |---------------------------------------------------------------|
* |Fn_AL| | | | | | | | | | | | | |Pau|
* |---------------------------------------------------------------|
@@ -144,21 +139,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |---------------------------------------------------------------|
* | | | | | | | | | | | |VlMute|VlU|End|
* |---------------------------------------------------------------|
- * | | |Menu| | | |WBk|VlD|WFw|
+ * | | |Menu| SP4 | | |WBk|VlD|WFw|
* *---------------------------------------------------------------*
*/
[_FL] = LAYOUT(
- M(0), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_SLCK, KC_PSCR,
+ KC_WEB, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_SLCK, KC_PSCR,
MO(_AL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAUS,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MUTE, KC_VOLU, KC_END,
- XXXXXXX, XXXXXXX, KC_MENU, M(1), M(1), M(1), XXXXXXX, XXXXXXX, XXXXXXX, KC_WBAK, KC_VOLD, KC_WFWD
+ XXXXXXX, XXXXXXX, KC_MENU, KC_SP4, KC_SP4, KC_SP4, XXXXXXX, XXXXXXX, XXXXXXX, KC_WBAK, KC_VOLD, KC_WFWD
),
-
- /* _AL: Adjust Layer.
- * Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
+ /*#### _AL: Adjust Layer - Keymap select, RGB Underglow, LED backlight, and Dynamic Macro settings.
* .---------------------------------------------------------------.
- * |Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| |MP1|
+ * |Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| |MP1|
* |---------------------------------------------------------------|
* |Fn_AL|_BL|_WL| | | | | | | | | | | |MR1|
* |---------------------------------------------------------------|
@@ -170,7 +163,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* *---------------------------------------------------------------*
*/
[_AL] = LAYOUT(
- F(0), RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMP1,
+ QMK_REV, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, BL_TOGG, BL_DEC, BL_INC, XXXXXXX, XXXXXXX, KC_DMP1,
_______, DF(_BL), DF(_WL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMR1,
_______, XXXXXXX, XXXXXXX, DF(_DL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMRS,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DF(_CL), XXXXXXX, DF(_BL), DF(_NL), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DMR2,
@@ -178,102 +171,96 @@ 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 0:
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMK_REV:
if (record->event.pressed) {
- return MACRO(I(0), D(LGUI), T(R), U(LGUI), END);
+ SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION ":" QMK_BUILDDATE);
}
- else {
+ return false;
+ break;
+ case KC_WEB:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LGUI("r"));
+ wait_ms(100);
SEND_STRING("chrome.exe https://geekhack.org/index.php?topic=86756.new;topicseen#new\n");
- return false;
}
- break;
- case 1:
+ return false;
+ break;
+ case KC_SP4:
if (record->event.pressed) {
- return MACRO(I(0), T(SPC), T(SPC), T(SPC), T(SPC), END);
+ SEND_STRING (" ");
}
- else {
- return false;
- }
- break;
+ return false;
+ break;
}
- return MACRO_NONE;
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(0),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch (id) {
- case 0:
- if (record->event.pressed) {
- SEND_STRING ("[QMK:" QMK_KEYBOARD ":" QMK_KEYMAP ":" QMK_VERSION "]");
- }
- break;
+ // Dynamic Macros.
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
}
+ return true;
+}
+
+void custom_backlight_level(uint8_t level) {
+ if (level > BACKLIGHT_LEVELS)
+ level = BACKLIGHT_LEVELS;
+ backlight_config.level = level;
+ backlight_config.enable = !!backlight_config.level;
+ backlight_set(backlight_config.level);
}
void matrix_init_user(void) {
#ifdef BACKLIGHT_ENABLE
- backlight_level(0);
+ custom_backlight_level(0);
#endif
#ifdef RGBLIGHT_ENABLE
rgblight_mode(1);
- rgblight_sethsv(180,100,100);
+ rgblight_sethsv_noeeprom(180,100,100);
#endif
}
-// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
- uint8_t layer = biton32(layer_state);
- if (current_layer == layer) {
- }
- else {
- current_layer = layer;
- switch (layer) {
- case 0:
- backlight_level(0);
- rgblight_sethsv(180,100,255);
- break;
- case 1:
- backlight_level(1);
- rgblight_sethsv(180,95,240);
- break;
- case 2:
- backlight_level(1);
- rgblight_sethsv(180,90,225);
- break;
- case 3:
- backlight_level(1);
- rgblight_sethsv(180,85,210);
- break;
- case 4:
- backlight_level(1);
- rgblight_sethsv(180,80,195);
- break;
- case 5:
- backlight_level(2);
- rgblight_sethsv(230,255,255);
- break;
- case 6:
- backlight_level(3);
- rgblight_sethsv(350,255,255);
- break;
- default:
- backlight_level(0);
- rgblight_sethsv(180,100,100);
- break;
- }
- }
}
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- // Enable Dynamic Macros.
- if (!process_record_dynamic_macro(keycode, record)) {
- return false;
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case _BL:
+ custom_backlight_level(0);
+ rgblight_sethsv_noeeprom(180,100,255);
+ break;
+ case _WL:
+ custom_backlight_level(1);
+ rgblight_sethsv_noeeprom(180,95,240);
+ break;
+ case _NL:
+ custom_backlight_level(1);
+ rgblight_sethsv_noeeprom(180,90,225);
+ break;
+ case _DL:
+ custom_backlight_level(1);
+ rgblight_sethsv_noeeprom(180,85,210);
+ break;
+ case _CL:
+ custom_backlight_level(1);
+ rgblight_sethsv_noeeprom(180,80,195);
+ break;
+ case _FL:
+ custom_backlight_level(2);
+ rgblight_sethsv_noeeprom(230,255,255);
+ break;
+ case _AL:
+ custom_backlight_level(3);
+ rgblight_sethsv_noeeprom(350,255,255);
+ break;
+ default:
+ custom_backlight_level(0);
+ rgblight_sethsv_noeeprom(180,100,100);
+ break;
}
- return true;
+ return state;
+}
+
+void led_set_user(uint8_t usb_led) {
+
}
diff --git a/keyboards/jc65/v32u4/keymaps/gam3cat/readme.md b/keyboards/jc65/v32u4/keymaps/gam3cat/readme.md
index 88b65dbbb..e79ce4ff7 100644
--- a/keyboards/jc65/v32u4/keymaps/gam3cat/readme.md
+++ b/keyboards/jc65/v32u4/keymaps/gam3cat/readme.md
@@ -13,76 +13,74 @@ make jc65/v32u4:gam3cat
(Caps+TAB+( )): (Q)WERTY, (W)orkman, (N)orman, (D)vorak, (C)olmak
### Base Layer Options:
-#### _BL: Base Layer, mostly standard 65% QWERTY layout.
+#### _BL: Base Layer - Mostly standard 65% QWERTY layout.
.---------------------------------------------------------------.
- |GrE| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |Ins|
+ |GrE|1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backsp |Ins|
|---------------------------------------------------------------|
- |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|Del|
+ |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |Del|
|---------------------------------------------------------------|
- |FnCaps| A| S| D| F| G| H| J| K| L| ;| '|Return |PgU|
+ |FnCaps|A |S |D |F |G |H |J |K |L |; |' |Return |PgU|
|---------------------------------------------------------------|
- |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgD|
+ |Shift |Z |X |C |V |B |N |M |, |. |/ |Shift |Up |PgD|
|---------------------------------------------------------------|
|Ctrl|Gui |Alt | Space |RAlt |Ctrl |Lft|Dwn|Rgt|
*---------------------------------------------------------------*
#### _WL: Workman Layer.
.---------------------------------------------------------------.
- | | | | | | | | | | | | -| =| | |
+ | | | | | | | | | | | |- |= | | |
|---------------------------------------------------------------|
- | | Q| D| R| W| B| J| F| U| P| ;| [| ]| \| |
+ | |Q |D |R |W |B |J |F |U |P |; |[ |] |\ | |
|---------------------------------------------------------------|
- | | A| S| H| T| G| Y| N| E| O| I| '| | |
+ | |A |S |H |T |G |Y |N |E |O |I |' | | |
|---------------------------------------------------------------|
- | | Z| X| M| C| V| K| L| ,| .| /| | | |
+ | |Z |X |M |C |V |K |L |, |. |/ | | | |
|---------------------------------------------------------------|
| | | | | | | | | |
*---------------------------------------------------------------*
#### _NL: Norman Layer.
.---------------------------------------------------------------.
- | | | | | | | | | | | | -| =| | |
+ | | | | | | | | | | | |- |= | | |
|---------------------------------------------------------------|
- | | Q| W| D| F| K| J| U| R| L| ;| [| ]| \| |
+ | |Q |W |D |F |K |J |U |R |L |; |[ |] |\ | |
|---------------------------------------------------------------|
- | | A| S| E| T| G| Y| N| I| O| H| '| | |
+ | |A |S |E |T |G |Y |N |I |O |H |' | | |
|---------------------------------------------------------------|
- | | Z| X| C| V| B| P| M| ,| .| /| | | |
+ | |Z |X |C |V |B |P |M |, |. |/ | | | |
|---------------------------------------------------------------|
| | | | | | | | | |
*---------------------------------------------------------------*
#### _DL: Dvorak Layer.
.---------------------------------------------------------------.
- | | | | | | | | | | | | [| ]| | |
+ | | | | | | | | | | | |[ |] | | |
|---------------------------------------------------------------|
- | | '| ,| .| P| Y| F| G| C| R| L| /| =| \| |
+ | |' |, |. |P |Y |F |G |C |R |L |/ |= |\ | |
|---------------------------------------------------------------|
- | | A| O| E| U| I| D| H| T| N| S| -| | |
+ | |A |O |E |U |I |D |H |T |N |S |- | | |
|---------------------------------------------------------------|
- | | ;| Q| J| K| X| B| M| W| V| Z| | | |
+ | |; |Q |J |K |X |B |M |W |V |Z | | | |
|---------------------------------------------------------------|
| | | | | | | | | |
*---------------------------------------------------------------*
#### _CL: Colmak Layer.
.---------------------------------------------------------------.
- | | | | | | | | | | | | -| =| | |
+ | | | | | | | | | | | |- |= | | |
|---------------------------------------------------------------|
- | | Q| W| F| P| G| J| L| U| Y| ;| [| ]| \| |
+ | |Q |W |F |P |G |J |L |U |Y |; |[ |] |\ | |
|---------------------------------------------------------------|
- | | A| R| S| T| D| H| N| E| I| O| '| | |
+ | |A |R |S |T |D |H |N |E |I |O |' | | |
|---------------------------------------------------------------|
- | | Z| X| C| V| B| K| M| ,| .| /| | | |
+ | |Z |X |C |V |B |K |M |, |. |/ | | | |
|---------------------------------------------------------------|
| | | | | | | | | |
*---------------------------------------------------------------*
-### Function Layer: (hold Caps to access)
- M0 opens Chrome
#### _FL: Function Layer.
.---------------------------------------------------------------.
- |M0 | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12|SLock |PSc|
+ |Web|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|SLock |PSc|
|---------------------------------------------------------------|
|Fn_AL| | | | | | | | | | | | | |Pau|
|---------------------------------------------------------------|
@@ -90,14 +88,12 @@ make jc65/v32u4:gam3cat
|---------------------------------------------------------------|
| | | | | | | | | | | |VlMute|VlU|End|
|---------------------------------------------------------------|
- | | |Menu| | | |WBk|VlD|WFw|
+ | | |Menu| SP4 | | |WBk|VlD|WFw|
*---------------------------------------------------------------*
-### Adjust Layer: (hold Caps+TAB to access)
- Default keymap, RGB Underglow, LED backlight, and Dynamic Macro settings.
-#### _AL: Adjust Layer.
+#### _AL: Adjust Layer - Keymap select, RGB Underglow, LED backlight, and Dynamic Macro settings.
.---------------------------------------------------------------.
- |Ver|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| |MP1|
+ |Rev|Tog|Mod|H- |H+ |S- |S+ |V- |V+ | |BLT|BL-|BL+| |MP1|
|---------------------------------------------------------------|
|Fn_AL|_BL|_WL| | | | | | | | | | | |MR1|
|---------------------------------------------------------------|
diff --git a/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk b/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk
index c0a3ac69c..85b2b41a6 100644
--- a/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk
+++ b/keyboards/jc65/v32u4/keymaps/gam3cat/rules.mk
@@ -1,6 +1,24 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-BACKLIGHT_ENABLE=yes
-//TAP_DANCE_ENABLE=yes
+# 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
+#
+TAP_DANCE_ENABLE = no # Enable TapDance functionality
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+1500)
+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 # Nkey Rollover - If this doesn't work, add this to config.h: #define FORCE_NKRO
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+UNICODEMAP_ENABLE = no # Enable extended unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
+#VARIABLE_TRACE = no # Use this to debug changes to variable values
+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/jd40/keymaps/default/keymap.c b/keyboards/jd40/keymaps/default/keymap.c
index b4ec05505..ff31fd6f5 100644
--- a/keyboards/jd40/keymaps/default/keymap.c
+++ b/keyboards/jd40/keymaps/default/keymap.c
@@ -1,5 +1,4 @@
#include QMK_KEYBOARD_H
-#include "action_layer.h"
#define _BL 0
#define _AL 1
@@ -7,189 +6,48 @@
#define _UL 3
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_BL] = LAYOUT_kc(
- F12, Q, W, E, R, T, Y, U, I, O, P, BSPC,
- TAB, A, S, D, F, G, H, J, K, L, ENT,
- LSFT, Z, X, C, V, B, N, M, COMM, UP, DOT,
- LCTL, LGUI, LALT, FN0, SPC, SPC, FN0, LEFT, DOWN, RIGHT),
-
- [_AL] = LAYOUT_kc(
- GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, DEL,
- CAPS, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
- TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, SCLN, PGUP, QUOT,
- TRNS, TRNS, TRNS, TRNS, FN3, FN3, TRNS, HOME, PGDN, END),
-
- [_FL] = LAYOUT_kc(
- TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
- TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
- TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
- TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
-
- [_UL] = LAYOUT_kc(
- TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
- TRNS, FN4, FN5, FN11, FN10, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
- TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
- TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
-};
-
-enum function_id
-{
- RGBLED_TOGGLE,
- RGBLED_STEP_MODE,
- RGBLED_INCREASE_HUE,
- RGBLED_DECREASE_HUE,
- RGBLED_INCREASE_SAT,
- RGBLED_DECREASE_SAT,
- RGBLED_INCREASE_VAL,
- RGBLED_DECREASE_VAL,
- SHIFT_ESC,
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(1), // Momentary Fn overlay
- [1] = ACTION_LAYER_TOGGLE(2), // Toggle Arrow Layer overlay
- [2] = ACTION_LAYER_TAP_KEY(2, KC_CAPS), // Tap to toggle caps lock and hold to activate function layer
- [3] = ACTION_LAYER_TOGGLE(3), // Toggle Underglow Layer overlay
- [4] = ACTION_FUNCTION(RGBLED_TOGGLE), //Turn on/off underglow
- [5] = ACTION_FUNCTION(RGBLED_STEP_MODE), // Change underglow mode
- [6] = ACTION_FUNCTION(RGBLED_INCREASE_HUE),
- [7] = ACTION_FUNCTION(RGBLED_DECREASE_HUE),
- [8] = ACTION_FUNCTION(RGBLED_INCREASE_SAT),
- [9] = ACTION_FUNCTION(RGBLED_DECREASE_SAT),
- [10] = ACTION_FUNCTION(RGBLED_INCREASE_VAL),
- [11] = ACTION_FUNCTION(RGBLED_DECREASE_VAL),
- [12] = ACTION_FUNCTION(SHIFT_ESC),
+ [_BL] = LAYOUT(
+ KC_F12, 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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_UP, KC_DOT,
+ KC_LCTL, KC_LGUI, KC_LALT, MO(_AL), KC_SPC, KC_SPC, MO(_AL), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_AL] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
+ KC_CAPS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_SCLN, KC_PGUP, KC_QUOT,
+ _______, _______, _______, _______, TG(_UL), TG(_UL), _______, KC_HOME, KC_PGDN, KC_END
+ ),
+
+ [_FL] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_UL] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
};
-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)
-{
-
- // Layer LED indicators
- // ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster
- uint32_t layer = layer_state;
- if (layer & (1 << 1))
- {
- //gh60_wasd_leds_on();
- }
- else
- {
- //gh60_wasd_leds_off();
- }
-
- if (layer & (1 << 2))
- {
- //gh60_esc_led_on();
- }
- else
- {
- //gh60_esc_led_off();
- }
-};
-
-#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT))
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch (id)
- {
- case RGBLED_TOGGLE:
- //led operations
- if (record->event.pressed)
- {
- rgblight_toggle();
- }
- break;
- case RGBLED_INCREASE_HUE:
- if (record->event.pressed)
- {
- rgblight_increase_hue();
- }
- break;
- case RGBLED_DECREASE_HUE:
- if (record->event.pressed)
- {
- rgblight_decrease_hue();
- }
- break;
- case RGBLED_INCREASE_SAT:
- if (record->event.pressed)
- {
- rgblight_increase_sat();
- }
- break;
- case RGBLED_DECREASE_SAT:
- if (record->event.pressed)
- {
- rgblight_decrease_sat();
- }
- break;
- case RGBLED_INCREASE_VAL:
- if (record->event.pressed)
- {
- rgblight_increase_val();
- }
- break;
- case RGBLED_DECREASE_VAL:
- if (record->event.pressed)
- {
- rgblight_decrease_val();
- }
- break;
- case RGBLED_STEP_MODE:
- if (record->event.pressed)
- {
- rgblight_step();
- }
- break;
- static uint8_t shift_esc_shift_mask;
- // Shift + ESC = ~
- case SHIFT_ESC:
- shift_esc_shift_mask = get_mods() & MODS_CTRL_MASK;
- if (record->event.pressed)
- {
- if (shift_esc_shift_mask)
- {
- add_key(KC_GRV);
- send_keyboard_report();
- }
- else
- {
- add_key(KC_ESC);
- send_keyboard_report();
- }
- }
- else
- {
- if (shift_esc_shift_mask)
- {
- del_key(KC_GRV);
- send_keyboard_report();
- }
- else
- {
- del_key(KC_ESC);
- send_keyboard_report();
- }
- }
- break;
- }
+void matrix_scan_user(void) {
+ // Layer LED indicators
+ // ESC led on when in function layer, WASD cluster leds enabled when on arrow cluster
+ uint32_t layer = layer_state;
+ if (layer & (1 << 1)) {
+ //gh60_wasd_leds_on();
+ } else {
+ //gh60_wasd_leds_off();
+ }
+
+ if (layer & (1 << 2)) {
+ //gh60_esc_led_on();
+ } else {
+ //gh60_esc_led_off();
+ }
};
diff --git a/keyboards/jd40/readme.md b/keyboards/jd40/readme.md
index c5ab42ed0..3a92b8fb8 100644
--- a/keyboards/jd40/readme.md
+++ b/keyboards/jd40/readme.md
@@ -3,12 +3,12 @@ JD40
A compact 40% keyboard.
-Keyboard Maintainer: QMK Community
-Hardware Supported: JD40 PCB
-Hardware Availability: [1up](https://1upkeyboards.com/jd40-mkii-1up-keyboards-logo-pcb.html) [mechanicalkeyboards.com](https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=2452) [originative](https://www.originativeco.com/products/jd40-pcb)
+Keyboard Maintainer: QMK Community
+Hardware Supported: JD40 PCB
+Hardware Availability: [1upkeyboards](https://www.1upkeyboards.com/shop/controllers/jd40-mkii-1up-keyboards-logo-pcb/), [mechanicalkeyboards.com](https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=2452), [originative](https://www.originativeco.com/products/jd40-pcb)
Make example for this keyboard (after setting up your build environment):
make jd40:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/jd45/jd45.h b/keyboards/jd45/jd45.h
index 48641c199..105a8acb6 100644
--- a/keyboards/jd45/jd45.h
+++ b/keyboards/jd45/jd45.h
@@ -6,15 +6,27 @@
/* JD45 keymap definition macro
*/
#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 \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k36, k38, k39, k3a, k3b \
) { \
- { KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, KC_##K09, KC_##K10, KC_##K11, KC_##K12, KC_##K13 }, \
- { KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, KC_##K19, KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_NO }, \
- { KC_##K26, KC_##K27, KC_##K28, KC_##K29, KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_NO }, \
- { KC_##K38, KC_##K39, KC_##K40, KC_##K41, KC_##K42, KC_NO, KC_##K43, KC_NO, KC_##K44, KC_##K45, KC_##K46, KC_##K47, 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, KC_NO }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, KC_NO }, \
+ { k30, k31, k32, k33, k34, KC_NO, k36, KC_NO, k38, k39, k3a, k3b, KC_NO } \
+}
+
+#define LAYOUT_kc( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k36, k38, k39, k3a, k3b \
+) { \
+ { KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_##k06, KC_##k07, KC_##k08, KC_##k09, KC_##k0a, KC_##k0b, KC_##k0c }, \
+ { KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, KC_NO }, \
+ { KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##k26, KC_##k27, KC_##k28, KC_##k29, KC_##k2a, KC_##k2b, KC_NO }, \
+ { KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_NO, KC_##k36, KC_NO, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b, KC_NO } \
}
#endif
diff --git a/keyboards/jd45/keymaps/blakedietz/config.h b/keyboards/jd45/keymaps/blakedietz/config.h
index 38d850ef6..eb4cf3bdf 100644
--- a/keyboards/jd45/keymaps/blakedietz/config.h
+++ b/keyboards/jd45/keymaps/blakedietz/config.h
@@ -1,19 +1,4 @@
-#include "../../config.h"
-
-/**
- *JD45 keymap definition macro
- */
-#define LAYOUT_JD45( \
- 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 \
-) { \
- { 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, KC_NO }, \
- { K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, KC_NO }, \
- { K38, K39, K40, K41, K42, KC_NO, K43, KC_NO, K44, K45, K46, K47, KC_NO } \
-}
+#pragma once
/**
* This makes it possible to do rolling combos (zx) with keys that convert to other keys on hold (z becomes ctrl when
@@ -28,4 +13,4 @@
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_TIME_TO_MAX 5
#define MOUSEKEY_MAX_SPEED 2
-#define MOUSEKEY_WHEEL_DELAY 0 \ No newline at end of file
+#define MOUSEKEY_WHEEL_DELAY 0
diff --git a/keyboards/jd45/keymaps/blakedietz/keymap.c b/keyboards/jd45/keymaps/blakedietz/keymap.c
index bde760a22..a40a2c604 100644
--- a/keyboards/jd45/keymaps/blakedietz/keymap.c
+++ b/keyboards/jd45/keymaps/blakedietz/keymap.c
@@ -45,10 +45,6 @@ enum macro_keycodes
KC_AG_TAB_R,
};
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
/**
* This section of macros is for tap or hold functionality. Keys will fire off the second symbol in the name if tapped
* or fire the first symbol in the name if held. For example
@@ -101,7 +97,7 @@ enum macro_keycodes
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_JD45(
+ [_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, ALL_T(KC_NO),
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -124,7 +120,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Prev | Next | Mute |
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_LOWER] = LAYOUT_JD45(
+ [_LOWER] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -146,7 +142,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Prev | Next | Mute |
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_RAISE] = LAYOUT_JD45(
+ [_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_BSPC, KC_BSPC,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -169,7 +165,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_MOUSECURSOR] = LAYOUT_JD45(
+ [_MOUSECURSOR] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
_______, _______, _______, KC_MS_U, _______, _______, _______, KC_ACL2, KC_ACL1, KC_ACL0, _______, _______, _______,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -191,7 +187,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | Reset |
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_ADJUST] = LAYOUT_JD45(
+ [_ADJUST] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
@@ -214,7 +210,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | |
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_VIM] = LAYOUT_JD45(
+ [_VIM] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -236,7 +232,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | |
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_MEDIA] = LAYOUT_JD45(
+ [_MEDIA] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
diff --git a/keyboards/jd45/keymaps/default/keymap.c b/keyboards/jd45/keymaps/default/keymap.c
index 0bb519f5f..61e051a36 100644
--- a/keyboards/jd45/keymaps/default/keymap.c
+++ b/keyboards/jd45/keymaps/default/keymap.c
@@ -5,13 +5,10 @@
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
- ESC, Q, W, E, R, T, Y, U, I, O, P, QUOT, BSPC,
- TAB, A, S, D, F, G, H, J, K, L, SCLN, ENT,
- LSFT, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,
- PAUSE, LCTL, LALT, DEL, SPC, DEL, LEFT, UP, DOWN, RIGHT),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-
+ [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_QUOT, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_PAUS, KC_LCTL, KC_LALT, KC_DEL, KC_SPC, KC_DEL, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT
+ ),
};
diff --git a/keyboards/jd45/keymaps/jeebak/config.h b/keyboards/jd45/keymaps/jeebak/config.h
deleted file mode 100644
index bfaa12893..000000000
--- a/keyboards/jd45/keymaps/jeebak/config.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "../../config.h"
-
-/**
- *JD45 keymap definition macro
- */
-#define LAYOUT_JD45( \
- 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 \
-) { \
- { 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, KC_NO }, \
- { K26, K27, K28, K29, K30, K31, K32, K33, K34, K35, K36, K37, KC_NO }, \
- { K38, K39, K40, K41, K42, KC_NO, K43, KC_NO, K44, K45, K46, K47, KC_NO } \
-}
diff --git a/keyboards/jd45/keymaps/jeebak/keymap.c b/keyboards/jd45/keymaps/jeebak/keymap.c
index c711939fc..bb6c82938 100644
--- a/keyboards/jd45/keymaps/jeebak/keymap.c
+++ b/keyboards/jd45/keymaps/jeebak/keymap.c
@@ -48,10 +48,6 @@ enum macro_keycodes
KC_AG_TAB_R,
};
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
// Custom macros
#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
@@ -91,7 +87,7 @@ enum macro_keycodes
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_JD45(
+ [_QWERTY] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_BSPC,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -113,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play |
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_COLEMAK] = LAYOUT_JD45(
+ [_COLEMAK] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, KC_BSPC,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -135,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | RGUI | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol- | Vol+ | Play |
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_DVORAK] = LAYOUT_JD45(
+ [_DVORAK] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, KC_BSPC,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -157,7 +153,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Brite | | | | | | | Prev | Next | Mute |
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_LOWER] = LAYOUT_JD45(
+ [_LOWER] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, KC_BSPC,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -179,7 +175,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Brite | | | | | | | Prev | Next | Mute |
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_RAISE] = LAYOUT_JD45(
+ [_RAISE] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, KC_BSPC,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -205,7 +201,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* seem to work on Mac. Presumably they'll work under Windows.
*/
- [_TOUCHCURSOR] = LAYOUT_JD45(
+ [_TOUCHCURSOR] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
ALT_TAB, CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______, _______,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -228,7 +224,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_MOUSECURSOR] = LAYOUT_JD45(
+ [_MOUSECURSOR] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
_______, _______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______, _______,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -251,7 +247,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_PLOVER] = LAYOUT_JD45(
+ [_PLOVER] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
@@ -273,7 +269,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | Reset |
* `-------+-------+-------+-------+---^^^----+---^^^----+---------+--------+--------+----------'
*/
- [_ADJUST] = LAYOUT_JD45(
+ [_ADJUST] = LAYOUT(
/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------.*/
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------`--------|*/
diff --git a/keyboards/jd45/keymaps/justin/keymap.c b/keyboards/jd45/keymaps/justin/keymap.c
index a797582b0..4590374e9 100644
--- a/keyboards/jd45/keymaps/justin/keymap.c
+++ b/keyboards/jd45/keymaps/justin/keymap.c
@@ -1,27 +1,27 @@
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_kc(
ESC, Q, W, F, P, G, J, L, U, Y, SCLN, QUOT, BSPC,
FN8, A, R, S, T, D, H, N, E, I, O, ENT,
LSFT, Z, X, C, V, B, K, M, COMM, DOT, SLSH, FN6,
FN4, LGUI, FN7, FN2, FN1, SPC, FN5, RALT, FN3, FN0),
- [1] = LAYOUT(
+ [1] = LAYOUT_kc(
TRNS, FN10, FN11, FN12, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, UP, DEL,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, HOME, PGUP, LEFT, RGHT,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, END, PGDN, DOWN, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
- [2] = LAYOUT(
+ [2] = LAYOUT_kc(
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, 7, 8, 9, 0, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, 4, 5, 6, DOT, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC, 1, 2, 3, BSLS, TRNS,
TRNS, FN29, TRNS, TRNS, TRNS, PAUSE, EQL, MINS, TRNS, TRNS),
- [3] = LAYOUT(
+ [3] = LAYOUT_kc(
TRNS, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS),
- [4] = LAYOUT(
+ [4] = LAYOUT_kc(
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, 7, 8, 9, 0, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, LBRC, 4, 5, 6, DOT, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, RBRC, 1, 2, 3, BSLS, TRNS,
diff --git a/keyboards/jd45/keymaps/mjt/keymap.c b/keyboards/jd45/keymaps/mjt/keymap.c
index a53b09642..f806de65d 100644
--- a/keyboards/jd45/keymaps/mjt/keymap.c
+++ b/keyboards/jd45/keymaps/mjt/keymap.c
@@ -4,23 +4,23 @@
*/
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(
+ [0] = LAYOUT_kc(
TAB, Q, W, E, R, T, Y, U, I, O, P, MINS, BSLS,
FN1, A, S, D, F, G, H, J, K, L, QUOT, ENT,
FN0, Z, X, C, V, B, N, M, COMM, DOT, SLSH, RSFT,
NO, LCTL, LALT, LGUI, SPC, BSPC, APP, FN2, ESC, NO),
- [1] = LAYOUT(
+ [1] = LAYOUT_kc(
GRV, TRNS, UP, TRNS, 7, 8, 9, 0, MINS, EQL, PSCR, LBRC, RBRC,
TRNS, LEFT, DOWN, RGHT, 4, 5, 6, INS, HOME, PGUP, SCLN, TRNS,
TRNS, TRNS, TRNS, TRNS, 1, 2, 3, DEL, END, PGDN, TRNS, TRNS,
TRNS, TRNS, TRNS, SPC, TRNS, DEL, TRNS, FN3, TRNS, TRNS),
- [2] = LAYOUT(
+ [2] = LAYOUT_kc(
TRNS, TRNS, VOLU, TRNS, F7, F8, F9, F10, F11, F12, PSCR, FN3, FN4,
TRNS, MPRV, VOLD, MNXT, F4, F5, F6, J, K, L, SCLN, TRNS,
TRNS, TRNS, TRNS, TRNS, F1, F2, F3, MUTE, MPRV, MNXT, MSTP, TRNS,
TRNS, TRNS, TRNS, LGUI, TRNS, TRNS, TRNS, TRNS, PAUS, TRNS)
/* ,
-[3] = LAYOUT(
+[3] = LAYOUT_kc(
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
TRNS, TRNS, TRNS, TRNS, TRNS, BTLD, TRNS, TRNS, TRNS, TRNS, TRNS, TRNS,
diff --git a/keyboards/jd45/keymaps/mjt/rules.mk b/keyboards/jd45/keymaps/mjt/rules.mk
index 1f4b391d5..a22e71b0d 100644
--- a/keyboards/jd45/keymaps/mjt/rules.mk
+++ b/keyboards/jd45/keymaps/mjt/rules.mk
@@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/jd45/keymaps/mjt6u/config.h b/keyboards/jd45/keymaps/mjt6u/config.h
index bf9dc6df3..41d1557c6 100644
--- a/keyboards/jd45/keymaps/mjt6u/config.h
+++ b/keyboards/jd45/keymaps/mjt6u/config.h
@@ -1,84 +1,3 @@
-/*
-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/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER geekhack
-#define PRODUCT JD45
-#define DESCRIPTION q.m.k. keyboard firmware for JD45
-
-/* key matrix size */
-#define MATRIX_ROWS 4
-#define MATRIX_COLS 13
-
-/* Planck PCB default pin-out */
-#define MATRIX_ROW_PINS { F0, F1, F5, B4 }
-#define MATRIX_COL_PINS { F4, D7, B5, B6, C6, C7, D4, D6, D5, D0, D1, D2, B0 }
-#define UNUSED_PINS
-
-#define BACKLIGHT_PIN B7
+#pragma once
#define USB_MAX_POWER_CONSUMPTION 50
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/jd45/keymaps/mjt6u/keymap.c b/keyboards/jd45/keymaps/mjt6u/keymap.c
index c17a07fd0..4c0b8828a 100644
--- a/keyboards/jd45/keymaps/mjt6u/keymap.c
+++ b/keyboards/jd45/keymaps/mjt6u/keymap.c
@@ -25,25 +25,61 @@ enum jd45_keycodes
#define LONGPRESS_DELAY 150
#define LAYER_TOGGLE_DELAY 900
-#define _______ KC_TRNS
#define __MOD__ KC_TRNS
-#define XXXXXXX KC_NO
#define F_FNSPC F(0)
#define F_NUMSPC F(1)
#define F_FNTAB F(2)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = {
- {F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC},
- {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT)},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)},
- {XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, F_FNSPC, XXXXXXX, XXXXXXX, MO(_FUNCTION), MO(_ADJUST)}},
- [_QWERTYNUMMODS] = {{F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC}, {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT)}, {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT)}, {XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, F_NUMSPC, XXXXXXX, XXXXXXX, MO(_FKEYNUMPAD), MO(_ADJUST)}},
- [_NUMSYM] = {{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, KC_DEL}, {__MOD__, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______}, {_______, _______, _______, _______, _______, KC_SPC, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______}, {XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}},
- [_FUNCTION] = {{__MOD__, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12}, {__MOD__, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______}, {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}, {XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}},
- [_NUMPAD] = {{KC_GRV, _______, KC_UP, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_PSCR, KC_LBRC, KC_RBRC}, {_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_4, KC_5, KC_6, KC_INS, KC_HOME, KC_PGUP, _______, _______}, {_______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DEL, KC_END, KC_PGDN, _______, _______}, {XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}},
- [_FKEYNUMPAD] = {{_______, _______, KC_VOLU, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______, _______}, {_______, KC_MPRV, KC_VOLD, KC_MNXT, KC_F4, KC_F5, KC_F6, KC_J, KC_K, KC_L, KC_SCLN, _______}, {_______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_MUTE, KC_MPRV, KC_MNXT, KC_MSTP, _______}, {XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}},
- [_ADJUST] = {{_______, RESET, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, KC_PSCR, _______, _______}, {_______, _______, _______, _______, USEFNMODS, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, MACSLEEP, _______, _______}, {_______, _______, _______, _______, _______, _______, USENUMMODS, _______, _______, _______, _______, _______}, {XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, __MOD__, __MOD__}}};
+ [_QWERTY] = LAYOUT( \
+ F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC, \
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT), \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \
+ XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, F_FNSPC, XXXXXXX, MO(_FUNCTION), MO(_ADJUST), XXXXXXX \
+ ),
+
+ [_QWERTYNUMMODS] = LAYOUT( \
+ F_FNTAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, KC_BSPC, \
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(_ADJUST, KC_QUOT), \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_T(KC_ENT), \
+ XXXXXXX, KC_LALT, KC_LGUI, XXXXXXX, XXXXXXX, F_NUMSPC, XXXXXXX, MO(_FKEYNUMPAD), MO(_ADJUST), XXXXXXX \
+ ),
+
+ [_NUMSYM] = 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, \
+ __MOD__, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, \
+ _______, _______, _______, _______, _______, KC_SPC, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______, \
+ XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, _______, XXXXXXX, __MOD__, __MOD__, XXXXXXX \
+ ),
+
+ [_FUNCTION] = LAYOUT( \
+ __MOD__, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ __MOD__, _______, _______, _______, _______, _______, KC_MPRV, KC_VOLD, KC_VOLU, KC_MNXT, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ XXXXXXX, __MOD__, __MOD__, XXXXXXX, XXXXXXX, _______, XXXXXXX, __MOD__, __MOD__, XXXXXXX \
+ ),
+
+ [_NUMPAD] = LAYOUT( \
+ KC_GRV, _______, KC_UP, _______, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_PSCR, KC_LBRC, KC_RBRC, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_4, KC_5, KC_6, KC_INS, KC_HOME, KC_PGUP, _______, _______, \
+ _______, _______, _______, _______, KC_1, KC_2, KC_3, KC_DEL, KC_END, KC_PGDN, _______, _______, \
+ XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, __MOD__, __MOD__, XXXXXXX \
+ ),
+
+ [_FKEYNUMPAD] = LAYOUT( \
+ _______, _______, KC_VOLU, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, _______, _______, \
+ _______, KC_MPRV, KC_VOLD, KC_MNXT, KC_F4, KC_F5, KC_F6, KC_J, KC_K, KC_L, KC_SCLN, _______, \
+ _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_MUTE, KC_MPRV, KC_MNXT, KC_MSTP, _______, \
+ XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, __MOD__, __MOD__, XXXXXXX \
+ ),
+
+ [_ADJUST] = LAYOUT( \
+ _______, RESET, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, KC_PSCR, _______, _______, \
+ _______, _______, _______, _______, USEFNMODS, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, MACSLEEP, _______, _______, \
+ _______, _______, _______, _______, _______, _______, USENUMMODS, _______, _______, _______, _______, _______, \
+ XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, __MOD__, __MOD__, XXXXXXX \
+ )
+};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_LAYER_TAP_KEY(_NUMSYM, KC_SPC),
diff --git a/keyboards/jd45/keymaps/mjt6u/rules.mk b/keyboards/jd45/keymaps/mjt6u/rules.mk
index f9cec3b84..1df8b9754 100644
--- a/keyboards/jd45/keymaps/mjt6u/rules.mk
+++ b/keyboards/jd45/keymaps/mjt6u/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
DEBUG_ENABLE = yes
diff --git a/keyboards/jd45/keymaps/talljoe/config.h b/keyboards/jd45/keymaps/talljoe/config.h
new file mode 100644
index 000000000..f8b0333cf
--- /dev/null
+++ b/keyboards/jd45/keymaps/talljoe/config.h
@@ -0,0 +1,22 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include QMK_KEYBOARD_CONFIG_H
+
+#define PREVENT_STUCK_MODIFIERS
+#define SPACE_COUNT 2
+
+#define TEMPLATE( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
+) { \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K0D, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, KC_NO }, \
+ { K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, KC_NO }, \
+ { K40, K00, K41, K42, K44, KC_NO, K45, KC_NO, K48, K49, K3D, K4C, KC_NO } \
+}
+
+#endif
diff --git a/keyboards/jd45/keymaps/talljoe/keymap.c b/keyboards/jd45/keymaps/talljoe/keymap.c
new file mode 100644
index 000000000..7812add81
--- /dev/null
+++ b/keyboards/jd45/keymaps/talljoe/keymap.c
@@ -0,0 +1 @@
+// This space intentionally left blank
diff --git a/keyboards/jd45/readme.md b/keyboards/jd45/readme.md
index a2e4cf6dd..7ef02bd4f 100644
--- a/keyboards/jd45/readme.md
+++ b/keyboards/jd45/readme.md
@@ -3,12 +3,12 @@ JD45
A compact 45% keyboard.
-Keyboard Maintainer: QMK Community
-Hardware Supported: JD45 PCB
+Keyboard Maintainer: QMK Community
+Hardware Supported: JD45 PCB
Hardware Availability: https://mechanicalkeyboards.com/shop/index.php?l=product_list&c=346
Make example for this keyboard (after setting up your build environment):
make jd45:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/jj40/info.json b/keyboards/jj40/info.json
new file mode 100644
index 000000000..c6416ce16
--- /dev/null
+++ b/keyboards/jj40/info.json
@@ -0,0 +1,23 @@
+{
+ "keyboard_name": "jj40",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_planck_mit": {
+ "key_count": 47,
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3, "w":2}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}]
+ },
+
+ "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}]
+ },
+
+ "LAYOUT_planck_1x2uR": {
+ "key_count": 47,
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3, "w":2}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/jj40/jj40.h b/keyboards/jj40/jj40.h
index bb7068fdc..731f2ff45 100644
--- a/keyboards/jj40/jj40.h
+++ b/keyboards/jj40/jj40.h
@@ -25,7 +25,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
void matrix_init_user(void); // TODO port this to other PS2AVRGB boards
-#define KEYMAP_GRID( \
+#define XXX KC_NO
+
+
+#define LAYOUT_ortho_4x12( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \
K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \
@@ -34,61 +37,58 @@ void matrix_init_user(void); // TODO port this to other PS2AVRGB boards
{ \
{ K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \
{ K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX }, \
{ K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \
{ K312, K311, K310, K39, K35, K36, K37, K38, K34, K33, K32, K31 } \
}
-#define KEYMAP_MIT( \
+
+#define LAYOUT_planck_mit( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \
K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \
K31, K32, K33, K34, K35, K3X, K38, K39, K310, K311, K312 \
) \
{ \
- { K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \
- { K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \
- { K312, K311, K310, K39, K35, K3X, KC_NO, K38, K34, K33, K32, K31 } \
+ { K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \
+ { K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \
+ { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX }, \
+ { K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \
+ { K312, K311, K310, K39, K35, K3X, XXX, K38, K34, K33, K32, K31 } \
}
-#define KEYMAP_OFFSET( \
+
+#define LAYOUT_planck_1x2uR( \
K01, K02, K03, K04, K05, K06, K07, K08, K09, K010, K011, K012, \
K11, K12, K13, K14, K15, K16, K17, K18, K19, K110, K111, K112, \
K21, K22, K23, K24, K25, K26, K27, K28, K29, K210, K211, K212, \
K31, K32, K33, K34, K35, K36, K3X, K39, K310, K311, K312 \
) \
{ \
- { K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \
- { K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
- { K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \
- { K312, K311, K310, K39, K35, K36, K3X, KC_NO, K34, K33, K32, K31 } \
+ { K012, K011, K010, K09, K05, K06, K07, K08, K04, K03, K02, K01 }, \
+ { K112, K111, K110, K19, K15, K16, K17, K18, K14, K13, K12, K11 }, \
+ { XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX }, \
+ { K212, K211, K210, K29, K25, K26, K27, K28, K24, K23, K22, K21 }, \
+ { K312, K311, K310, K39, K35, K36, K3X, XXX, K34, K33, K32, K31 } \
}
-#define KC_KEYMAP( \
- 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_kc( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b \
) \
- KEYMAP_GRID( \
+ LAYOUT_ortho_4x12( \
KC_##k00, KC_##k01, KC_##k02, KC_##k03, KC_##k04, KC_##k05, KC_##k06, KC_##k07, KC_##k08, KC_##k09, KC_##k0a, KC_##k0b, \
KC_##k10, KC_##k11, KC_##k12, KC_##k13, KC_##k14, KC_##k15, KC_##k16, KC_##k17, KC_##k18, KC_##k19, KC_##k1a, KC_##k1b, \
KC_##k20, KC_##k21, KC_##k22, KC_##k23, KC_##k24, KC_##k25, KC_##k26, KC_##k27, KC_##k28, KC_##k29, KC_##k2a, KC_##k2b, \
- KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \
- )
-
-
-#define KEYMAP KEYMAP_MIT
+ KC_##k30, KC_##k31, KC_##k32, KC_##k33, KC_##k34, KC_##k35, KC_##k36, KC_##k37, KC_##k38, KC_##k39, KC_##k3a, KC_##k3b \
+)
-#define LAYOUT_ortho_4x12 KEYMAP_GRID
-#define LAYOUT_2U_space KEYMAP_MIT
-#define LAYOUT_planck_mit KEYMAP_MIT
+#define LAYOUT LAYOUT_planck_mit
-#define KC_LAYOUT_ortho_4x12 KC_KEYMAP
-#define LAYOUT_kc_ortho_4x12 KC_KEYMAP
+#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
#endif
diff --git a/keyboards/jj40/keymaps/ajp10304/config.h b/keyboards/jj40/keymaps/ajp10304/config.h
deleted file mode 100644
index 11cafbefc..000000000
--- a/keyboards/jj40/keymaps/ajp10304/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define PREVENT_STUCK_MODIFIERS
-
-#endif
diff --git a/keyboards/jj40/keymaps/cockpit/keymap.c b/keyboards/jj40/keymaps/cockpit/keymap.c
index 02deaaa8e..12ed62b6b 100644
--- a/keyboards/jj40/keymaps/cockpit/keymap.c
+++ b/keyboards/jj40/keymaps/cockpit/keymap.c
@@ -63,7 +63,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | Fn | GUI | Alt |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT_2U_space( \
+[_QWERTY] = LAYOUT_planck_mit( \
KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_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 , \
@@ -85,7 +85,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | | | Alt |Lower|| Space | | Home | PgDn | PgUp | End |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = LAYOUT_2U_space( \
+[_LOWER] = LAYOUT_planck_mit( \
KC_GRV, LT_A_OG, LT_C_CA, LT_E_OG, LT_E_DO, LT_I_OG, LT_S_CA, LT_U_OG, LT_U_MA, LT_Z_CA, KC_MINS, KC_BSPC, \
KC_TAB, LT_EXLM, LT_AT, LT_HASH, LT_DLR, LT_PERC, LT_CIRC, LT_AMPR, LT_ASTR, KC_LPRN, KC_RPRN, KC_DEL , \
KC_LSFT, KC_PEQL, KC_PPLS, KC_PMNS, KC_PIPE, KC_LBRC, KC_RBRC, KC_LABK, KC_RABK, KC_LCBR, KC_RCBR, KC_INS , \
@@ -107,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | | | Alt | | Space |Raise|| Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = LAYOUT_2U_space( \
+[_RAISE] = LAYOUT_planck_mit( \
KC_GRV, LT_1, LT_2, LT_3, LT_4, LT_5, LT_6, LT_7, LT_8, LT_9, LT_0, KC_BSPC, \
KC_TAB, LT_4, LT_5, LT_6, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, \
KC_LSFT, LT_7, LT_8, LT_9, LT_0, _______, _______, _______, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
@@ -130,7 +130,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl |||Fn||| Mode | Alt | | Space |MPrev |MStop |MNext |MPlay | Lock |
* `-----------------------------------------------------------------------------------'
*/
-[_FUNC] = LAYOUT_2U_space( \
+[_FUNC] = LAYOUT_planck_mit( \
KC_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, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, BL_TOGG, BL_BRTG, BL_INC, _______, _______, _______, KC_VOLU, \
KC_LSFT, KC_CALC, RGB_HUD, RGB_SAD, RGB_VAD, KC_WBAK, KC_WFWD, BL_DEC, _______, _______, KC_PSCR, KC_VOLD, \
diff --git a/keyboards/jj40/keymaps/default/keymap.c b/keyboards/jj40/keymaps/default/keymap.c
index 1db887bd0..d84b01b15 100644
--- a/keyboards/jj40/keymaps/default/keymap.c
+++ b/keyboards/jj40/keymaps/default/keymap.c
@@ -23,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT_2U_space( \
+[_QWERTY] = LAYOUT_planck_mit( \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
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 , \
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = LAYOUT_2U_space( \
+[_LOWER] = LAYOUT_planck_mit( \
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
@@ -59,7 +59,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = LAYOUT_2U_space( \
+[_RAISE] = LAYOUT_planck_mit( \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
diff --git a/keyboards/jj40/keymaps/fun40/config.h b/keyboards/jj40/keymaps/fun40/config.h
index 89807d84a..f2b5d264e 100644
--- a/keyboards/jj40/keymaps/fun40/config.h
+++ b/keyboards/jj40/keymaps/fun40/config.h
@@ -4,6 +4,5 @@
#include "../../config.h"
#define FORCE_NKRO
-#define PREVENT_STUCK_MODIFIERS
#endif
diff --git a/keyboards/jj40/keymaps/krusli/config.h b/keyboards/jj40/keymaps/krusli/config.h
index 6d98a37a6..e710dbbb6 100644
--- a/keyboards/jj40/keymaps/krusli/config.h
+++ b/keyboards/jj40/keymaps/krusli/config.h
@@ -3,7 +3,6 @@
#include "../../config.h"
-#define PREVENT_STUCK_MODIFIERS
// #define TAPPING_TERM 300
#endif
diff --git a/keyboards/jj40/keymaps/krusli/keymap.c b/keyboards/jj40/keymaps/krusli/keymap.c
index 6fea9d314..f996fbf35 100644
--- a/keyboards/jj40/keymaps/krusli/keymap.c
+++ b/keyboards/jj40/keymaps/krusli/keymap.c
@@ -26,11 +26,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | Ctrl | GUI | Alt |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
- [_QWERTY] = LAYOUT_2U_space( \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
- KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
- _______, KC_LCTL, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+
+ [_QWERTY] = LAYOUT_planck_mit( \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ 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 , \
+ TO(_NUMPAD),KC_LCTL, KC_LGUI, KC_LALT, MO(_LOWER), KC_SPC, MO(_RAISE), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Lower
@@ -41,10 +42,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | F12 | RGB | RGB | RGB | RGB |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | RGB | RGB | RGB | | | Next | Vol- | Vol+ | Play | |
+ * | | RGB | RGB | RGB | | | Next | Vol- | Vol+ | Play | |
* `-----------------------------------------------------------------------------------'
*/
- [_LOWER] = LAYOUT_2U_space( \
+ [_LOWER] = LAYOUT_planck_mit( \
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_TOG, RGB_MOD, RGB_VAD, RGB_VAI, _______, \
@@ -62,10 +63,28 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | Prev | Play | Next | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
- [_RAISE] = LAYOUT_2U_space( \
+ [_RAISE] = LAYOUT_planck_mit( \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_HOME, KC_END, KC_PGUP, KC_PGDN, _______, \
_______, KC_MRWD, KC_MPLY, KC_MNXT, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Numpad
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 7 | 8 | 9 | * | / | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | <-- | 4 | 5 | 6 | + | - | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | 1 | 2 | 3 |Enter |Enter | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Qwerty| 0 | . | . |Enter | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+ [_NUMPAD] = LAYOUT_planck_mit( \
+ KC_ESC, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS, _______, _______, _______, _______, _______, _______, \
+ KC_BSPC, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_PMNS, _______, _______, _______, _______, _______, _______, \
+ _______, KC_P1, KC_P2, KC_P3, KC_PENT, KC_PENT, _______, _______, _______, _______, _______, _______, \
+ TO(_QWERTY),KC_P0, KC_PDOT, KC_PDOT, KC_PENT, _______, _______, _______, _______, _______, _______ \
)
};
diff --git a/keyboards/jj40/keymaps/like_jis/config.h b/keyboards/jj40/keymaps/like_jis/config.h
new file mode 100644
index 000000000..cd9709272
--- /dev/null
+++ b/keyboards/jj40/keymaps/like_jis/config.h
@@ -0,0 +1,49 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+// place overrides here
+
+#define TAPPING_TERM 200
+
+#ifdef MOUSEKEY_ENABLE
+ #undef MOUSEKEY_INTERVAL
+ #define MOUSEKEY_INTERVAL 5
+
+ #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 3
+
+ #undef MOUSEKEY_DELAY
+ #define MOUSEKEY_DELAY 0
+#endif
+
+#undef BACKLIGHT_LEVELS
+#define BACKLIGHT_LEVELS 15
+// #undef BACKLIGHT_LEVELS
+// #define BACKLIGHT_BREATHING
+// #undef BREATHING_PERIOD
+// #define BREATHING_PERIOD 4
diff --git a/keyboards/jj40/keymaps/like_jis/keymap.c b/keyboards/jj40/keymaps/like_jis/keymap.c
new file mode 100644
index 000000000..24db91947
--- /dev/null
+++ b/keyboards/jj40/keymaps/like_jis/keymap.c
@@ -0,0 +1,200 @@
+#include QMK_KEYBOARD_H
+
+#define _QWERTY 0
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST,
+ RGBRST
+};
+
+#define KC______ KC_TRNS
+#define KC_XXXXX KC_NO
+#define KC_KANJI KC_GRV
+
+#define KC_LOWER LOWER
+#define KC_RAISE RAISE
+#define KC_ADJST ADJUST
+
+#define KC_RST RESET
+
+#define KC_LRST RGBRST
+#define KC_LTOG RGB_TOG
+#define KC_LHUI RGB_HUI
+#define KC_LHUD RGB_HUD
+#define KC_LSAI RGB_SAI
+#define KC_LSAD RGB_SAD
+#define KC_LVAI RGB_VAI
+#define KC_LVAD RGB_VAD
+#define KC_LMOD RGB_MOD
+#define KC_BTOG BL_TOGG
+#define KC_BINC BL_INC
+#define KC_BDEC BL_DEC
+// #define KC_BRTG BL_BRTG
+
+#define KC_KNRM AG_NORM
+#define KC_KSWP AG_SWAP
+
+// Layer Mode aliases
+// #define KC_L_LO MO(_LOWER)
+// #define KC_L_RA MO(_RAISE)
+// #define KC_L_AD MO(_ADJUST)
+#define KC_TBSF LSFT_T(KC_TAB)
+// #define KC_SPSF LSFT_T(KC_SPC)
+// #define KC_GUAP LALT_T(KC_APP)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = KC_LAYOUT_ortho_4x12( \
+ //,-----------------------------------------------------------------------------------.
+ ESC, Q, W, E, R, T, Y, U, I, O, P, MINS,\
+ //|------+------+------+------+------+------|------+------+------+------+------+------|
+ TBSF, A, S, D, F, G, H, J, K, L, SCLN, ENT,\
+ //|------+------+------+------+------+------|------+------+------+------+------+------|
+ LSFT, Z, X, C, V, B, N, M, COMM, DOT, UP, RSFT,\
+ //|------+------+------+------+------+------|------+------+------+------+------+------|
+ LCTRL, LALT, LGUI, ADJST, LOWER, BSPC, SPC, RAISE, APP, LEFT, DOWN, RGHT \
+ //|------+------+------+------+------+-------------+------+------+------+------+------|
+ ),
+
+ [_LOWER] = KC_LAYOUT_ortho_4x12( \
+ //,-----------------------------------------------------------------------------------.
+ TAB, F1, F2, F3, F4, F5, XXXXX, MINS, EQL, JYEN, LBRC, RBRC,\
+ //|------+------+------+------+------+------|------+------+------+------+------+------|
+ _____, F6, F7, F8, F9, F10, XXXXX, XXXXX, XXXXX, SCLN, QUOT, BSLS,\
+ //|------+------+------+------+------+------|------+------+------+------+------+------|
+ _____, F11, F12, XXXXX, KANJI, ENT, XXXXX, XXXXX, COMM, DOT, SLSH, RO,\
+ //|------+------+------+------+------+-------------+------+------+------+------+------|
+ _____, _____, _____, _____, _____, DEL, _____, _____, _____, _____, _____, _____ \
+ //|------+------+------+------+------+-------------+------+------+------+------+------|
+ ),
+
+ [_RAISE] = KC_LAYOUT_ortho_4x12( \
+ //,-----------------------------------------------------------------------------------.
+ _____, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,\
+ //|------+------+------+------+------+------|------+------+------+------+------+------|
+ _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 4, 5, 6, QUOT, PLUS,\
+ //|------+------+------+------+------+------|------+------+------+------+------+------|
+ _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, 0, 1, 2, 3, DOT, SLSH,\
+ //|------+------+------+------+------+-------------+------+------+------+------+------|
+ _____, _____, _____, _____, _____, BSPC, _____, _____, _____, _____, _____, _____ \
+ //|------+------+------+------+------+-------------+------+------+------+------+------|
+ ),
+
+ [_ADJUST] = KC_LAYOUT_ortho_4x12( \
+ //,-----------------------------------------------------------------------------------.
+ XXXXX, RST, LRST, KNRM, KSWP, XXXXX, XXXXX, WH_L, WH_U, HOME, PGUP, XXXXX,\
+ //|------+------+------+------+------+------|------+------+------+------+------+------|
+ XXXXX, LTOG, LHUI, LSAI, LVAI, BTOG, BINC, WH_R, WH_D, END, PGDN, XXXXX,\
+ //|------+------+------+------+------+------|------+------+------+------+------+------|
+ XXXXX, LMOD, LHUD, LSAD, LVAD, XXXXX, BDEC, XXXXX, BTN1, BTN2, MS_U, XXXXX,\
+ //|------+------+------+------+------+-------------+------+------+------+------+------|
+ _____, _____, _____, _____, _____, XXXXX, XXXXX, _____, _____, MS_L, MS_D, MS_R \
+ //|------+------+------+------+------+-------------+------+------+------+------+------|
+ )
+};
+
+
+#ifdef BACKLIGHT_ENABLE
+ extern backlight_config_t backlight_config;
+
+ inline void enable_backright(bool on) {
+ backlight_config.enable = on;
+ if (backlight_config.raw == 1) // enabled but level = 0
+ backlight_config.level = 1;
+ eeconfig_update_backlight(backlight_config.raw);
+ // dprintf("backlight toggle: %u\n", backlight_config.enable);
+ backlight_set(backlight_config.enable ? backlight_config.level : 0);
+ }
+
+ uint8_t bl_breath_count;
+ uint8_t bl_breath_speed = 10;
+ int8_t bl_breath_updown = 1;
+ bool bl_breath_on;
+ backlight_config_t bl_breath_backup;
+
+ void bl_breath_start(uint8_t speed) {
+
+ bl_breath_on = true;
+ bl_breath_speed = speed;
+ bl_breath_backup = backlight_config;
+ }
+
+ void bl_breath_end(void) {
+
+ bl_breath_on = false;
+ backlight_config = bl_breath_backup;
+ eeconfig_update_backlight(backlight_config.raw);
+ backlight_set(backlight_config.enable ? backlight_config.level : 0);
+ }
+
+ void bl_breath_update(void) {
+
+ if (bl_breath_on) {
+ ++bl_breath_count;
+ if (bl_breath_count > bl_breath_speed) {
+ bl_breath_count = 0;
+
+ backlight_config.level += bl_breath_updown;
+ bl_breath_updown = (backlight_config.level > BACKLIGHT_LEVELS) ? -1 :
+ (backlight_config.level <= 0) ? 1 :
+ bl_breath_updown;
+ enable_backright(true);
+ }
+ }
+ }
+
+ #define BL_BREATH_START bl_breath_start
+ #define BL_BREATH_END bl_breath_end
+ #define BL_BREATH_UPDATE bl_breath_update
+
+#else
+
+ #define BL_BREATH_START(a)
+ #define BL_BREATH_END()
+ #define BL_BREATH_UPDATE()
+#endif
+
+// Loop
+void matrix_scan_user(void) {
+
+ BL_BREATH_UPDATE();
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ BL_BREATH_START(50);
+ layer_on(_LOWER);
+ } else {
+ BL_BREATH_END();
+ layer_off(_LOWER);
+ }
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ BL_BREATH_START(100);
+ layer_on(_RAISE);
+ } else {
+ BL_BREATH_END();
+ layer_off(_RAISE);
+ }
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ break;
+ default:
+ return true;
+ }
+
+ return false;
+}
diff --git a/keyboards/jj40/keymaps/like_jis/rules.mk b/keyboards/jj40/keymaps/like_jis/rules.mk
new file mode 100644
index 000000000..0103be5f4
--- /dev/null
+++ b/keyboards/jj40/keymaps/like_jis/rules.mk
@@ -0,0 +1,5 @@
+MOUSEKEY_ENABLE = yes
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+
+# 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/jj40/keymaps/oscillope/backlight.c b/keyboards/jj40/keymaps/oscillope/backlight.c
deleted file mode 100644
index 14c677cd6..000000000
--- a/keyboards/jj40/keymaps/oscillope/backlight.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Backlighting code for PS2AVRGB boards (ATMEGA32A)
- * Kenneth A. (github.com/krusli | krusli.me)
- */
-
-#include "quantum.h"
-
-#include <avr/pgmspace.h>
-#include <avr/interrupt.h>
-
-// Port D: digital pins of the AVR chipset
-#define NUMLOCK_PORT (1 << 0) // D0
-#define CAPSLOCK_PORT (1 << 1) // D1
-#define BACKLIGHT_PORT (1 << 4) // D4
-#define SCROLLLOCK_PORT (1 << 6) // D6
-
-/**
- * References
- * Port Registers: https://www.arduino.cc/en/Reference/PortManipulation
- * TCCR1A: https://electronics.stackexchange.com/questions/92350/what-is-the-difference-between-tccr1a-and-tccr1b
- * Timers: http://www.avrbeginners.net/architecture/timers/timers.html
- * 16-bit timer setup: http://sculland.com/ATmega168/Interrupts-And-Timers/16-Bit-Timer-Setup/
- * PS2AVRGB firmware: https://github.com/showjean/ps2avrU/tree/master/firmware
- */
-
-// @Override
-// turn LEDs on and off depending on USB caps/num/scroll lock states.
-__attribute__ ((weak))
-void led_set_user(uint8_t usb_led) {
-/* It appears that these cause the v1 JJ40 PCB to hang.
- * I haven't looked into why, but I don't have any LEDs on my board anyway. */
-#if 0
- if (usb_led & (1 << USB_LED_NUM_LOCK)) {
- // turn on
- DDRD |= NUMLOCK_PORT;
- PORTD |= NUMLOCK_PORT;
- } else {
- // turn off
- DDRD &= ~NUMLOCK_PORT;
- PORTD &= ~NUMLOCK_PORT;
- }
-
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRD |= CAPSLOCK_PORT;
- PORTD |= CAPSLOCK_PORT;
- } else {
- DDRD &= ~CAPSLOCK_PORT;
- PORTD &= ~CAPSLOCK_PORT;
- }
-
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- DDRD |= SCROLLLOCK_PORT;
- PORTD |= SCROLLLOCK_PORT;
- } else {
- DDRD &= ~SCROLLLOCK_PORT;
- PORTD &= ~SCROLLLOCK_PORT;
- }
-#endif
-}
-
diff --git a/keyboards/jj40/keymaps/oscillope/config.h b/keyboards/jj40/keymaps/oscillope/config.h
index d7f991fa9..e812903de 100644
--- a/keyboards/jj40/keymaps/oscillope/config.h
+++ b/keyboards/jj40/keymaps/oscillope/config.h
@@ -3,7 +3,6 @@
#include "../../config.h"
-#define PREVENT_STUCK_MODIFIERS
#define TAPPING_TERM 200
#endif
diff --git a/keyboards/jj40/keymaps/oscillope/keymap.c b/keyboards/jj40/keymaps/oscillope/keymap.c
index 49ceff864..1a4226194 100644
--- a/keyboards/jj40/keymaps/oscillope/keymap.c
+++ b/keyboards/jj40/keymaps/oscillope/keymap.c
@@ -17,11 +17,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include QMK_KEYBOARD_H
-#ifdef KEYMAP
-#undef KEYMAP
-#endif
-#define KEYMAP KEYMAP_OFFSET
-
#define _QWERTY 0
#define _LOWER 1
#define _RAISE 2
@@ -51,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | OS | Alt |Lower |Shift |Raise | Space | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = KEYMAP( \
+[_QWERTY] = LAYOUT_planck_1x2uR( \
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_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, \
@@ -62,16 +57,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------------------------------------------------.
* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Ins | | | () | [] | {} | Left | Down | Up |Right | | |
+ * | Ins | | | () | [] | {} | Home | PgDn | PgUp | End | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* |RESET | Back | Fwd | | | | | | Mute | Vol- | Vol+ | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | Lock | | | Prev | Stop | Play | Next |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = KEYMAP( \
+[_LOWER] = LAYOUT_planck_1x2uR( \
KC_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, _______, _______, CC_PRN, CC_BRC, CC_CBR, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, \
+ KC_INS, _______, _______, CC_PRN, CC_BRC, CC_CBR, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, \
RESET, KC_WBAK, KC_WFWD, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, \
_______, _______, _______, _______, KC_LOCK, _______, _______, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT \
),
@@ -87,14 +82,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | OS | Alt | |Shift | | 0 | Home | PgDn | PgUp | End |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = KEYMAP( \
+[_RAISE] = LAYOUT_planck_1x2uR( \
KC_CAPS, KC_AMPR, KC_ASTR, KC_UNDS, KC_LPRN, KC_RPRN, KC_7, KC_8, KC_9, KC_EQL, KC_BSPC, KC_DEL, \
KC_TAB, KC_DLR, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_4, KC_5, KC_6, KC_MINS, KC_PLUS, _______, \
CC_ARRW, KC_EXLM, KC_AT, KC_HASH, KC_LCBR, KC_RCBR, KC_1, KC_2, KC_3, _______, KC_BSLS, KC_PIPE, \
_______, _______, _______, _______, _______, _______, KC_0, KC_HOME, KC_PGDN, KC_PGUP, KC_END \
),
-[_NAV] = KEYMAP( \
+[_NAV] = LAYOUT_planck_1x2uR( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
diff --git a/keyboards/jj40/keymaps/skewwhiffy/keymap.c b/keyboards/jj40/keymaps/skewwhiffy/keymap.c
new file mode 100644
index 000000000..6b193a15c
--- /dev/null
+++ b/keyboards/jj40/keymaps/skewwhiffy/keymap.c
@@ -0,0 +1,219 @@
+/* Copyright 2017 Kenny Hung
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#include "keymap_uk.h"
+
+// Layer shorthand
+enum Layers {
+ cm, // colemak
+ dv, // dvorak
+ qw, // qwerty
+ nbl, // numbers left
+ nbr, // numbers right
+ syl, // symbols left
+ syr, // symbols right
+ nal, // navigation left
+ nar // navigation right
+};
+
+// Layer buttons
+#define _Z_SFT SFT_T(UK_Z)
+#define _SCLSH SFT_T(UK_SCLN)
+#define _SLSH SFT_T(UK_SLSH)
+
+#define _X_NB LT(nbl, UK_X)
+#define _Q_NB LT(nbl, UK_Q)
+#define _DOT_NB LT(nbr, UK_DOT)
+#define _V_NB LT(nbr, UK_V)
+#define __NBL LT(nbl, _______)
+#define __NBR LT(nbr, _______)
+
+#define _C_SY LT(syl, UK_C)
+#define _J_SY LT(syl, UK_J)
+#define _W_SY LT(syr, UK_W)
+#define _COM_SY LT(syr, UK_COMM)
+#define __SYL LT(syl, _______)
+#define __SYR LT(syr, _______)
+
+#define _V_NAL LT(nal, UK_V)
+#define _K_NAL LT(nal, UK_K)
+#define _M_NAR LT(nar, UK_M)
+#define __NAL LT(nal, _______)
+#define __NAR LT(nar, _______)
+
+// Custom hotkeys
+#define _TERM LCTL(UK_QUOT) // Hotkey for terminal
+#define _S_TAB S(UK_TAB)
+#define _C_LEFT LCTL(UK_LEFT)
+#define _C_RGHT LCTL(UK_RGHT)
+#define _A_LEFT LALT(UK_LEFT)
+#define _A_RGHT LALT(UK_RGHT)
+
+// Custom hotkeys
+#define _TERM LCTL(UK_QUOT) // Hotkey for terminal
+#define _S_TAB S(UK_TAB)
+#define _C_LEFT LCTL(UK_LEFT)
+#define _C_RGHT LCTL(UK_RGHT)
+#define _A_LEFT LALT(UK_LEFT)
+#define _A_RGHT LALT(UK_RGHT)
+
+enum custom_keycodes {
+ IJ_OMN = SAFE_RANGE // IntelliJ Omnibox
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Colemak
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | Q | W | F | P | G | | | J | L | U | Y | ; |
+ * |-----------------------------------------------------------------------------------------------------------|
+ * | A | R | S | T | D | | | H | N | E | I | O |
+ * |-----------------------------------------------------------------------------------------------------------|
+ * | Z | X | C | V | B | | | K | M | , | . | / |
+ * | SHIFT | NUMBER | SYMBOL | NAV | | | | | NAV | SYMBOL | FUNC | SHIFT |
+ * |-----------------------------------------------------------------------------------------------------------|
+ * | LSHIFT | LCTRL | LALT | LGUI | SPACE | ENT | DEL | BKSPC | RGUI | RALT | RCTRL | RSHIFT |
+ * .-----------------------------------------------------------------------------------------------------------.
+ */
+ [cm] = LAYOUT_ortho_4x12( \
+ UK_Q, UK_W, UK_F, UK_P, UK_G, _______, _______, UK_J, UK_L, UK_U, UK_Y, UK_SCLN, \
+ UK_A, UK_R, UK_S, UK_T, UK_D, _______, _______, UK_H, UK_N, UK_E, UK_I, UK_O, \
+ _Z_SFT, _X_NB, _C_SY, _V_NAL, UK_B, _______, _______, UK_K, _M_NAR, _COM_SY, _DOT_NB, _SLSH, \
+ UK_LSFT, UK_LCTL, UK_LALT, UK_LGUI, UK_SPC, UK_ENT, UK_DEL, UK_BSPC, UK_RGUI, UK_RALT, UK_RCTL, UK_RSFT \
+ ),
+
+/* Dvorak
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | ' | , | . | P | Y | | | F | G | C | R | L |
+ * |-----------------------------------------------------------------------------------------------------------|
+ * | A | O | E | U | I | | | D | H | T | N | S |
+ * |-----------------------------------------------------------------------------------------------------------|
+ * | ; | Q | J | K | X | | | B | M | W | V | Z |
+ * | SHIFT | NUMBER | SYMBOL | NAV | | | | | NAV | SYMBOL | FUNC | SHIFT |
+ * |-----------------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * |-----------------------------------------------------------------------------------------------------------|
+ */
+ [dv] = LAYOUT_ortho_4x12( \
+ UK_QUOT, UK_COMM, UK_DOT, UK_P, UK_Y, _______, _______, UK_F, UK_G, UK_C, UK_R, UK_L, \
+ UK_A, UK_O, UK_E, UK_U, UK_I, _______, _______, UK_D, UK_H, UK_T, UK_N, UK_S, \
+ _SCLSH, _Q_NB, _J_SY, _K_NAL, UK_X, _______, _______, UK_B, _M_NAR, _W_SY, _V_NB, _Z_SFT, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+/* QWERTY
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | Q | W | E | R | T | | | Y | U | I | O | P |
+ * |-----------------------------------------------------------------------------------------------------------|
+ * | A | S | D | F | G | | | H | J | K | L | ; |
+ * |-----------------------------------------------------------------------------------------------------------|
+ * | Z | X | C | V | B | | | N | M | , | . | / |
+ * | SHIFT | NUMBER | SYMBOL | NAV | | | | | NAV | SYMBOL | FUNC | SHIFT |
+ * |-----------------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * .-----------------------------------------------------------------------------------------------------------.
+ */
+ [qw] = LAYOUT_ortho_4x12( \
+ UK_Q, UK_W, UK_E, UK_R, UK_T, _______, _______, UK_Y, UK_U, UK_I, UK_O, UK_P, \
+ UK_A, UK_S, UK_D, UK_F, UK_G, _______, _______, UK_H, UK_J, UK_K, UK_L, UK_SCLN, \
+ _Z_SFT, _X_NB, _C_SY, _V_NAL, UK_B, _______, _______, UK_N, _M_NAR, _COM_SY, _DOT_NB, _SLSH, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+/* Numbers _NB
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | | F7 | F8 | F9 | F10 | | | | 7 | 8 | 9 | |
+ * |-----------------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | F4 | F5 | F6 | F11 | | | | 4 | 5 | 6 | |
+ * |-----------------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | | F1 | F2 | F3 | F12 | | | 0 | 1 | 2 | 3 | . |
+ * |-----------------+--------+--------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | | | | | | | | | | | | |
+ * '-----------------------------------------------------------------------------------------------------------'
+ */
+ [nbl] = LAYOUT_ortho_4x12( \
+ _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, UK_7, UK_8, UK_9, _______, \
+ _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, UK_4, UK_5, UK_6, _______, \
+ _______, __NBL, UK_F2, UK_F3, UK_F12, _______, _______, UK_0, UK_1, UK_2, UK_3, UK_DOT, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [nbr] = LAYOUT_ortho_4x12( \
+ _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, UK_7, UK_8, UK_9, _______, \
+ _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, UK_4, UK_5, UK_6, _______, \
+ _______, UK_F1, UK_F2, UK_F3, UK_F12, _______, _______, UK_0, UK_1, UK_2, __NBR, UK_DOT, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+/* Symbols _SY
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | ! | £ | _ | - | ~ | | | \ | { | } | / | # |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | $ | % | + | = | | | | " | ( | ) | ' | @ |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ^ | & | * | | | | | | < | [ | ] | > | ` |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | | | | | |
+ * '-----------------------------------------------------------------------------------------------------------'
+ */
+ [syl] = LAYOUT_ortho_4x12( \
+ UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH, \
+ UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT, \
+ UK_CIRC, UK_AMPR, __SYL, UK_PIPE, _______, _______, _______, UK_LABK, UK_LBRC, UK_RBRC, UK_RABK, UK_GRV, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [syr] = LAYOUT_ortho_4x12( \
+ UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH, \
+ UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT, \
+ UK_CIRC, UK_AMPR, UK_ASTR, UK_PIPE, _______, _______, _______, UK_LABK, UK_LBRC, __SYR, UK_RABK, UK_GRV, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+/*
+ * Navigation
+ * .-----------------------------------------------------------------------------------------------------------.
+ * | Esc | Ctrl L | Up | Ctrl R | RGB RMD| RGB HD | RGB HI | RGB_TG | PtSn | ScLk | Pause | DVORAK |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | Tab | Left | Down | Right | RGB MD | RGB SD | RGB SI | COLEMAK| Insert | Home | PgUp | Term |
+ * +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ShTab | Alt L | IJ Omni| Alt R | | RGB VD | RGB VI | | ScLk | End | PgDn | QWERTY |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | | | | | |
+ * '-----------------------------------------------------------------------------------------------------------'
+ */
+ [nal] = LAYOUT_ortho_4x12( \
+ UK_ESC, _C_LEFT, UK_UP, _C_RGHT, RGB_RMOD,RGB_HUD, RGB_HUI, RGB_TOG, UK_PSCR, UK_SLCK, UK_PAUS, DF(dv), \
+ UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, RGB_MOD, RGB_SAD, RGB_SAI, DF(cm), UK_INS, UK_HOME, UK_PGUP, _TERM, \
+ _S_TAB, _A_LEFT, IJ_OMN, __NAL, _______, RGB_VAD, RGB_VAI, _______, UK_SLCK, UK_END, UK_PGDN, DF(qw), \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [nar] = LAYOUT_ortho_4x12( \
+ UK_ESC, _C_LEFT, UK_UP, _C_RGHT, RGB_RMOD,RGB_HUD, RGB_HUI, RGB_TOG, UK_PSCR, UK_SLCK, UK_PAUS, DF(dv), \
+ UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, RGB_MOD, RGB_SAD, RGB_SAI, DF(cm), UK_INS, UK_HOME, UK_PGUP, _TERM, \
+ _S_TAB, _A_LEFT, IJ_OMN, _A_RGHT, _______, RGB_VAD, RGB_VAI, _______, __NAR, UK_END, UK_PGDN, DF(qw), \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case IJ_OMN:
+ SEND_STRING(SS_TAP(X_LSHIFT)SS_TAP(X_LSHIFT));
+ return false;
+ }
+ }
+ return true;
+}
diff --git a/keyboards/jj40/keymaps/suzuken/config.h b/keyboards/jj40/keymaps/suzuken/config.h
index 52aaa8f24..b1d74e1e6 100644
--- a/keyboards/jj40/keymaps/suzuken/config.h
+++ b/keyboards/jj40/keymaps/suzuken/config.h
@@ -3,7 +3,6 @@
#include "../../config.h"
-#define PREVENT_STUCK_MODIFIERS
#define TAPPING_TERM 300
#endif
diff --git a/keyboards/jj40/keymaps/waples/config.h b/keyboards/jj40/keymaps/waples/config.h
index 52aaa8f24..b1d74e1e6 100644
--- a/keyboards/jj40/keymaps/waples/config.h
+++ b/keyboards/jj40/keymaps/waples/config.h
@@ -3,7 +3,6 @@
#include "../../config.h"
-#define PREVENT_STUCK_MODIFIERS
#define TAPPING_TERM 300
#endif
diff --git a/keyboards/jj40/rules.mk b/keyboards/jj40/rules.mk
index 4e6f62617..697e17a01 100644
--- a/keyboards/jj40/rules.mk
+++ b/keyboards/jj40/rules.mk
@@ -57,4 +57,4 @@ SRC = matrix.c i2c.c backlight.c
# programming options
PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
-LAYOUTS = ortho_4x12 planck_mit planck_grid
+LAYOUTS = ortho_4x12 planck_mit
diff --git a/keyboards/jm60/config.h b/keyboards/jm60/config.h
index 847cf2078..cb5c90bb1 100644
--- a/keyboards/jm60/config.h
+++ b/keyboards/jm60/config.h
@@ -18,8 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef CONFIG_H
#define CONFIG_H
-#define PREVENT_STUCK_MODIFIERS
-
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6464
diff --git a/keyboards/jm60/readme.md b/keyboards/jm60/readme.md
index 3ba96ed60..b513a2c4c 100644
--- a/keyboards/jm60/readme.md
+++ b/keyboards/jm60/readme.md
@@ -3,8 +3,8 @@ JM60
A compact 60% keyboard with full RGB led support.
-Keyboard Maintainer: QMK Community
-Hardware Supported: JM60
+Keyboard Maintainer: QMK Community
+Hardware Supported: JM60
Hardware Availability: https://kbdfans.myshopify.com/ (is no longer sold)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/k_type/config.h b/keyboards/k_type/config.h
index d19e0ff64..4937d9ad9 100644
--- a/keyboards/k_type/config.h
+++ b/keyboards/k_type/config.h
@@ -18,8 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef CONFIG_H
#define CONFIG_H
-#define PREVENT_STUCK_MODIFIERS
-
/* USB Device descriptor parameter */
#define VENDOR_ID 0x1c11
#define PRODUCT_ID 0xb04d
diff --git a/keyboards/katana60/config.h b/keyboards/katana60/config.h
index 169cffb42..aaf2b5d54 100644
--- a/keyboards/katana60/config.h
+++ b/keyboards/katana60/config.h
@@ -48,7 +48,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
#define DIODE_DIRECTION ROW2COL
-
+
// #define BACKLIGHT_PIN B7
// #define BACKLIGHT_BREATHING
// #define BACKLIGHT_LEVELS 3
@@ -111,7 +111,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
)
#define TAPPING_TERM 200
-#define PREVENT_STUCK_MODIFIERS
/* control how magic key switches layers */
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
diff --git a/keyboards/kbd19x/config.h b/keyboards/kbd19x/config.h
new file mode 100644
index 000000000..47cfd7484
--- /dev/null
+++ b/keyboards/kbd19x/config.h
@@ -0,0 +1,224 @@
+/*
+Copyright 2018 Jeff Shufelt <jshuf@puppyfish.com> @jshuf
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER KBDFans
+#define PRODUCT kbd19x
+#define DESCRIPTION A compact-1800 keyboard kit.
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 13
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B7, B3, E6, F0, D5, D4, D6, C7 }
+#define MATRIX_COL_PINS { C6, F1, F4, F5, F6, F7, D7, B4, B5, D0, D1, D2, D3 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B6
+// #define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 18
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/kbd19x/info.json b/keyboards/kbd19x/info.json
new file mode 100644
index 000000000..31f2f9cf5
--- /dev/null
+++ b/keyboards/kbd19x/info.json
@@ -0,0 +1,218 @@
+{
+ "keyboard_name": "KBD19x",
+ "url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/kbd19x",
+ "maintainer": "qmk",
+ "width": 19.5,
+ "height": 6.75,
+ "layouts": {
+ "LAYOUT_ansi": {
+ "key_count": 99,
+ "layout": [{"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":1.25, "y":0},
+ {"label":"F2", "x":2.25, "y":0},
+ {"label":"F3", "x":3.25, "y":0},
+ {"label":"F4", "x":4.25, "y":0},
+ {"label":"F5", "x":5.5, "y":0},
+ {"label":"F6", "x":6.5, "y":0},
+ {"label":"F7", "x":7.5, "y":0},
+ {"label":"F8", "x":8.5, "y":0},
+ {"label":"F9", "x":9.75, "y":0},
+ {"label":"F10", "x":10.75, "y":0},
+ {"label":"F11", "x":11.75, "y":0},
+ {"label":"F12", "x":12.75, "y":0},
+ {"label":"BkLgt Step", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.5, "y":0},
+ {"label":"Scroll Lock", "x":16.5, "y":0},
+ {"label":"Pause Break", "x":17.5, "y":0},
+ {"label":"PgDn", "x":18.5, "y":0},
+ {"label":"~", "x":0, "y":1.5},
+ {"label":"!", "x":1, "y":1.5},
+ {"label":"@", "x":2, "y":1.5},
+ {"label":"#", "x":3, "y":1.5},
+ {"label":"$", "x":4, "y":1.5},
+ {"label":"%", "x":5, "y":1.5},
+ {"label":"^", "x":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":"Num Lock", "x":15.5, "y":1.5},
+ {"label":"/", "x":16.5, "y":1.5},
+ {"label":"*", "x":17.5, "y":1.5},
+ {"label":"-", "x":18.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":"7", "x":15.5, "y":2.5},
+ {"label":"8", "x":16.5, "y":2.5},
+ {"label":"9", "x":17.5, "y":2.5},
+ {"label":"+", "x":18.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":15.5, "y":3.5},
+ {"label":"5", "x":16.5, "y":3.5},
+ {"label":"6", "x":17.5, "y":3.5},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":"<", "x":9.25, "y":4.5},
+ {"label":">", "x":10.25, "y":4.5},
+ {"label":"?", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":1.75},
+ {"label":"1", "x":15.5, "y":4.5},
+ {"label":"2", "x":16.5, "y":4.5},
+ {"label":"3", "x":17.5, "y":4.5},
+ {"label":"Enter", "x":18.5, "y":4.5, "h":2},
+ {"label":"\u2191", "x":14.25, "y":4.75},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5.5},
+ {"label":"Alt", "x":2.25, "y":5.5, "w":1.25},
+ {"x":3.5, "y":5.5, "w":6.25},
+ {"label":"Alt", "x":9.75, "y":5.5},
+ {"label":"MO(1)", "x":10.75, "y":5.5},
+ {"label":"Ctrl", "x":11.75, "y":5.5, "w":1.25},
+ {"label":"0", "x":16.5, "y":5.5},
+ {"label":".", "x":17.5, "y":5.5},
+ {"label":"\u2190", "x":13.25, "y":5.75},
+ {"label":"\u2193", "x":14.25, "y":5.75},
+ {"label":"\u2192", "x":15.25, "y":5.75}]
+ },
+ "LAYOUT_all": {
+ "key_count": 103,
+ "layout": [{"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":1.25, "y":0},
+ {"label":"F2", "x":2.25, "y":0},
+ {"label":"F3", "x":3.25, "y":0},
+ {"label":"F4", "x":4.25, "y":0},
+ {"label":"F5", "x":5.5, "y":0},
+ {"label":"F6", "x":6.5, "y":0},
+ {"label":"F7", "x":7.5, "y":0},
+ {"label":"F8", "x":8.5, "y":0},
+ {"label":"F9", "x":9.75, "y":0},
+ {"label":"F10", "x":10.75, "y":0},
+ {"label":"F11", "x":11.75, "y":0},
+ {"label":"F12", "x":12.75, "y":0},
+ {"label":"BkLgt Step", "x":14, "y":0},
+ {"label":"Print Screen", "x":15.5, "y":0},
+ {"label":"Scroll Lock", "x":16.5, "y":0},
+ {"label":"Pause Break", "x":17.5, "y":0},
+ {"label":"PgDn", "x":18.5, "y":0},
+ {"label":"~", "x":0, "y":1.5},
+ {"label":"!", "x":1, "y":1.5},
+ {"label":"@", "x":2, "y":1.5},
+ {"label":"#", "x":3, "y":1.5},
+ {"label":"$", "x":4, "y":1.5},
+ {"label":"%", "x":5, "y":1.5},
+ {"label":"^", "x":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},
+ {"x":13, "y":1.5},
+ {"label":"BS", "x":14, "y":1.5},
+ {"label":"Num Lock", "x":15.5, "y":1.5},
+ {"label":"/", "x":16.5, "y":1.5},
+ {"label":"*", "x":17.5, "y":1.5},
+ {"label":"-", "x":18.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":"7", "x":15.5, "y":2.5},
+ {"label":"8", "x":16.5, "y":2.5},
+ {"label":"9", "x":17.5, "y":2.5},
+ {"label":"+", "x":18.5, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":":", "x":10.75, "y":3.5},
+ {"label":"\"", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"4", "x":15.5, "y":3.5},
+ {"label":"5", "x":16.5, "y":3.5},
+ {"label":"6", "x":17.5, "y":3.5},
+ {"x":18.5, "y":3.5},
+ {"label":"Shift", "x":0, "y":4.5, "w":1.25},
+ {"x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":"<", "x":9.25, "y":4.5},
+ {"label":">", "x":10.25, "y":4.5},
+ {"label":"?", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":1.75},
+ {"label":"1", "x":15.5, "y":4.5},
+ {"label":"2", "x":16.5, "y":4.5},
+ {"label":"3", "x":17.5, "y":4.5},
+ {"label":"Enter", "x":18.5, "y":4.5},
+ {"label":"\u2191", "x":14.25, "y":4.75},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5.5},
+ {"label":"Alt", "x":2.25, "y":5.5, "w":1.25},
+ {"x":3.5, "y":5.5, "w":6.25},
+ {"label":"Alt", "x":9.75, "y":5.5},
+ {"label":"Menu", "x":10.75, "y":5.5},
+ {"label":"Ctrl", "x":11.75, "y":5.5, "w":1.25},
+ {"label":"0", "x":16.5, "y":5.5},
+ {"label":".", "x":17.5, "y":5.5},
+ {"x":18.5, "y":5.5},
+ {"label":"\u2190", "x":13.25, "y":5.75},
+ {"label":"\u2193", "x":14.25, "y":5.75},
+ {"label":"\u2192", "x":15.25, "y":5.75}]
+ }
+ }
+}
+
diff --git a/keyboards/kbd19x/kbd19x.c b/keyboards/kbd19x/kbd19x.c
new file mode 100644
index 000000000..360345600
--- /dev/null
+++ b/keyboards/kbd19x/kbd19x.c
@@ -0,0 +1,63 @@
+/*
+Copyright 2018 Jeff Shufelt <jshuf@puppyfish.com> @jshuf
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "kbd19x.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
+
+ if (usb_led & (1<<USB_LED_NUM_LOCK)) {
+ kbd19x_nmlk_led_on();
+ } else {
+ kbd19x_nmlk_led_off();
+ }
+
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ kbd19x_caps_led_on();
+ } else {
+ kbd19x_caps_led_off();
+ }
+
+ if (usb_led & (1<<USB_LED_SCROLL_LOCK)) {
+ kbd19x_sclk_led_on();
+ } else {
+ kbd19x_sclk_led_off();
+ }
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/kbd19x/kbd19x.h b/keyboards/kbd19x/kbd19x.h
new file mode 100644
index 000000000..728c7ca5c
--- /dev/null
+++ b/keyboards/kbd19x/kbd19x.h
@@ -0,0 +1,103 @@
+/*
+Copyright 2018 Jeff Shufelt <jshuf@puppyfish.com> @jshuf
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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 KBD19X_H
+#define KBD19X_H
+
+#include "quantum.h"
+#include "led.h"
+
+inline void kbd19x_caps_led_on(void) { DDRB |= (1<<0); PORTB &= ~(1<<0); }
+inline void kbd19x_caps_led_off(void) { DDRB &= ~(1<<0); PORTB &= ~(1<<0); }
+
+inline void kbd19x_sclk_led_on(void) { DDRB |= (1<<1); PORTB &= ~(1<<1); }
+inline void kbd19x_sclk_led_off(void) { DDRB &= ~(1<<1); PORTB &= ~(1<<1); }
+
+inline void kbd19x_nmlk_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
+inline void kbd19x_nmlk_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
+
+// readability
+#define XXX KC_NO
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+// 2u backspace: XXX, k1e
+// split backspace: k1d, k1e
+
+// 2u numpad +: k2i, XXX
+// split numpad +: k2i, k3i
+
+// 2u numpad enter: k4i, XXX
+// split numpad enter: k4i, k5i
+
+// 2.25u lshift: k40, XXX
+// split (1.25u, 1u) lshift: k40, k41
+
+// ANSI enter or ISO enter: k3e
+// backslash or NUHS: k2e
+
+// left winkey: k50, k51, k52
+// left WKL: k50, XXX, k52
+
+// right winkey: k59, k5a, k5b
+// right WKL: k59, XXX, k5b
+
+#define LAYOUT_all( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0f, k0g, k0h, k0i, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, k1g, k1h, k1i, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k2f, k2g, k2h, k2i, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3e, k3f, k3g, k3h, k3i, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4e, k4f, k4g, k4h, k4i, \
+ k50, k51, k52, k56, k59, k5a, k5b, k5d, k5e, k5f, k5g, k5h, k5i \
+)\
+{\
+ {k00, k01, k02, k03, k04, k09, k0a, k0b, k0c, k0f, k0g, k0h, k0i},\
+ {k10, k11, k12, k13, k14, k19, k1a, k1b, k1c, k1f, k1g, k1h, k1i},\
+ {k20, k21, k22, k23, k24, k29, k2a, k2b, k2c, k2f, k2g, k2h, k2i},\
+ {k30, k32, k33, k34, k35, k3a, k3b, k3c, k3e, k3f, k3g, k3h, k3i},\
+ {k40, k41, k42, k43, k44, k49, k4a, k4b, k4c, k4f, k4g, k4h, k4i},\
+ {k50, k51, k52, k5e, k5f, k59, k5a, k5b, k5d, k56, k5g, k5h, k5i},\
+ {k05, k06, k07, k08, k15, k16, k17, k18, k25, k26, k27, k28, k36},\
+ {k1d, k1e, k0e, k2e, k4e, k37, k38, k39, k45, k46, k47, k48, XXX},\
+}
+
+#define LAYOUT_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k0f, k0g, k0h, k0i, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, k1f, k1g, k1h, k1i, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k2f, k2g, k2h, k2i, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3e, k3f, k3g, k3h, \
+ k40, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4e, k4f, k4g, k4h, k4i, \
+ k50, k51, k52, k56, k59, k5a, k5b, k5d, k5e, k5f, k5g, k5h \
+)\
+{\
+ {k00, k01, k02, k03, k04, k09, k0a, k0b, k0c, k0f, k0g, k0h, k0i},\
+ {k10, k11, k12, k13, k14, k19, k1a, k1b, k1c, k1f, k1g, k1h, k1i},\
+ {k20, k21, k22, k23, k24, k29, k2a, k2b, k2c, k2f, k2g, k2h, k2i},\
+ {k30, k32, k33, k34, k35, k3a, k3b, k3c, k3e, k3f, k3g, k3h, XXX},\
+ {k40, XXX, k42, k43, k44, k49, k4a, k4b, k4c, k4f, k4g, k4h, k4i},\
+ {k50, k51, k52, k5e, k5f, k59, k5a, k5b, k5d, k56, k5g, k5h, XXX},\
+ {k05, k06, k07, k08, k15, k16, k17, k18, k25, k26, k27, k28, k36},\
+ {XXX, k1e, k0e, k2e, k4e, k37, k38, k39, k45, k46, k47, k48, XXX},\
+}
+#endif
diff --git a/keyboards/kbd19x/keymaps/default/config.h b/keyboards/kbd19x/keymaps/default/config.h
new file mode 100644
index 000000000..70028a525
--- /dev/null
+++ b/keyboards/kbd19x/keymaps/default/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2018 Jeff Shufelt <jshuf@puppyfish.com> @jshuf
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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/kbd19x/keymaps/default/keymap.c b/keyboards/kbd19x/keymaps/default/keymap.c
new file mode 100644
index 000000000..c80607211
--- /dev/null
+++ b/keyboards/kbd19x/keymaps/default/keymap.c
@@ -0,0 +1,52 @@
+/*
+Copyright 2018 Jeff Shufelt <jshuf@puppyfish.com> @jshuf
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi( /* Base */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, BL_STEP, KC_PSCR, KC_SLCK, KC_PAUS, KC_PGDN, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
+ ),
+ [1] = LAYOUT_ansi( /* Func */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______, _______, \
+ _______, 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) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kbd19x/keymaps/default/readme.md b/keyboards/kbd19x/keymaps/default/readme.md
new file mode 100644
index 000000000..504a3ed02
--- /dev/null
+++ b/keyboards/kbd19x/keymaps/default/readme.md
@@ -0,0 +1,13 @@
+# Default KBD19x Layout
+
+This is the default KBD19x layout, consisting of the base layer and the function layer. Backlighting and RGB controls are accessible on the function layer.
+
+**Base layer**
+
+![kbd19x default base layer](https://i.imgur.com/XhT980a.png)
+
+**Function layer**
+
+![kbd19x default function layer](https://i.imgur.com/3w3PXN2.png)
+
+
diff --git a/keyboards/kbd19x/readme.md b/keyboards/kbd19x/readme.md
new file mode 100644
index 000000000..ee4969b00
--- /dev/null
+++ b/keyboards/kbd19x/readme.md
@@ -0,0 +1,19 @@
+# kbd19x
+
+![kbd19x](https://i.imgur.com/0hWTEnh.jpg)
+
+**Layout possibilities for the KBD19x**
+
+![kbd19x](https://i.imgur.com/pVaR2zY.png)
+
+The KBD19x is a compact-1800 keyboard kit produced by KBDfans, offering a number of layout options.
+
+Keyboard Maintainer: [jshuf](https://github.com/jshuf)
+Hardware Supported: KBD19x PCB
+Hardware Availability: [KBDfans](https://kbdfans.cn)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbd19x: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/kbd19x/rules.mk b/keyboards/kbd19x/rules.mk
new file mode 100644
index 000000000..8e50962af
--- /dev/null
+++ b/keyboards/kbd19x/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 = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/kbd4x/config.h b/keyboards/kbd4x/config.h
new file mode 100644
index 000000000..b967ab8f7
--- /dev/null
+++ b/keyboards/kbd4x/config.h
@@ -0,0 +1,223 @@
+/*
+Copyright 2018 sevenseacat
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER KBDFans
+#define PRODUCT KBD4x
+#define DESCRIPTION A compact 40% (12x4) ortholinear keyboard kit.
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D0, D1, D2, D3 }
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, B3, B1, B0, D5, B7, C7 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B6
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 16
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
diff --git a/keyboards/kbd4x/info.json b/keyboards/kbd4x/info.json
new file mode 100644
index 000000000..f9952e790
--- /dev/null
+++ b/keyboards/kbd4x/info.json
@@ -0,0 +1,112 @@
+{
+ "keyboard_name": "kbd4x",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 14,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_planck_mit": {
+ "layout": [
+ {"label":"ESC", "x":0, "y":0},
+ {"label":"Q", "x":1, "y":0},
+ {"label":"W", "x":2, "y":0},
+ {"label":"E", "x":3, "y":0},
+ {"label":"R", "x":4, "y":0},
+ {"label":"T", "x":5, "y":0},
+ {"label":"Y", "x":6, "y":0},
+ {"label":"U", "x":7, "y":0},
+ {"label":"I", "x":8, "y":0},
+ {"label":"O", "x":9, "y":0},
+ {"label":"P", "x":10, "y":0},
+ {"label":"BKSP", "x":11, "y":0},
+ {"label":"TAB", "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":6, "y":1},
+ {"label":"J", "x":7, "y":1},
+ {"label":"K", "x":8, "y":1},
+ {"label":"L", "x":9, "y":1},
+ {"label":";", "x":10, "y":1},
+ {"label":"'", "x":11, "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":6, "y":2},
+ {"label":"M", "x":7, "y":2},
+ {"label":",", "x":8, "y":2},
+ {"label":".", "x":9, "y":2},
+ {"label":"UP", "x":10, "y":2},
+ {"label":"ENTER", "x":11, "y":2},
+ {"label":"LCTRL", "x":0, "y":3},
+ {"label":"LGUI", "x":1, "y":3},
+ {"label":"1", "x":2, "y":3},
+ {"label":"2", "x":3, "y":3},
+ {"label":"3", "x":4, "y":3},
+ {"label":"SPACE", "x":5, "y":3, "w":2},
+ {"label":"MO(1)", "x":7, "y":3},
+ {"label":"/", "x":8, "y":3},
+ {"label":"LEFT", "x":9, "y":3},
+ {"label":"DOWN", "x":10, "y":3},
+ {"label":"RIGHT", "x":11, "y":3}
+ ]
+ },
+ "LAYOUT_ortho_4x12": {
+ "layout": [
+ {"label":"ESC", "x":0, "y":0},
+ {"label":"Q", "x":1, "y":0},
+ {"label":"W", "x":2, "y":0},
+ {"label":"E", "x":3, "y":0},
+ {"label":"R", "x":4, "y":0},
+ {"label":"T", "x":5, "y":0},
+ {"label":"Y", "x":6, "y":0},
+ {"label":"U", "x":7, "y":0},
+ {"label":"I", "x":8, "y":0},
+ {"label":"O", "x":9, "y":0},
+ {"label":"P", "x":10, "y":0},
+ {"label":"BKSP", "x":11, "y":0},
+ {"label":"TAB", "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":6, "y":1},
+ {"label":"J", "x":7, "y":1},
+ {"label":"K", "x":8, "y":1},
+ {"label":"L", "x":9, "y":1},
+ {"label":";", "x":10, "y":1},
+ {"label":"'", "x":11, "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":6, "y":2},
+ {"label":"M", "x":7, "y":2},
+ {"label":",", "x":8, "y":2},
+ {"label":".", "x":9, "y":2},
+ {"label":"UP", "x":10, "y":2},
+ {"label":"ENTER", "x":11, "y":2},
+ {"label":"LCTRL", "x":0, "y":3},
+ {"label":"LGUI", "x":1, "y":3},
+ {"label":"1", "x":2, "y":3},
+ {"label":"2", "x":3, "y":3},
+ {"label":"3", "x":4, "y":3},
+ {"label":"SPACE", "x":5, "y":3},
+ {"label":"MO(2)", "x":6, "y":3},
+ {"label":"MO(1)", "x":7, "y":3},
+ {"label":"/", "x":8, "y":3},
+ {"label":"LEFT", "x":9, "y":3},
+ {"label":"DOWN", "x":10, "y":3},
+ {"label":"RIGHT", "x":11, "y":3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/kbd4x/kbd4x.c b/keyboards/kbd4x/kbd4x.c
new file mode 100644
index 000000000..84ada250d
--- /dev/null
+++ b/keyboards/kbd4x/kbd4x.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 sevenseacat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "kbd4x.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/kbd4x/kbd4x.h b/keyboards/kbd4x/kbd4x.h
new file mode 100644
index 000000000..d7a851e3e
--- /dev/null
+++ b/keyboards/kbd4x/kbd4x.h
@@ -0,0 +1,48 @@
+/* Copyright 2018 sevenseacat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 KBD4X_H
+#define KBD4X_H
+
+#include "quantum.h"
+
+#define LAYOUT_planck_mit( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k37, k38, k39, k3a, k3b \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, KC_NO, k37, k38, k39, k3a, k3b } \
+}
+
+// The PCB does support a grid layout, but the case does not.
+#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 } \
+}
+
+#endif
diff --git a/keyboards/kbd4x/keymaps/default/config.h b/keyboards/kbd4x/keymaps/default/config.h
new file mode 100644
index 000000000..7f3bd7dd5
--- /dev/null
+++ b/keyboards/kbd4x/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 sevenseacat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/kbd4x/keymaps/default/keymap.c b/keyboards/kbd4x/keymaps/default/keymap.c
new file mode 100644
index 000000000..ad49b3799
--- /dev/null
+++ b/keyboards/kbd4x/keymaps/default/keymap.c
@@ -0,0 +1,52 @@
+/* Copyright 2018 sevenseacat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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 ___ KC_TRNS
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ KBD4X = SAFE_RANGE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_planck_mit(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENTER,
+ KC_LCTL, KC_LGUI, KC_1, KC_2, KC_3, KC_SPACE, MO(1), KC_SLSH, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [1] = LAYOUT_planck_mit(
+ KC_GRAVE, 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, ___, ___, ___, ___, ___, ___, RESET,
+ ___, BL_TOGG, BL_STEP, ___, ___, ___, ___, ___, ___, ___, ___, ___,
+ ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+void led_set_user(uint8_t usb_led) {
+}
diff --git a/keyboards/kbd4x/keymaps/default/readme.md b/keyboards/kbd4x/keymaps/default/readme.md
new file mode 100644
index 000000000..a950a25ac
--- /dev/null
+++ b/keyboards/kbd4x/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for kbd4x
diff --git a/keyboards/kbd4x/readme.md b/keyboards/kbd4x/readme.md
new file mode 100644
index 000000000..42dc45024
--- /dev/null
+++ b/keyboards/kbd4x/readme.md
@@ -0,0 +1,15 @@
+# KBD4x
+
+![KBD4x](https://cdn.shopify.com/s/files/1/1473/3902/products/1_ef8d3ad0-fc70-4d4f-9e36-8438c781a581_1800x1800.jpg)
+
+A compact 40% (12x4) ortholinear keyboard kit sold by KBDFans.
+
+Keyboard Maintainer: ![sevenseacat](https://github.com/sevenseacat)
+Hardware Supported: KBD4x PCB
+Hardware Availability: https://kbdfans.cn/collections/diy-kit/products/kbd4x-custom-mechanical-keyboard-hot-swap-diy-kit
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbd4x: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/kbd4x/rules.mk b/keyboards/kbd4x/rules.mk
new file mode 100644
index 000000000..6cfd92bc6
--- /dev/null
+++ b/keyboards/kbd4x/rules.mk
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/kbd67/config.h b/keyboards/kbd67/config.h
new file mode 100644
index 000000000..2e3cf85c3
--- /dev/null
+++ b/keyboards/kbd67/config.h
@@ -0,0 +1,240 @@
+/*
+Copyright 2018 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER kbdfans
+#define PRODUCT kbd67
+#define DESCRIPTION 65% Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3, F4, F5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B6
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN E2
+#ifdef RGB_DI_PIN
+ #define RGBLED_NUM 20
+ #define RGBLIGHT_HUE_STEP 8
+ #define RGBLIGHT_SAT_STEP 8
+ #define RGBLIGHT_VAL_STEP 8
+ #define RGBLIGHT_LIMIT_VAL 180 /* The maximum brightness level */
+ // #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
+/*== all animations enable ==*/
+ #define RGBLIGHT_ANIMATIONS
+/*== or choose animations ==*/
+ // #define RGBLIGHT_EFFECT_BREATHING
+ // #define RGBLIGHT_EFFECT_RAINBOW_MOOD
+ // #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+ // #define RGBLIGHT_EFFECT_SNAKE
+ // #define RGBLIGHT_EFFECT_KNIGHT
+ // #define RGBLIGHT_EFFECT_CHRISTMAS
+ // #define RGBLIGHT_EFFECT_STATIC_GRADIENT
+ // #define RGBLIGHT_EFFECT_RGB_TEST
+ // #define RGBLIGHT_EFFECT_ALTERNATING
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/kbd67/info.json b/keyboards/kbd67/info.json
new file mode 100644
index 000000000..70a926a7f
--- /dev/null
+++ b/keyboards/kbd67/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "kbd67",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "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":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":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":2.75}, {"x":6.5, "y":4, "w":1.25}, {"x":7.75, "y":4, "w":2.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
+ },
+
+ "LAYOUT_65_ansi": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/kbd67/kbd67.c b/keyboards/kbd67/kbd67.c
new file mode 100644
index 000000000..5e0369673
--- /dev/null
+++ b/keyboards/kbd67/kbd67.c
@@ -0,0 +1,51 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "kbd67.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
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 2);
+ PORTB &= ~(1 << 2);
+ } else {
+ DDRB &= ~(1 << 2);
+ PORTB &= ~(1 << 2);
+ }
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/kbd67/kbd67.h b/keyboards/kbd67/kbd67.h
new file mode 100644
index 000000000..4a98c66f7
--- /dev/null
+++ b/keyboards/kbd67/kbd67.h
@@ -0,0 +1,59 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef KBD67_H
+#define KBD67_H
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
+ K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, \
+ K40, K41, K43, K44, K46, K48, K4A, K4B, K4C, K4D, K4E, K4F \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E, K3F }, \
+ { K40, K41, KC_NO, K43, K44, KC_NO, K46, KC_NO, K48, KC_NO, K4A, K4B, K4C, K4D, K4E, K4F }, \
+}
+
+#define LAYOUT_65_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, K0F, \
+ K10, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, \
+ K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, \
+ K40, K41, K43, K46, K4A, K4B, K4C, K4D, K4E, K4F \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E, K0F }, \
+ { K10, KC_NO, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, KC_NO, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO, K2F }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E, K3F }, \
+ { K40, K41, KC_NO, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E, K4F }, \
+}
+
+#endif
diff --git a/keyboards/kbd67/keymaps/default/config.h b/keyboards/kbd67/keymaps/default/config.h
new file mode 100644
index 000000000..a3ed4f762
--- /dev/null
+++ b/keyboards/kbd67/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/kbd67/keymaps/default/keymap.c b/keyboards/kbd67/keymaps/default/keymap.c
new file mode 100644
index 000000000..89fa9a534
--- /dev/null
+++ b/keyboards/kbd67/keymaps/default/keymap.c
@@ -0,0 +1,99 @@
+/* Copyright 2018 'mechmerlin'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#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] = {
+/* Keymap (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del |
+ * |----------------------------------------------------------------|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+[0] = LAYOUT_65_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap Fn Layer
+ * ,----------------------------------------------------------------.
+ * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins |
+ * |----------------------------------------------------------------|
+ * | | |Up | | | | | | | | | | | |Hme |
+ * |----------------------------------------------------------------|
+ * | |<- |Dn | ->| | | | | | | | | |End |
+ * |----------------------------------------------------------------|
+ * | | | |Bl-|BL |BL+| |VU-|VU+|MUT| | McL|MsU|McR |
+ * |----------------------------------------------------------------|
+ * | | | | | | | |MsL|MsD|MsR |
+ * `----------------------------------------------------------------'
+ */
+[1] = LAYOUT_65_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,KC_INS, \
+ KC_CAPS,_______, KC_UP,_______,_______,_______,_______,_______,KC_PSCR,KC_SLCK,KC_PAUS, KC_UP,_______, _______,_______, \
+ _______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,_______,_______,KC_HOME,KC_PGUP,KC_LEFT,KC_RGHT, _______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,_______, KC_END,KC_PGDN,KC_DOWN, _______,KC_PGUP,_______, \
+ _______, _______, _______, _______, _______,_______,_______,KC_HOME,KC_PGDN, KC_END),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/kbd67/keymaps/default/readme.md b/keyboards/kbd67/keymaps/default/readme.md
new file mode 100644
index 000000000..2cb43c5e1
--- /dev/null
+++ b/keyboards/kbd67/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for kbd67
diff --git a/keyboards/kbd67/readme.md b/keyboards/kbd67/readme.md
new file mode 100644
index 000000000..734b1a63a
--- /dev/null
+++ b/keyboards/kbd67/readme.md
@@ -0,0 +1,15 @@
+# kbd67
+
+![kbd67](imgur.com image replace me!)
+
+65% keyboard with blocker.
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: KBD67 PCB
+Hardware Availability: [KBDFans](https://kbdfans.cn/products/coming-soon-kbd67-mechanical-keyboard-diy-kit)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kbd67:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/kbd67/rules.mk b/keyboards/kbd67/rules.mk
new file mode 100644
index 000000000..9d25d7b21
--- /dev/null
+++ b/keyboards/kbd67/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 = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# 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/kbd6x/config.h b/keyboards/kbd6x/config.h
index 6a5ebf062..9f23fb867 100644
--- a/keyboards/kbd6x/config.h
+++ b/keyboards/kbd6x/config.h
@@ -169,8 +169,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_LAYER
//#define NO_ACTION_TAPPING
//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
/*
* MIDI options
@@ -222,4 +222,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define LCD_E_PIN 1 //< pin for Enable line
#endif
*/
-
diff --git a/keyboards/kbd6x/keymaps/default/keymap.c b/keyboards/kbd6x/keymaps/default/keymap.c
index fd73b1445..e2e96fc63 100644
--- a/keyboards/kbd6x/keymaps/default/keymap.c
+++ b/keyboards/kbd6x/keymaps/default/keymap.c
@@ -26,32 +26,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[1] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, BL_DEC, BL_TOGG, BL_INC, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
-};
-
void matrix_init_user(void) {
diff --git a/keyboards/kbd6x/keymaps/hhkb-default-improved/keymap.c b/keyboards/kbd6x/keymaps/hhkb-default-improved/keymap.c
new file mode 100644
index 000000000..80c22e5d9
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/hhkb-default-improved/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// iproved hhkb layout with more functionality
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, RESET,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_DEL,
+ KC_RCTL, KC_VOLU, KC_VOLD, KC_MUTE, KC_MPLY, KC_MSTP, KC_ASTR, KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PLUS, KC_UNDS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
diff --git a/keyboards/kbd6x/keymaps/hhkb-default-improved/readme.md b/keyboards/kbd6x/keymaps/hhkb-default-improved/readme.md
new file mode 100644
index 000000000..be22dd16c
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/hhkb-default-improved/readme.md
@@ -0,0 +1 @@
+# this is the default hhkb layout in a more useable normalized form (aka the way i use mine) \ No newline at end of file
diff --git a/keyboards/kbd6x/keymaps/hhkb-default/keymap.c b/keyboards/kbd6x/keymaps/hhkb-default/keymap.c
new file mode 100644
index 000000000..03153b67a
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/hhkb-default/keymap.c
@@ -0,0 +1,51 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// stock hhkb as referenced by https://i.imgur.com/QoBTDHf.png
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_TRNS, KC_LALT, KC_LGUI, KC_SPACE, KC_RGUI, KC_RALT, KC_TRNS
+ ),
+
+ [1] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, RESET,
+ KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE, KC_MSTP, KC_TRNS, KC_ASTR, KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PLUS, KC_UNDS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+};
+
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
diff --git a/keyboards/kbd6x/keymaps/hhkb-default/readme.md b/keyboards/kbd6x/keymaps/hhkb-default/readme.md
new file mode 100644
index 000000000..cf93c3553
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/hhkb-default/readme.md
@@ -0,0 +1 @@
+# default hhkb layout adapted to the 6x (for tofu hhkb) \ No newline at end of file
diff --git a/keyboards/kbd6x/keymaps/othi/config.h b/keyboards/kbd6x/keymaps/othi/config.h
new file mode 100644
index 000000000..42f68b435
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/othi/config.h
@@ -0,0 +1,10 @@
+#pragma once
+#define ONESHOT_TAP_TOOGLE 2
+#define ONESHOT_TIMEOUT 2000
+// tap dance configurations
+#define TAPPING_TERM 200
+#define TAPPING_TOGGLE 2
+#define PERMISSIVE_HOLD
+// Fix KC_GESC conflict with Cmd+Alt+Esc on macros
+#define GRAVE_ESC_GUI_OVERRIDE
+
diff --git a/keyboards/kbd6x/keymaps/othi/keymap.c b/keyboards/kbd6x/keymaps/othi/keymap.c
new file mode 100644
index 000000000..1e0fc8ad7
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/othi/keymap.c
@@ -0,0 +1,190 @@
+/* Copyright 2018 Othi
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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
+
+// read README.md for rundown of what does what
+
+// #define BL 0
+#define CL 0
+#define NM_MODE 2
+#define VI_MODE 3
+#define FN3 4
+#define ACCENT 5
+#define ACCENT_CAP 6
+
+//Unicode keymaps
+void eeconfig_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+}
+#define DE_AE UC(0x00E4)
+#define DE_SS UC(0x00DF)
+#define DE_OE UC(0x00F6)
+#define DE_UE UC(0x00FC)
+#define DE_AE_CAP UC(0x00C4)
+#define DE_OE_CAP UC(0x00D6)
+#define DE_UE_CAP UC(0x00DC)
+
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case NM_MODE:
+ rgblight_setrgb (0x00, 0x66, 0x00);
+ break;
+ case VI_MODE:
+ rgblight_setrgb (0x66, 0x66, 0x00);
+ break;
+ case ACCENT:
+ rgblight_setrgb (0x7A, 0x00, 0xFF);
+ break;
+ case ACCENT_CAP:
+ rgblight_setrgb (0x7A, 0xFF, 0xFF);
+ break;
+ default: // for any other layers, or the default layer
+ rgblight_setrgb (0xFF, 0x00, 0x00);
+ break;
+ }
+ return state;
+}
+
+//Tap Dance Declarations
+enum {
+ CTL_NM = 0,
+ ALT_NM = 1,
+ SFT_NM = 2,
+ GUI_NM = 3
+};
+
+void dance_CTL_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ set_oneshot_mods(MOD_LCTL);
+ } else {
+ register_code (KC_LCTL);
+ layer_on(NM_MODE);
+ }
+}
+
+void dance_CTL_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ unregister_code (KC_LCTL);
+ } else {
+ unregister_code (KC_LCTL);
+ layer_off(NM_MODE);
+ }
+}
+
+void dance_GUI_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ register_code (KC_LGUI);
+ } else {
+ register_code (KC_LGUI);
+ layer_on(NM_MODE);
+ }
+}
+
+void dance_GUI_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ unregister_code (KC_LGUI);
+ } else {
+ unregister_code (KC_LGUI);
+ layer_off(NM_MODE);
+ }
+}
+
+void dance_ALT_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ register_code (KC_LALT);
+ } else {
+ register_code (KC_LALT);
+ layer_on(NM_MODE);
+ }
+}
+
+void dance_ALT_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ unregister_code (KC_LALT);
+ } else {
+ unregister_code (KC_LALT);
+ layer_off(NM_MODE);
+ }
+}
+
+void dance_SFT_NM_finished (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ register_code (KC_LSFT);
+ set_oneshot_mods(MOD_LSFT);
+ } else {
+ register_code (KC_LSFT);
+ layer_on(NM_MODE);
+ }
+}
+
+void dance_SFT_NM_reset (qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ unregister_code (KC_LSFT);
+ } else {
+ unregister_code (KC_LSFT);
+ layer_off(NM_MODE);
+ }
+}
+
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [CTL_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_CTL_NM_finished, dance_CTL_NM_reset),
+ [GUI_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_GUI_NM_finished, dance_GUI_NM_reset),
+ [ALT_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_ALT_NM_finished, dance_ALT_NM_reset),
+ [SFT_NM] = ACTION_TAP_DANCE_FN_ADVANCED (NULL, dance_SFT_NM_finished, dance_SFT_NM_reset)
+};
+
+// backup
+// old R3 capslock, LT(NM_MODE,KC_BSPC),
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [CL] = LAYOUT(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
+ MT(MOD_LGUI,KC_TAB), LT(NM_MODE,KC_Q), KC_W, LT(ACCENT,KC_F), KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSPC,
+ MT(MOD_LCTL,KC_BSPC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT,
+ TD(SFT_NM), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, MT(MOD_LCTL,KC_COMM), MT(MOD_LSFT,KC_DOT), MT(MOD_LALT,KC_SLSH), LM(CL,MOD_LGUI|MOD_LSFT), TT(NM_MODE),
+ _______, TD(CTL_NM), TD(ALT_NM), KC_SPC, LM(CL,MOD_LGUI|MOD_LALT), OSL(ACCENT) , _______
+ ),
+ [NM_MODE] = LAYOUT(
+ KC_GRV, KC_MPRV, KC_MNXT, KC_MPLY, KC_END, _______, _______, _______, _______, _______, KC_HOME, _______, _______, RESET, KC_INS,
+ LGUI(KC_TAB), _______, LCTL(KC_RGHT), _______, _______, _______, _______, KC_UP, KC_PGUP, _______, _______, _______, TG(CL), KC_DEL,
+ _______, KC_LEFT, _______, KC_RGHT, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_ENT, KC_QUOT, KC_LGUI,
+ KC_LSFT, _______, _______, _______, _______, LCTL(KC_LEFT), _______, _______, _______, _______, _______, TG(VI_MODE), TO(CL),
+ _______, TD(CTL_NM), TD(ALT_NM), KC_SPC, LM(CL,MOD_LGUI|MOD_LALT), OSL(ACCENT), _______
+ ),
+
+ [VI_MODE] = LAYOUT(
+ KC_GRV, KC_MPRV, KC_MNXT, KC_MPLY, LSFT(KC_END), KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, LSFT(KC_HOME), KC_F11, KC_F12, RESET, KC_INS,
+ LGUI(KC_TAB), _______, LSFT(LCTL(KC_RGHT)), _______, _______, _______, _______, LSFT(KC_UP), _______, _______, _______, _______, TG(CL), KC_BSPC,
+ _______, _______, _______, _______, _______, _______, LSFT(LCTL(KC_LEFT)), LSFT(KC_DOWN), LSFT(KC_RGHT), _______, KC_SCLN, KC_QUOT, KC_LGUI,
+ KC_LSFT, _______, _______, _______, _______, LSFT(LCTL(KC_LEFT)), _______, _______, _______, _______, KC_SLSH, OSM(MOD_LSFT), TO(CL),
+ _______, TD(CTL_NM), TD(ALT_NM), KC_SPC, LM(CL,MOD_LGUI|MOD_LALT), OSL(ACCENT), _______
+ ),
+ [ACCENT] = LAYOUT(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ _______, RGB_TOG, RGB_MODE_PLAIN, _______, _______, _______, _______, _______, DE_UE, _______, _______, _______, _______, _______,
+ _______, DE_AE, UC_Z, DE_SS, _______, _______, _______, _______, _______, _______, DE_OE, _______, _______,
+ OSL(ACCENT_CAP), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TO(CL),
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+ [ACCENT_CAP] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, DE_UE_CAP, _______, _______, _______, _______, _______,
+ _______, DE_AE_CAP, _______, DE_SS, _______, _______, _______, _______, _______, _______, DE_OE_CAP, _______, TO(CL),
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+};
+
diff --git a/keyboards/kbd6x/keymaps/othi/readme.md b/keyboards/kbd6x/keymaps/othi/readme.md
new file mode 100644
index 000000000..95be36d05
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/othi/readme.md
@@ -0,0 +1,56 @@
+## Othi's Universal HHKB keymap
+
+### Goals
+- Colemak layout. If you don't use Colemak then you'll need to also change the arrow key bindigns in other layers
+
+- Vim-like navigation layer so you can use vim binding arrowkeys in non-vim environment
+
+- Good modifier support so you don't have to hold 14 modifier keys at the same time
+
+- RGB indicating layer change(only work with plain colors so far, don't put your rgb to pulsing or any non static animation)
+
+### Layers
+- **CL:**
+
+ The base layer, default is Colemak
+
+- **NM_MODE:**
+
+ Vim-like arrowkeys in the home row, it's `LHNE` for *JENK Colemak* and `HJKL` for *QWERTY*
+
+ Also `HOME`, `END` and next/prev word (`Ctrl + Left/Right`) in `0, 4, w, b` like in vim
+
+- **VI_MODE:**
+
+ The same as `NM_MODE` but with `KC_LSFT` held down for mostly highlighting
+
+- **ACCENT + ACCENT_CAP:**
+
+ Function row and Unicode characters
+
+### Modifiers and Tap Dance keys
+**LHS:**
+
+- Any Tap Dance key with the format of `TD(XXX_NM)` act as normal XXX modifier upon hold, but will hold **and** put you to `NM_MODE` when double click hold(a tap before the hold)(eg you can produce `Alt + PgUp` by pressing `Alt + Alt + U`)
+
+- `KC_TAB` acts as both `KC_TAB` on tap and `KC_LGUI` on hold
+
+- R3 CapsLock acts as both `KC_BSPC` on tap and `KC_LCTL` on hold
+
+- Holding `KC_Q` also puts you into `NM_MODE`
+
+- Holding `KC_F` puts you into `VI_MODE` for fast function keys
+
+**RHS:**
+
+- 3 keys `KC_SCLN`, `KC_DOT` and `KC_SLSH` in `CL` layer can also be held down for respectively `KC_LCTL`, `KC_LSFT`, `KC_LALT` for easier 2-hand modifier holding
+
+- Right modifiers hold the selected modifier with `KC_LGUI` at the same time, mainly for i3wm, you can change this to whatever combination you want
+
+### Misc. functionalities
+
+**Unicode:**
+
+- In case the keyboard output the 4-digit codepoint instead of the actual unicode, you need to change the rewrite input mode of the keyboard into the EEPROM(you only have to do this if the EEPROM was cleared or your current machine use another unicode compose method other than IBus/Linux's `Ctrl + Shift + U`). Change the corresponding Input `void eeconfig_init_user(void)`. See [this](https://docs.qmk.fm/#/feature_unicode) for availble input modes.
+
+- **NOTE:** make sure to keep your qmk env up to date with upstream
diff --git a/keyboards/kbd6x/keymaps/othi/rules.mk b/keyboards/kbd6x/keymaps/othi/rules.mk
new file mode 100644
index 000000000..9cda4109d
--- /dev/null
+++ b/keyboards/kbd6x/keymaps/othi/rules.mk
@@ -0,0 +1,19 @@
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = yes # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes
+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)
+TAP_DANCE_ENABLE=yes
+
diff --git a/keyboards/kbd6x/readme.md b/keyboards/kbd6x/readme.md
index 625ec8968..b50646ace 100644
--- a/keyboards/kbd6x/readme.md
+++ b/keyboards/kbd6x/readme.md
@@ -4,7 +4,8 @@ A WKL Hot Swap Double USB C 60%
Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
Hardware Supported: KBD6x PCB
-Hardware Availability: [KBDFans](https://kbdfans.cn/products/kbd6x-wkl-hot-swap-60-double-type-c-pcb)
+Hardware Availability: [KBDFans](https://kbdfans.cn/products/kbd6x-wkl-hot-swap-60-double-type-c-pcb)
+
Make example for this keyboard (after setting up your build environment):
make kbd6x:default
diff --git a/keyboards/kbd6x/rules.mk b/keyboards/kbd6x/rules.mk
index 8f2e7e2ad..e9b61a76d 100644
--- a/keyboards/kbd6x/rules.mk
+++ b/keyboards/kbd6x/rules.mk
@@ -51,11 +51,11 @@ 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)
+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 = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
diff --git a/keyboards/kbd75/config.h b/keyboards/kbd75/config.h
index f76d9082f..726afcaf6 100644
--- a/keyboards/kbd75/config.h
+++ b/keyboards/kbd75/config.h
@@ -43,9 +43,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/kbd75/keymaps/spacemanspiff/keymap.c b/keyboards/kbd75/keymaps/spacemanspiff/keymap.c
new file mode 100644
index 000000000..82a2ad9be
--- /dev/null
+++ b/keyboards/kbd75/keymaps/spacemanspiff/keymap.c
@@ -0,0 +1,50 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+#define _BL 0 // Base Layer
+#define _FN 1 // Function Layer
+#define _CL 2 // Control+ Layer
+
+// Add names for complex momentary keys, to keep the keymap matrix aligned better.
+#define CTL_ESC MT(MOD_LCTL,KC_ESC)
+#define GUI_ENT MT(MOD_RGUI, KC_ENT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BL] = 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_F13, MO(_FN), 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_DEL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, MO(_FN), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ MO(_CL), KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, GUI_ENT, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_FN] = LAYOUT(
+ RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______,
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, BL_STEP, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_CL] = LAYOUT(
+ LCTL(KC_ESC), LCTL(KC_F1), LCTL(KC_F2), LCTL(KC_F3), LCTL(KC_F4), LCTL(KC_F5), LCTL(KC_F6), LCTL(KC_F7), LCTL(KC_F8), LCTL(KC_F9), LCTL(KC_F10), LCTL(KC_F11), LCTL(KC_F12), LCTL(KC_PSCR), _______, LCTL(KC_DEL),
+ KC_ESC, LCTL(KC_1), LCTL(KC_2), LCTL(KC_3), LCTL(KC_4), LCTL(KC_5), LCTL(KC_6), LCTL(KC_7), LCTL(KC_8), LCTL(KC_9), LCTL(KC_0), LCTL(KC_MINS), LCTL(KC_EQL), LCTL(KC_DEL), KC_DEL, LCTL(KC_HOME),
+ LCTL(KC_TAB), LCTL(KC_Q), LCTL(KC_W), LCTL(KC_E), LCTL(KC_R), LCTL(KC_T), LCTL(KC_Y), LCTL(KC_U), LCTL(KC_I), LCTL(KC_O), KC_PGUP, LCTL(KC_LBRC), LCTL(KC_RBRC), LCTL(KC_BSLS), LCTL(KC_PGUP),
+ CTL_ESC, LCTL(KC_A), LCTL(KC_S), LCTL(KC_D), LCTL(KC_F), LCTL(KC_G), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, LCTL(KC_SCLN), LCTL(KC_QUOT), LCTL(KC_ENT), LCTL(KC_PGDN),
+ LCTL(KC_LSFT), _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_B), KC_PGDN, LCTL(KC_M), LCTL(KC_COMM), LCTL(KC_DOT), LCTL(KC_SLSH), LCTL(KC_RSFT), LCTL(KC_UP), LCTL(KC_END),
+ _______, LCTL(KC_LALT), LCTL(KC_LGUI), LCTL(KC_SPC), LCTL(KC_SPC), LCTL(KC_SPC), LCTL(KC_RGUI), LCTL(KC_RALT), LCTL(KC_RCTL), LCTL(KC_LEFT), LCTL(KC_DOWN), LCTL(KC_RGHT)
+ ),
+
+};
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 2); PORTB &= ~(1 << 2);
+ } else {
+ DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
+ }
+}
+
diff --git a/keyboards/kbd75/keymaps/spacemanspiff/readme.md b/keyboards/kbd75/keymaps/spacemanspiff/readme.md
new file mode 100644
index 000000000..6a78140a3
--- /dev/null
+++ b/keyboards/kbd75/keymaps/spacemanspiff/readme.md
@@ -0,0 +1,35 @@
+# Spaceman Spiff Layout for KBD75
+
+![Keyboard Layout](https://i.imgur.com/tQLYDvu.png)
+
+<!-- http://www.keyboard-layout-editor.com/#/gists/c1e8a15c68e4c52eed84653f21ae2d29 -->
+
+Designed specifically to make switching back-n-forth with the Apple's MacBook Pro keyboard intuitive. Has a slight tendency toward readline/vim keybindings.
+
+Caps locks becomes an `Esc` when pressed alone, or a `Ctrl` when pressed with another key.
+
+# Base Layer
+
+As simalar to the Apple keyboard as possible. Notiable exception is `Caps Lock`:
+- `Esc` when pressed alone
+- `Ctrl` when pressed with another key
+
+# Control+ Layer
+
+Left Ctrl key switches to the "Control+ Layer". This layer mostly acts like a control key in most cases, with a few exceptions:
+
+- `Ctl+` + `hjkl` are vim-style motion keys
+- `Ctl+` + `p` and `Ctl+` + `n` are page up and down
+- `Ctl+` + `Backspace` is forward delete
+
+# Fn Layer
+
+Audio Controls:
+- `Fn` + `a` Volume Down
+- `Fn` + `s` Volume Up
+- `Fn` + `d` Mute
+
+To flash this layout you need to press `Fn+Backspace`
+
+
+
diff --git a/keyboards/kbd8x/config.h b/keyboards/kbd8x/config.h
index c021fb40b..7749e0472 100644
--- a/keyboards/kbd8x/config.h
+++ b/keyboards/kbd8x/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -196,4 +195,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
-#endif
+
diff --git a/keyboards/kbd8x/kbd8x.h b/keyboards/kbd8x/kbd8x.h
index 02a743644..f28b8ca7a 100644
--- a/keyboards/kbd8x/kbd8x.h
+++ b/keyboards/kbd8x/kbd8x.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 KBD8X_H
-#define KBD8X_H
+#pragma once
#include "quantum.h"
#include "led.h"
@@ -31,7 +30,7 @@ inline void scroll_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
// LAYOUT depicting all possible switch positions.
-// LAYOUT_all supports ISO, split backspace and split left/right shift.
+// LAYOUT_all supports ISO, split backspace and split left/right shift.
#define LAYOUT_all( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K3D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K5B, K5C, K3E, \
@@ -49,7 +48,7 @@ inline void scroll_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
{ K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E } \
}
-// LAYOUT depicting only switch positions for a standard TKL ANSI keyboard.
+// LAYOUT depicting only switch positions for a standard TKL ANSI keyboard.
// TODO: Double check location of backspace key for 2u layout (It's either K1D or K1C).
#define LAYOUT_tkl_ansi( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K3D, \
@@ -68,4 +67,3 @@ inline void scroll_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
{ K50, K51, K52, K53, K54, K55, K56, K57, K58, K59, K5A, K5B, K5C, K5D, K5E } \
}
-#endif
diff --git a/keyboards/kbd8x/keymaps/default/config.h b/keyboards/kbd8x/keymaps/default/config.h
index 63bef2a73..fa7db0bc1 100644
--- a/keyboards/kbd8x/keymaps/default/config.h
+++ b/keyboards/kbd8x/keymaps/default/config.h
@@ -14,11 +14,4 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
-
-// place overrides here
-
-#endif
+#pragma once
diff --git a/keyboards/kbd8x/keymaps/default_backlighting/config.h b/keyboards/kbd8x/keymaps/default_backlighting/config.h
index 63bef2a73..fa7db0bc1 100644
--- a/keyboards/kbd8x/keymaps/default_backlighting/config.h
+++ b/keyboards/kbd8x/keymaps/default_backlighting/config.h
@@ -14,11 +14,4 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
-
-// place overrides here
-
-#endif
+#pragma once
diff --git a/keyboards/kbd8x/keymaps/default_backlighting/rules.mk b/keyboards/kbd8x/keymaps/default_backlighting/rules.mk
index e806a1ca5..07b9f81fd 100644
--- a/keyboards/kbd8x/keymaps/default_backlighting/rules.mk
+++ b/keyboards/kbd8x/keymaps/default_backlighting/rules.mk
@@ -1,7 +1,7 @@
#Build Options
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
diff --git a/keyboards/kbd8x/rules.mk b/keyboards/kbd8x/rules.mk
index 46e9732ea..e5925463e 100644
--- a/keyboards/kbd8x/rules.mk
+++ b/keyboards/kbd8x/rules.mk
@@ -45,7 +45,6 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# Atmel DFU loader 4096
# LUFA bootloader 4096
# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
BOOTLOADER = atmel-dfu
@@ -53,7 +52,7 @@ BOOTLOADER = atmel-dfu
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
diff --git a/keyboards/kc60/keymaps/noroadsleft/config.h b/keyboards/kc60/keymaps/noroadsleft/config.h
new file mode 100644
index 000000000..e216d050b
--- /dev/null
+++ b/keyboards/kc60/keymaps/noroadsleft/config.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#define PERMISSIVE_HOLD // https://docs.qmk.fm/#/feature_advanced_keycodes?id=permissive-hold
+
+// Enable single-color backlighting
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 5
+#define BREATHING_PERIOD 4
diff --git a/keyboards/kc60/keymaps/noroadsleft/keymap.c b/keyboards/kc60/keymaps/noroadsleft/keymap.c
new file mode 100644
index 000000000..f28f2144f
--- /dev/null
+++ b/keyboards/kc60/keymaps/noroadsleft/keymap.c
@@ -0,0 +1,393 @@
+#include QMK_KEYBOARD_H
+#include <sendstring_dvorak.h>
+//#include <sendstring_colemak.h>
+#include <print.h>
+
+
+/**********************
+** LAYER DEFINITIONS **
+**********************/
+enum layers_keymap {
+ // BASE LAYERS
+ _QWERTY = 0,
+ _DVORAK,
+ _COLEMAK,
+ _MAC,
+ _QUAKE2,
+ _QUAKE2_DVORAK,
+ _QUAKE2_CONSOLE,
+
+ // FUNCTION LAYERS
+ _FUNCWIN,
+ _FUNCMAC,
+ _FUNCQ2,
+
+ // OTHER LAYERS
+ _NUMPAD,
+ _MACROS,
+ _SYSTEM
+};
+
+// LAYER SHORT CODES
+#define _QW _QWERTY
+#define _DV _DVORAK
+#define _CM _COLEMAK
+#define _MC _MAC
+#define _Q2 _QUAKE2
+#define _QD _QUAKE2_DVORAK
+#define _QC _QUAKE2_CONSOLE
+#define _FW _FUNCWIN
+#define _FM _FUNCMAC
+#define _FQ _FUNCQ2
+#define _NP _NUMPAD
+#define _MA _MACROS
+#define _SY _SYSTEM
+
+
+// KEYCODE DEFINITIONS
+#define NO_CHNG KC_TRNS // Note for me for keys I need to leave as Pass-through
+
+#define FW_CAPS LT(_FUNCWIN, KC_CAPS) // _FUNCWIN when held, Caps Lock when tapped
+#define FM_CAPS LT(_FUNCMAC, KC_CAPS) // _FUNCMAC when held, Caps Lock when tapped
+#define Q2_CAPS LT(_FUNCQ2, KC_CAPS) // _FUNCQ2 when held, Caps Lock when tapped
+
+#define WN_SALL LCTL(DV_A) // Windows/Linux Select All
+#define WN_UNDO LCTL(DV_Z) // Windows/Linux Undo
+#define WN_CUT LCTL(DV_X) // Windows/Linux Cut
+#define WN_COPY LCTL(DV_C) // Windows/Linux Copy
+#define WN_PSTE LCTL(DV_V) // Windows/Linux Paste
+
+#define MC_PSCR LGUI(LSFT(KC_3)) // MacOS Print Screen (Command + Shift + 3)
+#define MC_HOME LGUI(KC_LEFT) // MacOS Home (Command + Left Arrow)
+#define MC_END LGUI(KC_RGHT) // MacOS End (Command + Right Arrow)
+#define MC_SALL LGUI(KC_A) // MacOS Select All
+//#define MC_UNDO LGUI(KC_Z) // MacOS Undo // replaced by macro
+#define MC_CUT LGUI(KC_X) // MacOS Cut
+#define MC_COPY LGUI(KC_C) // MacOS Copy
+//#define MC_PSTE LGUI(KC_V) // MacOS Paste // replaced by macro
+
+
+// MACRO DEFINITIONS
+enum custom_keycodes {
+ F_CAPS = SAFE_RANGE,
+ T_L3DED,
+ G_PUSH,
+ G_FTCH,
+ G_COMM,
+ G_RST,
+ G_C10R,
+ G_BRCH,
+ SIGNA,
+ GO_Q2,
+ Q2_ON,
+ Q2_OFF,
+ Q2_ESC,
+ Q2_GRV,
+ MC_UNDO,
+ MC_PSTE
+};
+
+
+// define modifiers
+#define MODS_SHIFT_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL_MASK (MOD_BIT(KC_LCTL)|MOD_BIT(KC_RCTRL))
+#define MODS_ALT_MASK (MOD_BIT(KC_LALT)|MOD_BIT(KC_RALT))
+#define MODS_GUI_MASK (MOD_BIT(KC_LGUI)|MOD_BIT(KC_RGUI))
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint8_t modifiers = get_mods();
+ switch(keycode) {
+ // these are our macros!
+ case F_CAPS:
+ /*
+ Objective: write a macro that checks the current layers that are
+ enabled, and activates the appropriate function layer.
+ */
+ if ( biton32(layer_state) == _MAC ) {
+ if (record->event.pressed) {
+ layer_on(_FUNCMAC);
+ } else {
+ layer_off(_FUNCMAC);
+ }
+ } else {
+ if (record->event.pressed) {
+ layer_on(_FUNCWIN);
+ } else {
+ layer_off(_FUNCWIN);
+ }
+ };
+ return false;
+ break;
+ case T_L3DED:
+ if (record->event.pressed) {
+ SEND_STRING("lavak3DED ");
+ };
+ return false;
+ break;
+ case G_PUSH:
+ if (record->event.pressed) {
+ SEND_STRING("git push origin ");
+ };
+ return false;
+ break;
+ case G_FTCH:
+ if (record->event.pressed) {
+ SEND_STRING("git fetch upstream");
+ };
+ return false;
+ break;
+ case G_COMM:
+ if (record->event.pressed) {
+ SEND_STRING("git commit -m \"\"" SS_TAP(X_LEFT));
+ layer_off(_MACROS);
+ };
+ return false;
+ break;
+ case G_RST:
+ if (record->event.pressed) {
+ SEND_STRING("git histt -n 10" SS_TAP(X_ENTER) "git reset --soft ");
+ layer_off(_MACROS);
+ };
+ return false;
+ break;
+ case G_C10R:
+ if (record->event.pressed) {
+ SEND_STRING("cf/");
+ layer_off(_MACROS);
+ };
+ return false;
+ break;
+ case G_BRCH:
+ if (record->event.pressed) {
+ SEND_STRING("$(git branch-name)");
+ layer_off(_MACROS);
+ };
+ return false;
+ break;
+ case SIGNA:
+ if (record->event.pressed) {
+ SEND_STRING("\\- @noroadsleft" SS_TAP(X_ENTER));
+ layer_off(_MACROS);
+ };
+ return false;
+ break;
+ case GO_Q2:
+ if (record->event.pressed) {
+ //default_layer_set(_QWERTY);
+ layer_move(_QWERTY); // TO(_QWERTY);
+ layer_on(_QUAKE2);
+ //layer_off(_SYSTEM);
+ };
+ return false;
+ break;
+ case Q2_ON:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_ENTER));
+ layer_on(_DVORAK);
+ layer_on(_QUAKE2_DVORAK);
+ };
+ return false;
+ break;
+ case Q2_OFF:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_ENTER));
+ layer_move(_QWERTY); // TO(_QWERTY);
+ layer_on(_QUAKE2);
+ };
+ return false;
+ break;
+ case Q2_ESC:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_ESCAPE));
+ layer_move(_QWERTY); // TO(_QWERTY);
+ layer_on(_QUAKE2);
+ };
+ return false;
+ break;
+ case Q2_GRV:
+ if (record->event.pressed) {
+ SEND_STRING(SS_TAP(X_GRAVE));
+ layer_on(_DVORAK);
+ layer_on(_QUAKE2_DVORAK);
+ layer_on(_QUAKE2_CONSOLE);
+ };
+ return false;
+ break;
+ case MC_UNDO:
+ if (record->event.pressed) {
+ if ( modifiers & MODS_SHIFT_MASK ) {
+ SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) SS_UP(X_LSHIFT) );
+ } else {
+ SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_Z) SS_UP(X_LGUI) );
+ }
+ };
+ return false;
+ break;
+ case MC_PSTE:
+ if (record->event.pressed) {
+ if ( modifiers & MODS_SHIFT_MASK ) {
+ SEND_STRING( SS_DOWN(X_LSHIFT) SS_DOWN(X_LGUI) SS_DOWN(X_LALT) SS_TAP(X_V) SS_UP(X_LALT) SS_UP(X_LGUI) SS_UP(X_LSHIFT) );
+ } else {
+ SEND_STRING( SS_DOWN(X_LGUI) SS_TAP(X_V) SS_UP(X_LGUI) );
+ }
+ };
+ return false;
+ break;
+ } // switch()
+ return true;
+};
+
+
+// KEYMAPS
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /****************
+ ** BASE LAYERS **
+ ****************/
+
+ /* QWERTY */
+ [_QWERTY] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ FW_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, 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(_FW), KC_RCTL \
+ ),
+
+ /* Dvorak */
+ [_DVORAK] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSLS, \
+ FW_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, KC_ENT, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FW), KC_RCTL \
+ ),
+
+ /* Colemak */
+ [_COLEMAK] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC, KC_BSLS, \
+ FW_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FW), KC_RCTL \
+ ),
+
+ /****************
+ ** OS OVERLAYS **
+ ****************/
+
+ /* Mac */
+ [_MAC] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ FM_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, MO(_FM), _______ \
+ ),
+
+ /*********************
+ ** QUAKE 2 OVERLAYS **
+ *********************/
+
+ /* Quake 2 */
+ [_QUAKE2] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_ON, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \
+ ),
+
+ [_QUAKE2_DVORAK] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ Q2_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, Q2_OFF, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \
+ ),
+
+ [_QUAKE2_CONSOLE] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ Q2_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ Q2_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, MO(_FQ), _______ \
+ ),
+
+ /********************
+ ** FUNCTION LAYERS **
+ ********************/
+
+ /* Windows Fn layer */
+ [_FUNCWIN] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ _______, KC_CALC, KC_APP, _______, _______, _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \
+ NO_CHNG, WN_SALL, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_PENT, \
+ _______, WN_UNDO, WN_CUT, WN_COPY, WN_PSTE, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, TG(_SY), _______, \
+ _______, _______, _______, TG(_NP), _______, TG(_MA), NO_CHNG, _______ \
+ ),
+
+ /* MacOS Fn layer */
+ [_FUNCMAC] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ _______, _______, _______, _______, _______, _______, KC_INS, MC_HOME, KC_UP, MC_END, KC_PGUP, MC_PSCR, _______, _______, \
+ NO_CHNG, MC_SALL, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, \
+ _______, MC_UNDO, MC_CUT, MC_COPY, MC_PSTE, _______, _______, _______, _______, _______, TG(_SY), _______, \
+ _______, _______, _______, TG(_NP), _______, _______, NO_CHNG, _______ \
+ ),
+
+ /* Quake 2 Fn layer */
+ [_FUNCQ2] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ Q2_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ _______, _______, _______, _______, _______, _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_PSCR, KC_SLCK, KC_PAUS, \
+ NO_CHNG, _______, _______, _______, _______, _______, KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, KC_ENT, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, TG(_SY), _______, \
+ _______, _______, _______, _______, _______, _______, NO_CHNG, _______ \
+ ),
+
+ /*****************
+ ** OTHER LAYERS **
+ *****************/
+
+ /* Numpad layer */
+ [_NUMPAD] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ _______, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, _______, _______, \
+ _______, _______, _______, _______, KC_E, KC_F, _______, KC_P4, KC_P5, KC_P6, KC_PAST, KC_PSLS, KC_PEQL, _______, \
+ _______, _______, _______, _______, KC_C, KC_D, _______, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_PMNS, KC_PENT, \
+ _______, _______, _______, _______, KC_A, KC_B, _______, KC_P0, _______, KC_PDOT, _______, _______, \
+ _______, _______, _______, TG(_NP), _______, _______, NO_CHNG, _______ \
+ ),
+
+ /* Macro layer */
+ [_MACROS] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ TG(_MA), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, G_PUSH, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, G_RST, G_FTCH, G_COMM, _______, _______, _______, _______, T_L3DED, _______, _______, _______, \
+ _______, _______, _______, G_C10R, _______, G_BRCH, SIGNA, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, NO_CHNG, _______ \
+ ),
+
+ /* System layer */
+ [_SYSTEM] = LAYOUT_60_ansi(
+ // 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ TG(_SY), TO(_QW), TO(_DV), TO(_CM), GO_Q2, XXXXXXX, XXXXXXX, XXXXXXX, RESET, XXXXXXX, DEBUG, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, TG(_MC), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_BRTG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, NO_CHNG, XXXXXXX \
+ ),
+
+};
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme.md b/keyboards/kc60/keymaps/noroadsleft/readme.md
new file mode 100644
index 000000000..737fdc06b
--- /dev/null
+++ b/keyboards/kc60/keymaps/noroadsleft/readme.md
@@ -0,0 +1,29 @@
+# @noroadsleft's KC60 keymap
+
+### Last updated: September 2, 2018, 1:03 PM UTC-0700
+
+![](https://i.imgur.com/tzhXQYI.jpg)
+
+I am a full-time Dvorak typist, and occasional semi-serious FPS gamer. The layers are oriented towards a mix of typing and gaming.
+
+
+----
+
+# Outline
+
+- [Base Layers](./readme_ch1.md)
+ - Layer 0: QWERTY `_QW`
+ - Layer 1: Hardware Dvorak `_DV`
+ - Layer 2: Hardware Colemak `_CM`
+- [OS Overlays](./readme_ch2.md)
+ - Layer 3: MacOS Overlay `_MC`
+- [Quake 2 Overlays](./readme_ch3.md)
+ - Layers 4, 5 and 6: Quake 2 `_Q2`, Quake 2 Dvorak `_QD`, and Quake 2 Console `_QC`
+- [Function Layers](./readme_ch4.md)
+ - Layer 7: Windows Fn layer `_FW`
+ - Layer 8: MacOS-oriented Fn layer `_FM`
+ - Layer 9: Quake 2 Fn layer `_FQ`
+- [Other Layers](./readme_ch5.md)
+ - Layer 10: Numpad layer `_NP`
+ - Layer 11: Macro layer `_MA`
+ - Layer 12: System layer `_SY`
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md
new file mode 100644
index 000000000..bee0709f4
--- /dev/null
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch1.md
@@ -0,0 +1,70 @@
+# @noroadsleft's KC60 keymap
+
+- [Table of Contents](./readme.md)
+ 1. **Base Layers**
+ 2. [**OS Overlays**](./readme_ch2.md)
+ 3. [Quake 2 Overlays](./readme_ch3.md)
+ 4. [Function Layers](./readme_ch4.md)
+ 5. [Other Layers](./readme_ch5.md)
+
+### Last updated: September 2, 2018, 1:03 PM UTC-0700
+
+
+----
+
+## Layer 0: QWERTY - `_QW`
+
+Standard QWERTY layout, with three QMK features:
+
+- The `Menu` key has been replaced by `MO(_FW)`, which moves to my Windows Fn layer when held.
+- The `Caps Lock` key has been replaced with a dual function `LT()` key, which opens the Windows Fn layer when held, and is `Caps Lock` when tapped
+- The `Escape` key has been replaced with a `KC_GESC` `` ` ~ `` key when used with a `Fn` key or a `Shift` key
+
+###### For the rest of this readme, the physical location of keys will be referred to by their function in a US QWERTY layout.
+
+![QWERTY layer](https://i.imgur.com/2eVsefw.png)
+
+Keycode(s) Sent | Notes
+:---------------------------------------------------- | :----
+[`KC_GESC`](https://docs.qmk.fm/#/feature_grave_esc) | `Esc` when tapped alone, `` ` ~ `` when used with a `Shift` or `GUI` key.
+`LT(_FW, KC_CAPS)` | Opens the Windows Fn layer when held; toggles Caps Lock when tapped.
+`MO(_FW)` | Opens the Windows Fn layer when held.
+
+
+----
+
+## Layer 1: Hardware Dvorak - `_DV`
+
+### Accessed by holding either `Fn` and tapping `/?` key, then tapping `2@`.
+
+A hardware-based Dvorak Simplified layout. At my weekend job, I use a shared computer that runs MacOS Sierra, in US QWERTY layout. In this layer, I can leave the system in QWERTY, plug my keyboard in, and still type in Dvorak.
+
+![Hardware Dvorak layer](https://i.imgur.com/a6hYedB.png)
+
+Keycode(s) Sent | Notes
+:---------------------------------------------------- | :----
+[`KC_GESC`](https://docs.qmk.fm/#/feature_grave_esc) | `Esc` when tapped alone, `` ` ~ `` when used with a `Shift` or `GUI` key.
+`LT(_FW, KC_CAPS)` | Opens the Windows Fn layer when held; toggles Caps Lock when tapped.
+`MO(_FW)` | Opens the Windows Fn layer when held.
+
+
+----
+
+## Layer 2: Hardware Colemak `_CM`
+
+### Accessed by holding either `Fn` and tapping `/?` key, then tapping `3#`.
+
+A hardware-based Colemak layout. Been thinking of trying it, so it's here.
+
+![Hardware Colemak layer](https://i.imgur.com/dbQ6HDW.png)
+
+Keycode(s) Sent | Notes
+:---------------------------------------------------- | :----
+[`KC_GESC`](https://docs.qmk.fm/#/feature_grave_esc) | `Esc` when tapped alone, `` ` ~ `` when used with a `Shift` or `GUI` key.
+`LT(_FW, KC_CAPS)` | Opens the Windows Fn layer when held; toggles Caps Lock when tapped.
+`MO(_FW)` | Opens the Windows Fn layer when held.
+
+
+----
+
+Next Chapter: [OS Overlays](./readme_ch2.md)
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md
new file mode 100644
index 000000000..75a4fc524
--- /dev/null
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch2.md
@@ -0,0 +1,26 @@
+# @noroadsleft's KC60 keymap
+
+- [Table of Contents](./readme.md)
+ 1. [Base Layers](./readme_ch1.md)
+ 2. **OS Overlays**
+ 3. [Quake 2 Overlays](./readme_ch3.md)
+ 4. [Function Layers](./readme_ch4.md)
+ 5. [Other Layers](./readme_ch5.md)
+
+### Last updated: September 2, 2018, 1:03 PM UTC-0700
+
+
+----
+
+## Layer 3: Layer 3: MacOS Overlay `_MC`
+
+### Toggled by holding either `Fn` and tapping `/?` key, then tapping `W`.
+
+This layer overrides the `Fn` keys on whichever base layer is currently enabled, sending the keyboard to the MacOS-oriented Fn layer `_FM`, instead of the Windows Fn layer `_FW`.
+
+![MacOS Overlay](https://i.imgur.com/lxsEVpm.png)
+
+
+----
+
+Next Chapter: [Quake 2 Overlays](./readme_ch3.md)
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md
new file mode 100644
index 000000000..80549ba5c
--- /dev/null
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch3.md
@@ -0,0 +1,39 @@
+# @noroadsleft's KC60 keymap
+
+- [Table of Contents](./readme.md)
+ 1. [Base Layers](./readme_ch1.md)
+ 2. [OS Overlays](./readme_ch2.md)
+ 3. **Quake 2 Overlays**
+ 4. [Function Layers](./readme_ch4.md)
+ 5. [Other Layers](./readme_ch5.md)
+
+### Last updated: September 2, 2018, 1:03 PM UTC-0700
+
+
+----
+
+## Layers 4, 5 and 6: Quake 2 `_Q2`, Quake 2 Dvorak `_QD`, and Quake 2 Console `_QC`
+
+### Accessed by holding either `Fn` key and tapping the `/?` key, then tapping `4$`
+
+These layers were born out of the confusion I have had trying to use the in-game chat and the console in [Quake 2](https://en.wikipedia.org/wiki/Quake_II). When Quake 2 came out, alternate keyboard layouts weren't really a thing. As a result, all in-game text input is hard-locked to US QWERTY, regardless of what the operating system is using for its input method.
+
+I'm attempting to solve this by some creative use of QMK's macro feature. The keycode in the System layer that enables these layers, [`GO_Q2`](./keymap.c#L386), is a [macro](./keymap.c#L175-183) that sets the default layer to the QWERTY layer, then turns the Quake 2 layer `_Q2` on. The result is a partially-overwritten QWERTY layer, that has some keycodes with some creative layer switching.
+
+When I hit the `Enter` key (bound in-game to text chat), the [macro keycode](./keymap.c#L184-L191) I've created sends the keycode for `Enter`, then follows with enabling the Hardware Dvorak layer and its corresponding overlay. Now the game is in text chat mode, and my keyboard is in Dvorak. When I hit `Enter` again, another `Enter` [keycode macro](./keymap.c#L192-L199) is sent, which sends the message, then the macro brings me back to the standard QWERTY+Quake 2 setup. Hitting `Escape` instead runs a [macro](./keymap.c#L200-L207) that cancels the sending of the message, and undoes the layers.
+
+I have been testing this configuration for a few months. Sometimes I end up still in Dvorak mode without any text input systems (in-game chat or the console) running, but it pretty much always happens when I'm focused on the game, so I don't know the cause yet.
+
+### Layer 4: Quake 2
+![Quake 2](https://i.imgur.com/WEZ9p2u.png)
+
+### Layer 5: Quake 2 Dvorak
+![Quake 2 Dvorak](https://i.imgur.com/rhugHN4.png)
+
+### Layer 6: Quake 2 Console
+![Quake 2 Console](https://i.imgur.com/dRTAjcy.png)
+
+
+----
+
+Next Chapter: [Function Layers](./readme_ch4.md)
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md
new file mode 100644
index 000000000..f1b50846d
--- /dev/null
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch4.md
@@ -0,0 +1,54 @@
+# @noroadsleft's KC60 keymap
+
+- [Table of Contents](./readme.md)
+ 1. [Base Layers](./readme_ch1.md)
+ 2. [OS Overlays](./readme_ch2.md)
+ 3. [Quake 2 Overlays](./readme_ch3.md)
+ 4. **Function Layers**
+ 5. [Other Layers](./readme_ch5.md)
+
+### Last updated: September 2, 2018, 1:03 PM UTC-0700
+
+
+----
+
+## Layer 7: Windows Fn layer - `_FW`
+
+### Accessed by holding either `Fn` key in Layer 0
+
+Arrows, Navigation keys (Insert, Home, Page Up, etc.), and Function keys are here. Also has keys for Calculator, Menu, Volume Control, and shortcuts for Select All, Undo, Cut, Copy, and Paste. Numpad Enter for when I'm working in Adobe Photoshop, because it treats Numpad Enter differently from the regular Enter key.
+
+![Windows Fn layer](https://i.imgur.com/XwCshcz.png)
+
+
+----
+
+## Layer 8: MacOS-oriented Fn layer - `_FM`
+
+### Accessed by holding either `Fn` key in Layer 1
+
+Based on my Windows Fn layer, but swaps a few functions for a MacOS environment. Arrow, Navigation, and Function keys are basically unchanged from Layer 2. This layer enables using either `Fn` key as a sort of simulated `Command` key, which I find easier to reach and use.
+
+![MacOS-oriented Fn layer](https://i.imgur.com/Z11kRu2.png)
+
+
+----
+
+## Layer 9: Quake 2 Fn layer - `_FQ`
+
+### Accessed by holding either `Fn` key while either Quake 2 overlay is active.
+
+Based on the Windows function layer, but removes some functions that are pointless to have while in the game.
+
+![Quake 2 Fn layer](https://i.imgur.com/9PG7yWb.png)
+
+Keycode(s) Sent | Notes
+:-------------------------------- | :----
+[`Q2_GRV`](./keymap.c#L208-L216) | Sends `KC_GRV`, then enables the Dvorak, Quake 2 Dvorak, and Quake 2 Console layers.
+
+
+
+
+----
+
+Next Chapter: [Other Layers](./readme_ch5.md)
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md b/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md
new file mode 100644
index 000000000..64102eb88
--- /dev/null
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_ch5.md
@@ -0,0 +1,84 @@
+# @noroadsleft's KC60 keymap
+
+- [Table of Contents](./readme.md)
+ 1. [Base Layers](./readme_ch1.md)
+ 2. [OS Overlays](./readme_ch2.md)
+ 3. [Quake 2 Overlays](./readme_ch3.md)
+ 4. [Function Layers](./readme_ch4.md)
+ 5. **Other Layers**
+
+### Last updated: September 2, 2018, 1:03 PM UTC-0700
+
+
+----
+
+## Layer 10: Numpad layer - `_NP`
+
+### Accessed by holding either `Fn` key and tapping `Space`, from any of the Base Layers
+
+Puts a Numpad on the right-hand side of the keyboard. A through F included for hexadecimal input. Tapping `Space` returns to the previous Base Layer.
+
+![Numpad layer](https://i.imgur.com/fKVRkGH.png)
+
+
+----
+
+## Layer 11: Macro layer - `_MA`
+
+### Accessed by holding the `Fn` key and tapping the right-side `Win` key
+
+Has some macros that I use in Git, and some frequently-typed strings.
+
+Tapping `Esc` exits the Macro layer, if the macro used doesn't do it automatically.
+
+![Macro layer](https://i.imgur.com/wgbsluI.png)
+
+
+### Macros
+
+[![lavak3DED](https://static-cdn.jtvnw.net/emoticons/v1/821796/1.0)](./keymap.c#L122-L127)
+Inputs: `lavak3DED `
+Twitch emote for [a streamer I watch a lot](https://www.twitch.tv/lavak3_).
+
+[G_PUSH](./keymap.c#L128-L133)
+Inputs: `git push origin `
+Everything from here down is related to Git or GitHub.
+
+[G_FTCH](./keymap.c#L134-L139)
+Inputs: `git fetch upstream`
+
+[G_COMM](./keymap.c#L140-L146)
+Inputs: `git commit -m ""` `[Left]`
+Readies a `git commit` command, moves the cursor between the quotation marks, then disables the Macro layer.
+
+[G_RST](./keymap.c#L147-L153)
+Inputs: `git histt -n 10`, Enter, `git reset --soft `
+Runs a [git alias](./readme_git.md) that shows my last ten commits, then readies a `git reset --soft`. For when I commit something too soon. Disables the Macro layer when complete.
+
+[G_C10R](./keymap.c#L154-L160)
+Inputs: `cf/`
+A branch prefix I use for my current work in QMK. Disables the Macro layer when finished.
+
+[G_BRCH](./keymap.c#L161-L167)
+Inputs: `$(git branch-name)`
+A [git alias](./readme_git.md) that returns the name of the current branch. Disables the Macro layer when finished.
+
+[SIGNA](./keymap.c#L168-L174)
+Inputs: `\- @noroadsleft` `[Enter]`
+Sometimes on GitHub, I sign my comments. Types my GitHub name in Markdown syntax, and then taps the `Enter` key. Disables the Macro layer when finished.
+
+
+----
+
+### Layer 12: System layer - `_SY`
+
+#### Accessed by holding either `Fn` key and tapping the `/?` key
+
+This is where I change my keyboard function. Base layer select on `1` through `3`, Backlight controls on `C` through `N`, Reset on `8*`, Debug on `0)`.
+
+![System layer](https://i.imgur.com/95ovTBn.png)
+
+
+----
+
+[Back to the index.](./)
diff --git a/keyboards/kc60/keymaps/noroadsleft/readme_git.md b/keyboards/kc60/keymaps/noroadsleft/readme_git.md
new file mode 100644
index 000000000..585d9c890
--- /dev/null
+++ b/keyboards/kc60/keymaps/noroadsleft/readme_git.md
@@ -0,0 +1,56 @@
+# @noroadsleft's Git aliases
+
+[Return to the directory index.](./)
+
+```
+[alias]
+ # change branches
+ co = checkout
+ cob = checkout -b
+
+ # sync master
+ sync = "!f() { if [ $(git branch-name) != "master" ]; then git checkout master; fi; git pull upstream master; git push origin master; }; f"
+
+ # Return the last five commits on the branch, in a more compact format
+ hist = log --pretty=format:\"%C(yellow)%h%Creset %Cgreen%ad%Creset%n %w(100,0,3)%s%d [%an]%n\" --graph --date=iso-local -n 5
+ histm = log --pretty=format:\"%C(yellow)%h%Creset %w(100,0,3)%s%d [%an]\" --graph --date=iso-local -n 5
+ histt = log --pretty=format:\"%C(yellow)%h%Creset %<(88,trunc)%s [%an]\" --graph --date=iso-local -n 5
+ histb = log --reverse --pretty=format:\"- %<(98,trunc)%s [%an]\" --date=iso-local -n 5
+
+ # compact diff
+ df = "diff --compact-summary"
+
+ # Short-form status
+ st = "!git status --short"
+
+ # Returns the name of the current branch
+ branch-name = "!git rev-parse --abbrev-ref HEAD"
+
+ # short-form of the above
+ bn = "!git branch-name"
+
+ po = "push origin ($(git branch-name))"
+
+ # List the stashes
+ sl = "stash list"
+
+ # Show the contents of a numbered stash
+ # Syntax:
+ # git st-show <int>
+ st-show = "!f() { git stash show stash@{$1} -p; }; f"
+
+ # Apply a stash, without deleting it from the list of stashes
+ # Syntax:
+ # git st-copy <int>
+ st-copy = "!f() { git stash apply stash@{$1}; }; f"
+
+ # Unstage a file
+ unstage = "reset HEAD"
+
+ # Restore a file to the state it was in when checked out
+ restore = "checkout --"
+
+ # Compare local master repo to its upstream branch. If anything is returned, local branch has diverged from upstream.
+ cm = "!f() { git fetch upstream master; git diff $(git branch-name) upstream/master --compact-summary; }; f"
+ cml = "!f() { git fetch upstream master; git diff $(git branch-name) upstream/master; }; f"
+```
diff --git a/keyboards/kc60/keymaps/noroadsleft/rules.mk b/keyboards/kc60/keymaps/noroadsleft/rules.mk
new file mode 100644
index 000000000..9d78fc0fb
--- /dev/null
+++ b/keyboards/kc60/keymaps/noroadsleft/rules.mk
@@ -0,0 +1,2 @@
+# https://github.com/qmk/qmk_firmware/issues/3448#issuecomment-406636125
+EXTRAFLAGS += -flto
diff --git a/keyboards/kinesis/keymaps/carpalx/rules.mk b/keyboards/kinesis/keymaps/carpalx/rules.mk
index 1854d35df..c7753fae0 100644
--- a/keyboards/kinesis/keymaps/carpalx/rules.mk
+++ b/keyboards/kinesis/keymaps/carpalx/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/kinesis/keymaps/default/rules.mk b/keyboards/kinesis/keymaps/default/rules.mk
index 9d3df5964..93f927c7d 100644
--- a/keyboards/kinesis/keymaps/default/rules.mk
+++ b/keyboards/kinesis/keymaps/default/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/kinesis/keymaps/default_pretty/rules.mk b/keyboards/kinesis/keymaps/default_pretty/rules.mk
index 9d3df5964..93f927c7d 100644
--- a/keyboards/kinesis/keymaps/default_pretty/rules.mk
+++ b/keyboards/kinesis/keymaps/default_pretty/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/kinesis/keymaps/dvorak/rules.mk b/keyboards/kinesis/keymaps/dvorak/rules.mk
index 9d3df5964..93f927c7d 100644
--- a/keyboards/kinesis/keymaps/dvorak/rules.mk
+++ b/keyboards/kinesis/keymaps/dvorak/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/kinesis/keymaps/insertsnideremarks/config.h b/keyboards/kinesis/keymaps/insertsnideremarks/config.h
index 02eed310a..9ce094be5 100644
--- a/keyboards/kinesis/keymaps/insertsnideremarks/config.h
+++ b/keyboards/kinesis/keymaps/insertsnideremarks/config.h
@@ -5,7 +5,7 @@
#include "../../config.h"
// place overrides here
-#define PREVENT_STUCK_MODIFIERS
+#define IGNORE_MOD_TAP_INTERRUPT
#define TAPPING_TERM 175
#define TAPPING_TOGGLE 2
diff --git a/keyboards/kinesis/keymaps/insertsnideremarks/keymap.c b/keyboards/kinesis/keymaps/insertsnideremarks/keymap.c
index bac5ea3ff..78defea23 100644
--- a/keyboards/kinesis/keymaps/insertsnideremarks/keymap.c
+++ b/keyboards/kinesis/keymaps/insertsnideremarks/keymap.c
@@ -5,15 +5,15 @@ extern keymap_config_t keymap_config;
enum kinesis_layers {
_COLEMAK, // Colemak (default layer)
_QWERTY, // Qwerty
+ _COLEMAKGM, // Colemak gaming/vanilla (limited dual-role keys with layer access)
+ _QWERTYGM, // QWERTY gaming/vanilla (limited dual-role keys with layer access)
_NUMBERS, // Numbers & Symbols
_NUMBERS2, // Numbers & Symbols 2 (identical as _NUMBERS; basically used for tri-layer access to _ADJUST)
_FUNCTION, // Function
_FUNCTION2, // Function 2 (identical as _FUNCTION; used to allow for easier use of space and backspace while using function layer arrows)
_NUMPAD, // Numpad
- _COLEMAKGM, // Colemak gaming/vanilla (no dual-role keys with layer access)
- _QWERTYGM, // QWERTY gaming/vanilla (no dual-role keys with layer access)
- _ADJUST, // Adjust layer, accessed via tri-layer feature)
- _ADJUST2 // Second Adjust layer, accessed outside of tri-layer feature)
+ _ADJUST, // Adjust layer (accessed via tri-layer feature)
+ _ADJUST2 // Second Adjust layer (accessed outside of tri-layer feature)
};
enum kinesis_keycodes {
@@ -64,7 +64,7 @@ void dance_LAYER_reset(qk_tap_dance_state_t *state, void *user_data) {
}
qk_tap_dance_action_t tap_dance_actions[] = {
-[ADJ] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_LAYER_finished, dance_LAYER_reset), // Double-tap to activate Adjust layer via oneshot layer
+[ADJ] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_LAYER_finished, dance_LAYER_reset), // Double-tap to activate Adjust layer via oneshot layer
[LBCB] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR), // Left bracket on a single-tap, left brace on a double-tap
[RBCB] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR), // Right bracket on a single-tap, right brace on a double-tap
[EQPL] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS), // Plus sign on a single-tap, equal sign on a double-tap
@@ -78,454 +78,327 @@ qk_tap_dance_action_t tap_dance_actions[] = {
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Fundtion Row Keys
-/ (Identical across layers, unless otherwise noted; Numpad is a toggle; Adjust is mometary)
-* ,-----------------------------------------------------------------------------------------------------------.
-* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
-* `-----------------------------------------------------------------------------------------------------------'
-*/
-
/* Colemak
-* (Defauit layer; keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
-* ,-------------------------------------------. ,-------------------------------------------.
-* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* |Esc/Ctrl| A | R | S | T | D | | H | N | E | I | O | ' |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* |SC Shift| Z | X | C | V | B | | K | M | , | . | / |SC Shift|
-* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
-* | Ins | ` | [ | ] | | Left | Down | Up | Right|
-* `---------------------------' `---------------------------'
-* ,---------------. ,---------------.
-* |Esc/Ctl| Hyper | | RAlt | RCtl |
-* ,-------|-------|-------| |-------+-------+-------.
-* | Space | Enter |App/Alt| | RGUI | Delete| Bspc |
-* | / | / |-------| |-------| / | / |
-* | Fn | Number| Bspc | | Enter |Number2| Fn2 |
-* `-----------------------' `-----------------------'
+ (Defauit layer; keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
+ ,-----------------------------------------------------------------------------------------------------------.
+ | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
+ `-----------------------------------------------------------------------------------------------------------'
+ ,-------------------------------------------. ,-------------------------------------------.
+ | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ |Esc/Ctrl| A | R | S | T | D | | H | N | E | I | O | ' |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ |SC Shift| Z | X | C | V | B | | K | M | , | . | / |SC Shift|
+ `--------+------+------+------+------+------' `------+------+------+------+------+--------'
+ | Ins | ` | [ | ] | | Left | Down | Up | Right|
+ `---------------------------' `---------------------------'
+ ,---------------. ,---------------.
+ |Esc/Ctl| Hyper | | RAlt | RCtl |
+ ,-------|-------|-------| |-------+-------+-------.
+ | Space | Enter |App/Alt| | RGUI | Delete| Bspc |
+ | / | / |-------| |-------| / | / |
+ | Fn | Number| Bspc | | Enter |Number2| Fn2 |
+ `-----------------------' `-----------------------'
*/
-[_COLEMAK] = LAYOUT(
- // Left Hand
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
- KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5,
- KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G,
- CTLESC, KC_A, KC_R, KC_S, KC_T, KC_D,
- KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B,
- KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
- //Left Thumb
- CTLESC, ALL_T(KC_NO),
- ALTAPP,
- SPCFN, ENTNS, KC_BSPC,
- //Right Hand
- KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
- KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
- KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
- KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
- KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
- //Right Thumb
- KC_RALT, KC_RCTL,
- KC_RGUI,
- KC_ENT, DELNS, BSPCFN
+[_COLEMAK] = LAYOUT_pretty(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
+ CTLESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ KC_INS, KC_GRV, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ CTLESC, ALL_T(KC_NO), KC_RALT, KC_RCTL,
+ ALTAPP, KC_RGUI,
+ SPCFN, ENTNS, KC_BSPC, KC_ENT, DELNS, BSPCFN
),
/* QWERTY
-* (Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
-* ,-------------------------------------------. ,-------------------------------------------.
-* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* |Esc/Ctrl| A | S | D | F | G | | H | J | K | L | ; | ' |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* |SC Shift| Z | X | C | V | B | | N | M | , | . | / |SC Shift|
-* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
-* | Ins | ` | [ | ] | | Left | Down | Up | Right|
-* `---------------------------' `---------------------------'
-* ,---------------. ,---------------.
-* |Esc/Ctl| Hyper | | RAlt | RCtl |
-* ,-------|-------|-------| |-------+-------+-------.
-* | Space | Enter |App/Alt| | RGUI | Delete| Bspc |
-* | / | / |-------| |-------| / | / |
-* | Fn | Number| Bspc | | Enter |Number2| Fn2 |
-* `-----------------------' `-----------------------'
+ (Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
+ ,-----------------------------------------------------------------------------------------------------------.
+ | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
+ `-----------------------------------------------------------------------------------------------------------'
+ ,-------------------------------------------. ,-------------------------------------------.
+ | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ |Esc/Ctrl| A | S | D | F | G | | H | J | K | L | ; | ' |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ |SC Shift| Z | X | C | V | B | | N | M | , | . | / |SC Shift|
+ `--------+------+------+------+------+------' `------+------+------+------+------+--------'
+ | Ins | ` | [ | ] | | Left | Down | Up | Right|
+ `---------------------------' `---------------------------'
+ ,---------------. ,---------------.
+ |Esc/Ctl| Hyper | | RAlt | RCtl |
+ ,-------|-------|-------| |-------+-------+-------.
+ | Space | Enter |App/Alt| | RGUI | Delete| Bspc |
+ | / | / |-------| |-------| / | / |
+ | Fn | Number| Bspc | | Enter |Number2| Fn2 |
+ `-----------------------' `-----------------------'
*/
-[_QWERTY] = LAYOUT(
- // Left Hand
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
- KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
- CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G,
- KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B,
- KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
- //Left Thumb
- CTLESC, ALL_T(KC_NO),
- ALTAPP,
- SPCFN, ENTNS, KC_BSPC,
-
- //Right Hand
- KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
- KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
- KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
- //Right Thumb
- KC_RALT, KC_RCTL,
- KC_RGUI,
- KC_ENT, DELNS, BSPCFN
+[_QWERTY] = LAYOUT_pretty(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ KC_INS, KC_GRV, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ CTLESC, ALL_T(KC_NO), KC_RALT, KC_RCTL,
+ ALTAPP, KC_RGUI,
+ SPCFN, ENTNS, KC_BSPC, KC_ENT, DELNS, BSPCFN
),
/* Number/symbol layer
-* (Multiple characters: single-tap for first, double-tap for second)
-* ,-------------------------------------------. ,-------------------------------------------.
-* | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | | 6 | 7 | 8 | 9 | 0 | | ^ | & | * | ( | ) | |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | | 1 | 2 | 3 | 4 | 5 | | ! | @ | # | $ | % | |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | | | . | / * | - _ | + = | | ` ~ | [ { | ] } | | | |
-* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
-* | ( | ) | [ { | ] } | | | | | |
-* `---------------------------' `---------------------------'
-* ,---------------. ,---------------.
-* | | | | | |
-* ,-------|-------|-------| |-------+-------+-------.
-* | | | | | | | |
-* | | |-------| |-------| | |
-* | | | | | | | |
-* `-----------------------' `-----------------------'
+ (Multiple characters: single-tap for first, double-tap for second)
+ ,-----------------------------------------------------------------------------------------------------------.
+ | | | | | | | | | | | | | | | | | | |
+ `-----------------------------------------------------------------------------------------------------------'
+ ,-------------------------------------------. ,-------------------------------------------.
+ | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | | 6 | 7 | 8 | 9 | 0 | | ^ | & | * | ( | ) | |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | | 1 | 2 | 3 | 4 | 5 | | ! | @ | # | $ | % | |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | | | . | / * | - _ | + = | | ` ~ | [ { | ] } | | | |
+ `--------+------+------+------+------+------' `------+------+------+------+------+--------'
+ | ( | ) | [ { | ] } | | | | | |
+ `---------------------------' `---------------------------'
+ ,---------------. ,---------------.
+ | | | | | |
+ ,-------|-------|-------| |-------+-------+-------.
+ | | | | | | | |
+ | | |-------| |-------| | |
+ | | | | | | | |
+ `-----------------------' `-----------------------'
*/
-[_NUMBERS] = LAYOUT(
- // Left Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
- _______, KC_6, KC_7, KC_8, KC_9, KC_0,
- _______, KC_1, KC_2, KC_3, KC_4, KC_5,
- _______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ),
- KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB),
- // Left Thumb
- _______, _______,
- _______,
- _______, _______, _______,
- // Right Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
- TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
- _______, _______, _______, _______,
- // Right Thumb
- _______, _______,
- _______,
- _______, _______, _______
+[_NUMBERS] = LAYOUT_pretty(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
+ _______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ), TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
+ KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______, _______, _______, _______, _______
),
-[_NUMBERS2] = LAYOUT(
- // Left Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
- _______, KC_6, KC_7, KC_8, KC_9, KC_0,
- _______, KC_1, KC_2, KC_3, KC_4, KC_5,
- _______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ),
- KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB),
- // Left Thumb
- _______, _______,
- _______,
- _______, _______, _______,
- // Right Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
- TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
- _______, _______, _______, _______,
- // Right Thumb
- _______, _______,
- _______,
- _______, _______, _______
+[_NUMBERS2] = LAYOUT_pretty(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
+ _______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ), TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
+ KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______, _______, _______, _______, _______
),
/* Function layer
-* ,-------------------------------------------. ,-------------------------------------------.
-* | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | | | | Up | | | | | | Up |Ctrl+Y| | |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | |Ctrl+A| Left | Down | Right|C+A+Tb| | PgUp | Right| Down | Left | Home | |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| Bspc | | PgDn | Mute | Vol- | Vol+ | End | |
-* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
-* | | | | | | Prev | Play | Next | Stop |
-* `---------------------------' `---------------------------'
-* ,---------------. ,---------------.
-* | | | | | |
-* ,-------|-------|-------| |-------+-------+-------.
-* | | | | | | | |
-* | | |-------| |-------| | |
-* | | | | | | | |
-* `-----------------------' `-----------------------'
+ ,-----------------------------------------------------------------------------------------------------------.
+ | | | | | | | | | | | | | | | | | | |
+ `-----------------------------------------------------------------------------------------------------------'
+ ,-------------------------------------------. ,-------------------------------------------.
+ | F12 | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | | | | Up | | | | | | Up |Ctrl+Y| | |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | |Ctrl+A| Left | Down | Right|C+A+Tb| | PgUp | Right| Down | Left | Home | |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| Bspc | | PgDn | Mute | Vol- | Vol+ | End | |
+ `--------+------+------+------+------+------' `------+------+------+------+------+--------'
+ | | | | | | Prev | Play | Next | Stop |
+ `---------------------------' `---------------------------'
+ ,---------------. ,---------------.
+ | | | | | |
+ ,-------|-------|-------| |-------+-------+-------.
+ | | | | | | | |
+ | | |-------| |-------| | |
+ | | | | | | | |
+ `-----------------------' `-----------------------'
*/
-[_FUNCTION] = LAYOUT(
- // Left Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
- _______, _______, _______, KC_UP, _______, _______,
- _______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB),
- _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC,
- _______, _______, _______, _______,
- // Left Thumb
- _______, _______,
- _______,
- _______, _______, _______,
- // Right Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- _______, _______, KC_UP, LCTL(KC_Y), _______, _______,
- KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
- KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
- KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
- // Right Thumb
- _______, _______,
- _______,
- _______, _______, _______
+[_FUNCTION] = LAYOUT_pretty(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, _______, _______, KC_UP, _______, _______, _______, _______, KC_UP, LCTL(KC_Y), _______, _______,
+ _______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB), KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
+ _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
+ _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______, _______, _______, _______, _______
),
-[_FUNCTION2] = LAYOUT(
- // Left Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
- _______, _______, _______, KC_UP, _______, _______,
- _______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB),
- _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC,
- _______, _______, _______, _______,
- // Left Thumb
- _______, _______,
- _______,
- _______, _______, _______,
- // Right Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- _______, _______, KC_UP, LCTL(KC_Y), _______, _______,
- KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
- KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
- KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
- // Right Thumb
- _______, _______,
- _______,
- _______, _______, _______
+[_FUNCTION2] = LAYOUT_pretty(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ _______, _______, _______, KC_UP, _______, _______, _______, _______, KC_UP, LCTL(KC_Y), _______, _______,
+ _______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB), KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
+ _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
+ _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______, _______, _______, _______, _______
),
/* Numpad layer
-* (Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout)
-* ,-------------------------------------------. ,-------------------------------------------.
-* | | NumLk| | | | | | Tab | NumLk| KP / | KP * | KP - | |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | | KP 6 | KP 7 | KP 8 | KP 9 | KP 0 | | | KP 7 | KP 8 | KP 9 | KP + | |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | | KP 1 | KP 2 | KP 3 | KP 4 | KP 5 | | | KP 4 | KP 5 | KP 6 | = | |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | | | KP . |KP/KP*| KP- _| KP+ =| | | KP 1 | KP 2 | KP 3 |KP Ent| |
-* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
-* | ( | ) | [ { | ] } | | KP 0 | , | KP . |KP Ent|
-* `---------------------------' `---------------------------'
-* ,---------------. ,---------------.
-* | | | | | |
-* ,-------|-------|-------| |-------+-------+-------.
-* | | | | | | | |
-* | | |-------| |-------| | |
-* | | | | | KP Ent| | |
-* `-----------------------' `-----------------------'
+ (Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout)
+ ,-----------------------------------------------------------------------------------------------------------.
+ | | | | | | | | | | | | | | | | | | |
+ `-----------------------------------------------------------------------------------------------------------'
+ ,-------------------------------------------. ,-------------------------------------------.
+ | | NumLk| | | | | | Tab | NumLk| KP / | KP * | KP - | |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | | KP 6 | KP 7 | KP 8 | KP 9 | KP 0 | | | KP 7 | KP 8 | KP 9 | KP + | |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | | KP 1 | KP 2 | KP 3 | KP 4 | KP 5 | | | KP 4 | KP 5 | KP 6 | = | |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | | | KP . |KP/KP*| KP- _| KP+ =| | | KP 1 | KP 2 | KP 3 |KP Ent| |
+ `--------+------+------+------+------+------' `------+------+------+------+------+--------'
+ | ( | ) | [ { | ] } | | KP 0 | , | KP . |KP Ent|
+ `---------------------------' `---------------------------'
+ ,---------------. ,---------------.
+ | | | | | |
+ ,-------|-------|-------| |-------+-------+-------.
+ | | | | | | | |
+ | | |-------| |-------| | |
+ | | | | | | | |
+ `-----------------------' `-----------------------'
*/
-[_NUMPAD] = LAYOUT(
- // Left Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, KC_NLCK, _______, _______, _______, _______,
- _______, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0,
- _______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5,
- _______, _______, KC_PDOT, TD(PSLPAS), TD(PMNUN), TD(PPLEQ),
- KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB),
- // Left Thumb
- _______, _______,
- _______,
- _______, _______, _______,
- // Right Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_TAB, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
- _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______,
- _______, KC_P4, KC_P5, KC_P6, KC_EQL, _______,
- _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
- KC_P0, KC_COMM, KC_PDOT, KC_PENT,
- // Right Thumb
- _______, _______,
- _______,
- _______, _______, _______
+[_NUMPAD] = LAYOUT_pretty(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_NLCK, _______, _______, _______, _______, KC_TAB, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, _______,
+ _______, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, _______, KC_P7, KC_P8, KC_P9, KC_PPLS, _______,
+ _______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, _______, KC_P4, KC_P5, KC_P6, KC_EQL, _______,
+ _______, _______, KC_PDOT, TD(PSLPAS), TD(PMNUN), TD(PPLEQ), _______, KC_P1, KC_P2, KC_P3, KC_PENT, _______,
+ KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), KC_P0, KC_COMM, KC_PDOT, KC_PENT,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______, _______, _______, _______, _______
),
/* Colemak gaming/vanilla
-* (No access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
-* ,-------------------------------------------. ,-------------------------------------------.
-* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | Shift | Z | X | C | V | B | | K | M | , | . | / | Shift |
-* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
-* | Ins | ` | [ | ] | | Left | Down | Up | Right|
-* `---------------------------' `---------------------------'
-* ,---------------. ,---------------.
-* |Esc/Ctl|TD(ADJ)| | RAlt | RCtl |
-* ,-------|-------|-------| |-------+-------+-------.
-* | | | LAlt | | RGUI | | |
-* | Space | Enter |-------| |-------| Delete| Bspc |
-* | | | Bspc | | Enter | | |
-* `-----------------------' `-----------------------'
+ (Limited access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
+ ,-----------------------------------------------------------------------------------------------------------.
+ | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
+ `-----------------------------------------------------------------------------------------------------------'
+ ,-------------------------------------------. ,-------------------------------------------.
+ | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | Shift | Z | X | C | V | B | | K | M | , | . | / | Shift |
+ `--------+------+------+------+------+------' `------+------+------+------+------+--------'
+ | Ins | ` | [ | ] | | Left | Down | Up | Right|
+ `---------------------------' `---------------------------'
+ ,---------------. ,---------------.
+ |Esc/Ctl|TD(ADJ)| | RAlt | RCtl |
+ ,-------|-------|-------| |-------+-------+-------.
+ | | | LAlt | | RGUI | | |
+ | Space | Enter |-------| |-------| Delete| Bspc |
+ | | |Bspc/FN| | Ent/NS| | |
+ `-----------------------' `-----------------------'
*/
-[_COLEMAKGM] = LAYOUT(
- // Left Hand
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
- KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5,
- KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G,
- KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
- KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
- //Left Thumb
- CTLESC, TD(ADJ),
- KC_LALT,
- KC_SPC, KC_ENT, KC_BSPC,
- //Right Hand
- KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
- KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
- KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
- KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
- KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
- //Right Thumb
- KC_RALT, KC_RCTL,
- KC_RGUI,
- KC_ENT, KC_DEL, KC_BSPC
+[_COLEMAKGM] = LAYOUT_pretty(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
+ KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_INS, KC_GRV, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ CTLESC, TD(ADJ), KC_RALT, KC_RCTL,
+ KC_LALT, KC_RGUI,
+ KC_SPC, KC_ENT, BSPCFN, ENTNS, KC_DEL, KC_BSPC
),
/* QWERTY gaming/vanilla
-* (No access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
-* ,-------------------------------------------. ,-------------------------------------------.
-* | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | Shift | Z | X | C | V | B | | N | M | , | . | / | Shift |
-* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
-* | Ins | ` | [ | ] | | Left | Down | Up | Right|
-* `---------------------------' `---------------------------'
-* ,---------------. ,---------------.
-* |Esc/Ctl|TD(ADJ)| | RAlt | RCtl |
-* ,-------|-------|-------| |-------+-------+-------.
-* | | | LAlt | | RGUI | | |
-* | Space | Enter |-------| |-------| Delete| Bspc |
-* | | | Bspc | | Enter | | |
-* `-----------------------' `-----------------------'
+ (Limited access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
+ ,-----------------------------------------------------------------------------------------------------------.
+ | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
+ `-----------------------------------------------------------------------------------------------------------'
+ ,-------------------------------------------. ,-------------------------------------------.
+ | = | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | Shift | Z | X | C | V | B | | N | M | , | . | / | Shift |
+ `--------+------+------+------+------+------' `------+------+------+------+------+--------'
+ | Ins | ` | [ | ] | | Left | Down | Up | Right|
+ `---------------------------' `---------------------------'
+ ,---------------. ,---------------.
+ |Esc/Ctl|TD(ADJ)| | RAlt | RCtl |
+ ,-------|-------|-------| |-------+-------+-------.
+ | | | LAlt | | RGUI | | |
+ | Space | Enter |-------| |-------| Delete| Bspc |
+ | | |Bspc/FN| | Ent/NS| | |
+ `-----------------------' `-----------------------'
*/
-[_QWERTYGM] = LAYOUT(
- // Left Hand
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8,
- KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
- KC_INS, KC_GRV, KC_LBRC, KC_RBRC,
- //Left Thumb
- CTLESC, TD(ADJ),
- KC_LALT,
- KC_SPC, KC_ENT, KC_BSPC,
- //Right Hand
- KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
- KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
- KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
- KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
- KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
- //Right Thumb
- KC_RALT, KC_RCTL,
- KC_RGUI,
- KC_ENT, KC_DEL, KC_BSPC
+[_QWERTYGM] = LAYOUT_pretty(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, NUMPAD, ADJUST,
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_INS, KC_GRV, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ CTLESC, TD(ADJ), KC_RALT, KC_RCTL,
+ KC_LALT, KC_RGUI,
+ KC_SPC, KC_ENT, BSPCFN, ENTNS, KC_DEL, KC_BSPC
),
/* Adjust layer
-* (Enter/Number + Delete/Number2 under non-gaming/vanilla layers; Numpad is a toggle)
-* ,-------------------------------------------. ,-------------------------------------------.
-* | |Colmak|Qwerty| |ClmkGM| QWGM | |Numpad| | | | | RESET |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | | | | | | | | | | | | | |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | | | | | | | | |NKROTG| | | | |
-* |--------+------+------+------+------+------| |------+------+------+------+------+--------|
-* | | | | | | | | | | | | | |
-* `--------+------+------+------+------+------' `------+------+------+------+------+--------'
-* | | | | | | | | | |
-* `---------------------------' `---------------------------'
-* ,---------------. ,---------------.
-* | | | | | |
-* ,-------|-------|-------| |-------+-------+-------.
-* | | | | | | | |
-* | | |-------| |-------| | |
-* | | | | | | | |
-* `-----------------------' `-----------------------'
+ (Enter/Number + Delete/Number2 under non-gaming/vanilla layers or press & hold Adjust key on function row; Numpad is a toggle)
+ ,-----------------------------------------------------------------------------------------------------------.
+ | | | | | | | | | | | | | | | | | | |
+ `-----------------------------------------------------------------------------------------------------------'
+ ,-------------------------------------------. ,-------------------------------------------.
+ | |Colmak|Qwerty| |ClmkGM| QWGM | |Numpad| | | | | RESET |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | | | | | | | | | | | | | |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | | | | | | | | | NKRO | | | | |
+ |--------+------+------+------+------+------| |------+------+------+------+------+--------|
+ | | | | | | | | | | | | | |
+ `--------+------+------+------+------+------' `------+------+------+------+------+--------'
+ | | | | | | | | | |
+ `---------------------------' `---------------------------'
+ ,---------------. ,---------------.
+ | | | | | |
+ ,-------|-------|-------| |-------+-------+-------.
+ | | | | | | | |
+ | | |-------| |-------| | |
+ | | | | | | | |
+ `-----------------------' `-----------------------'
*/
-[_ADJUST] = LAYOUT(
- // Left Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, COLEMAK, QWERTY, _______, COLEMAKGM, QWERTYGM,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______,
- // Left Thumb
- _______, _______,
- _______,
- _______, _______, _______,
- // Right Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- NUMPAD, _______, _______, _______, _______, RESET,
- _______, _______, _______, _______, _______, _______,
- _______, NKROTG, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______,
- // Right Thumb
- _______, _______,
- _______,
- _______, _______, _______
+[_ADJUST] = LAYOUT_pretty(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, COLEMAK, QWERTY, _______, COLEMAKGM, QWERTYGM, NUMPAD, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, NKROTG, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______, _______, _______, _______, _______
),
-[_ADJUST2] = LAYOUT(
- // Left Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, COLEMAK, QWERTY, _______, COLEMAKGM, QWERTYGM,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______,
- // Left Thumb
- _______, _______,
- _______,
- _______, _______, _______,
- // Right Hand
- _______, _______, _______, _______, _______, _______, _______, _______, _______,
- NUMPAD, _______, _______, _______, _______, RESET,
- _______, _______, _______, _______, _______, _______,
- _______, NKROTG, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______,
- // Right Thumb
- _______, _______,
- _______,
- _______, _______, _______
+[_ADJUST2] = LAYOUT_pretty(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, COLEMAK, QWERTY, _______, COLEMAKGM, QWERTYGM, NUMPAD, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, NKROTG, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______,
+ _______, _______,
+ _______, _______, _______, _______, _______, _______
)
};
@@ -541,9 +414,10 @@ void persistent_default_layer_set(uint16_t default_layer) {
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
- case COLEMAK:
+ case COLEMAK:
if (record->event.pressed) {
- persistent_default_layer_set(1UL << _COLEMAK);
+ default_layer_set(1UL << _COLEMAK);
+// persistent_default_layer_set(1UL << _COLEMAK);
layer_off ( _QWERTY);
layer_off ( _NUMBERS);
layer_off ( _NUMBERS2);
@@ -559,7 +433,8 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
break;
case QWERTY:
if (record->event.pressed) {
- persistent_default_layer_set(1UL << _QWERTY);
+ default_layer_set(1UL << _QWERTY);
+// persistent_default_layer_set(1UL << _QWERTY);
layer_off ( _COLEMAK);
layer_off ( _NUMBERS);
layer_off ( _NUMBERS2);
@@ -570,7 +445,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
layer_off ( _QWERTYGM);
layer_off ( _ADJUST);
layer_off ( _ADJUST2);
-
}
return false;
break;
diff --git a/keyboards/kinesis/keymaps/insertsnideremarks/readme.md b/keyboards/kinesis/keymaps/insertsnideremarks/readme.md
index 353fca077..7a146c7a2 100644
--- a/keyboards/kinesis/keymaps/insertsnideremarks/readme.md
+++ b/keyboards/kinesis/keymaps/insertsnideremarks/readme.md
@@ -14,7 +14,7 @@ I've largely left the function keys untouched, with the intension of not using t
I use Colemak as my default layout. I've included QWERTY here as well.
-Additionally, I've added gaming/vanilla version of Colemak and QWERTY layouts. These layouts have no access to the Function or Numbers layers, thus no dual-role keys with layer access, and are mainly used for gaming.
+Additionally, I've added gaming/vanilla version of Colemak and QWERTY layouts. These layouts have limited access to the Function or Numbers layers, and are mainly used for gaming.
Persistent default layer has been enabled for Colemak and QWERTY. The gaming/vanilla Colemak and QWERTY can be set as default layer, but will not be persistent.
@@ -46,7 +46,7 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
,-------|-------|-------| |-------+-------+-------.
| Space | Enter |App/Alt| | RGUI | Delete| Bspc |
| / | / |-------| |-------| / | / |
- | Fn | Number| Bspc | | Tab |Number2| Fn2 |
+ | Fn | Number| Bspc | | Enter |Number2| Fn2 |
`-----------------------' `-----------------------'
@@ -71,7 +71,7 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
,-------|-------|-------| |-------+-------+-------.
| Space | Enter |App/Alt| | RGUI | Delete| Bspc |
| / | / |-------| |-------| / | / |
- | Fn | Number| Bspc | | Tab |Number2| Fn2 |
+ | Fn | Number| Bspc | | Enter |Number2| Fn2 |
`-----------------------' `-----------------------'
@@ -109,9 +109,9 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
| | | | Up | | | | | | Up |Ctrl+Y| | |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
- | |Ctrl+A| Left | Down | Right| | | PgUp | Right| Down | Left | Home | |
+ | |Ctrl+A| Left | Down | Right|C+A+Tb| | PgUp | Right| Down | Left | Home | |
|--------+------+------+------+------+------| |------+------+------+------+------+--------|
- | |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| | | PgDn | Mute | Vol- | Vol+ | End | |
+ | |Ctrl+Z|Ctrl+X|Ctrl+C|Ctrl+V| Bspc | | PgDn | Mute | Vol- | Vol+ | End | |
`--------+------+------+------+------+------' `------+------+------+------+------+--------'
| | | | | | Prev | Play | Next | Stop |
`---------------------------' `---------------------------'
@@ -120,7 +120,7 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
,-------|-------|-------| |-------+-------+-------.
| | | | | | | |
| | |-------| |-------| | |
- | | | | |C+A+Tab| | |
+ | | | | | | | |
`-----------------------' `-----------------------'
@@ -150,7 +150,7 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
### Colemak gaming/vanilla
- (No access to Function or Numbers layers; mainly used for gaming; double-tap TD(ADJ) for one shot access to Adjust layer)
+ (Limited access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
,-----------------------------------------------------------------------------------------------------------.
| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
`-----------------------------------------------------------------------------------------------------------'
@@ -170,12 +170,12 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
,-------|-------|-------| |-------+-------+-------.
| | | LAlt | | RGUI | | |
| Space | Enter |-------| |-------| Delete| Bspc |
- | | | Bspc | | Tab | | |
+ | | |Bspc/FN| | Ent/NS| | |
`-----------------------' `-----------------------'
### QWERTY gaming/vanilla
- (No access to Function or Numbers layers; mainly used for gaming; double-tap TD(ADJ) for one shot access to Adjust layer)
+ (Limited access to Function or Numbers layers; mainly used for gaming; double-tap and hold TD(ADJ) above LAlt to access Adjust layer)
,-----------------------------------------------------------------------------------------------------------.
| ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr| SLck| Paus|Numpd|Adjst|
`-----------------------------------------------------------------------------------------------------------'
@@ -195,11 +195,11 @@ Persistent default layer has been enabled for Colemak and QWERTY. The gaming/va
,-------|-------|-------| |-------+-------+-------.
| | | LAlt | | RGUI | | |
| Space | Enter |-------| |-------| Delete| Bspc |
- | | | Bspc | | Tab | | |
+ | | |Bspc/FN| | Ent/NS| | |
`-----------------------' `-----------------------'
### Adjust layer
- (Press Enter/Number + Delete/Number2 together under non-gaming/vanilla layers; Numpad is a toggle)
+ (Press Enter/Number + Delete/Number2 under non-gaming/vanilla layers or press & hold Adjust key on function row; Numpad is a toggle)
,-----------------------------------------------------------------------------------------------------------.
| | | | | | | | | | | | | | | | | | |
`-----------------------------------------------------------------------------------------------------------'
diff --git a/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk b/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk
index e1af05cb4..24b16ba9b 100644
--- a/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk
+++ b/keyboards/kinesis/keymaps/insertsnideremarks/rules.mk
@@ -5,7 +5,7 @@
DEFAULT_FOLDER = kinesis/stapelberg
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # Enable Tap Dancing function
diff --git a/keyboards/kinesis/keymaps/milestogo/rules.mk b/keyboards/kinesis/keymaps/milestogo/rules.mk
index 9d3df5964..93f927c7d 100644
--- a/keyboards/kinesis/keymaps/milestogo/rules.mk
+++ b/keyboards/kinesis/keymaps/milestogo/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/kinesis/keymaps/xyverz/keymap.c b/keyboards/kinesis/keymaps/xyverz/keymap.c
index 1025df076..2eab62a2b 100644
--- a/keyboards/kinesis/keymaps/xyverz/keymap.c
+++ b/keyboards/kinesis/keymaps/xyverz/keymap.c
@@ -20,6 +20,11 @@ enum custom_keycodes {
#define _______ KC_TRNS
#define XXXXXXX KC_NO
+// Aliases to make the keymap more uniform
+#define GUI_END GUI_T(KC_END)
+#define MED_DEL LT(_MEDIA, KC_DEL)
+#define KPD_ENT LT(_KEYPAD, KC_ENT)
+
/*
Function Keys on All Layers (Keypad toggles):
@@ -96,9 +101,9 @@ enum custom_keycodes {
|--------+------+------+------+------+------||------+------+------+------+------+--------|
| | | | | | || | | | | | |
|--------+------+------+------+------+------||------+------+------+------+------+--------|
- | | | | | | || | Mute | Vol- | Vol+ | | |
+ | | | Mute | Vol- | Vol+ | || | | | | | |
|--------+------+------+------+------+------||------+------+------+------+------+--------|
- | | | | | | || Stop | Prev | Play | Next | Sel | |
+ | | Stop | Prev | Play | Next | Sel || | | | | | |
`--------+------+------+------+------+------'`------+------+------+------+------+--------'
| | | | | | | | | |
`---------------------------' `---------------------------'
@@ -116,12 +121,12 @@ enum custom_keycodes {
|--------+------+------+------+------+------||------+------+------+------+------+--------|
| Sleep | | | | | || | KP 7 | KP 8 | KP 9 | KP - | |
|--------+------+------+------+------+------||------+------+------+------+------+--------|
- | Wake | |QWERTY|Colemk|Dvorak| || | KP 4 | KP 5 | KP 6 | KP + | |
+ | Wake | | Mute | Vol- | Vol+ | || | KP 4 | KP 5 | KP 6 | KP + | |
|--------+------+------+------+------+------||------+------+------+------+------+--------|
- | | | | | | || | KP 1 | KP 2 | KP 3 |KP Ent| |
+ | | Stop | Prev | Play | Next | Sel || | KP 1 | KP 2 | KP 3 |KP Ent| |
`--------+------+------+------+------+------'`------+------+------+------+------+--------'
- | | | | | | | | KP . |KP Ent| |
- `---------------------------' `----------------------------------'
+ | |QWERTY|Colemk|Dvorak| | | | KP . |KP Ent|
+ `---------------------------' `---------------------------'
,-------------.,-------------.
| | || | |
,------|------|------||------+------+------.
@@ -144,7 +149,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Left Thumb
KC_LCTL, KC_LALT,
KC_HOME,
- KC_BSPC, LT(_MEDIA, KC_DEL), KC_END,
+ KC_BSPC, MED_DEL, GUI_END,
// Right Hand
KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_KEYPAD), RESET,
@@ -156,7 +161,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Right Thumb
KC_RGUI, KC_RCTL,
KC_PGUP,
- KC_PGDN, LT(_KEYPAD, KC_ENT), KC_SPC
+ KC_PGDN, KPD_ENT, KC_SPC
),
[_QWERTY] = LAYOUT (
@@ -170,7 +175,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Left Thumb
KC_LCTL, KC_LALT,
KC_HOME,
- KC_BSPC, LT(_MEDIA, KC_DEL), KC_END,
+ KC_BSPC, MED_DEL, KC_END,
// Right Hand
KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_KEYPAD), RESET,
@@ -182,7 +187,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Right Thumb
KC_RGUI, KC_RCTL,
KC_PGUP,
- KC_PGDN, LT(_KEYPAD, KC_ENT), KC_SPC
+ KC_PGDN, KPD_ENT, KC_SPC
),
[_COLEMAK] = LAYOUT (
@@ -196,7 +201,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Left Thumb
KC_LCTL, KC_LALT,
KC_HOME,
- KC_BSPC, LT(_MEDIA, KC_DEL), KC_END,
+ KC_BSPC, MED_DEL, KC_END,
// Right Hand
KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, TG(_KEYPAD), RESET,
@@ -208,7 +213,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Right Thumb
KC_RGUI, KC_RCTL,
KC_PGUP,
- KC_PGDN, LT(_KEYPAD, KC_ENT), KC_SPC
+ KC_PGDN, KPD_ENT, KC_SPC
),
[_MEDIA] = LAYOUT (
@@ -216,8 +221,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5,
_______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______,
+ _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,
+ _______, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSEL,
_______, _______, _______, _______,
// Left Thumb
_______, _______,
@@ -228,8 +233,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
_______, _______, _______, _______, _______, _______,
- _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
- KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSEL, _______,
+ _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______,
// Right Thumb
_______, _______,
@@ -242,9 +247,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______,
KC_PWR, _______, _______, _______, _______, _______,
KC_SLEP, _______, _______, _______, _______, _______,
- KC_WAKE, _______, QWERTY, COLEMAK, DVORAK, _______,
- _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______,
+ KC_WAKE, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______,
+ _______, KC_MSTP, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSEL,
+ _______, QWERTY, COLEMAK, DVORAK,
// Left Thumb
_______, _______,
_______,
diff --git a/keyboards/kinesis/keymaps/xyverz/readme.md b/keyboards/kinesis/keymaps/xyverz/readme.md
index 4f270445d..b55100d25 100644
--- a/keyboards/kinesis/keymaps/xyverz/readme.md
+++ b/keyboards/kinesis/keymaps/xyverz/readme.md
@@ -4,19 +4,17 @@
The Dvorak layout shown here stems from my early Kinesis years, using the Contour PS/2 with a Dvorak software layout. Because of this, the RBRC and LBRC were on opposite sides of the board in the corner keys. I've decided to continue using this layout with my QMK Kinesis.
-~~After a year of using a planck, I've become accustomed to my / and ? being above the - key, so I've decided to move my [, ], and = to the normal Advantage location and set the two keys above the - to new locations. I'll play with it for a while and see how I like it.~~ I didn't like it, so I've switched back.
-
The QWERTY layout shown here is based entirely on the Kinesis Advantage layout. The Colemak layout is merely an adaptation of that.
I've enabled persistent keymaps for Qwerty, Dvorak and Colemak layers, similar to the default Planck layouts.
-As of August 4 2018, I've got the LEDs working ... mostly. Caps Lock and Num Lock LEDs work for me. The Scroll Lock LED does work on my keyboard, but I can't get it to work when I use the Scroll Lock key on my keyboard. I also have no idea how to get the Num Pad LED working when I switch to the Numpad layer.
+Depending on the OS, most of the LEDs are now working in this keymap, but I still have yet to get the Num Pad LED working when switching to the Numpad layer.
## Still to do:
- * Figure out how to make the Numpad and ScrLck LEDs work properly.
+ * Figure out how to make the Numpad LED work properly.
-### Function Keys on All Layers (keypad toggles):
+### Function Keys on All Layers (`keypad` toggles to the keypad layer):
,-----------------------------------------------------------------.
| Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 |
`-----------------------------------------------------------------'
@@ -94,9 +92,9 @@ As of August 4 2018, I've got the LEDs working ... mostly. Caps Lock and Num Loc
|--------+------+------+------+------+------||------+------+------+------+------+--------|
| | | | | | || | | | | | |
|--------+------+------+------+------+------||------+------+------+------+------+--------|
- | | | | | | || | Mute | Vol- | Vol+ | | |
+ | | | Mute | Vol- | Vol+ | || | | | | | |
|--------+------+------+------+------+------||------+------+------+------+------+--------|
- | | | | | | || Stop | Prev | Play | Next | Sel | |
+ | | Stop | Prev | Play | Next | Sel || | | | | | |
`--------+------+------+------+------+------'`------+------+------+------+------+--------'
| | | | | | | | | |
`---------------------------' `---------------------------'
@@ -117,12 +115,12 @@ As of August 4 2018, I've got the LEDs working ... mostly. Caps Lock and Num Loc
|--------+------+------+------+------+------||------+------+------+------+------+--------|
| Sleep | | | | | || | KP 7 | KP 8 | KP 9 | KP - | |
|--------+------+------+------+------+------||------+------+------+------+------+--------|
- | Wake | |QWERTY|Colemk|Dvorak| || | KP 4 | KP 5 | KP 6 | KP + | |
+ | Wake | | Mute | Vol- | Vol+ | || | KP 4 | KP 5 | KP 6 | KP + | |
|--------+------+------+------+------+------||------+------+------+------+------+--------|
- | | | | | | || | KP 1 | KP 2 | KP 3 |KP Ent| |
+ | | Stop | Prev | Play | Next | Sel || | KP 1 | KP 2 | KP 3 |KP Ent| |
`--------+------+------+------+------+------'`------+------+------+------+------+--------'
- | | | | | | | | KP . |KP Ent| |
- `---------------------------' `----------------------------------'
+ | |QWERTY|Colemk|Dvorak| | | | KP . |KP Ent|
+ `---------------------------' `---------------------------'
,-------------.,-------------.
| | || | |
,------|------|------||------+------+------.
diff --git a/keyboards/kinesis/keymaps/xyverz/rules.mk b/keyboards/kinesis/keymaps/xyverz/rules.mk
index 1da780b84..94dc4cdfe 100644
--- a/keyboards/kinesis/keymaps/xyverz/rules.mk
+++ b/keyboards/kinesis/keymaps/xyverz/rules.mk
@@ -2,18 +2,18 @@
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+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
+COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/kira75/rules.mk b/keyboards/kira75/rules.mk
index 45eb6ee37..610410ae4 100644
--- a/keyboards/kira75/rules.mk
+++ b/keyboards/kira75/rules.mk
@@ -52,7 +52,7 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = yes # Console for debug(+400)
COMMAND_ENABLE = yes # Commands for debug and configuration
@@ -60,7 +60,8 @@ 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 = 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
diff --git a/keyboards/kitten_paw/matrix.c b/keyboards/kitten_paw/matrix.c
deleted file mode 100644
index d436ad56c..000000000
--- a/keyboards/kitten_paw/matrix.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- Copyright 2014 Ralf Schmitt <ralf@bunkertor.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 <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-static uint8_t debouncing = DEBOUNCING_DELAY;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-static uint8_t read_rows(void);
-static void select_col(uint8_t col);
-
-inline uint8_t matrix_rows(void) {
- return MATRIX_ROWS;
-}
-
-inline uint8_t matrix_cols(void) {
- return MATRIX_COLS;
-}
-
-/* Column pin configuration
- *
- * col: 0 1 2 3 4 5 6 7
- * pin: PC7 PD5 PD3 PD1 PC2 PD6 PD4 PD2
- *
- * Rrr pin configuration
- *
- * These rrrs uses one 74HC154 4 to 16 bit demultiplexer (low
- * active), together with 2 rrrs driven directly from the micro
- * controller, to control the 18 rrrs. The rrrs are driven from
- * pins B6,5,4,3,2,1,0.
- */
-void matrix_init(void) {
- DDRC &= ~0b10000100; // Row input pins
- DDRD &= ~0b01111110;
- PORTC |= 0b10000100;
- PORTD |= 0b01111110;
-
- DDRB |= 0b01111111; // Column output pins
-
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t col = 0; col < MATRIX_COLS; col++) {
- select_col(col);
- _delay_us(3);
- uint8_t rows = read_rows();
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
- bool curr_bit = rows & (1<<row);
- if (prev_bit != curr_bit) {
- matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
- debouncing = DEBOUNCING_DELAY;
- }
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- _delay_ms(1);
- }
- else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
- matrix_scan_quantum();
- return 1;
-}
-
-bool matrix_is_modified(void) {
- if (debouncing)
- return false;
- else
- 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++) {
- xprintf("%02X: %032lb\n", row, bitrev32(matrix_get_row(row)));
- }
-}
-
-uint8_t matrix_key_count(void) {
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop32(matrix[i]);
- }
- return count;
-}
-
-static uint8_t read_rows(void) {
- return
- (PINC&(1<<7) ? 0 : (1<<0)) |
- (PIND&(1<<5) ? 0 : (1<<1)) |
- (PIND&(1<<3) ? 0 : (1<<2)) |
- (PIND&(1<<1) ? 0 : (1<<3)) |
- (PINC&(1<<2) ? 0 : (1<<4)) |
- (PIND&(1<<2) ? 0 : (1<<5)) |
- (PIND&(1<<4) ? 0 : (1<<6)) |
- (PIND&(1<<6) ? 0 : (1<<7));
-}
-
-static void select_col(uint8_t col) {
- switch (col) {
- case 0: PORTB = (PORTB & ~0b01111111) | 0b01100100; break;
- case 1: PORTB = (PORTB & ~0b01111111) | 0b01101100; break;
- case 2: PORTB = (PORTB & ~0b01111111) | 0b01100010; break;
- case 3: PORTB = (PORTB & ~0b01111111) | 0b01111010; break;
- case 4: PORTB = (PORTB & ~0b01111111) | 0b01100110; break;
- case 5: PORTB = (PORTB & ~0b01111111) | 0b01110110; break;
- case 6: PORTB = (PORTB & ~0b01111111) | 0b01101110; break;
- case 7: PORTB = (PORTB & ~0b01111111) | 0b01111110; break;
- case 8: PORTB = (PORTB & ~0b01111111) | 0b01000001; break;
- case 9: PORTB = (PORTB & ~0b01111111) | 0b00100001; break;
- case 10: PORTB = (PORTB & ~0b01111111) | 0b01101010; break;
- case 11: PORTB = (PORTB & ~0b01111111) | 0b01110010; break;
- case 12: PORTB = (PORTB & ~0b01111111) | 0b01111100; break;
- case 13: PORTB = (PORTB & ~0b01111111) | 0b01110100; break;
- case 14: PORTB = (PORTB & ~0b01111111) | 0b01111000; break;
- case 15: PORTB = (PORTB & ~0b01111111) | 0b01110000; break;
- case 16: PORTB = (PORTB & ~0b01111111) | 0b01100000; break;
- case 17: PORTB = (PORTB & ~0b01111111) | 0b01101000; break;
- }
-}
diff --git a/keyboards/kitten_paw/readme.md b/keyboards/kitten_paw/readme.md
deleted file mode 100644
index d5fa9aa8b..000000000
--- a/keyboards/kitten_paw/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-kitten_paw
-==========
-
-This is the firmware for the 2016 revision of the Kitten Paw controller by Bathroom Epiphanies. Most of the boilerplate code is the work of [BathroomEpiphanies](https://github.com/BathroomEpiphanies).
-
-NKRO doesn't work at the moment, I don't know if I will take the time to find out how to fix this, so far 6KRO is enough for me.
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: Kitten Paw PCB
-Hardware Availability: https://geekhack.org/index.php?topic=46700.0
-
-Make example for this keyboard (after setting up your build environment):
-
- make kitten_paw:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/launchpad/keymaps/default/rules.mk b/keyboards/launchpad/keymaps/default/rules.mk
index 260b9d8fa..9bf35a59d 100644
--- a/keyboards/launchpad/keymaps/default/rules.mk
+++ b/keyboards/launchpad/keymaps/default/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+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/lets_split/config.h b/keyboards/lets_split/config.h
index c910d8f24..cfb6bf4ff 100644
--- a/keyboards/lets_split/config.h
+++ b/keyboards/lets_split/config.h
@@ -16,9 +16,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
-
-#endif
diff --git a/keyboards/lets_split/eeprom-lefthand.eep b/keyboards/lets_split/eeprom-lefthand.eep
deleted file mode 100644
index bda23cdb6..000000000
--- a/keyboards/lets_split/eeprom-lefthand.eep
+++ /dev/null
@@ -1,2 +0,0 @@
-:0F000000000000000000000000000000000001F0
-:00000001FF
diff --git a/keyboards/lets_split/eeprom-righthand.eep b/keyboards/lets_split/eeprom-righthand.eep
deleted file mode 100644
index 549cd1ef0..000000000
--- a/keyboards/lets_split/eeprom-righthand.eep
+++ /dev/null
@@ -1,2 +0,0 @@
-:0F000000000000000000000000000000000000F1
-:00000001FF
diff --git a/keyboards/lets_split/i2c.c b/keyboards/lets_split/i2c.c
deleted file mode 100644
index 084c890c4..000000000
--- a/keyboards/lets_split/i2c.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <util/twi.h>
-#include <avr/io.h>
-#include <stdlib.h>
-#include <avr/interrupt.h>
-#include <util/twi.h>
-#include <stdbool.h>
-#include "i2c.h"
-
-#ifdef USE_I2C
-
-// Limits the amount of we wait for any one i2c transaction.
-// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
-// 9 bits, a single transaction will take around 90μs to complete.
-//
-// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
-// poll loop takes at least 8 clock cycles to execute
-#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
-
-#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
-
-volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-static volatile uint8_t slave_buffer_pos;
-static volatile bool slave_has_register_set = false;
-
-// Wait for an i2c operation to finish
-inline static
-void i2c_delay(void) {
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-
- // easier way, but will wait slightly longer
- // _delay_us(100);
-}
-
-// Setup twi to run at 100kHz
-void i2c_master_init(void) {
- // no prescaler
- TWSR = 0;
- // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
- // Check datasheets for more info.
- TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
-}
-
-// Start a transaction with the given i2c slave address. The direction of the
-// transfer is set with I2C_READ and I2C_WRITE.
-// returns: 0 => success
-// 1 => error
-uint8_t i2c_master_start(uint8_t address) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
-
- i2c_delay();
-
- // check that we started successfully
- if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
- return 1;
-
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
- return 1; // slave did not acknowledge
- else
- return 0; // success
-}
-
-
-// Finish the i2c transaction.
-void i2c_master_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-}
-
-// Write one byte to the i2c slave.
-// returns 0 => slave ACK
-// 1 => slave NACK
-uint8_t i2c_master_write(uint8_t data) {
- TWDR = data;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- // check if the slave acknowledged us
- return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
-}
-
-// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
-// if ack=0 the acknowledge bit is not set.
-// returns: byte read from i2c device
-uint8_t i2c_master_read(int ack) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
-
- i2c_delay();
- return TWDR;
-}
-
-void i2c_reset_state(void) {
- TWCR = 0;
-}
-
-void i2c_slave_init(uint8_t address) {
- TWAR = address << 0; // slave i2c address
- // TWEN - twi enable
- // TWEA - enable address acknowledgement
- // TWINT - twi interrupt flag
- // TWIE - enable the twi interrupt
- TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
-}
-
-ISR(TWI_vect);
-
-ISR(TWI_vect) {
- uint8_t ack = 1;
- switch(TW_STATUS) {
- case TW_SR_SLA_ACK:
- // this device has been addressed as a slave receiver
- slave_has_register_set = false;
- break;
-
- case TW_SR_DATA_ACK:
- // this device has received data as a slave receiver
- // The first byte that we receive in this transaction sets the location
- // of the read/write location of the slaves memory that it exposes over
- // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
- // slave_buffer_pos after each write.
- if(!slave_has_register_set) {
- slave_buffer_pos = TWDR;
- // don't acknowledge the master if this memory loctaion is out of bounds
- if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
- ack = 0;
- slave_buffer_pos = 0;
- }
- slave_has_register_set = true;
- } else {
- i2c_slave_buffer[slave_buffer_pos] = TWDR;
- BUFFER_POS_INC();
- }
- break;
-
- case TW_ST_SLA_ACK:
- case TW_ST_DATA_ACK:
- // master has addressed this device as a slave transmitter and is
- // requesting data.
- TWDR = i2c_slave_buffer[slave_buffer_pos];
- BUFFER_POS_INC();
- break;
-
- case TW_BUS_ERROR: // something went wrong, reset twi state
- TWCR = 0;
- default:
- break;
- }
- // Reset everything, so we are ready for the next TWI interrupt
- TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
-}
-#endif
diff --git a/keyboards/lets_split/i2c.h b/keyboards/lets_split/i2c.h
deleted file mode 100644
index c15b6bc50..000000000
--- a/keyboards/lets_split/i2c.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef I2C_H
-#define I2C_H
-
-#include <stdint.h>
-
-#ifndef F_CPU
-#define F_CPU 16000000UL
-#endif
-
-#define I2C_READ 1
-#define I2C_WRITE 0
-
-#define I2C_ACK 1
-#define I2C_NACK 0
-
-#define SLAVE_BUFFER_SIZE 0x10
-
-// i2c SCL clock frequency
-#define SCL_CLOCK 400000L
-
-extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-void i2c_master_init(void);
-uint8_t i2c_master_start(uint8_t address);
-void i2c_master_stop(void);
-uint8_t i2c_master_write(uint8_t data);
-uint8_t i2c_master_read(int);
-void i2c_reset_state(void);
-void i2c_slave_init(uint8_t address);
-
-
-static inline unsigned char i2c_start_read(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_READ);
-}
-
-static inline unsigned char i2c_start_write(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_WRITE);
-}
-
-// from SSD1306 scrips
-extern unsigned char i2c_rep_start(unsigned char addr);
-extern void i2c_start_wait(unsigned char addr);
-extern unsigned char i2c_readAck(void);
-extern unsigned char i2c_readNak(void);
-extern unsigned char i2c_read(unsigned char ack);
-
-#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
-
-#endif
diff --git a/keyboards/lets_split/keymaps/DE_simple/keymap.c b/keyboards/lets_split/keymaps/DE_simple/keymap.c
index d329bea4c..e801c241e 100644
--- a/keyboards/lets_split/keymaps/DE_simple/keymap.c
+++ b/keyboards/lets_split/keymaps/DE_simple/keymap.c
@@ -40,7 +40,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_ESC, DE_Q, DE_W, DE_E, DE_R, DE_T, DE_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, \
KC_TAB, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, DE_PLUS, DE_HASH, \
KC_LSFT, DE_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, DE_COMM, DE_DOT, DE_MINS, KC_ENT , \
- KC_LCTL, KC_LALT, DE_ALGR, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ KC_LCTL, KC_LALT, KC_ALGR, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Lower
diff --git a/keyboards/lets_split/keymaps/OLED_sample/config.h b/keyboards/lets_split/keymaps/OLED_sample/config.h
index e8632fe61..6aa909d28 100644
--- a/keyboards/lets_split/keymaps/OLED_sample/config.h
+++ b/keyboards/lets_split/keymaps/OLED_sample/config.h
@@ -38,8 +38,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define SSD1306OLED
//#define OLED_ROTATE180
-
-#define PREVENT_STUCK_MODIFIERS
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 100
diff --git a/keyboards/lets_split/keymaps/OLED_sample/rules.mk b/keyboards/lets_split/keymaps/OLED_sample/rules.mk
index 874d09eab..89ad61fbe 100644
--- a/keyboards/lets_split/keymaps/OLED_sample/rules.mk
+++ b/keyboards/lets_split/keymaps/OLED_sample/rules.mk
@@ -1,25 +1,22 @@
+SRC += ssd1306.c
# 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)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SWAP_HANDS_ENABLE = no # Enable one-hand typing
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/lets_split/keymaps/adam/config.h b/keyboards/lets_split/keymaps/adam/config.h
index ff29eb1bd..59a2e5db7 100644
--- a/keyboards/lets_split/keymaps/adam/config.h
+++ b/keyboards/lets_split/keymaps/adam/config.h
@@ -43,7 +43,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#undef TAPPING_TERM
#define TAPPING_TERM 200 //At 500 some bad logic takes hold
-#define PREVENT_STUCK_MODIFIERS
#define IGNORE_MOD_TAP_INTERRUPT
#define PERMISSIVE_HOLD
diff --git a/keyboards/lets_split/keymaps/default/config.h b/keyboards/lets_split/keymaps/default/config.h
index 5a6261c4f..60e23f816 100644
--- a/keyboards/lets_split/keymaps/default/config.h
+++ b/keyboards/lets_split/keymaps/default/config.h
@@ -18,20 +18,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/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
-#include "../../config.h"
+ // place overrides here
+#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
/* Use I2C or Serial, not both */
-
#define USE_SERIAL
// #define USE_I2C
/* Select hand configuration */
-
#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
-
-#endif
diff --git a/keyboards/lets_split/keymaps/default/keymap.c b/keyboards/lets_split/keymaps/default/keymap.c
index f78278184..05f9bda8d 100644
--- a/keyboards/lets_split/keymaps/default/keymap.c
+++ b/keyboards/lets_split/keymaps/default/keymap.c
@@ -1,7 +1,5 @@
#include QMK_KEYBOARD_H
-extern keymap_config_t keymap_config;
-
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
@@ -16,15 +14,12 @@ extern keymap_config_t keymap_config;
enum custom_keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
- DVORAK,
- LOWER,
- RAISE,
- ADJUST,
+ DVORAK
};
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define ADJUST MO(_ADJUST)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
@@ -138,74 +133,27 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-#ifdef AUDIO_ENABLE
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float tone_dvorak[][2] = SONG(DVORAK_SOUND);
-float tone_colemak[][2] = SONG(COLEMAK_SOUND);
-#endif
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_qwerty);
- #endif
- persistent_default_layer_set(1UL<<_QWERTY);
+ set_single_persistent_default_layer(_QWERTY);
}
return false;
- break;
case COLEMAK:
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_colemak);
- #endif
- persistent_default_layer_set(1UL<<_COLEMAK);
+ set_single_persistent_default_layer(_COLEMAK);
}
return false;
- break;
case DVORAK:
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_dvorak);
- #endif
- persistent_default_layer_set(1UL<<_DVORAK);
- }
- return false;
- break;
- case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
+ set_single_persistent_default_layer(_DVORAK);
}
return false;
- break;
}
return true;
}
diff --git a/keyboards/lets_split/keymaps/default/rules.mk b/keyboards/lets_split/keymaps/default/rules.mk
index 457a3d01d..e69de29bb 100644
--- a/keyboards/lets_split/keymaps/default/rules.mk
+++ b/keyboards/lets_split/keymaps/default/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split/keymaps/heartrobotninja/rules.mk b/keyboards/lets_split/keymaps/heartrobotninja/rules.mk
index 2261a848a..36f5e5b6d 100644
--- a/keyboards/lets_split/keymaps/heartrobotninja/rules.mk
+++ b/keyboards/lets_split/keymaps/heartrobotninja/rules.mk
@@ -14,7 +14,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. Do not enable this with audio at the same time.
+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
@@ -23,4 +23,3 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
endif
-
diff --git a/keyboards/lets_split/keymaps/khord/config.h b/keyboards/lets_split/keymaps/khord/config.h
index 4ebdbad76..71ec20dbc 100644
--- a/keyboards/lets_split/keymaps/khord/config.h
+++ b/keyboards/lets_split/keymaps/khord/config.h
@@ -25,9 +25,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TAPPING_TERM 150
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
/* Use I2C or Serial, not both */
#define USE_SERIAL
diff --git a/keyboards/lets_split/keymaps/mjt/rules.mk b/keyboards/lets_split/keymaps/mjt/rules.mk
index 874d09eab..a14e84d4e 100644
--- a/keyboards/lets_split/keymaps/mjt/rules.mk
+++ b/keyboards/lets_split/keymaps/mjt/rules.mk
@@ -14,7 +14,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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
diff --git a/keyboards/lets_split/keymaps/piemod/config.h b/keyboards/lets_split/keymaps/piemod/config.h
index 001b62e41..1b3fd7544 100644
--- a/keyboards/lets_split/keymaps/piemod/config.h
+++ b/keyboards/lets_split/keymaps/piemod/config.h
@@ -43,7 +43,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 1
// Typing Options
-#define PREVENT_STUCK_MODIFIERS
#define QMK_KEYS_PER_SCAN 4
#endif
diff --git a/keyboards/lets_split/keymaps/piemod/rules.mk b/keyboards/lets_split/keymaps/piemod/rules.mk
index 027ea977e..e2bb583cd 100644
--- a/keyboards/lets_split/keymaps/piemod/rules.mk
+++ b/keyboards/lets_split/keymaps/piemod/rules.mk
@@ -9,5 +9,5 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = no
diff --git a/keyboards/lets_split/keymaps/pyrol/config.h b/keyboards/lets_split/keymaps/pyrol/config.h
new file mode 100644
index 000000000..f3502585d
--- /dev/null
+++ b/keyboards/lets_split/keymaps/pyrol/config.h
@@ -0,0 +1,28 @@
+/*
+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_SERIAL
+
+#define MASTER_LEFT
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 8
diff --git a/keyboards/lets_split/keymaps/pyrol/keymap.c b/keyboards/lets_split/keymaps/pyrol/keymap.c
new file mode 100644
index 000000000..c5227f5af
--- /dev/null
+++ b/keyboards/lets_split/keymaps/pyrol/keymap.c
@@ -0,0 +1,218 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _GAME 5
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ ADJUST,
+ GAME,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ; |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | OS | Alt |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_ortho_4x12( \
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT , \
+ ADJUST,KC_LCTRL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | F | P | G | J | L | U | Y | ; | Tab |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Bksp | A | R | S | T | D | H | N | E | I | O |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | OS | Alt |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_4x12( \
+ KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_TAB, \
+ KC_BSPC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT , \
+ ADJUST, KC_LCTL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | ' | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_BSPC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | RGB | HUE | SAT | VAL | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ KC_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_MPRV, KC_MNXT, \
+ RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, 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 / | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | RGB | HUE | SAT | VAL | | | | 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, _______, _______, _______, \
+ RGB_RMOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+/* Game
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ; |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | Up | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Ctrl | OS | Alt |Raise |Space |Space |LOWER | ' | Left | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GAME] = 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_LCTRL,KC_LCTRL, KC_LGUI, KC_LALT, RAISE, KC_SPC, KC_SPC, LOWER, KC_QUOT, KC_LEFT, KC_DOWN, KC_RGHT \
+),
+
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | | Game | | | | | | | | |Reset |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12( \
+ _______, _______, GAME, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case GAME:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_GAME);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/lets_split/keymaps/pyrol/rules.mk b/keyboards/lets_split/keymaps/pyrol/rules.mk
new file mode 100644
index 000000000..6e1be51be
--- /dev/null
+++ b/keyboards/lets_split/keymaps/pyrol/rules.mk
@@ -0,0 +1 @@
+ BOOTMAGIC_ENABLE = yes
diff --git a/keyboards/lets_split/keymaps/waples/config.h b/keyboards/lets_split/keymaps/waples/config.h
index 98ebeff45..5221fd011 100644
--- a/keyboards/lets_split/keymaps/waples/config.h
+++ b/keyboards/lets_split/keymaps/waples/config.h
@@ -12,6 +12,4 @@
// #define MASTER_RIGHT
#define EE_HANDS // We like to have choices I guess
-#define PREVENT_STUCK_MODIFIERS // When switching layers, this will release all mods
-
#endif
diff --git a/keyboards/lets_split/keymaps/xk/config.h b/keyboards/lets_split/keymaps/xk/config.h
index c75ed12cc..a5cd51857 100644
--- a/keyboards/lets_split/keymaps/xk/config.h
+++ b/keyboards/lets_split/keymaps/xk/config.h
@@ -37,7 +37,6 @@ the Free Software Foundation, either version 2 of the License, or
#define EE_HANDS
-#define PREVENT_STUCK_MODIFIERS
#define IGNORE_MOD_TAP_INTERRUPT
#define PERMISSIVE_HOLD
diff --git a/keyboards/lets_split/keymaps/xk/rules.mk b/keyboards/lets_split/keymaps/xk/rules.mk
index 84bf8e1f5..195f01577 100644
--- a/keyboards/lets_split/keymaps/xk/rules.mk
+++ b/keyboards/lets_split/keymaps/xk/rules.mk
@@ -11,7 +11,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
ifndef QUANTUM_DIR
diff --git a/keyboards/lets_split/keymaps/yshrsmz/config.h b/keyboards/lets_split/keymaps/yshrsmz/config.h
new file mode 100644
index 000000000..301f1ffc6
--- /dev/null
+++ b/keyboards/lets_split/keymaps/yshrsmz/config.h
@@ -0,0 +1,35 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* auto shift config */
+#define AUTO_SHIFT_TIMEOUT 150
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define _MASTER_RIGHT
+// #define EE_HANDS
diff --git a/keyboards/lets_split/keymaps/yshrsmz/keymap.c b/keyboards/lets_split/keymaps/yshrsmz/keymap.c
new file mode 100644
index 000000000..52a0d2b83
--- /dev/null
+++ b/keyboards/lets_split/keymaps/yshrsmz/keymap.c
@@ -0,0 +1,180 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _FUNC 3
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ FUNC,
+ ADJUST,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | - |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | GUI |Shift |Adjust| Fn |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_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_MINS, \
+ 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, \
+ FUNC, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_RGUI, KC_RSFT, ADJUST, FUNC \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+),
+
+/* FUNC
+ * ,-----------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F11 | F12 | | | | LEFT | DOWN | UP |RIGHT | PGUP | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | HOME | END |Alt+← |Alt+→ | PGDN | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNC] = LAYOUT_ortho_4x12( \
+ _______, 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_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PGUP, _______, \
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, LALT(KC_LEFT), LALT(KC_RGHT), KC_PGDN, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+#endif
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case FUNC:
+ if (record->event.pressed) {
+ layer_on(_FUNC);
+ } else {
+ layer_off(_FUNC);
+ }
+ 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/lets_split/keymaps/yshrsmz/rules.mk b/keyboards/lets_split/keymaps/yshrsmz/rules.mk
new file mode 100644
index 000000000..c9383ab8d
--- /dev/null
+++ b/keyboards/lets_split/keymaps/yshrsmz/rules.mk
@@ -0,0 +1 @@
+AUTO_SHIFT_ENABLE = yes
diff --git a/keyboards/lets_split/keymaps/zer09/config.h b/keyboards/lets_split/keymaps/zer09/config.h
index 73438d8a9..14be4ccc5 100644
--- a/keyboards/lets_split/keymaps/zer09/config.h
+++ b/keyboards/lets_split/keymaps/zer09/config.h
@@ -52,8 +52,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#undef RGBLED_NUM
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 50
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
#endif
diff --git a/keyboards/lets_split/keymaps/zer09/keymap.c b/keyboards/lets_split/keymaps/zer09/keymap.c
index 8d0eaf141..cb6744433 100644
--- a/keyboards/lets_split/keymaps/zer09/keymap.c
+++ b/keyboards/lets_split/keymaps/zer09/keymap.c
@@ -9,8 +9,15 @@ extern keymap_config_t keymap_config;
TD(DA_UPLY), MO(_VL), KC_TAB, KC_BSPACE, KC_ESC, /**/KC_INS, KC_HOME, KC_PGUP, MO(_VL), TD(DA_UPLY), \
TD(DA_DWLY), TD(DA_LCTL), KC_SPC, TD(DA_LSPR), LSFT_T(KC_CAPS),/**/SFT_T(KC_CAPS), TD(DA_RALT), KC_ENT, TD(DA_RCTL), TD(DA_DWLY))
+#define _GMLayer LAYOUT( \
+ KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, /**/KC_F, KC_G, KC_C, KC_R, KC_L, \
+ KC_A, KC_O, KC_E, KC_U, KC_I, /**/KC_D, KC_H, ALT_T(KC_T), SFT_T(KC_N), CTL_T(KC_S), \
+ KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, /**/KC_B, KC_M, KC_W, KC_V, KC_Z, \
+ TD(DA_UPLY), MO(_VL), KC_TAB, KC_BSPACE, KC_ESC, /**/KC_INS, KC_HOME, KC_PGUP, MO(_VL), TD(DA_UPLY), \
+ TD(DA_DWLY), TD(DA_LCTL), KC_SPC, TD(DA_LSPR), LSFT_T(KC_CAPS),/**/SFT_T(KC_CAPS), TD(DA_RALT), KC_ENT, TD(DA_RCTL), TD(DA_DWLY))
+
#define _upLayer LAYOUT( \
- KC_4, KC_5, KC_6, _______, _______,/**/ _______, KC_RBRC, _______, _______, _______, \
+ KC_4, KC_5, KC_6, KC_YREG, _______,/**/ _______, KC_RBRC, _______, _______, _______, \
LCTL_T(KC_1), LSFT_T(KC_2), LALT_T(KC_3), _______, _______,/**/ KC_LBRC, KC_BSLS, _______, _______, _______, \
KC_7, KC_8, KC_9, KC_0, KC_GRV, /**/ KC_SLSH, _______, _______, _______, _______, \
_______, _______, _______, _______, _______,/**/ KC_DEL, KC_END, KC_PGDN, _______, _______, \
@@ -35,4 +42,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_UL] = _upLayer,
[_DL] = _downLayer,
[_VL] = _upLayer,
- [_AL] = _astdLayer};
+ [_AL] = _astdLayer,
+ [_GM] = _GMLayer};
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch (keycode) {
+ case YREG:
+ SEND_STRING("\"0p");
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/keyboards/lets_split/lets_split.h b/keyboards/lets_split/lets_split.h
index bce0ecb19..9c46f382d 100644
--- a/keyboards/lets_split/lets_split.h
+++ b/keyboards/lets_split/lets_split.h
@@ -1,5 +1,4 @@
-#ifndef LETS_SPLIT_H
-#define LETS_SPLIT_H
+#pragma once
#include "quantum.h"
@@ -27,5 +26,3 @@
)
#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
-
-#endif
diff --git a/keyboards/lets_split/matrix.c b/keyboards/lets_split/matrix.c
deleted file mode 100644
index f753d234a..000000000
--- a/keyboards/lets_split/matrix.c
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "split_util.h"
-#include "pro_micro.h"
-#include "config.h"
-#include "timer.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else // USE_SERIAL
-# include "serial.h"
-#endif
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-
-#if (DEBOUNCING_DELAY > 0)
- static uint16_t debouncing_time;
- static bool debouncing = false;
-#endif
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#else
-# error "Currently only supports 8 COLS"
-#endif
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-#define ERROR_DISCONNECT_COUNT 5
-
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
-
-static uint8_t error_count = 0;
-
-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];
-
-#if (DIODE_DIRECTION == COL2ROW)
- static void init_cols(void);
- static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
- static void unselect_rows(void);
- static void select_row(uint8_t row);
- static void unselect_row(uint8_t row);
-#elif (DIODE_DIRECTION == ROW2COL)
- static void init_rows(void);
- static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
- static void unselect_cols(void);
- static void unselect_col(uint8_t col);
- static void select_col(uint8_t col);
-#endif
-
-__attribute__ ((weak))
-void matrix_init_kb(void) {
- matrix_init_user();
-}
-
-__attribute__ ((weak))
-void matrix_scan_kb(void) {
- matrix_scan_user();
-}
-
-__attribute__ ((weak))
-void matrix_init_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_scan_user(void) {
-}
-
-__attribute__ ((weak))
-void matrix_slave_scan_user(void) {
-}
-
-inline
-uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline
-uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
-#ifdef DISABLE_JTAG
- // JTAG disable for PORT F. write JTD bit twice within four cycles.
- MCUCR |= (1<<JTD);
- MCUCR |= (1<<JTD);
-#endif
-
- debug_enable = true;
- debug_matrix = true;
- debug_mouse = true;
- // initialize row and col
-#if (DIODE_DIRECTION == COL2ROW)
- unselect_rows();
- init_cols();
-#elif (DIODE_DIRECTION == ROW2COL)
- unselect_cols();
- init_rows();
-#endif
-
- TX_RX_LED_INIT;
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-
-}
-
-uint8_t _matrix_scan(void)
-{
- int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
-#if (DIODE_DIRECTION == COL2ROW)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
-
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-
-# else
- read_cols_on_row(matrix+offset, current_row);
-# endif
-
- }
-
-#elif (DIODE_DIRECTION == ROW2COL)
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_rows_on_col(matrix+offset, current_col);
-# endif
-
- }
-#endif
-
-# if (DEBOUNCING_DELAY > 0)
- if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- matrix[i+offset] = matrix_debouncing[i+offset];
- }
- debouncing = false;
- }
-# endif
-
- return 1;
-}
-
-#ifdef USE_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(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
-
- if (serial_update_buffers()) {
- return 1;
- }
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_slave_buffer[i];
- }
- return 0;
-}
-#endif
-
-uint8_t matrix_scan(void)
-{
- uint8_t ret = _matrix_scan();
-
-#ifdef USE_I2C
- if( i2c_transaction() ) {
-#else // USE_SERIAL
- if( serial_transaction() ) {
-#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_I2C
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- i2c_slave_buffer[i] = matrix[offset+i];
- }
-#else // USE_SERIAL
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_slave_buffer[i] = matrix[offset+i];
- }
-#endif
- matrix_slave_scan_user();
-}
-
-bool matrix_is_modified(void)
-{
- if (debouncing) return false;
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- phex(row); print(": ");
- pbin_reverse16(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
- }
- return count;
-}
-
-#if (DIODE_DIRECTION == COL2ROW)
-
-static void init_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin = col_pins[col_index];
- uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-static void select_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#elif (DIODE_DIRECTION == ROW2COL)
-
-static void init_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
- {
-
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[row_index];
-
- // Check row pin state
- if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
- {
- // Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-static void select_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#endif
diff --git a/keyboards/lets_split/readme.md b/keyboards/lets_split/readme.md
index 80fe08b93..2a2b95c09 100644
--- a/keyboards/lets_split/readme.md
+++ b/keyboards/lets_split/readme.md
@@ -151,13 +151,13 @@ file will run on both hands instead of having to flash left and right handed
versions of the firmware to each half. To flash the EEPROM file for the left
half run:
```
-avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-lefthand.eep
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-lefthand.eep"
// or the equivalent in dfu-programmer
```
and similarly for right half
```
-avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-righhand.eep
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-righthand.eep"
// or the equivalent in dfu-programmer
```
diff --git a/keyboards/lets_split/rev1/config.h b/keyboards/lets_split/rev1/config.h
index 73f90e715..18b7cce5a 100644
--- a/keyboards/lets_split/rev1/config.h
+++ b/keyboards/lets_split/rev1/config.h
@@ -16,10 +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 REV1_CONFIG_H
-#define REV1_CONFIG_H
-
-#include "config_common.h"
+#pragma once
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
@@ -48,6 +45,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -60,10 +60,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 16 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
@@ -82,5 +80,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/lets_split/rev1/rev1.h b/keyboards/lets_split/rev1/rev1.h
index 073d83ef3..a43d4a25b 100644
--- a/keyboards/lets_split/rev1/rev1.h
+++ b/keyboards/lets_split/rev1/rev1.h
@@ -1,5 +1,4 @@
-#ifndef REV1_H
-#define REV1_H
+#pragma once
#include "lets_split.h"
@@ -26,5 +25,3 @@
}
#define LAYOUT_ortho_4x12 LAYOUT
-
-#endif
diff --git a/keyboards/lets_split/rev2/config.h b/keyboards/lets_split/rev2/config.h
index 1c48f38e0..1c0871cd1 100644
--- a/keyboards/lets_split/rev2/config.h
+++ b/keyboards/lets_split/rev2/config.h
@@ -16,10 +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 REV2_CONFIG_H
-#define REV2_CONFIG_H
-
-#include "config_common.h"
+#pragma once
/* USB Device descriptor parameter */
#define VENDOR_ID 0xFEED
@@ -48,6 +45,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -60,10 +60,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
@@ -82,6 +80,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-
-#endif
diff --git a/keyboards/lets_split/rev2/rev2.h b/keyboards/lets_split/rev2/rev2.h
index bf25ee856..34e64e89f 100644
--- a/keyboards/lets_split/rev2/rev2.h
+++ b/keyboards/lets_split/rev2/rev2.h
@@ -1,5 +1,4 @@
-#ifndef REV2_H
-#define REV2_H
+#pragma once
#include "lets_split.h"
@@ -58,5 +57,3 @@
#endif
#define LAYOUT_ortho_4x12 LAYOUT
-
-#endif
diff --git a/keyboards/lets_split/rules.mk b/keyboards/lets_split/rules.mk
index 951723edc..f9d1a0dad 100644
--- a/keyboards/lets_split/rules.mk
+++ b/keyboards/lets_split/rules.mk
@@ -1,11 +1,4 @@
-SRC += matrix.c \
- i2c.c \
- split_util.c \
- serial.c \
- ssd1306.c
-
# MCU name
-#MCU = at90usb1287
MCU = atmega32u4
# Processor frequency.
@@ -42,7 +35,7 @@ F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
-# different sizes, comment this out, and the correct address will be loaded
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina
@@ -64,13 +57,12 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SUBPROJECT_rev1 = yes
-USE_I2C = yes
+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
-CUSTOM_MATRIX = yes
+SPLIT_KEYBOARD = yes
LAYOUTS = ortho_4x12
diff --git a/keyboards/lets_split/serial.c b/keyboards/lets_split/serial.c
deleted file mode 100644
index 74bcbb6bf..000000000
--- a/keyboards/lets_split/serial.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * WARNING: be careful changing this code, it is very timing dependent
- */
-
-#ifndef F_CPU
-#define F_CPU 16000000
-#endif
-
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <stdbool.h>
-#include "serial.h"
-
-#ifndef USE_I2C
-
-// Serial pulse period in microseconds. Its probably a bad idea to lower this
-// value.
-#define SERIAL_DELAY 24
-
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
-
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
-
-inline static
-void serial_delay(void) {
- _delay_us(SERIAL_DELAY);
-}
-
-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(void) {
- SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-inline static
-uint8_t serial_read_pin(void) {
- return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
-}
-
-inline static
-void serial_low(void) {
- SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
-}
-
-inline static
-void serial_high(void) {
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-void serial_master_init(void) {
- serial_output();
- serial_high();
-}
-
-void serial_slave_init(void) {
- serial_input();
-
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
-}
-
-// Used by the master to synchronize timing with the slave.
-static
-void sync_recv(void) {
- serial_input();
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
- while (!serial_read_pin());
- serial_delay();
-}
-
-// Used by the slave to send a synchronization signal to the master.
-static
-void sync_send(void) {
- serial_output();
-
- serial_low();
- serial_delay();
-
- serial_high();
-}
-
-// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
- serial_input();
- for ( uint8_t i = 0; i < 8; ++i) {
- byte = (byte << 1) | serial_read_pin();
- serial_delay();
- _delay_us(1);
- }
-
- return byte;
-}
-
-// Sends a byte with MSB ordering
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 8;
- serial_output();
- while( b-- ) {
- if(data & (1 << b)) {
- serial_high();
- } else {
- serial_low();
- }
- serial_delay();
- }
-}
-
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- sync_send();
-
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_slave_buffer[i]);
- sync_send();
- checksum += serial_slave_buffer[i];
- }
- serial_write_byte(checksum);
- sync_send();
-
- // wait for the sync to finish sending
- serial_delay();
-
- // read the middle of pulses
- _delay_us(SERIAL_DELAY/2);
-
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_master_buffer[i] = serial_read_byte();
- sync_send();
- checksum_computed += serial_master_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_send();
-
- serial_input(); // end transaction
-
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
- } else {
- status &= ~SLAVE_DATA_CORRUPT;
- }
-}
-
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
-}
-
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
-//
-// Returns:
-// 0 => no error
-// 1 => slave did not respond
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
- cli();
-
- // signal to the slave that we want to start a transaction
- serial_output();
- serial_low();
- _delay_us(1);
-
- // wait for the slaves response
- serial_input();
- serial_high();
- _delay_us(SERIAL_DELAY);
-
- // check if the slave is present
- if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
- sei();
- return 1;
- }
-
- // if the slave is present syncronize with it
- sync_recv();
-
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_slave_buffer[i] = serial_read_byte();
- sync_recv();
- checksum_computed += serial_slave_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_recv();
-
- if (checksum_computed != checksum_received) {
- sei();
- return 1;
- }
-
- uint8_t checksum = 0;
- // send data to the slave
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_master_buffer[i]);
- sync_recv();
- checksum += serial_master_buffer[i];
- }
- serial_write_byte(checksum);
- sync_recv();
-
- // always, release the line when not in use
- serial_output();
- serial_high();
-
- sei();
- return 0;
-}
-
-#endif
diff --git a/keyboards/lets_split/serial.h b/keyboards/lets_split/serial.h
deleted file mode 100644
index 15fe4db7b..000000000
--- a/keyboards/lets_split/serial.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef MY_SERIAL_H
-#define MY_SERIAL_H
-
-#include "config.h"
-#include <stdbool.h>
-
-/* TODO: some defines for interrupt setup */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
-
-// Buffers for master - slave communication
-extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
-extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
-
-void serial_master_init(void);
-void serial_slave_init(void);
-int serial_update_buffers(void);
-bool serial_slave_data_corrupt(void);
-
-#endif
diff --git a/keyboards/lets_split/sockets/config.h b/keyboards/lets_split/sockets/config.h
index d004b26bd..6939d37dc 100644
--- a/keyboards/lets_split/sockets/config.h
+++ b/keyboards/lets_split/sockets/config.h
@@ -16,10 +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 SOCKETS_CONFIG_H
-#define SOCKETS_CONFIG_H
-
-#include "config_common.h"
+#pragma once
/* USB Device descriptor parameter */
#define VENDOR_ID 0xBEE5
@@ -48,6 +45,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -60,10 +60,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D4
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/* Audio settings */
#ifdef AUDIO_ENABLE
@@ -87,6 +85,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-
-#endif
diff --git a/keyboards/lets_split/sockets/sockets.h b/keyboards/lets_split/sockets/sockets.h
index bd1019263..a79770bac 100644
--- a/keyboards/lets_split/sockets/sockets.h
+++ b/keyboards/lets_split/sockets/sockets.h
@@ -1,5 +1,4 @@
-#ifndef SOCKETS_H
-#define SOCKETS_H
+#pragma once
#define DISABLE_JTAG // The keyboard uses PF4 and PF7, which are used by JTAG.
#include "lets_split.h"
@@ -59,5 +58,3 @@
#endif
#define LAYOUT_ortho_4x12 LAYOUT
-
-#endif
diff --git a/keyboards/lets_split/split_util.c b/keyboards/lets_split/split_util.c
deleted file mode 100644
index 346cbc908..000000000
--- a/keyboards/lets_split/split_util.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/power.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/eeprom.h>
-#include "split_util.h"
-#include "matrix.h"
-#include "keyboard.h"
-#include "config.h"
-#include "timer.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else
-# include "serial.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_I2C
- i2c_master_init();
-#ifdef SSD1306OLED
- matrix_master_OLED_init ();
-#endif
-#else
- serial_master_init();
-#endif
-}
-
-static void keyboard_slave_setup(void) {
- timer_init();
-#ifdef USE_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();
-}
-
-void keyboard_slave_loop(void) {
- matrix_init();
-
- while (1) {
- matrix_slave_scan();
- }
-}
-
-// this code runs before the usb and keyboard is initialized
-void matrix_setup(void) {
- split_keyboard_setup();
-
- if (!has_usb()) {
- keyboard_slave_loop();
- }
-}
diff --git a/keyboards/lets_split/split_util.h b/keyboards/lets_split/split_util.h
deleted file mode 100644
index 595a0659e..000000000
--- a/keyboards/lets_split/split_util.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef SPLIT_KEYBOARD_UTIL_H
-#define SPLIT_KEYBOARD_UTIL_H
-
-#include <stdbool.h>
-#include "eeconfig.h"
-
-#define SLAVE_I2C_ADDRESS 0x32
-
-extern volatile bool isLeftHand;
-
-// slave version of matix scan, defined in matrix.c
-void matrix_slave_scan(void);
-
-void split_keyboard_setup(void);
-bool has_usb(void);
-void keyboard_slave_loop(void);
-
-void matrix_master_OLED_init (void);
-
-#endif
diff --git a/keyboards/lets_split_eh/config.h b/keyboards/lets_split_eh/config.h
index b8fe95ea2..abfee0eac 100644
--- a/keyboards/lets_split_eh/config.h
+++ b/keyboards/lets_split_eh/config.h
@@ -36,6 +36,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+//#define SOFT_SERIAL_PIN D0
+
/* key combination for command */
#define IS_COMMAND() ( \
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
diff --git a/keyboards/lets_split_eh/keymaps/default/config.h b/keyboards/lets_split_eh/keymaps/default/config.h
index a1df337bd..c535299e7 100644
--- a/keyboards/lets_split_eh/keymaps/default/config.h
+++ b/keyboards/lets_split_eh/keymaps/default/config.h
@@ -18,9 +18,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
-#include "../../config.h"
-
-#endif \ No newline at end of file
+ // place overrides here
diff --git a/keyboards/lets_split_eh/keymaps/default/keymap.c b/keyboards/lets_split_eh/keymaps/default/keymap.c
index 8ef973574..1983459f6 100644
--- a/keyboards/lets_split_eh/keymaps/default/keymap.c
+++ b/keyboards/lets_split_eh/keymaps/default/keymap.c
@@ -1,30 +1,19 @@
#include QMK_KEYBOARD_H
-#include "action_layer.h"
-#include "eeconfig.h"
-
-extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
#define _QWERTY 0
-
#define _LOWER 3
#define _RAISE 4
#define _FUNCTION 15
#define _ADJUST 16
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- LOWER,
- RAISE,
- ADJUST
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define FUNCTION MO(_FUNCTION)
+#define ADJUST MO(_ADJUST)
// Defines for task manager and such
#define CALTDEL LCTL(LALT(KC_DEL))
@@ -45,7 +34,7 @@ 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, \
- MO(_FUNCTION), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \
+ FUNCTION, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT, \
OSM(MOD_LSFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT, \
KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
@@ -90,7 +79,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-----------------------------------------------------------------------------------.
* |Taskmg| | | | | | | |RGBVAI|RGBSAI|RGBHUI|caltde|
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | | | | | |Qwerty|RGBVAD|RGBSAD|RGBHUD|RGBTOG|
+ * | | | | | | | | |RGBVAD|RGBSAD|RGBHUD|RGBTOG|
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | | | | | | | | | | |BLSTEP|
* |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -99,7 +88,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_ADJUST] = LAYOUT( \
TSKMGR, _______, _______, _______, _______, _______, _______, _______, RGB_VAI, RGB_SAI, RGB_HUI, CALTDEL, \
- _______, _______, _______, _______, _______, _______, _______, QWERTY, RGB_VAD, RGB_SAD, RGB_HUD, RGB_TOG, \
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_SAD, RGB_HUD, RGB_TOG, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET \
),
@@ -124,47 +113,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_QWERTY);
- }
- return false;
- break;
- case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- break;
- }
return true;
-} \ No newline at end of file
+}
diff --git a/keyboards/lets_split_eh/keymaps/default/rules.mk b/keyboards/lets_split_eh/keymaps/default/rules.mk
index 457a3d01d..e69de29bb 100644
--- a/keyboards/lets_split_eh/keymaps/default/rules.mk
+++ b/keyboards/lets_split_eh/keymaps/default/rules.mk
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/lets_split_eh/keymaps/doxish_dvorak/config.h b/keyboards/lets_split_eh/keymaps/doxish_dvorak/config.h
new file mode 100644
index 000000000..526c0837c
--- /dev/null
+++ b/keyboards/lets_split_eh/keymaps/doxish_dvorak/config.h
@@ -0,0 +1,21 @@
+/*
+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
diff --git a/keyboards/lets_split_eh/keymaps/doxish_dvorak/keymap.c b/keyboards/lets_split_eh/keymaps/doxish_dvorak/keymap.c
new file mode 100644
index 000000000..721312623
--- /dev/null
+++ b/keyboards/lets_split_eh/keymaps/doxish_dvorak/keymap.c
@@ -0,0 +1,159 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _DVORAK 0
+
+#define _LOWER 3
+#define _RAISE 4
+#define _FUNCTION 15
+#define _ADJUST 16
+
+enum custom_keycodes {
+ DVORAK = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST
+};
+
+// Defines for task manager and such
+#define CALTDEL LCTL(LALT(KC_DEL))
+#define TSKMGR LCTL(LSFT(KC_ESC))
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Func | A | S | D | F | G | H | J | K | L | ; | Enter|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / | ' |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | ` | GUI | Alt |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT( \
+ KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, KC_TAB, KC_BSPC, KC_F, KC_G, KC_C, KC_R, KC_L, \
+ KC_A, KC_O, KC_E, KC_U, KC_I, KC_ENT, KC_ENT, KC_D, KC_H, KC_T, KC_N, KC_S, \
+ KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, OSM(MOD_LSFT), OSM(MOD_RSFT), KC_B, KC_M, KC_W, KC_V, KC_Z, \
+ KC_LCTL, KC_LGUI, KC_LALT, OSM(MOD_LSFT), KC_SPC, LOWER, RAISE, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/*[BASE] = LAYOUT(
+ * KC_QUOTE, KC_COMMA, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L,
+ * KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S,
+ * KC_SCOLON, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z,
+ * OSM(MOD_LSFT), OSM(MOD_LCTL), MO(KEYSEL), MO(BROWSER_CONTROL), MO(COMBINED), MO(KEYNAV), KC_ENTER, KC_SPACE, KC_BSPC, RCTL(KC_BSPC), KC_CAPSLOCK, OSM(MOD_LSFT)
+ * ),
+ *KC_GRV,
+ */
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | Mute | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | |Lower | Bksp | Bksp |Raise | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT( \
+ KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, _______, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_MUTE, _______, KC_PIPE, \
+ _______, _______, _______, _______, KC_BSPC, _______, _______, KC_BSPC, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | 4 | 5 | 6 | + | F5 | F6 | - | = | [ | ] |Enter |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |Enter | 7 | 8 | 9 | - | F11 | F12 |ISO # |ISO / | Mute | | \ |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | , | 0 | . |Lower | Bksp | Bksp |Raise | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ _______, KC_4, KC_5, KC_6, KC_PLUS, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, _______, \
+ KC_ENT, KC_7, KC_8, KC_9, KC_MINS, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_MUTE, _______, KC_BSLS, \
+ _______, KC_COMM, KC_0, KC_DOT, _______, KC_BSPC, KC_BSPC, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * |Taskmg| | | | | | | |RGBVAI|RGBSAI|RGBHUI|caltde|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | |Qwerty|RGBVAD|RGBSAD|RGBHUD|RGBTOG|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | |BLSTEP|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | RESET|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT( \
+ TSKMGR, _______, _______, _______, _______, _______, KC_DEL, _______, RGB_VAI, RGB_SAI, RGB_HUI, CALTDEL, \
+ _______, _______, _______, _______, _______, _______, _______, DVORAK, RGB_VAD, RGB_SAD, RGB_HUD, RGB_TOG, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET \
+),
+
+/* Function
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | Up | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | Left | Down |Right | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Caps | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNCTION] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, \
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/lets_split_eh/keymaps/doxish_dvorak/rules.mk b/keyboards/lets_split_eh/keymaps/doxish_dvorak/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/lets_split_eh/keymaps/doxish_dvorak/rules.mk
diff --git a/keyboards/lets_split_eh/keymaps/romus/README.md b/keyboards/lets_split_eh/keymaps/romus/README.md
new file mode 100644
index 000000000..d54ed6856
--- /dev/null
+++ b/keyboards/lets_split_eh/keymaps/romus/README.md
@@ -0,0 +1,7 @@
+# Lets Split Eh Layout
+
+Check out [user readme](../../../../users/romus/README.md) for more info.
+
+# Usage
+
+Fill in after flashing
diff --git a/keyboards/lets_split_eh/keymaps/romus/keymap.c b/keyboards/lets_split_eh/keymaps/romus/keymap.c
new file mode 100644
index 000000000..ba5b75a5c
--- /dev/null
+++ b/keyboards/lets_split_eh/keymaps/romus/keymap.c
@@ -0,0 +1,28 @@
+#include QMK_KEYBOARD_H
+#include "romus.h"
+
+
+void matrix_init_keymap (void) {
+}
+
+uint32_t layer_state_set_keymap(uint32_t state) {
+
+ return state;
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // Main Dvorak layer
+ [_DV] = LAYOUT_letssplit_wrapper(DVORAK),
+ // Turkish and special character overlay
+ [_AL] = LAYOUT_letssplit_wrapper(ALTCHAR),
+ // Gaming layer
+ [_GA] = LAYOUT_letssplit_wrapper(GAME),
+ // Numbers layer
+ [_NU] = LAYOUT_letssplit_wrapper(NUMBERS),
+ // Settings layer
+ [_SE] = LAYOUT_letssplit_wrapper(SETTINGS),
+ // Mouse emulation layer
+ [_MO] = LAYOUT_letssplit_wrapper(MOUSE),
+ // Music layer
+ [_MU] = LAYOUT_letssplit_wrapper(MUSIC),
+};
diff --git a/keyboards/lets_split_eh/keymaps/romus/rules.mk b/keyboards/lets_split_eh/keymaps/romus/rules.mk
new file mode 100644
index 000000000..ad7dd4c47
--- /dev/null
+++ b/keyboards/lets_split_eh/keymaps/romus/rules.mk
@@ -0,0 +1,7 @@
+# Build options
+
+BACKLIGHT_ENABLE = no # Switch LEDs
+MOUSEKEY_ENABLE = yes # Emulates mouse key using keypresses
+RGBLIGHT_ENABLE = yes # LED strips
+TAP_DANCE_ENABLE = yes # Use multi-tap features
+AUDIO_ENABLE = no # Audio stuff
diff --git a/keyboards/lets_split_eh/lets_split_eh.c b/keyboards/lets_split_eh/lets_split_eh.c
index d5a312085..7249f54cf 100644
--- a/keyboards/lets_split_eh/lets_split_eh.c
+++ b/keyboards/lets_split_eh/lets_split_eh.c
@@ -1 +1,16 @@
#include "lets_split_eh.h"
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+
+ {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}},
+ {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}},
+ {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}},
+ {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
+};
+#endif
diff --git a/keyboards/lets_split_eh/rules.mk b/keyboards/lets_split_eh/rules.mk
index dffeb9fa3..99b1ba234 100644
--- a/keyboards/lets_split_eh/rules.mk
+++ b/keyboards/lets_split_eh/rules.mk
@@ -67,4 +67,6 @@ SPLIT_KEYBOARD = 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 = ortho_4x12
+
DEFAULT_FOLDER = lets_split_eh/eh
diff --git a/keyboards/levinson/config.h b/keyboards/levinson/config.h
index 591c656a2..ca0c79e55 100644
--- a/keyboards/levinson/config.h
+++ b/keyboards/levinson/config.h
@@ -1,6 +1,7 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -21,11 +22,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "config_common.h"
-#ifdef SUBPROJECT_rev1
- #include "rev1/config.h"
-#endif
-#ifdef SUBPROJECT_rev2
- #include "rev2/config.h"
-#endif
-
#endif
diff --git a/keyboards/levinson/i2c.c b/keyboards/levinson/i2c.c
deleted file mode 100644
index 084c890c4..000000000
--- a/keyboards/levinson/i2c.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <util/twi.h>
-#include <avr/io.h>
-#include <stdlib.h>
-#include <avr/interrupt.h>
-#include <util/twi.h>
-#include <stdbool.h>
-#include "i2c.h"
-
-#ifdef USE_I2C
-
-// Limits the amount of we wait for any one i2c transaction.
-// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
-// 9 bits, a single transaction will take around 90μs to complete.
-//
-// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
-// poll loop takes at least 8 clock cycles to execute
-#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
-
-#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
-
-volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-static volatile uint8_t slave_buffer_pos;
-static volatile bool slave_has_register_set = false;
-
-// Wait for an i2c operation to finish
-inline static
-void i2c_delay(void) {
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-
- // easier way, but will wait slightly longer
- // _delay_us(100);
-}
-
-// Setup twi to run at 100kHz
-void i2c_master_init(void) {
- // no prescaler
- TWSR = 0;
- // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
- // Check datasheets for more info.
- TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
-}
-
-// Start a transaction with the given i2c slave address. The direction of the
-// transfer is set with I2C_READ and I2C_WRITE.
-// returns: 0 => success
-// 1 => error
-uint8_t i2c_master_start(uint8_t address) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
-
- i2c_delay();
-
- // check that we started successfully
- if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
- return 1;
-
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
- return 1; // slave did not acknowledge
- else
- return 0; // success
-}
-
-
-// Finish the i2c transaction.
-void i2c_master_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-}
-
-// Write one byte to the i2c slave.
-// returns 0 => slave ACK
-// 1 => slave NACK
-uint8_t i2c_master_write(uint8_t data) {
- TWDR = data;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- // check if the slave acknowledged us
- return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
-}
-
-// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
-// if ack=0 the acknowledge bit is not set.
-// returns: byte read from i2c device
-uint8_t i2c_master_read(int ack) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
-
- i2c_delay();
- return TWDR;
-}
-
-void i2c_reset_state(void) {
- TWCR = 0;
-}
-
-void i2c_slave_init(uint8_t address) {
- TWAR = address << 0; // slave i2c address
- // TWEN - twi enable
- // TWEA - enable address acknowledgement
- // TWINT - twi interrupt flag
- // TWIE - enable the twi interrupt
- TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
-}
-
-ISR(TWI_vect);
-
-ISR(TWI_vect) {
- uint8_t ack = 1;
- switch(TW_STATUS) {
- case TW_SR_SLA_ACK:
- // this device has been addressed as a slave receiver
- slave_has_register_set = false;
- break;
-
- case TW_SR_DATA_ACK:
- // this device has received data as a slave receiver
- // The first byte that we receive in this transaction sets the location
- // of the read/write location of the slaves memory that it exposes over
- // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
- // slave_buffer_pos after each write.
- if(!slave_has_register_set) {
- slave_buffer_pos = TWDR;
- // don't acknowledge the master if this memory loctaion is out of bounds
- if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
- ack = 0;
- slave_buffer_pos = 0;
- }
- slave_has_register_set = true;
- } else {
- i2c_slave_buffer[slave_buffer_pos] = TWDR;
- BUFFER_POS_INC();
- }
- break;
-
- case TW_ST_SLA_ACK:
- case TW_ST_DATA_ACK:
- // master has addressed this device as a slave transmitter and is
- // requesting data.
- TWDR = i2c_slave_buffer[slave_buffer_pos];
- BUFFER_POS_INC();
- break;
-
- case TW_BUS_ERROR: // something went wrong, reset twi state
- TWCR = 0;
- default:
- break;
- }
- // Reset everything, so we are ready for the next TWI interrupt
- TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
-}
-#endif
diff --git a/keyboards/levinson/i2c.h b/keyboards/levinson/i2c.h
deleted file mode 100644
index c15b6bc50..000000000
--- a/keyboards/levinson/i2c.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef I2C_H
-#define I2C_H
-
-#include <stdint.h>
-
-#ifndef F_CPU
-#define F_CPU 16000000UL
-#endif
-
-#define I2C_READ 1
-#define I2C_WRITE 0
-
-#define I2C_ACK 1
-#define I2C_NACK 0
-
-#define SLAVE_BUFFER_SIZE 0x10
-
-// i2c SCL clock frequency
-#define SCL_CLOCK 400000L
-
-extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-void i2c_master_init(void);
-uint8_t i2c_master_start(uint8_t address);
-void i2c_master_stop(void);
-uint8_t i2c_master_write(uint8_t data);
-uint8_t i2c_master_read(int);
-void i2c_reset_state(void);
-void i2c_slave_init(uint8_t address);
-
-
-static inline unsigned char i2c_start_read(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_READ);
-}
-
-static inline unsigned char i2c_start_write(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_WRITE);
-}
-
-// from SSD1306 scrips
-extern unsigned char i2c_rep_start(unsigned char addr);
-extern void i2c_start_wait(unsigned char addr);
-extern unsigned char i2c_readAck(void);
-extern unsigned char i2c_readNak(void);
-extern unsigned char i2c_read(unsigned char ack);
-
-#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
-
-#endif
diff --git a/keyboards/levinson/info.json b/keyboards/levinson/info.json
index 4305135a1..2fb8fa9e3 100644
--- a/keyboards/levinson/info.json
+++ b/keyboards/levinson/info.json
@@ -1,7 +1,7 @@
{
"keyboard_name": "Levinson",
- "url": "",
- "maintainer": "qmk",
+ "url": "https://keeb.io",
+ "maintainer": "Keebio",
"width": 13,
"height": 4,
"layouts": {
diff --git a/keyboards/levinson/keymaps/atreus/config.h b/keyboards/levinson/keymaps/atreus/config.h
new file mode 100644
index 000000000..a82c15238
--- /dev/null
+++ b/keyboards/levinson/keymaps/atreus/config.h
@@ -0,0 +1,22 @@
+/*
+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 MASTER_LEFT
diff --git a/keyboards/levinson/keymaps/atreus/keymap.c b/keyboards/levinson/keymaps/atreus/keymap.c
new file mode 100644
index 000000000..61ad04ef7
--- /dev/null
+++ b/keyboards/levinson/keymaps/atreus/keymap.c
@@ -0,0 +1,41 @@
+#include QMK_KEYBOARD_H
+
+#define _QW 0
+#define _RS 1
+#define _LW 2
+
+/*
+ * q w e r t || y u i o p
+ * a s d f g || h j k l ;
+ * z x c v b || n m , . /
+ * esc tab gui shift bksp ctrl || alt space raise - ' enter
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QW] = LAYOUT_ortho_4x12( /* Qwerty */
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_NO, KC_NO, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_NO, KC_NO, KC_H, KC_J, KC_K, KC_L, KC_SCLN ,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_NO, KC_NO, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH ,
+ KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, MO(_RS), KC_MINS, KC_QUOT, KC_ENT ),
+/*
+ * ! @ up { } || pgup 7 8 9 *
+ * # left down right $ || pgdn 4 5 6 +
+ * [ ] ( ) & || ` 1 2 3 \
+ * lower insert super shift bksp ctrl || alt space fn . 0 =
+ */
+[_RS] = LAYOUT_ortho_4x12( /* [> RAISE <] */
+ KC_EXLM, KC_AT, KC_UP, KC_LCBR, KC_RCBR, KC_NO, KC_NO, KC_PGUP, KC_7, KC_8, KC_9, KC_ASTR ,
+ KC_HASH, KC_LEFT, KC_DOWN, KC_RGHT, KC_DLR, KC_NO, KC_NO, KC_PGDN, KC_4, KC_5, KC_6, KC_PLUS ,
+ KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_AMPR, KC_NO, KC_NO, KC_GRV, KC_1, KC_2, KC_3, KC_BSLS ,
+ TG(_LW), KC_INS, KC_LGUI, KC_LSFT, KC_BSPC, KC_LCTL, KC_LALT, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL ),
+/*
+ * insert home up end pgup || up F7 F8 F9 F10
+ * del left down right pgdn || down F4 F5 F6 F11
+ * volup reset || F1 F2 F3 F12
+ * voldn super shift bksp ctrl || alt space L0 prtsc scroll pause
+ */
+[_LW] = LAYOUT_ortho_4x12( /* [> LOWER <] */
+ KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_NO, KC_UP, KC_F7, KC_F8, KC_F9, KC_F10 ,
+ KC_DELT, KC_LEFT, KC_DOWN, KC_RGHT, KC_DOWN, KC_NO, KC_NO, KC_DOWN, KC_F4, KC_F5, KC_F6, KC_F11 ,
+ KC_NO, KC_VOLU, KC_NO, KC_NO, RESET, KC_NO, KC_NO, 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 )
+};
diff --git a/keyboards/levinson/keymaps/atreus/readme.md b/keyboards/levinson/keymaps/atreus/readme.md
new file mode 100644
index 000000000..0b548ace1
--- /dev/null
+++ b/keyboards/levinson/keymaps/atreus/readme.md
@@ -0,0 +1,8 @@
+# Atreus layout port
+
+Port the default Atreus layout to the Levinson/Let's Split.
+
+The purpose is to try out the layout to get a sense of what works in it.
+
+The 'extra' keys on the Levinson are dead in this version, to make a
+more faithful emulation of the atreus layout.
diff --git a/keyboards/levinson/keymaps/bakingpy2u/config.h b/keyboards/levinson/keymaps/bakingpy2u/config.h
index 75753ac2e..1db6ea433 100644
--- a/keyboards/levinson/keymaps/bakingpy2u/config.h
+++ b/keyboards/levinson/keymaps/bakingpy2u/config.h
@@ -1,7 +1,4 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -22,5 +19,3 @@
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-
-#endif
diff --git a/keyboards/levinson/keymaps/bakingpy2u/keymap.c b/keyboards/levinson/keymaps/bakingpy2u/keymap.c
index da46d2a05..219e3468f 100644
--- a/keyboards/levinson/keymaps/bakingpy2u/keymap.c
+++ b/keyboards/levinson/keymaps/bakingpy2u/keymap.c
@@ -1,6 +1,4 @@
-#include "levinson.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
diff --git a/keyboards/levinson/keymaps/bakingpy2u/rules.mk b/keyboards/levinson/keymaps/bakingpy2u/rules.mk
index 22b6ec476..d7463419b 100644
--- a/keyboards/levinson/keymaps/bakingpy2u/rules.mk
+++ b/keyboards/levinson/keymaps/bakingpy2u/rules.mk
@@ -1,6 +1,2 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/levinson/keymaps/default/config.h b/keyboards/levinson/keymaps/default/config.h
index 6b31e8d14..e710d6e4a 100644
--- a/keyboards/levinson/keymaps/default/config.h
+++ b/keyboards/levinson/keymaps/default/config.h
@@ -3,6 +3,7 @@ This is the c configuration file for the keymap
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,10 +19,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_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -33,5 +31,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
-
-#endif
diff --git a/keyboards/levinson/keymaps/default/rules.mk b/keyboards/levinson/keymaps/default/rules.mk
index 457a3d01d..d7463419b 100644
--- a/keyboards/levinson/keymaps/default/rules.mk
+++ b/keyboards/levinson/keymaps/default/rules.mk
@@ -1,3 +1,2 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/levinson/keymaps/drogglbecher/config.h b/keyboards/levinson/keymaps/drogglbecher/config.h
new file mode 100644
index 000000000..ef96ff00b
--- /dev/null
+++ b/keyboards/levinson/keymaps/drogglbecher/config.h
@@ -0,0 +1,17 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include "config_common.h"
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+/* #define USE_I2C */
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+/* #define _MASTER_RIGHT */
+/* #define EE_HANDS */
+
+#endif
diff --git a/keyboards/levinson/keymaps/drogglbecher/keymap.c b/keyboards/levinson/keymaps/drogglbecher/keymap.c
new file mode 100644
index 000000000..b8d2dc594
--- /dev/null
+++ b/keyboards/levinson/keymaps/drogglbecher/keymap.c
@@ -0,0 +1,76 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _FN0 0
+#define _FN1 1
+#define _FN2 2
+
+#define KC_X1 MO(_FN1)
+#define KC_X2 MO(_FN2)
+
+#define KC_LPRN LSFT(KC_9) // (
+#define KC_RPRN LSFT(KC_0) // )
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* ┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+ * │ ESC │ q │ w │ e │ r │ t │ │ y │ u │ i │ o │ p │ BS │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ CTRL │ a │ s │ d │ f │ g │ │ h │ j │ k │ l │ " ' │ RET │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ SHFT │ z │ x │ c │ v │ b │ │ n │ m │ [ { │ ] } │ ; : │ SHFT │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ L1 │ ALT │ L2 │ TAB | SPC │ SPC │ │ SPC │ SPC │ , < │ . > │ - _ │ / ? │
+ * └──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+ */
+
+ [_FN0] = 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_LBRC, KC_RBRC, KC_SCLN, KC_RSFT, \
+ KC_X1, KC_LALT, KC_X2, KC_TAB, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_COMM, KC_DOT, KC_MINS, KC_SLSH \
+ ),
+
+ /* ┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+ * │ │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │ DEL │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ │ ä │ ö │ ü │ ß │ │ │ LEFT │ DOWN │ UP │ RGT │ │ │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ │ Ä │ Ö │ Ü │ € │ │ │ │ │ ( │ ) │ │ │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ | │ │ | SPC │ SPC │ │ SPC │ SPC │ │ │ │ \ | │
+ * └──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+ */
+
+ [_FN1] = LAYOUT_ortho_4x12( \
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ _______, UC(L'ä'), UC(L'ö'), UC(L'ü'), UC(L'ß'), _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, KC_PIPE, \
+ _______, UC(L'Ä'), UC(L'Ö'), UC(L'Ü'), UC(L'€'), _______, _______, _______, KC_LPRN, KC_RPRN, _______, _______, \
+ _______, _______, _______, KC_TAB, KC_SPC, KC_SPC, KC_SPC, KC_SPC, _______, _______, _______, KC_BSLS \
+ ),
+
+ /* ┌──────┬──────┬──────┬──────┬──────┬──────┐ ┌──────┬──────┬──────┬──────┬──────┬──────┐
+ * │ ` │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ ~ │ + │ = │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ │ │ │ │ │ │ │ HOME │ PGDN │ PGUP │ END │ │ │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │
+ * ├──────┼──────┼──────┼──────┼──────┼──────┤ ├──────┼──────┼──────┼──────┼──────┼──────┤
+ * │ │ │ │ │ SPC │ SPC │ │ SPC │ SPC │ │ VOL+ │ VOL- │ MUTE │
+ * └──────┴──────┴──────┴──────┴──────┴──────┘ └──────┴──────┴──────┴──────┴──────┴──────┘
+ */
+
+ [_FN2] = LAYOUT_ortho_4x12( \
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_TILD, KC_PLUS, KC_PEQL, \
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______, \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, _______, _______, _______, KC_SPC, KC_SPC, KC_SPC, KC_SPC, _______, KC_VOLD, KC_VOLU, KC_MUTE \
+ )
+
+};
+
+void matrix_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+};
diff --git a/keyboards/levinson/keymaps/drogglbecher/rules.mk b/keyboards/levinson/keymaps/drogglbecher/rules.mk
new file mode 100644
index 000000000..b223b71ab
--- /dev/null
+++ b/keyboards/levinson/keymaps/drogglbecher/rules.mk
@@ -0,0 +1,10 @@
+AUTO_SHIFT_ENABLE = no
+AUTO_SHIFT_MODIFIERS = no
+RGBLIGHT_ENABLE = no
+BACKLIGHT_ENABLE = no
+UNICODE_ENABLE = yes
+DEFAULT_FOLDER = levinson/rev2
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/levinson/keymaps/jyh/config.h b/keyboards/levinson/keymaps/jyh/config.h
new file mode 100644
index 000000000..d3e598bd0
--- /dev/null
+++ b/keyboards/levinson/keymaps/jyh/config.h
@@ -0,0 +1,29 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+/* Select hand configuration */
+#define MASTER_LEFT
+
+/* Tap Dance timing */
+#define TAPPING_TERM 150
+
+/* Toggling layer requires # taps */
+#define TAPPING_TOGGLE 2
diff --git a/keyboards/levinson/keymaps/jyh/keymap.c b/keyboards/levinson/keymaps/jyh/keymap.c
new file mode 100644
index 000000000..d8cfa7e06
--- /dev/null
+++ b/keyboards/levinson/keymaps/jyh/keymap.c
@@ -0,0 +1,215 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 3 /* Symbols, Media */
+#define _RAISE 4 /* Numbers, Arrows */
+#define _FUNC 5 /* Function Keys */
+#define _NUMS 6 /* Numpad */
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+// Fillers to make layering more clear
+#define KC_ KC_TRNS
+
+// tap toggle numpad on
+#define NUMPAD TT(_NUMS)
+
+// Mod Tap Definitions
+// -------------------
+ // Tap Hold
+ // ------------------
+#define CTL_ESC MT(MOD_LCTL, KC_ESC) // Esc Left Control
+#define SFT_ENT MT(MOD_RSFT, KC_ENT) // Enter Right Shift
+#define CTL_SPC MT(MOD_LCTL, KC_SPC) // Space Left Control
+#define ALT_SPC MT(MOD_LALT, KC_SPC) // Space Left Alt
+#define ALT_BSP MT(MOD_LALT, KC_BSPC) // Bkspace Left Alt
+#define HPR_TAB MT(MOD_HYPR, KC_TAB) // Tab Hyper (Super+Ctrl+Alt+Shift)
+#define HPR_GRV MT(MOD_HYPR, KC_GRV) // ` Hyper
+#define HPR_TIL MT(MOD_HYPR, KC_TILD) // ~ Hyper
+#define MEH_TIL MT(MOD_MEH, KC_GRV) // ` Meh (Ctrl+Alt+Shift)
+#define SFT_MIN MT(MOD_LSFT, KC_MINS) // - Left Shift
+#define NPD_UND LT(_NUMS, KC_UNDS) // _ Layer Numpad
+#define FNC_PIP LT(_FUNC, KC_PIPE) // | Layer Function Keys
+
+#define CTL_DEL MT(MOD_LCTL, KC_DEL) // Del Left Control
+#define CTL_QOT MT(MOD_RCTL, KC_QUOT) // ' Right Control
+#define CTL_BSL MT(MOD_RCTL, KC_BSLS) // \ Right Control
+#define CTL_PIP MT(MOD_RCTL, KC_PIPE) // | Right Control
+
+// Redefine for LAYOUT_kc
+#define KC_CTL_BSL CTL_BSL
+#define KC_CTL_PIP CTL_PIP
+#define KC_CTL_DEL CTL_DEL
+#define KC_HPR_TIL HPR_TIL
+#define KC_HPR_GRV HPR_GRV
+
+
+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 | ; | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B | | N | M | , | . | / | Enter|
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Numpd| Meh | Meta | Alt | Lower| Space| | Space| Raise| Alt | Meta | Hyper| Func |
+ * `-----------------------------------------' `-----------------------------------------'
+ *
+ * with Hold (Emacs-oriented)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Hyper| | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | | | | | | | | | | | Ctrl |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| | | | | | | | | | | | Shift|
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_QWERTY] = LAYOUT_ortho_4x12(
+ HPR_TAB, KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC,
+ CTL_ESC, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, CTL_QOT,
+ SFT_MIN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, SFT_ENT,
+ NUMPAD , KC_MEH , KC_LGUI, KC_LALT, LOWER, CTL_SPC, KC_SPC, RAISE, KC_RALT, KC_RGUI, KC_HYPR, MO(_FUNC)
+ ),
+
+
+/* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Left | Up | Down | Right| ( | | ) | - | = | [ | ] | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | ; | ' | * | , | { | | } | _ | + | . | / | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_RAISE] = LAYOUT_kc_ortho_4x12(
+ HPR_GRV, 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 , ,
+ ,LEFT, UP ,DOWN,RGHT,LPRN, RPRN,MINS, EQL,LBRC,RBRC,CTL_PIP,
+ ,COLN,QUOT,ASTR,COMM,LCBR, RCBR,UNDS,PLUS, , , ,
+ , , , , , , , , , , ,
+ ),
+
+/* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Del | Vol+ | Mute | Play | PgUp | : | | ' | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Vol- | < M | M > | PgDn | ; | | " | | | , | . | / | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_LOWER] = LAYOUT_kc_ortho_4x12(
+ HPR_TIL,EXLM, AT ,HASH,DLR , PERC , CIRC,AMPR,ASTR,LPRN,RPRN, ,
+ CTL_DEL,VOLU,MUTE,MPLY,PGUP, COLN , QUOT,MINS, EQL,LBRC,RBRC,CTL_BSL,
+ ,VOLD,MPRV,MNXT,PGDN, SCLN , DQUO,PIPE,COMM, DOT,SLSH, ,
+ , , , , , , , , , , ,
+ ),
+
+ [_FUNC] = LAYOUT_kc_ortho_4x12(
+// ,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 , F10, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ , F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ , F21, F22, F23, F24, NO , NO , NO , NO , NO , NO , ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , , , , ,
+// `----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_NUMS] = LAYOUT_kc_ortho_4x12(
+// ,----+----+----+----+----+----. ,----+----+----+----+----+----.
+ , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ,SLSH, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,CAPS, INS,HOME,PGUP,LPRN, RPRN, 4 , 5 , 6 ,ASTR, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,NLCK, DEL, END,PGDN,SCLN, COMM, 1 , 2 , 3 ,MINS, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , 0 ,DOT ,EQL ,PLUS,
+// `----+----+----+----+----+----' `----+----+----+----+----+----'
+ ),
+
+ [_ADJUST] = LAYOUT_ortho_4x12(
+// ,-------+--------+--------+--------+--------+--------. ,-------+--------+--------+--------+--------+--------.
+ RESET , XXXXXXX, KC_UP , XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL , \
+// |-------+--------+--------+--------+--------+--------| |-------+--------+--------+--------+--------+--------|
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, BL_TOGG, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
+// |-------+--------+--------+--------+--------+--------| |-------+--------+--------+--------+--------+--------|
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
+// |-------+--------+--------+--------+--------+--------| |-------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+// `-------+--------+--------+--------+--------+--------' `-------+--------+--------+--------+--------+--------,
+ )
+
+/*
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/levinson/keymaps/jyh/readme.md b/keyboards/levinson/keymaps/jyh/readme.md
new file mode 100644
index 000000000..e20424e51
--- /dev/null
+++ b/keyboards/levinson/keymaps/jyh/readme.md
@@ -0,0 +1,32 @@
+# jyh's levinson layout
+
+[Levinson](https://keeb.io/products/levinson-lets-split-w-led-backlight)
+built on rev2 PCBs. A split 4x12 keyboard with LED backlights.
+
+The layout is oriented towards needs for programming, Emacs, XMonad,
+and experience with 60% keyboards with no base layer arrow keys
+(Poker). It makes heavy use of modifiers and layers.
+
+## Layout features
+
+ * Extensive use of _Mod Tap_, e.g.
+ * Tap sends Esc, Hold sends Left Control
+ * Tap sends Enter, Hold sends Right Shift
+ * ... and many more
+ * Hyper and Meh keys
+ * Right modifier keys in place of arrow keys
+ * Arrows are instead available in two alternate locations:
+ * WASD arrows on _Adjust_
+ * Arrow cluster on _Raise_ (inspired by hexwire)
+ * Centered symbol/bracket cluster on _Lower/Raise_
+ * Inspired by hexwire layout
+ * Programming-oriented
+ * Spacebar sends modifier keys on hold (_this is finicky in practice. may shut off completely_)
+ * Control ~~and Alt/Meta~~ on left ~~and right~~ space, respectively
+ * Strict space available on _Function_ and _Numpad_ layers
+ * For Emacs keychords
+ * Extra dedicated layers
+ * Numpad (available with tap toggle)
+ * Function key (F01-24)
+ * Redunant keys where it is convenient to have characters together
+ on one layer
diff --git a/keyboards/levinson/keymaps/jyh/rules.mk b/keyboards/levinson/keymaps/jyh/rules.mk
new file mode 100644
index 000000000..66110cfcc
--- /dev/null
+++ b/keyboards/levinson/keymaps/jyh/rules.mk
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE=yes
diff --git a/keyboards/levinson/keymaps/jyh2/config.h b/keyboards/levinson/keymaps/jyh2/config.h
new file mode 100644
index 000000000..f50674bb8
--- /dev/null
+++ b/keyboards/levinson/keymaps/jyh2/config.h
@@ -0,0 +1,33 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+/* Select hand configuration */
+#define MASTER_LEFT
+
+/* Tap Dance timing */
+#define TAPPING_TERM 150
+
+/* Toggling layer requires # taps */
+#define TAPPING_TOGGLE 3
+
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+
diff --git a/keyboards/levinson/keymaps/jyh2/keymap.c b/keyboards/levinson/keymaps/jyh2/keymap.c
new file mode 100644
index 000000000..4b7442928
--- /dev/null
+++ b/keyboards/levinson/keymaps/jyh2/keymap.c
@@ -0,0 +1,222 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 3 /* Symbols, Media */
+#define _RAISE 4 /* Numbers, Arrows */
+#define _FUNC 5 /* Function Keys */
+#define _NUMS 6 /* Numpad */
+#define _ADJUST 16
+
+/* short layer aliases */
+#define _QW _QWERTY
+#define _LW _LOWER
+#define _RS _RAISE
+#define _NM _NUMS
+#define _AD _ADJUST
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ MKITPNK,
+ DYNAMIC_MACRO_RANGE
+};
+
+#include "dynamic_macro.h"
+
+#define DREC_1 DYN_REC_START1
+#define DREC_2 DYN_REC_START2
+#define DPLAY_1 DYN_MACRO_PLAY1
+#define DPLAY_2 DYN_MACRO_PLAY2
+#define DSTOP DYN_REC_STOP
+
+
+// Mod Tap Definitions
+// -------------------
+ // Tap Hold
+ // ------------------
+#define GUI_GRV MT(MOD_LGUI, KC_GRV) // ` Meta
+#define CTL_ESC MT(MOD_LCTL, KC_ESC) // Esc Left Control
+#define SFT_MIN MT(MOD_LSFT, KC_MINS) // - Left Shift
+#define MEH_LBC MT(MOD_MEH, KC_LBRC) // [ Meh
+#define CTL_BSP MT(MOD_LCTL, KC_BSPC) // Bkspce Left Control
+#define HPR_RBC MT(MOD_HYPR, KC_RBRC) // ] Hyper
+#define SFT_EQL MT(MOD_RSFT, KC_EQL) // = Right Shift
+#define GUI_BSL MT(MOD_RGUI, KC_BSLS) // \ Meta
+
+#define NUM_TAB LT(_NUMS, KC_TAB) // Tab Layer Numpad
+
+#define CTL_DEL MT(MOD_LCTL, KC_DEL) // Del Left Control
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | Q | W | E | R | T | | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | - | Z | X | C | V | B | | N | M | , | . | / | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | [ | Meta | Alt | Lower| Bksp | | Space| Raise| Alt | Meta | ] | Enter|
+ * `-----------------------------------------' `-----------------------------------------'
+ * with Hold (Emacs-oriented)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Meta | | | | | | | | | | | | Meta |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| | | | | | | | | | | | Shift|
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Numpd| Meh | | | | Ctrl | | | | | | Hyper| |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_QW] = LAYOUT_ortho_4x12(
+ GUI_GRV, KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , GUI_BSL,
+ CTL_ESC, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
+ SFT_MIN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, SFT_EQL,
+ NUM_TAB, MEH_LBC, KC_LGUI, KC_LALT, LOWER , CTL_BSP, KC_SPC , RAISE , KC_RALT, KC_RGUI, HPR_RBC, KC_ENT
+ ),
+
+/* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Left | Up | Down | Right| ; | | ' | 4 | 5 | 6 | * | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | { | } | ( | ) | , | | - | 1 | 2 | 3 | / | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | |Adjust| | | | RAISE| . | 0 | + | Enter|
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_RS] = LAYOUT_ortho_4x12(
+ _______, KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______,
+ _______, KC_LEFT, KC_UP , KC_DOWN, KC_RGHT, KC_SCLN, KC_QUOT, KC_4 , KC_5 , KC_6 , KC_ASTR, _______,
+ _______, KC_LCBR, KC_RCBR, KC_LPRN, KC_RPRN, KC_COMM, KC_MINS, KC_1 , KC_2 , KC_3 , KC_SLSH, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_DOT , KC_0 , KC_PLUS, _______
+ ),
+
+/* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Del | Vol+ | Mute | Play | PgUp | Home | | F1 | F2 | F3 | F4 | F5 | F6 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | Vol- | < M | M > | PgDn | End | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | |LOWER | | | |Adjust| | | | Enter|
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_LW] = LAYOUT_ortho_4x12(
+ _______, KC_EXLM, KC_AT , KC_HASH, KC_DLR , KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ CTL_DEL, KC_VOLU, KC_MUTE, KC_MPLY, KC_PGUP, KC_HOME, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 ,
+ _______, KC_VOLD, KC_MPRV, KC_MNXT, KC_PGDN, KC_END , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+/* Numpad
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | PrSc | ScrLk| Pause| | | | 7 | 8 | 9 | 0 | Lock |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | Ins | Home | PgUp | | | | 4 | 5 | 6 | / | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | Del | End | PgDn | | | | 1 | 2 | 3 | * | = |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |NUMPAD| | | | | | | | 0 | . | + | - | Enter|
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_NM] = LAYOUT_ortho_4x12(
+ XXXXXXX, XXXXXXX, KC_PSCR, KC_SLCK, KC_PAUS, XXXXXXX, XXXXXXX, KC_7 , KC_8 , KC_9 , KC_0 , TO(_NM),
+ XXXXXXX, XXXXXXX, KC_INS , KC_HOME, KC_PGUP, XXXXXXX, XXXXXXX, KC_4 , KC_5 , KC_6 , KC_SLSH, XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_DEL , KC_END , KC_PGDN, XXXXXXX, XXXXXXX, KC_1 , KC_2 , KC_3 , KC_ASTR, KC_EQL ,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, KC_0 , KC_DOT , KC_PLUS, KC_MINS, _______
+ ),
+
+/* Adjust
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Reset| | Up | | | Rec1 | | Rec2 | Plain| Snake|Gradnt| | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Caps | Left | Down | Right|MkItPk| Play1| | Play2| RGB | HUE+ | SAT+ | BRI+ | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | Stop1| | Stop2| MODE | HUE- | SAT- | BRI- | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_ortho_4x12(
+ RESET , XXXXXXX, KC_UP , XXXXXXX, XXXXXXX, DREC_1 , DREC_2 , RGB_M_P, RGB_M_SN,RGB_M_G, XXXXXXX, KC_DEL ,
+ KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, MKITPNK, DPLAY_1, DPLAY_2, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DSTOP , DSTOP , RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+void make_it_pink_blue(void) {
+ uint16_t blue_hue = 210;
+ uint16_t pink_hue = 315;
+
+ /* key is pressed */
+ uint16_t hue = rgblight_get_hue();
+ uint8_t sat = rgblight_get_sat();
+ uint8_t val = rgblight_get_val();
+
+ if (hue != blue_hue)
+ rgblight_sethsv(blue_hue, sat, val);
+ else
+ rgblight_sethsv(pink_hue, sat, val);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_dynamic_macro(keycode, record))
+ return false;
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ case MKITPNK:
+ if (record->event.pressed)
+ make_it_pink_blue();
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/levinson/keymaps/jyh2/readme.md b/keyboards/levinson/keymaps/jyh2/readme.md
new file mode 100644
index 000000000..45ca95692
--- /dev/null
+++ b/keyboards/levinson/keymaps/jyh2/readme.md
@@ -0,0 +1,32 @@
+# jyh's levinson layout
+
+[Levinson](https://keeb.io/products/levinson-lets-split-w-led-backlight)
+built on rev2 PCBs. A split 4x12 keyboard with LED backlights.
+
+The layout is oriented towards needs for programming, Emacs, XMonad,
+and experience with 60% keyboards with no base layer arrow keys
+(Poker). It makes heavy use of modifiers and layers. It is influenced
+by good ideas from the Atreus keyboard layout.
+
+## Layout features
+
+ * Extensive use of _Mod Tap_, e.g.
+ * Tap sends Esc, Hold sends Left Control
+ * Tap sends Tab, Hold activates Numpad layer
+ * Tap sends - , Hold sends Shift
+ * ... and many more
+ * Places Tab and Enter on bottom corners, for hitting with palm
+ * Meta is available on top corners, for controlling XMonad
+ * Control on center key, for Emacs (among other things)
+ * Backspace (Control Hold) and Space on center keys
+ * All 60% keys available on base layer, except for numbers
+ * Hyper and Meh keys
+ * Right modifier keys in place of arrow keys
+ * Arrows are instead available in two alternate locations:
+ * WASD arrows on _Adjust_
+ * Arrow cluster on _Raise_ (inspired by hexwire)
+ * Numpad and Numrow on _Raise_ layer. Each is faster in some contexts
+ * Function keys on _Lower_
+ * Dynamic macros from QMK firmware on _Adjust_
+ * Redunant keys where it is convenient to have characters together
+ on one layer
diff --git a/keyboards/levinson/keymaps/jyh2/rules.mk b/keyboards/levinson/keymaps/jyh2/rules.mk
new file mode 100644
index 000000000..fbb3b49d6
--- /dev/null
+++ b/keyboards/levinson/keymaps/jyh2/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE=yes
+BOOTMAGIC_ENABLE=no
diff --git a/keyboards/levinson/keymaps/losinggeneration/rules.mk b/keyboards/levinson/keymaps/losinggeneration/rules.mk
index f3e47b4c2..c8eef2cb3 100644
--- a/keyboards/levinson/keymaps/losinggeneration/rules.mk
+++ b/keyboards/levinson/keymaps/losinggeneration/rules.mk
@@ -10,7 +10,7 @@ COMMAND_ENABLE = no # Commands for debug and configuration
CONSOLE_ENABLE = no # Console for debug(+400)
MIDI_ENABLE = no # MIDI controls
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
ifndef QUANTUM_DIR
include ../../../../Makefile
diff --git a/keyboards/levinson/keymaps/mmacdougall/README.md b/keyboards/levinson/keymaps/mmacdougall/README.md
new file mode 100644
index 000000000..bae8c8a4b
--- /dev/null
+++ b/keyboards/levinson/keymaps/mmacdougall/README.md
@@ -0,0 +1,21 @@
+mmacdougall's Levinson Layout
+============================
+
+Similar to default layout, however RGB & backlight controls are mapped to adjust layer
+
+## Layouts
+
+### Adjust (Lower + Raise)
+
+```
+/* Adjust (Lower + Raise)
+ ,-----------------------------------------------------------------------------------.
+ | | Reset| | | | | | | | | | Del |
+ |------+------+------+------+------+-------------+------+------+------+------+------|
+ | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ |------+------+------+------+------+------|------+------+------+------+------+------|
+ |B Step|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | | |
+ |------+------+------+------+------+------+------+------+------+------+------+------|
+ | | | | | | | | | | | |
+ `-----------------------------------------------------------------------------------'
+```
diff --git a/keyboards/levinson/keymaps/mmacdougall/config.h b/keyboards/levinson/keymaps/mmacdougall/config.h
new file mode 100644
index 000000000..63dd5bc88
--- /dev/null
+++ b/keyboards/levinson/keymaps/mmacdougall/config.h
@@ -0,0 +1,20 @@
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/levinson/keymaps/mmacdougall/keymap.c b/keyboards/levinson/keymaps/mmacdougall/keymap.c
new file mode 100644
index 000000000..dec47a761
--- /dev/null
+++ b/keyboards/levinson/keymaps/mmacdougall/keymap.c
@@ -0,0 +1,201 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |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_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, 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 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |B Step|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ BL_STEP, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/levinson/keymaps/mmacdougall/rules.mk b/keyboards/levinson/keymaps/mmacdougall/rules.mk
new file mode 100644
index 000000000..d7463419b
--- /dev/null
+++ b/keyboards/levinson/keymaps/mmacdougall/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/levinson/keymaps/steno/config.h b/keyboards/levinson/keymaps/steno/config.h
new file mode 100644
index 000000000..9cbc148e4
--- /dev/null
+++ b/keyboards/levinson/keymaps/steno/config.h
@@ -0,0 +1,34 @@
+/*
+Copyright 2017 Danny Nguyen <danny@hexwire.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_I2C
+// #define USE_SERIAL
+
+
+#define FORCE_NKRO //For Steno.
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+
diff --git a/keyboards/levinson/keymaps/steno/keymap.c b/keyboards/levinson/keymaps/steno/keymap.c
new file mode 100644
index 000000000..cd7493467
--- /dev/null
+++ b/keyboards/levinson/keymaps/steno/keymap.c
@@ -0,0 +1,148 @@
+#include QMK_KEYBOARD_H
+#include "keymap_steno.h"
+
+extern keymap_config_t keymap_config;
+
+#define _PLOVER 0
+#define _QWERTY 1
+#define _LOWER 2
+#define _RAISE 3
+#define _ADJUST 4
+
+enum custom_keycodes
+{
+ PLOVER = SAFE_RANGE,
+ QWERTY,
+ LOWER,
+ RAISE,
+ ADJUST,
+ EXT_QWE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] =
+{
+
+ [_PLOVER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ STN_PWR, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ STN_FN, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ STN_N1, STN_N2, STN_N3, STN_N4, STN_N5, STN_N6, STN_N7, STN_N8, STN_N9, STN_NA, STN_NB, STN_NC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼ ┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX, STN_RE1, STN_RE2, XXXXXXX, STN_A, STN_O, STN_E, STN_U, XXXXXXX, XXXXXXX, QWERTY, XXXXXXX
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴ ┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+
+ ),
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RSFT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LGUI, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼ ┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LALT, KC_MINUS, KC_TAB, KC_LCTL, LOWER, KC_SPC, KC_ENT, RAISE, KC_RCTL, KC_RGUI, EXT_QWE, KC_RALT
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴ ┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+
+ ),
+
+ [_LOWER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_7, KC_8, KC_9, KC_PLUS, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_F7, KC_F8, KC_LEFT, KC_UP, KC_RGHT, KC_F9, KC_PSLS, KC_4, KC_5, KC_6, KC_MINUS, KC_MUTE,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, KC_F10, KC_F11, KC_DOWN, KC_F11, KC_F12, KC_PAST, KC_1, KC_2, KC_3, KC_EQL, KC_VOLU,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼ ┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, KC_0, _______, KC_COMM, KC_DOT, KC_ENT, KC_VOLD
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴ ┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+
+ ),
+
+ [_RAISE] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_GRAVE, KC_TILD, KC_UNDS, KC_EQL, KC_PIPE, _______, KC_HOME, KC_DEL, _______, KC_INS, KC_PGUP, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_BSLASH,KC_LCBR, KC_RCBR, KC_MINUS, KC_LBRC, KC_RBRC, KC_END, KC_LEFT, KC_UP, KC_RGHT, KC_PGDN, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_COLN, KC_LT, KC_GT, KC_PLUS, KC_LPRN, KC_RPRN, _______, _______, KC_DOWN, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼ ┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴ ┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, KC_CAPS, KC_MENU, KC_APP, KC_PSCR, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______,_______, _______, _______, KC_PAUS, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, KC_SLCK, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼ ┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴ ┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+
+ ),
+
+
+};
+
+
+void matrix_init_user() {
+ steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case PLOVER:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_PLOVER);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ case QWERTY:
+ if (!record->event.pressed) {
+ layer_on(_QWERTY);
+ }
+ return false;
+ break;
+ case EXT_QWE:
+ if (record->event.pressed) {
+ layer_off(_QWERTY);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/levinson/keymaps/steno/rules.mk b/keyboards/levinson/keymaps/steno/rules.mk
new file mode 100644
index 000000000..9c31e590e
--- /dev/null
+++ b/keyboards/levinson/keymaps/steno/rules.mk
@@ -0,0 +1,7 @@
+EXTRAKEY_ENABLE = no # Disable if you run out of usb endpoints. Media keys need this to work.
+MOUSEKEY_ENABLE = no # Mouse keys(+4700) Uses extra usb enpoints.
+STENO_ENABLE = yes # Additional protocols for Stenography(+1700), requires VIRTSER.
+AUDIO_ENABLE = no # Audio output on port C6
+MIDI_ENABLE = no # MIDI controls
+NKRO_ENABLE = yes
+BOOTMAGIC_ENABLE = yes
diff --git a/keyboards/levinson/keymaps/treadwell/config.h b/keyboards/levinson/keymaps/treadwell/config.h
index e6648db14..69783937b 100644
--- a/keyboards/levinson/keymaps/treadwell/config.h
+++ b/keyboards/levinson/keymaps/treadwell/config.h
@@ -16,6 +16,12 @@
#define TAPPING_TERM 150
+/* default layer sounds */
+#define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(GAME_SOUND), \
+ SONG(COLEMAK_SOUND) \
+ }
+
//#undef RGBLED_NUM
//#define RGBLIGHT_ANIMATIONS
//#define RGBLED_NUM 12
diff --git a/keyboards/levinson/keymaps/treadwell/keymap.c b/keyboards/levinson/keymaps/treadwell/keymap.c
index 10d7d3035..bcc744a6d 100644
--- a/keyboards/levinson/keymaps/treadwell/keymap.c
+++ b/keyboards/levinson/keymaps/treadwell/keymap.c
@@ -1,12 +1,10 @@
-#include "levinson.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
#define _QWERTY 0
#define _COLEMAK 1
-#define _DVORAK 2
+#define _GAME 2
#define _NUMB 3
#define _CODE 4
#define _SYS 5
@@ -16,7 +14,7 @@ extern keymap_config_t keymap_config;
enum custom_keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
- DVORAK,
+ GAME,
NUMB,
CODE,
SYS,
@@ -27,13 +25,9 @@ enum custom_keycodes {
#define KC_ KC_TRNS
#define _______ KC_TRNS
-#define KC_CAPW LGUI(LSFT(KC_3)) // Capture whole screen
-#define KC_CPYW LGUI(LSFT(LCTL(KC_3))) // Copy whole screen
-#define KC_CAPP LGUI(LSFT(KC_4)) // Capture portion of screen
-#define KC_CPYP LGUI(LSFT(LCTL(KC_4))) // Copy portion of screen
#define KC_X1 CODE
#define KC_X2 NUMB
-#define KC_X3 SYS
+#define KC_X3 MO(_SYS)
#define KC_X4 MT(MOD_LSFT, KC_ENT)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -62,25 +56,25 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//`----+----+----+----+----+----' `----+----+----+----+----+----'
),
- [_DVORAK] = LAYOUT_kc(
+ [_GAME] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
- TAB ,QUOT,COMM,DOT , P , Y , F , G , C , R , L ,MINS,
+ TAB , Q , W , E , R , T , Y , U , I , O , P ,MINS,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- BSPC, A , O , E , U , I , D , H , T , N , S ,SLSH,
+ ESC , A , S , D , F , G , H , J , K , L ,SCLN,QUOT,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- LSFT,SCLN, Q , J , K , X , B , M , W , V , Z , X4 ,
+ LSFT, Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, X4 ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- X3 ,LCTL,LALT,LGUI, X1 ,LALT, SPC , X2 ,LEFT,DOWN, UP ,RGHT
+ X3 ,LCTL,LALT,LGUI, X2 , SPC, SPC , X1 ,LEFT,DOWN, UP ,RGHT
//`----+----+----+----+----+----' `----+----+----+----+----+----'
),
[_NUMB] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
- TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN,PMNS,
+ TILD,EXLM, AT ,HASH,DLR ,PERC, CIRC,AMPR,ASTR,LPRN,RPRN, DEL,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
GRV , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,UNDS,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
- , ,MPRV,MPLY,MNXT, , ,VOLD,VOLU,MUTE, , ,
+ , ,MPRV,MNXT,MPLY, , ,VOLD,VOLU,MUTE, , ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
, , , , ,LALT, , , , , ,
//`----+----+----+----+----+----' `----+----+----+----+----+----'
@@ -92,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//|----+------+----+----+----+----| |----+----+----+----+----+----|
CAPS,SELECT,LEFT,DOWN,RGHT,DEL , PGDN, END,LBRC,RBRC,MINS,UNDS,
//|----+------+----+----+----+----| |----+----+----+----+----+----|
- , UNDO ,CUT ,COPY,PASTE, , LEFT,RGHT,LCBR,RCBR,PLUS,PEQL,
+ LSFT, UNDO ,CUT ,COPY,PASTE, , LEFT,RGHT,LCBR,RCBR,PLUS,PEQL,
//|----+------+----+----+----+----| |----+----+----+----+----+----|
, , , , ,LALT, , , , , ,
//`----+------+----+----+----+----' `----+----+----+----+----+----'
@@ -100,10 +94,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_SYS] = LAYOUT_kc(
//,----+----+----+----+----+----. ,----+----+----+----+----+----.
- F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
- //|----+----+----+----+----+----| |----+----+----+----+----+----|
, , , , , , , , , , , ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
+ F12 , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,
+ //|----+----+----+----+----+----| |----+----+----+----+----+----|
, , , , , , , , , , , ,
//|----+----+----+----+----+----| |----+----+----+----+----+----|
, , , , , , , , , , ,
@@ -123,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_ADJUST] = LAYOUT_ortho_4x12( \
_______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, _______, \
- _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, GAME , _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
)
@@ -131,43 +125,23 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-#ifdef AUDIO_ENABLE
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float tone_dvorak[][2] = SONG(DVORAK_SOUND);
-float tone_colemak[][2] = SONG(COLEMAK_SOUND);
-#endif
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_qwerty);
- #endif
- persistent_default_layer_set(1UL<<_QWERTY);
+ set_single_persistent_default_layer(_QWERTY);
}
return false;
break;
case COLEMAK:
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_colemak);
- #endif
- persistent_default_layer_set(1UL<<_COLEMAK);
+ set_single_persistent_default_layer(_COLEMAK);
}
return false;
break;
- case DVORAK:
+ case GAME:
if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_dvorak);
- #endif
- persistent_default_layer_set(1UL<<_DVORAK);
+ set_single_persistent_default_layer(_GAME);
}
return false;
break;
diff --git a/keyboards/levinson/keymaps/treadwell/rules.mk b/keyboards/levinson/keymaps/treadwell/rules.mk
index c5e16f136..1d2d9e5a9 100644
--- a/keyboards/levinson/keymaps/treadwell/rules.mk
+++ b/keyboards/levinson/keymaps/treadwell/rules.mk
@@ -1,6 +1,2 @@
RGBLIGHT_ENABLE = no
BACKLIGHT_ENABLE = no
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/levinson/keymaps/valgrahf/rules.mk b/keyboards/levinson/keymaps/valgrahf/rules.mk
index 0db809fe4..1f54b32c4 100644
--- a/keyboards/levinson/keymaps/valgrahf/rules.mk
+++ b/keyboards/levinson/keymaps/valgrahf/rules.mk
@@ -1,8 +1,3 @@
RGBLIGHT_ENABLE = yes
BACKLIGHT_ENABLE = yes
AUDIO_ENABLE = no
-USE_I2C = no
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/levinson/keymaps/xtonhasvim/config.h b/keyboards/levinson/keymaps/xtonhasvim/config.h
new file mode 100644
index 000000000..bcd2220ce
--- /dev/null
+++ b/keyboards/levinson/keymaps/xtonhasvim/config.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#define USE_SERIAL
+
+// #define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+// #define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// help for fast typist+dual function keys?
+#define PERMISSIVE_HOLD
+
+// where is the cord plugged in?
+#define MASTER_LEFT
diff --git a/keyboards/levinson/keymaps/xtonhasvim/keymap.c b/keyboards/levinson/keymaps/xtonhasvim/keymap.c
new file mode 100644
index 000000000..b9341ff35
--- /dev/null
+++ b/keyboards/levinson/keymaps/xtonhasvim/keymap.c
@@ -0,0 +1,237 @@
+ /* Copyright 2015-2017 Christon DeWan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "xtonhasvim.h"
+#include "fancylighting.h"
+
+/************************************
+ * states
+ ************************************/
+
+enum layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _MOVE,
+ _MOUSE,
+ _CMD
+};
+
+extern uint8_t vim_cmd_layer(void) { return _CMD; }
+
+/************************************
+ * keymaps!
+ ************************************/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Ctrl*| A* | S | D | F | G | H | J | K | L | ;* | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | chkwm| | Alt | GUI |Lower*| Sp|ace |Raise*| SPC | GUI | | Vim |
+ * `-----------------------------------------------------------------------------------'
+ *
+ * - Ctrl acts as Esc when tapped.
+ * - Holding A or ; switches to movement layer.
+ * - Raise and Lower are one-shot layers.
+ */
+[_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, \
+ LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,KC_SCLN), KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT) , \
+ LSFT(KC_LALT), MO(_MOVE), KC_LALT, KC_LGUI, MO(_LOWER), KC_SPC, KC_SPC, MO(_RAISE), KC_RGUI, KC_RALT, MO(_MOVE), VIM_START \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | ! | @ | # | $ | % | ^ | & | * | ( | ) | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Next | Vol- | Vol+ | Play |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Bail | | | | | |Raise | | | Bail | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12( \
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSPC, \
+ KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, X_____X, X_____X, X_____X, X_____X, FIREY_RETURN, \
+ RESET, TO(_QWERTY), _______, _______, _______, _______, _______, MO(_RAISE), _______, _______, TO(_QWERTY), X_____X \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Next | Vol- | Vol+ | Play |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Bail | | |Lower | | | | | | Bail | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12( \
+ KC_GRV, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_DEL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS, \
+ _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, FIREY_RETURN, \
+ X_____X, TO(_QWERTY), _______, _______, MO(_LOWER), _______, _______, _______, _______, _______, TO(_QWERTY), RESET \
+),
+
+
+/* Adjust (Lower + Raise)
+ * ,-------------------------------------------------------------------------------------.
+ * |BL Raise| | | | | | | | | | | |
+ * |--------+------+------+------+------+-------------+------+------+------+------+------|
+ * |BL Lower| | | | | | | | | | | |
+ * |--------+------+------+------+------+------|------+------+------+------+------+------|
+ * |BL STEP | | | | | | | Next | Vol- | Vol+ | Play | |
+ * |--------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Backlite| Bail | | | | | | | | | Bail | |
+ * `-------------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12( \
+ BL_INC, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, RGB_MODE_PLAIN, \
+ BL_DEC, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, RGB_MODE_REVERSE, \
+ BL_STEP, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, RGB_MODE_FORWARD, \
+ BL_TOGG, TO(_MOUSE), _______, _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY), RGB_TOG \
+),
+
+
+/* movement layer (hold semicolon) */
+[_MOVE] = LAYOUT_ortho_4x12( \
+ TO(_QWERTY), X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X, \
+ _______, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, X_____X, \
+ _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______, \
+ _______, _______, _______, _______, _______, X_____X, X_____X, _______, _______, _______, _______, X_____X \
+),
+
+/* mouse layer
+ */
+[_MOUSE] = LAYOUT_ortho_4x12( \
+ TO(_QWERTY), X_____X, X_____X, KC_MS_UP, X_____X, X_____X, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_UP, KC_MS_WH_RIGHT, X_____X, X_____X, \
+ _______, X_____X, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, X_____X, X_____X, KC_MS_BTN1, KC_MS_BTN2, KC_MS_BTN3, X_____X, X_____X, \
+ _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______, \
+ _______, TO(_QWERTY), _______, _______, _______, X_____X, X_____X, _______, _______, _______, TO(_QWERTY), X_____X \
+),
+
+/* vim command layer.
+ */
+[_CMD] = LAYOUT_ortho_4x12( \
+ X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X, \
+ VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X, \
+ VIM_SHIFT, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT, \
+ _______, TO(_QWERTY), _______, _______, X_____X, X_____X, X_____X, X_____X, _______, _______, TO(_QWERTY), X_____X \
+)
+
+};
+
+
+
+#define C_RED 0xFF, 0x00, 0x00
+#define C_GRN 0x00, 0xFF, 0x00
+#define C_BLU 0x00, 0x00, 0xFF
+
+#define C_YAN 0x00, 0xFF, 0xFF
+#define C_PRP 0x7A, 0x00, 0xFF
+#define C_ORG 0xFF, 0x93, 0x00
+
+void rgbflag(uint8_t r, uint8_t g, uint8_t b, uint8_t rr, uint8_t gg, uint8_t bb) {
+ LED_TYPE *target_led = user_rgb_mode ? shadowed_led : led;
+ for (int i = 0; i < RGBLED_NUM; i++) {
+ switch (i) {
+ case 10: case 11:
+ target_led[i].r = r;
+ target_led[i].g = g;
+ target_led[i].b = b;
+ break;
+ case 0: case 1:
+ target_led[i].r = rr;
+ target_led[i].g = gg;
+ target_led[i].b = bb;
+ break;
+ default:
+ target_led[i].r = 0;
+ target_led[i].g = 0;
+ target_led[i].b = 0;
+ break;
+ }
+ }
+ rgblight_set();
+}
+
+void set_state_leds(void) {
+ if (rgblight_get_mode() == 1) {
+ switch (biton32(layer_state)) {
+ case _RAISE:
+ rgbflag(C_BLU, C_GRN);
+ break;
+ case _LOWER:
+ rgbflag(C_BLU, C_RED);
+ break;
+ case _ADJUST:
+ rgbflag(C_BLU, C_PRP);
+ break;
+ case _MOVE:
+ rgbflag(C_RED, C_PRP);
+ break;
+ case _MOUSE:
+ rgbflag(C_RED, C_GRN);
+ break;
+ case _CMD:
+ switch(vstate) {
+ case VIM_V:
+ case VIM_VI:
+ case VIM_VS:
+ rgbflag(C_GRN, C_YAN);
+ break;
+ case VIM_C:
+ case VIM_CI:
+ rgbflag(C_GRN, C_ORG);
+ break;
+ case VIM_D:
+ case VIM_DI:
+ rgbflag(C_GRN, C_RED);
+ break;
+ case VIM_G:
+ rgbflag(C_GRN, C_BLU);
+ break;
+ case VIM_Y:
+ rgbflag(C_GRN, C_PRP);
+ break;
+ case VIM_START:
+ default:
+ rgbflag(C_GRN, C_GRN);
+ break;
+ }
+ break;
+ default: // for any other layers, or the default layer
+ rgbflag(C_YAN, C_YAN);
+ break;
+ }
+ }
+}
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
+}
diff --git a/keyboards/levinson/keymaps/xtonhasvim/readme.md b/keyboards/levinson/keymaps/xtonhasvim/readme.md
new file mode 100644
index 000000000..9ff4ce1f1
--- /dev/null
+++ b/keyboards/levinson/keymaps/xtonhasvim/readme.md
@@ -0,0 +1,9 @@
+# Xton has a tiny keyboard! With Vim!
+
+Based on the standard Planck layout with a few changes:
+
+* Escape moved to dual-function with control.
+* Dedicated movement and mouse layers.
+* Top and middle row swapped in `_RAISE` and `_LOWER` because I never use F-keys.
+* Vim layers! See `users/xtonhasvim`.
+
diff --git a/keyboards/levinson/keymaps/xtonhasvim/rules.mk b/keyboards/levinson/keymaps/xtonhasvim/rules.mk
new file mode 100644
index 000000000..ad5466991
--- /dev/null
+++ b/keyboards/levinson/keymaps/xtonhasvim/rules.mk
@@ -0,0 +1,5 @@
+# MOUSEKEY_ENABLE = yes
+# BACKLIGHT_ENABLE = yes
+# AUDIO_ENABLE = no
+
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
diff --git a/keyboards/levinson/levinson.h b/keyboards/levinson/levinson.h
index 6b18b1a3e..2106bc0e3 100644
--- a/keyboards/levinson/levinson.h
+++ b/keyboards/levinson/levinson.h
@@ -1,5 +1,4 @@
-#ifndef LEVINSON_H
-#define LEVINSON_H
+#pragma once
#include "quantum.h"
@@ -24,5 +23,3 @@
)
#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
-
-#endif
diff --git a/keyboards/levinson/matrix.c b/keyboards/levinson/matrix.c
deleted file mode 100644
index 217264f26..000000000
--- a/keyboards/levinson/matrix.c
+++ /dev/null
@@ -1,484 +0,0 @@
-/*
-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/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "split_util.h"
-#include "pro_micro.h"
-#include "config.h"
-#include "timer.h"
-
-#ifdef BACKLIGHT_ENABLE
- #include "backlight.h"
- extern backlight_config_t backlight_config;
-#endif
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else // USE_SERIAL
-# include "serial.h"
-#endif
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-
-#if (DEBOUNCING_DELAY > 0)
- static uint16_t debouncing_time;
- static bool debouncing = false;
-#endif
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#else
-# error "Currently only supports 8 COLS"
-#endif
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-#define ERROR_DISCONNECT_COUNT 5
-
-#define SERIAL_LED_ADDR 0x00
-
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
-
-static uint8_t error_count = 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];
-
-#if (DIODE_DIRECTION == COL2ROW)
- static void init_cols(void);
- static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
- static void unselect_rows(void);
- static void select_row(uint8_t row);
- static void unselect_row(uint8_t row);
-#elif (DIODE_DIRECTION == ROW2COL)
- static void init_rows(void);
- static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
- static void unselect_cols(void);
- static void unselect_col(uint8_t col);
- static void select_col(uint8_t col);
-#endif
-
-__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;
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-
-}
-
-uint8_t _matrix_scan(void)
-{
- int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
-#if (DIODE_DIRECTION == COL2ROW)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
-
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-
-# else
- read_cols_on_row(matrix+offset, current_row);
-# endif
-
- }
-
-#elif (DIODE_DIRECTION == ROW2COL)
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_rows_on_col(matrix+offset, current_col);
-# endif
-
- }
-#endif
-
-# if (DEBOUNCING_DELAY > 0)
- if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- matrix[i+offset] = matrix_debouncing[i+offset];
- }
- debouncing = false;
- }
-# endif
-
- return 1;
-}
-
-#ifdef USE_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;
-
-#ifdef BACKLIGHT_ENABLE
- // Write backlight level for slave to read
- err = i2c_master_write(backlight_config.enable ? backlight_config.level : 0);
-#else
- // Write zero, so our byte index is the same
- err = i2c_master_write(0x00);
-#endif
- 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(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
-
- if (serial_update_buffers()) {
- return 1;
- }
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_slave_buffer[i];
- }
-
-#ifdef BACKLIGHT_ENABLE
- // Write backlight level for slave to read
- serial_master_buffer[SERIAL_LED_ADDR] = backlight_config.enable ? backlight_config.level : 0;
-#endif
- return 0;
-}
-#endif
-
-uint8_t matrix_scan(void)
-{
- uint8_t ret = _matrix_scan();
-
-#ifdef USE_I2C
- if( i2c_transaction() ) {
-#else // USE_SERIAL
- if( serial_transaction() ) {
-#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_I2C
-#ifdef BACKLIGHT_ENABLE
- // Read backlight level sent from master and update level on slave
- backlight_set(i2c_slave_buffer[0]);
-#endif
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- i2c_slave_buffer[i+1] = matrix[offset+i];
- }
-#else // USE_SERIAL
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_slave_buffer[i] = matrix[offset+i];
- }
-
-#ifdef BACKLIGHT_ENABLE
- // Read backlight level sent from master and update level on slave
- backlight_set(serial_master_buffer[SERIAL_LED_ADDR]);
-#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;
-}
-
-#if (DIODE_DIRECTION == COL2ROW)
-
-static void init_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin = col_pins[col_index];
- uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-static void select_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#elif (DIODE_DIRECTION == ROW2COL)
-
-static void init_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
- {
-
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[row_index];
-
- // Check row pin state
- if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
- {
- // Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-static void select_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#endif
diff --git a/keyboards/levinson/readme.md b/keyboards/levinson/readme.md
index 79e64d332..8cb4ff1cf 100644
--- a/keyboards/levinson/readme.md
+++ b/keyboards/levinson/readme.md
@@ -4,17 +4,25 @@ Levinson
A split 40% split 4x12 ortholinear keyboard made and sold by Keebio. It's essentially a Let's Split with LED backlight support and 2u thumb key support. [More info at Keebio](https://keeb.io).
Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges)
-Hardware Supported: Pro Micro
+Hardware Supported: Pro Micro, Elite-C
Hardware Availability: [Keebio](https://keeb.io)
Make example for this keyboard (after setting up your build environment):
make levinson/rev2:default
-Example of flashing this keyboard:
+Example of flashing this keyboard with Pro micro:
make levinson/rev2:default:avrdude
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+Example of flashing this keyboard with Elite-C:
+
+You'll need to add `BOOTLOADER = atmel-dfu` to your `rules.mk` to ensure that resetting the board works properly.
+
+Hold the reset button on the Elite-C board, or the reset button on the keyboard if already assembled, then release the button and run:
+
+ make levinson/rev2:default:dfu
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
A build guide for this keyboard can be found here: [Levinson Build Guide](https://docs.keeb.io)
diff --git a/keyboards/levinson/rev1/config.h b/keyboards/levinson/rev1/config.h
index ddccbc47a..07ba1e221 100644
--- a/keyboards/levinson/rev1/config.h
+++ b/keyboards/levinson/rev1/config.h
@@ -1,6 +1,7 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,10 +17,9 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef REV1_CONFIG_H
-#define REV1_CONFIG_H
+#pragma once
-#include "../config.h"
+#include QMK_KEYBOARD_CONFIG_H
/* USB Device descriptor parameter */
#define VENDOR_ID 0xCEEB
@@ -38,15 +38,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROW_PINS { D7, E6, B4, B5 }
#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, F4 }
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-#define BACKLIGHT_LEVELS 7
-
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -59,32 +56,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/* Backlight LEDs */
#define BACKLIGHT_PIN B6
#define BACKLIGHT_LEVELS 7
-
-/*
- * 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
-
-
-#endif
diff --git a/keyboards/levinson/rev1/rev1.c b/keyboards/levinson/rev1/rev1.c
index edcfd9357..573fa787b 100644
--- a/keyboards/levinson/rev1/rev1.c
+++ b/keyboards/levinson/rev1/rev1.c
@@ -1,6 +1,5 @@
#include "levinson.h"
-
#ifdef SSD1306OLED
void led_set_kb(uint8_t usb_led) {
// put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
diff --git a/keyboards/levinson/rev1/rev1.h b/keyboards/levinson/rev1/rev1.h
index d24d1d7ad..2120bb0fa 100644
--- a/keyboards/levinson/rev1/rev1.h
+++ b/keyboards/levinson/rev1/rev1.h
@@ -1,7 +1,6 @@
-#ifndef REV2_H
-#define REV2_H
+#pragma once
-#include "../levinson.h"
+#include "levinson.h"
//void promicro_bootloader_jmp(bool program);
#include "quantum.h"
@@ -58,5 +57,3 @@
#endif
#define LAYOUT_ortho_4x12 LAYOUT
-
-#endif
diff --git a/keyboards/levinson/rev2/config.h b/keyboards/levinson/rev2/config.h
index 51ae5cd3c..a731c7195 100644
--- a/keyboards/levinson/rev2/config.h
+++ b/keyboards/levinson/rev2/config.h
@@ -1,6 +1,7 @@
/*
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -16,10 +17,9 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef REV1_CONFIG_H
-#define REV1_CONFIG_H
+#pragma once
-#include "../config.h"
+#include QMK_KEYBOARD_CONFIG_H
/* USB Device descriptor parameter */
#define VENDOR_ID 0xCEEB
@@ -38,15 +38,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define MATRIX_ROW_PINS { D4, D7, E6, B4 }
#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 }
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-#define BACKLIGHT_LEVELS 7
-
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -59,32 +56,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 12 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/* Backlight LEDs */
#define BACKLIGHT_PIN B5
#define BACKLIGHT_LEVELS 7
-
-/*
- * 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
-
-
-#endif
diff --git a/keyboards/levinson/rev2/rev2.h b/keyboards/levinson/rev2/rev2.h
index d24d1d7ad..2120bb0fa 100644
--- a/keyboards/levinson/rev2/rev2.h
+++ b/keyboards/levinson/rev2/rev2.h
@@ -1,7 +1,6 @@
-#ifndef REV2_H
-#define REV2_H
+#pragma once
-#include "../levinson.h"
+#include "levinson.h"
//void promicro_bootloader_jmp(bool program);
#include "quantum.h"
@@ -58,5 +57,3 @@
#endif
#define LAYOUT_ortho_4x12 LAYOUT
-
-#endif
diff --git a/keyboards/levinson/rules.mk b/keyboards/levinson/rules.mk
index 8e67497f4..8f1fa130f 100644
--- a/keyboards/levinson/rules.mk
+++ b/keyboards/levinson/rules.mk
@@ -1,49 +1,7 @@
-SRC += matrix.c \
- i2c.c \
- split_util.c \
- serial.c \
- 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)
@@ -59,19 +17,17 @@ 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
+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 this with audio at the same time.
-SUBPROJECT_rev1 = yes
-USE_I2C = yes
+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
-CUSTOM_MATRIX = yes
+SPLIT_KEYBOARD = yes
LAYOUTS = ortho_4x12
-
DEFAULT_FOLDER = levinson/rev2
diff --git a/keyboards/levinson/serial.c b/keyboards/levinson/serial.c
deleted file mode 100644
index 74bcbb6bf..000000000
--- a/keyboards/levinson/serial.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * WARNING: be careful changing this code, it is very timing dependent
- */
-
-#ifndef F_CPU
-#define F_CPU 16000000
-#endif
-
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <stdbool.h>
-#include "serial.h"
-
-#ifndef USE_I2C
-
-// Serial pulse period in microseconds. Its probably a bad idea to lower this
-// value.
-#define SERIAL_DELAY 24
-
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
-
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
-
-inline static
-void serial_delay(void) {
- _delay_us(SERIAL_DELAY);
-}
-
-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(void) {
- SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-inline static
-uint8_t serial_read_pin(void) {
- return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
-}
-
-inline static
-void serial_low(void) {
- SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
-}
-
-inline static
-void serial_high(void) {
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-void serial_master_init(void) {
- serial_output();
- serial_high();
-}
-
-void serial_slave_init(void) {
- serial_input();
-
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
-}
-
-// Used by the master to synchronize timing with the slave.
-static
-void sync_recv(void) {
- serial_input();
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
- while (!serial_read_pin());
- serial_delay();
-}
-
-// Used by the slave to send a synchronization signal to the master.
-static
-void sync_send(void) {
- serial_output();
-
- serial_low();
- serial_delay();
-
- serial_high();
-}
-
-// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
- serial_input();
- for ( uint8_t i = 0; i < 8; ++i) {
- byte = (byte << 1) | serial_read_pin();
- serial_delay();
- _delay_us(1);
- }
-
- return byte;
-}
-
-// Sends a byte with MSB ordering
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 8;
- serial_output();
- while( b-- ) {
- if(data & (1 << b)) {
- serial_high();
- } else {
- serial_low();
- }
- serial_delay();
- }
-}
-
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- sync_send();
-
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_slave_buffer[i]);
- sync_send();
- checksum += serial_slave_buffer[i];
- }
- serial_write_byte(checksum);
- sync_send();
-
- // wait for the sync to finish sending
- serial_delay();
-
- // read the middle of pulses
- _delay_us(SERIAL_DELAY/2);
-
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_master_buffer[i] = serial_read_byte();
- sync_send();
- checksum_computed += serial_master_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_send();
-
- serial_input(); // end transaction
-
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
- } else {
- status &= ~SLAVE_DATA_CORRUPT;
- }
-}
-
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
-}
-
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
-//
-// Returns:
-// 0 => no error
-// 1 => slave did not respond
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
- cli();
-
- // signal to the slave that we want to start a transaction
- serial_output();
- serial_low();
- _delay_us(1);
-
- // wait for the slaves response
- serial_input();
- serial_high();
- _delay_us(SERIAL_DELAY);
-
- // check if the slave is present
- if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
- sei();
- return 1;
- }
-
- // if the slave is present syncronize with it
- sync_recv();
-
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_slave_buffer[i] = serial_read_byte();
- sync_recv();
- checksum_computed += serial_slave_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_recv();
-
- if (checksum_computed != checksum_received) {
- sei();
- return 1;
- }
-
- uint8_t checksum = 0;
- // send data to the slave
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_master_buffer[i]);
- sync_recv();
- checksum += serial_master_buffer[i];
- }
- serial_write_byte(checksum);
- sync_recv();
-
- // always, release the line when not in use
- serial_output();
- serial_high();
-
- sei();
- return 0;
-}
-
-#endif
diff --git a/keyboards/levinson/serial.h b/keyboards/levinson/serial.h
deleted file mode 100644
index 15fe4db7b..000000000
--- a/keyboards/levinson/serial.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef MY_SERIAL_H
-#define MY_SERIAL_H
-
-#include "config.h"
-#include <stdbool.h>
-
-/* TODO: some defines for interrupt setup */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
-
-// Buffers for master - slave communication
-extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
-extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
-
-void serial_master_init(void);
-void serial_slave_init(void);
-int serial_update_buffers(void);
-bool serial_slave_data_corrupt(void);
-
-#endif
diff --git a/keyboards/levinson/split_util.c b/keyboards/levinson/split_util.c
deleted file mode 100644
index 7f200e6c9..000000000
--- a/keyboards/levinson/split_util.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/power.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/eeprom.h>
-#include "split_util.h"
-#include "matrix.h"
-#include "keyboard.h"
-#include "config.h"
-#include "timer.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else
-# include "serial.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_I2C
- i2c_master_init();
-#ifdef SSD1306OLED
- matrix_master_OLED_init();
-#endif
-#else
- serial_master_init();
-#endif
-}
-
-static void keyboard_slave_setup(void) {
- timer_init();
-#ifdef USE_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();
-}
-
-void keyboard_slave_loop(void) {
- matrix_init();
-
- while (1) {
- matrix_slave_scan();
- }
-}
-
-// this code runs before the usb and keyboard is initialized
-void matrix_setup(void) {
- split_keyboard_setup();
-
- if (!has_usb()) {
- keyboard_slave_loop();
- }
-}
diff --git a/keyboards/levinson/split_util.h b/keyboards/levinson/split_util.h
deleted file mode 100644
index 595a0659e..000000000
--- a/keyboards/levinson/split_util.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef SPLIT_KEYBOARD_UTIL_H
-#define SPLIT_KEYBOARD_UTIL_H
-
-#include <stdbool.h>
-#include "eeconfig.h"
-
-#define SLAVE_I2C_ADDRESS 0x32
-
-extern volatile bool isLeftHand;
-
-// slave version of matix scan, defined in matrix.c
-void matrix_slave_scan(void);
-
-void split_keyboard_setup(void);
-bool has_usb(void);
-void keyboard_slave_loop(void);
-
-void matrix_master_OLED_init (void);
-
-#endif
diff --git a/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.h b/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.h
index 9f22efba9..53860ea2b 100644
--- a/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.h
+++ b/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.h
@@ -23,6 +23,9 @@
void reset_keyboard_kb(void);
+// readability
+#define ___ KC_NO
+
/* All Keymap - contains every possible switch
* ,-------------------------------------------------------------------------------.
* | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F | 1G |
@@ -41,15 +44,15 @@ void reset_keyboard_kb(void);
#define LAYOUT_all( \
k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G, \
k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, k2F, k2G, \
- k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, K3D, k3F, k3G, \
+ k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3F, k3G, \
k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4F, k4G, \
k51, k52, k53, k57, k5B, k5C, k5D, k5E, k3E, k4E \
) { \
- {k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G}, \
- {k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, KC_NO, k2F, k2G}, \
- {k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, k3G}, \
- {k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G}, \
- {k51, k52, k53, KC_NO, KC_NO, KC_NO, k57, KC_NO, KC_NO, KC_NO, k5B, k5C, k5D, k5E, KC_NO, KC_NO} \
+ { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, k1E, k1F, k1G }, \
+ { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, ___, k2F, k2G }, \
+ { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, k3D, k3E, k3F, k3G }, \
+ { k41, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G }, \
+ { k51, k52, k53, ___, ___, ___, k57, ___, ___, ___, k5B, k5C, k5D, k5E, ___, ___ } \
}
/* ANSI Keymap
@@ -72,11 +75,11 @@ void reset_keyboard_kb(void);
k41, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4F, k4G, \
k51, k52, k53, k57, k5B, k5C, k5D, k5E, k3E, k4E \
) { \
- {k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, KC_NO, k1F, k1G}, \
- {k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, KC_NO, k2F, k2G}, \
- {k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, KC_NO, k3E, k3F, k3G}, \
- {k41, KC_NO, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G}, \
- {k51, k52, k53, KC_NO, KC_NO, KC_NO, k57, KC_NO, KC_NO, KC_NO, k5B, k5C, k5D, k5E, KC_NO, KC_NO} \
+ { k11, k12, k13, k14, k15, k16, k17, k18, k19, k1A, k1B, k1C, k1D, ___, k1F, k1G }, \
+ { k21, k22, k23, k24, k25, k26, k27, k28, k29, k2A, k2B, k2C, k2D, ___, k2F, k2G }, \
+ { k31, k32, k33, k34, k35, k36, k37, k38, k39, k3A, k3B, k3C, ___, k3E, k3F, k3G }, \
+ { k41, ___, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4D, k4E, k4F, k4G }, \
+ { k51, k52, k53, ___, ___, ___, k57, ___, ___, ___, k5B, k5C, k5D, k5E, ___, ___ } \
}
#endif //LFK65_HS_H
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk
index 394c58b37..98e3d5a78 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk
+++ b/keyboards/lfkeyboards/lfk78/keymaps/ca178858/rules.mk
@@ -23,19 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be di
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-ifeq ($(strip $(ISSI_ENABLE)), yes)
- TMK_COMMON_DEFS += -DISSI_ENABLE
-endif
-
-ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
- TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
-endif
-
-
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
# #
# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk
index 20030f17d..1477c3ac7 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk
+++ b/keyboards/lfkeyboards/lfk78/keymaps/default/rules.mk
@@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no
@@ -23,21 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install thi
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
CAPSLOCK_LED = no # Toggle back light LED of Caps Lock
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-ifeq ($(strip $(ISSI_ENABLE)), yes)
- TMK_COMMON_DEFS += -DISSI_ENABLE
-endif
-
-ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
- TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
-endif
-
-ifeq ($(strip $(CAPSLOCK_LED)), yes)
- TMK_COMMON_DEFS += -DCAPSLOCK_LED
-endif
# Override the LFK78 hardware version:
#
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk
index ab20ac0db..3cfc994cb 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk
+++ b/keyboards/lfkeyboards/lfk78/keymaps/iso/rules.mk
@@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no
@@ -23,18 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this mu
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-ifeq ($(strip $(ISSI_ENABLE)), yes)
- TMK_COMMON_DEFS += -DISSI_ENABLE
-endif
-
-ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
- TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
-endif
-
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
# #
diff --git a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk b/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk
index 20030f17d..f789b6866 100644
--- a/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk
+++ b/keyboards/lfkeyboards/lfk78/keymaps/split_bs_osx/rules.mk
@@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no
@@ -23,22 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install thi
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
CAPSLOCK_LED = no # Toggle back light LED of Caps Lock
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-ifeq ($(strip $(ISSI_ENABLE)), yes)
- TMK_COMMON_DEFS += -DISSI_ENABLE
-endif
-
-ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
- TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
-endif
-
-ifeq ($(strip $(CAPSLOCK_LED)), yes)
- TMK_COMMON_DEFS += -DCAPSLOCK_LED
-endif
-
# Override the LFK78 hardware version:
#
# B - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
diff --git a/keyboards/lfkeyboards/lfk78/lfk78.c b/keyboards/lfkeyboards/lfk78/lfk78.c
index e02739e4f..60b7ab4ce 100644
--- a/keyboards/lfkeyboards/lfk78/lfk78.c
+++ b/keyboards/lfkeyboards/lfk78/lfk78.c
@@ -13,6 +13,15 @@ uint16_t click_hz = CLICK_HZ;
uint16_t click_time = CLICK_MS;
uint8_t click_toggle = CLICK_ENABLED;
+__attribute__((weak))
+const Layer_Info layer_info[] = {
+ // Layer Mask Red Green Blue
+ {0x00000000, 0xFFFFFFFF, {0x0000, 0x0FFF, 0x0000}}, // base layer - green
+ {0x00000002, 0xFFFFFFFE, {0x0000, 0x0000, 0x0FFF}}, // function layer - blue
+ {0x00000004, 0xFFFFFFFC, {0x0FFF, 0x0000, 0x0FFF}}, // settings layer - magenta
+ {0xFFFFFFFF, 0xFFFFFFFF, {0x0FFF, 0x0FFF, 0x0FFF}}, // unknown layer - REQUIRED - white
+};
+
void matrix_init_kb(void)
{
matrix_init_user();
diff --git a/keyboards/lfkeyboards/lfk78/rules.mk b/keyboards/lfkeyboards/lfk78/rules.mk
index 091cd7755..cc314c97a 100644
--- a/keyboards/lfkeyboards/lfk78/rules.mk
+++ b/keyboards/lfkeyboards/lfk78/rules.mk
@@ -32,3 +32,52 @@ F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+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 = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = no
+
+ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
+WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
+CAPSLOCK_LED = no # Toggle back light LED of Caps Lock
+
+
+ifeq ($(strip $(ISSI_ENABLE)), yes)
+ TMK_COMMON_DEFS += -DISSI_ENABLE
+endif
+
+ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
+ TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
+endif
+
+ifeq ($(strip $(CAPSLOCK_LED)), yes)
+ TMK_COMMON_DEFS += -DCAPSLOCK_LED
+endif
+
+# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
+# #
+# # RevB - first public release, uses atmega32u4, has audio, ISSI matrix split between RGB and backlight
+# # RevC/D - at90usb1286, no audio, ISSI device 0 is backlight, 4 is RGB
+# #
+# # Set to B, C or D
+# LFK_REV = D
+
+# ifeq ($(LFK_REV), B)
+# MCU = atmega32u4
+# else
+# MCU = at90usb1286
+# endif
+# OPT_DEFS += -DLFK_REV_$(LFK_REV)
+# OPT_DEFS += -DUSB_PRODUCT=\"LFK_Rev$(LFK_REV)\"
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk
index 9819cdbee..f28ec80ea 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk
+++ b/keyboards/lfkeyboards/lfk87/keymaps/ca178858/rules.mk
@@ -23,17 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be di
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-ifeq ($(strip $(ISSI_ENABLE)), yes)
- TMK_COMMON_DEFS += -DISSI_ENABLE
-endif
-
-ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
- TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
-endif
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/default/rules.mk b/keyboards/lfkeyboards/lfk87/keymaps/default/rules.mk
index c1f1070fd..c079c264e 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/default/rules.mk
+++ b/keyboards/lfkeyboards/lfk87/keymaps/default/rules.mk
@@ -23,17 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be di
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-ifeq ($(strip $(ISSI_ENABLE)), yes)
- TMK_COMMON_DEFS += -DISSI_ENABLE
-endif
-
-ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
- TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
-endif
# Override the LFK87 hardware version.
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/gbchk/rules.mk b/keyboards/lfkeyboards/lfk87/keymaps/gbchk/rules.mk
index c1f1070fd..f7b39455b 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/gbchk/rules.mk
+++ b/keyboards/lfkeyboards/lfk87/keymaps/gbchk/rules.mk
@@ -23,19 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be di
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-ifeq ($(strip $(ISSI_ENABLE)), yes)
- TMK_COMMON_DEFS += -DISSI_ENABLE
-endif
-
-ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
- TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
-endif
-
-
# Override the LFK87 hardware version.
#
# A - Green PCB. at90usb1286 Only 3 exist
diff --git a/keyboards/lfkeyboards/lfk87/keymaps/iso/rules.mk b/keyboards/lfkeyboards/lfk87/keymaps/iso/rules.mk
index 68e200a5d..7823dea78 100644
--- a/keyboards/lfkeyboards/lfk87/keymaps/iso/rules.mk
+++ b/keyboards/lfkeyboards/lfk87/keymaps/iso/rules.mk
@@ -23,17 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install thi
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-ifeq ($(strip $(ISSI_ENABLE)), yes)
- TMK_COMMON_DEFS += -DISSI_ENABLE
-endif
-
-ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
- TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
-endif
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
diff --git a/keyboards/lfkeyboards/lfk87/lfk87.c b/keyboards/lfkeyboards/lfk87/lfk87.c
index e9f184e36..4b34fcef7 100644
--- a/keyboards/lfkeyboards/lfk87/lfk87.c
+++ b/keyboards/lfkeyboards/lfk87/lfk87.c
@@ -14,6 +14,15 @@ uint16_t click_hz = CLICK_HZ;
uint16_t click_time = CLICK_MS;
uint8_t click_toggle = CLICK_ENABLED;
+__attribute__((weak))
+const Layer_Info layer_info[] = {
+ // Layer Mask Red Green Blue
+ {0x00000000, 0xFFFFFFFF, {0x00, 0xFF, 0x00}}, // base layers - green
+ {0x00000002, 0xFFFFFFFE, {0x00, 0x00, 0xFF}}, // function layer - blue
+ {0x00000004, 0xFFFFFFFC, {0xFF, 0x00, 0xFF}}, // settings layer - magenta
+ {0xFFFFFFFF, 0xFFFFFFFF, {0xFF, 0xFF, 0xFF}}, // unknown layer - REQUIRED - white
+};
+
void matrix_init_kb(void)
{
// put your keyboard start-up code here
diff --git a/keyboards/lfkeyboards/lfk87/rules.mk b/keyboards/lfkeyboards/lfk87/rules.mk
index 19b41de09..c10f47306 100644
--- a/keyboards/lfkeyboards/lfk87/rules.mk
+++ b/keyboards/lfkeyboards/lfk87/rules.mk
@@ -31,3 +31,37 @@ F_USB = $(F_CPU)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
LAYOUTS = tkl_ansi tkl_iso
+
+# 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 = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable RGB underlight
+RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not WS2812
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = no
+
+ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
+WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
+
+
+
+ifeq ($(strip $(ISSI_ENABLE)), yes)
+ OPT_DEFS += -DISSI_ENABLE
+endif
+
+ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
+ OPT_DEFS += -DWATCHDOG_ENABLE
+endif
diff --git a/keyboards/lfkeyboards/lfkpad/keymaps/default/rules.mk b/keyboards/lfkeyboards/lfkpad/keymaps/default/rules.mk
index d2ddd1578..cc21b32dc 100644
--- a/keyboards/lfkeyboards/lfkpad/keymaps/default/rules.mk
+++ b/keyboards/lfkeyboards/lfkpad/keymaps/default/rules.mk
@@ -14,7 +14,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no
@@ -23,17 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this mu
WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
-ifeq ($(strip $(ISSI_ENABLE)), yes)
- TMK_COMMON_DEFS += -DISSI_ENABLE
-endif
-
-ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
- TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
-endif
# # Set the LFK78 hardware version. This is defined in rules.mk, but can be overidden here if desired
diff --git a/keyboards/lfkeyboards/lfkpad/rules.mk b/keyboards/lfkeyboards/lfkpad/rules.mk
index e28e398cc..83553f64c 100644
--- a/keyboards/lfkeyboards/lfkpad/rules.mk
+++ b/keyboards/lfkeyboards/lfkpad/rules.mk
@@ -11,3 +11,31 @@ ARCH = AVR8
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
LAYOUTS = numpad_6x4
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+RGBLIGHT_CUSTOM_DRIVER = yes # RGB code is implemented in lefkeyboards, not qmk base
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = no
+
+ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be disabled
+WATCHDOG_ENABLE = no # Resets keyboard if matrix_scan isn't run every 250ms
+
+
+ifeq ($(strip $(ISSI_ENABLE)), yes)
+ TMK_COMMON_DEFS += -DISSI_ENABLE
+endif
+
+ifeq ($(strip $(WATCHDOG_ENABLE)), yes)
+ TMK_COMMON_DEFS += -DWATCHDOG_ENABLE
+endif
diff --git a/keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk b/keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk
index 16452df67..2c6035d58 100644
--- a/keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk
+++ b/keyboards/lfkeyboards/mini1800/keymaps/ca178858/rules.mk
@@ -23,9 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be di
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
diff --git a/keyboards/lfkeyboards/mini1800/keymaps/default/rules.mk b/keyboards/lfkeyboards/mini1800/keymaps/default/rules.mk
index d6e35e353..1598173f3 100644
--- a/keyboards/lfkeyboards/mini1800/keymaps/default/rules.mk
+++ b/keyboards/lfkeyboards/mini1800/keymaps/default/rules.mk
@@ -23,10 +23,6 @@ ISSI_ENABLE = yes # If the I2C pullup resistors aren't install this must be di
WATCHDOG_ENABLE = yes # Resets keyboard if matrix_scan isn't run every 250ms
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
-
ifeq ($(strip $(ISSI_ENABLE)), yes)
TMK_COMMON_DEFS += -DISSI_ENABLE
endif
diff --git a/keyboards/lfkeyboards/mini1800/mini1800.c b/keyboards/lfkeyboards/mini1800/mini1800.c
index f0692d46c..d5f4193c1 100644
--- a/keyboards/lfkeyboards/mini1800/mini1800.c
+++ b/keyboards/lfkeyboards/mini1800/mini1800.c
@@ -17,6 +17,16 @@ uint16_t click_time = CLICK_MS;
uint8_t click_toggle = CLICK_ENABLED;
float my_song[][2] = SONG(ZELDA_PUZZLE);
+// Colors of the layer indicator LED
+// This list needs to define layer 0xFFFFFFFF, it is the end of the list, and the unknown layer
+__attribute__((weak))
+const Layer_Info layer_info[] = {
+ // Layer Mask Red Green Blue
+ {0x00000000, 0xFFFFFFFF, {0x00, 0xFF, 0x00}}, // base layers - green
+ {0x00000002, 0xFFFFFFFE, {0x00, 0x00, 0xFF}}, // function layer - blue
+ {0x00000004, 0xFFFFFFFC, {0xFF, 0x00, 0xFF}}, // settings layer - magenta
+ {0xFFFFFFFF, 0xFFFFFFFF, {0xFF, 0xFF, 0xFF}}, // unknown layer - REQUIRED - white
+};
void matrix_init_kb(void)
{
diff --git a/keyboards/lily58/config.h b/keyboards/lily58/config.h
new file mode 100644
index 000000000..db4844c91
--- /dev/null
+++ b/keyboards/lily58/config.h
@@ -0,0 +1,21 @@
+/*
+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 "serial_config.h" \ No newline at end of file
diff --git a/keyboards/ergotravel/i2c.c b/keyboards/lily58/i2c.c
index 084c890c4..084c890c4 100644
--- a/keyboards/ergotravel/i2c.c
+++ b/keyboards/lily58/i2c.c
diff --git a/keyboards/fourier/i2c.h b/keyboards/lily58/i2c.h
index c15b6bc50..c15b6bc50 100644
--- a/keyboards/fourier/i2c.h
+++ b/keyboards/lily58/i2c.h
diff --git a/keyboards/lily58/keymaps/default/config.h b/keyboards/lily58/keymaps/default/config.h
new file mode 100644
index 000000000..fd0978559
--- /dev/null
+++ b/keyboards/lily58/keymaps/default/config.h
@@ -0,0 +1,39 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+// Underglow
+/*
+#undef RGBLED_NUM
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_SLEEP
+*/ \ No newline at end of file
diff --git a/keyboards/lily58/keymaps/default/keymap.c b/keyboards/lily58/keymaps/default/keymap.c
new file mode 100644
index 000000000..8d7705812
--- /dev/null
+++ b/keyboards/lily58/keymaps/default/keymap.c
@@ -0,0 +1,147 @@
+#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,
+ RAISE,
+ ADJUST,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |LCTRL | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
+ * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LAlt | LGUI |LOWER | /Space / \Enter \ |RAISE |BackSP| RGUI |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+
+ [_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_GRV, \
+ 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_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LALT, KC_LGUI,LOWER, KC_SPC, KC_ENT, RAISE, KC_BSPC, KC_RGUI \
+),
+/* LOWER
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ` | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | - |
+ * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | _ | + | { | } | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LAlt | LGUI |LOWER | /Space / \Enter \ |RAISE |BackSP| RGUI |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+[_LOWER] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, _______, _______,\
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TILD, \
+ _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, _______, _______, _______, _______, _______, _______, _______\
+),
+/* RAISE
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | F1 | F2 | F3 | F4 | F5 | F6 |-------. ,-------| | Left | Down | Up |Right | |
+ * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
+ * | F7 | F8 | F9 | F10 | F11 | F12 |-------| |-------| + | - | = | [ | ] | \ |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LAlt | LGUI |LOWER | /Space / \Enter \ |RAISE |BackSP| RGUI |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+
+[_RAISE] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, \
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PLUS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, _______, _______, _______, _______, _______, _______, _______ \
+),
+/* ADJUST
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | |-------. ,-------| | | | | | |
+ * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | | | | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * | LAlt | LGUI |LOWER | /Space / \Enter \ |RAISE |BackSP| RGUI |
+ * | | | |/ / \ \ | | | |
+ * `----------------------------' '------''--------------------'
+ */
+ [_ADJUST] = LAYOUT( \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+ _______, _______, _______, _______, _______, _______, _______, _______ \
+ )
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/lily58/keymaps/default/rules.mk b/keyboards/lily58/keymaps/default/rules.mk
new file mode 100644
index 000000000..3d2d3c9e0
--- /dev/null
+++ b/keyboards/lily58/keymaps/default/rules.mk
@@ -0,0 +1,21 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+
+RGBLIGHT_ENABLE = no
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+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
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+ONEHAND_ENABLE = no # Enable one-hand typing
+# 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/lily58/keymaps/yuchi/config.h b/keyboards/lily58/keymaps/yuchi/config.h
new file mode 100644
index 000000000..fd0978559
--- /dev/null
+++ b/keyboards/lily58/keymaps/yuchi/config.h
@@ -0,0 +1,39 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+// Underglow
+/*
+#undef RGBLED_NUM
+#define RGBLED_NUM 14 // Number of LEDs
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_SLEEP
+*/ \ No newline at end of file
diff --git a/keyboards/lily58/keymaps/yuchi/keymap.c b/keyboards/lily58/keymaps/yuchi/keymap.c
new file mode 100644
index 000000000..d708dbec7
--- /dev/null
+++ b/keyboards/lily58/keymaps/yuchi/keymap.c
@@ -0,0 +1,148 @@
+#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,
+ RAISE,
+ ADJUST,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ~ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |LCTRL | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
+ * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift|
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE |
+ * | | | |/ / \ \ | | | |
+ * `-------------------''-------' '------''--------------------'
+ */
+
+ [_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_GRV, \
+ 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_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ LOWER,KC_LGUI, KC_LALT, KC_SPC, KC_ENT, KC_BSPC, KC_RGUI, RAISE \
+),
+/* LOWER
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | - |
+ * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | _ | + | { | } | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE |
+ * | | | |/ / \ \ | | | |
+ * `-------------------''-------' '------''--------------------'
+ */
+[_LOWER] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______,_______, _______, _______,\
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TILD, \
+ _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, _______, _______, _______, _______, _______, _______, _______\
+),
+/* RAISE
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | F1 | F2 | F3 | F4 | F5 | F6 |-------. ,-------| | Left | Down | Up |Right | |
+ * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------|
+ * | F7 | F8 | F9 | F10 | F11 | F12 |-------| |-------| + | - | = | [ | ] | \ |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE |
+ * | | | |/ / \ \ | | | |
+ * `-------------------''-------' '------''--------------------'
+ */
+
+[_RAISE] = LAYOUT( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, \
+ KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PLUS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, _______, _______, _______, _______, _______, _______, _______ \
+),
+
+/* ADJUST
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | |-------. ,-------| | | | | | |
+ * |------+------+------+------+------+------| | | |------+------+------+------+------+------|
+ * | | | | | | |-------| |-------| | | | | | |
+ * `-----------------------------------------/ / \ \-----------------------------------------'
+ * |LOWER | LGUI | Alt | /Space / \Enter \ |BackSP| RGUI |RAISE |
+ * | | | |/ / \ \ | | | |
+ * `-------------------''-------' '------''--------------------'
+ */
+ [_ADJUST] = LAYOUT( \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,\
+ _______, _______, _______, _______, _______, _______, _______, _______ \
+ )
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/lily58/keymaps/yuchi/rules.mk b/keyboards/lily58/keymaps/yuchi/rules.mk
new file mode 100644
index 000000000..73777a1b7
--- /dev/null
+++ b/keyboards/lily58/keymaps/yuchi/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
+#
+
+OLED_ENABLE = no
+RGBLIGHT_ENABLE = no
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+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
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+ONEHAND_ENABLE = no # Enable one-hand typing
+# 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/lily58/lily58.c b/keyboards/lily58/lily58.c
new file mode 100644
index 000000000..697e3820c
--- /dev/null
+++ b/keyboards/lily58/lily58.c
@@ -0,0 +1 @@
+ #include "lily58.h"
diff --git a/keyboards/lily58/lily58.h b/keyboards/lily58/lily58.h
new file mode 100644
index 000000000..1d64dd7b2
--- /dev/null
+++ b/keyboards/lily58/lily58.h
@@ -0,0 +1,28 @@
+#ifndef LILY58_H
+#define LILY58_H
+
+#include "quantum.h"
+
+#ifdef KEYBOARD_lily58_rev1
+ #include "rev1.h"
+#endif
+
+
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, L45, R40, R30, R31, R32, R33, R34, R35, \
+ L41, L42, L43, L44, R41, R42, R43, R44 \
+ ) \
+ LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L45, KC_##R40, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, \
+ KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##R41, KC_##R42, KC_##R43, KC_##R44 \
+ )
+
+#endif
diff --git a/keyboards/lily58/matrix.c b/keyboards/lily58/matrix.c
new file mode 100644
index 000000000..fc42dd14d
--- /dev/null
+++ b/keyboards/lily58/matrix.c
@@ -0,0 +1,459 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "split_util.h"
+#include "pro_micro.h"
+#include "config.h"
+#include "timer.h"
+
+#ifdef USE_I2C
+# include "i2c.h"
+#else // USE_SERIAL
+# include "serial.h"
+#endif
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+
+#if (DEBOUNCING_DELAY > 0)
+ static uint16_t debouncing_time;
+ static bool debouncing = false;
+#endif
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#else
+# error "Currently only supports 8 COLS"
+#endif
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+#define ERROR_DISCONNECT_COUNT 5
+
+#define ROWS_PER_HAND (MATRIX_ROWS/2)
+
+static uint8_t error_count = 0;
+
+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];
+
+#if (DIODE_DIRECTION == COL2ROW)
+ static void init_cols(void);
+ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
+ static void unselect_rows(void);
+ static void select_row(uint8_t row);
+ static void unselect_row(uint8_t row);
+#elif (DIODE_DIRECTION == ROW2COL)
+ static void init_rows(void);
+ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
+ static void unselect_cols(void);
+ static void unselect_col(uint8_t col);
+ static void select_col(uint8_t col);
+#endif
+
+__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
+#if (DIODE_DIRECTION == COL2ROW)
+ unselect_rows();
+ init_cols();
+#elif (DIODE_DIRECTION == ROW2COL)
+ unselect_cols();
+ init_rows();
+#endif
+
+ TX_RX_LED_INIT;
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+ matrix_init_quantum();
+
+}
+
+uint8_t _matrix_scan(void)
+{
+ int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
+#if (DIODE_DIRECTION == COL2ROW)
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
+# if (DEBOUNCING_DELAY > 0)
+ bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
+
+ if (matrix_changed) {
+ debouncing = true;
+ debouncing_time = timer_read();
+ }
+
+# else
+ read_cols_on_row(matrix+offset, current_row);
+# endif
+
+ }
+
+#elif (DIODE_DIRECTION == ROW2COL)
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+# if (DEBOUNCING_DELAY > 0)
+ bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
+ if (matrix_changed) {
+ debouncing = true;
+ debouncing_time = timer_read();
+ }
+# else
+ read_rows_on_col(matrix+offset, current_col);
+# endif
+
+ }
+#endif
+
+# if (DEBOUNCING_DELAY > 0)
+ if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
+ for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
+ matrix[i+offset] = matrix_debouncing[i+offset];
+ }
+ debouncing = false;
+ }
+# endif
+
+ return 1;
+}
+
+#ifdef USE_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(void) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+
+ if (serial_update_buffers()) {
+ return 1;
+ }
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[slaveOffset+i] = serial_slave_buffer[i];
+ }
+ return 0;
+}
+#endif
+
+uint8_t matrix_scan(void)
+{
+ uint8_t ret = _matrix_scan();
+
+#ifdef USE_I2C
+ if( i2c_transaction() ) {
+#else // USE_SERIAL
+ if( serial_transaction() ) {
+#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_I2C
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ i2c_slave_buffer[i] = matrix[offset+i];
+ }
+#else // USE_SERIAL
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ serial_slave_buffer[i] = matrix[offset+i];
+ }
+#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;
+}
+
+#if (DIODE_DIRECTION == COL2ROW)
+
+static void init_cols(void)
+{
+ for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ uint8_t pin = col_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
+{
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ // Select row and wait for row selecton to stabilize
+ select_row(current_row);
+ wait_us(30);
+
+ // For each col...
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+
+ // Select the col pin to read (active low)
+ uint8_t pin = col_pins[col_index];
+ uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
+
+ // Populate the matrix row with the state of the col pin
+ current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
+ }
+
+ // Unselect row
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+static void select_row(uint8_t row)
+{
+ uint8_t pin = row_pins[row];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+}
+
+static void unselect_row(uint8_t row)
+{
+ uint8_t pin = row_pins[row];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+}
+
+static void unselect_rows(void)
+{
+ for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
+ uint8_t pin = row_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
+#elif (DIODE_DIRECTION == ROW2COL)
+
+static void init_rows(void)
+{
+ for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
+ uint8_t pin = row_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
+{
+ bool matrix_changed = false;
+
+ // Select col and wait for col selecton to stabilize
+ select_col(current_col);
+ wait_us(30);
+
+ // For each row...
+ for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
+ {
+
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[row_index];
+
+ // Check row pin state
+ if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
+ {
+ // Pin LO, set col bit
+ current_matrix[row_index] |= (ROW_SHIFTER << current_col);
+ }
+ else
+ {
+ // Pin HI, clear col bit
+ current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
+ {
+ matrix_changed = true;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+
+ return matrix_changed;
+}
+
+static void select_col(uint8_t col)
+{
+ uint8_t pin = col_pins[col];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+}
+
+static void unselect_col(uint8_t col)
+{
+ uint8_t pin = col_pins[col];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+}
+
+static void unselect_cols(void)
+{
+ for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ uint8_t pin = col_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
+#endif
diff --git a/keyboards/lily58/readme.md b/keyboards/lily58/readme.md
new file mode 100644
index 000000000..c71365e46
--- /dev/null
+++ b/keyboards/lily58/readme.md
@@ -0,0 +1,17 @@
+# Lily58
+
+Lily58 is 6×4+5keys column-staggered split keyboard.
+
+![Lily58_01](https://user-images.githubusercontent.com/6285554/45210815-92744a00-b2cb-11e8-977a-8c1a93584f17.jpg)
+
+![Lily58_02](https://user-images.githubusercontent.com/6285554/45337733-7b33a600-b5c4-11e8-85b0-35f1cc9bf946.png)
+
+Keyboard Maintainer: [Naoki Katahira](https://github.com/kata0510/) [Twitter:@F_YUUCHI](https://twitter.com/F_YUUCHI)
+Hardware Supported: Lily58 PCB, ProMicro
+Hardware Availability: [PCB & Case Data](https://github.com/kata0510/Lily58)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make lily58:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file
diff --git a/keyboards/lily58/rev1/config.h b/keyboards/lily58/rev1/config.h
new file mode 100644
index 000000000..a991e8832
--- /dev/null
+++ b/keyboards/lily58/rev1/config.h
@@ -0,0 +1,84 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2017 F_YUUCHI
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+//#include QMK_KEYBOARD_CONFIG_H
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFC51
+#define PRODUCT_ID 0x0058
+#define DEVICE_VER 0x0100
+#define MANUFACTURER F_YUUCHI
+#define PRODUCT Lily58
+#define DESCRIPTION Lily58 is 6×4+5keys column-staggered split keyboard.
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { F6, F7, B1, B3, B2, B6 }
+
+#define CATERINA_BOOTLOADER
+
+/* define tapping term */
+#define TAPPING_TERM 100
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 14 // Number of LEDs
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/lily58/rev1/rev1.c b/keyboards/lily58/rev1/rev1.c
new file mode 100644
index 000000000..4c54d7717
--- /dev/null
+++ b/keyboards/lily58/rev1/rev1.c
@@ -0,0 +1,14 @@
+#include "lily58.h"
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+}; \ No newline at end of file
diff --git a/keyboards/lily58/rev1/rev1.h b/keyboards/lily58/rev1/rev1.h
new file mode 100644
index 000000000..a83046358
--- /dev/null
+++ b/keyboards/lily58/rev1/rev1.h
@@ -0,0 +1,61 @@
+#pragma once
+
+#include "lily58.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+
+//void promicro_bootloader_jmp(bool program);
+#ifndef FLIP_HALF
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, L45, R40, R30, R31, R32, R33, R34, R35, \
+ L41, L42, L43, L44, R41, R42, R43, R44 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { KC_NO, L41, L42, L43, L44, L45 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { R35, R34, R33, R32, R31, R30 }, \
+ { KC_NO, R44, R43, R42, R41, R40 } \
+ }
+#else
+// Keymap with right side flipped
+// (TRRS jack on both halves are to the right)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, L45, R30, R31, R32, R33, R34, R35, R45, \
+ L41, L42, L43, L44, R41, R42, R43, R44 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { KC_NO, L41, L42, L43, L44, L45 }, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ { KC_NO, R41, R42, R43, R44, R45 } \
+ }
+#endif \ No newline at end of file
diff --git a/keyboards/lily58/rev1/rules.mk b/keyboards/lily58/rev1/rules.mk
new file mode 100644
index 000000000..f84561674
--- /dev/null
+++ b/keyboards/lily58/rev1/rules.mk
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE = no \ No newline at end of file
diff --git a/keyboards/lily58/rules.mk b/keyboards/lily58/rules.mk
new file mode 100644
index 000000000..ad8ad585e
--- /dev/null
+++ b/keyboards/lily58/rules.mk
@@ -0,0 +1,74 @@
+SRC += matrix.c \
+ i2c.c \
+ split_util.c \
+ serial.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)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = caterina
+
+# 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 = lily58/rev1
diff --git a/keyboards/lily58/serial.c b/keyboards/lily58/serial.c
new file mode 100644
index 000000000..f85dc28dc
--- /dev/null
+++ b/keyboards/lily58/serial.c
@@ -0,0 +1,445 @@
+/*
+ * WARNING: be careful changing this code, it is very timing dependent
+ */
+
+#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 USE_SERIAL
+//#ifndef USE_SERIAL_PD2
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (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); }
+
+void serial_slave_init(void)
+{ soft_serial_target_init(transactions); }
+
+// 0 => no error
+// 1 => slave did not respond
+// 2 => checksum error
+int serial_update_buffers()
+{ return soft_serial_transaction(); }
+
+#endif // Simple API (OLD API, compatible with let's split serial.c)
+
+#define ALWAYS_INLINE __attribute__((always_inline))
+#define NO_INLINE __attribute__((noinline))
+#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
+
+// Serial pulse period in microseconds.
+#define TID_SEND_ADJUST 14
+
+#define SELECT_SERIAL_SPEED 1
+#if SELECT_SERIAL_SPEED == 0
+ // Very High speed
+ #define SERIAL_DELAY 4 // micro sec
+ #define READ_WRITE_START_ADJUST 33 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+#elif SELECT_SERIAL_SPEED == 1
+ // High speed
+ #define SERIAL_DELAY 6 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+#elif SELECT_SERIAL_SPEED == 2
+ // Middle speed
+ #define SERIAL_DELAY 12 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+#elif SELECT_SERIAL_SPEED == 3
+ // Low speed
+ #define SERIAL_DELAY 24 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+#elif SELECT_SERIAL_SPEED == 4
+ // Very Low speed
+ #define SERIAL_DELAY 50 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 3 // cycles
+#else
+#error Illegal Serial Speed
+#endif
+
+
+#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;
+
+inline static
+void serial_delay(void) {
+ _delay_us(SERIAL_DELAY);
+}
+
+inline static
+void serial_delay_half1(void) {
+ _delay_us(SERIAL_DELAY_HALF1);
+}
+
+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) {
+ 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)
+{
+ Transaction_table = sstd_table;
+ serial_output();
+ serial_high();
+}
+
+void soft_serial_target_init(SSTD_t *sstd_table)
+{
+ Transaction_table = sstd_table;
+ serial_input_with_pullup();
+
+#if SERIAL_PIN_MASK == _BV(PD0)
+ // Enable INT0
+ EIMSK |= _BV(INT0);
+ // Trigger on falling edge of INT0
+ EICRA &= ~(_BV(ISC00) | _BV(ISC01));
+#elif SERIAL_PIN_MASK == _BV(PD2)
+ // Enable INT2
+ EIMSK |= _BV(INT2);
+ // Trigger on falling edge of INT2
+ EICRA &= ~(_BV(ISC20) | _BV(ISC21));
+#else
+ #error unknown SERIAL_PIN_MASK value
+#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 = 0; 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 = 0, 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
+}
+
+// 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;
+ uint8_t pecount = 0;
+ sync_recv();
+ tid = serial_read_chunk(&pecount,4);
+ if(pecount> 0)
+ 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) {
+ 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
+ sync_send();
+ _delay_sub_us(TID_SEND_ADJUST);
+ serial_write_chunk(sstd_index, 4);
+ 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
diff --git a/keyboards/lily58/serial.h b/keyboards/lily58/serial.h
new file mode 100644
index 000000000..d2b7fd8e6
--- /dev/null
+++ b/keyboards/lily58/serial.h
@@ -0,0 +1,80 @@
+#ifndef SOFT_SERIAL_H
+#define SOFT_SERIAL_H
+
+#include <stdbool.h>
+
+// /////////////////////////////////////////////////////////////////
+// Need Soft Serial defines in serial_config.h
+// /////////////////////////////////////////////////////////////////
+// ex.
+// #define SERIAL_PIN_DDR DDRD
+// #define SERIAL_PIN_PORT PORTD
+// #define SERIAL_PIN_INPUT PIND
+// #define SERIAL_PIN_MASK _BV(PD?) ?=0,2
+// #define SERIAL_PIN_INTERRUPT INT?_vect ?=0,2
+//
+// //// USE Simple API (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 flexible API (using multi-type transaction function)
+// #define SERIAL_USE_MULTI_TRANSACTION
+//
+// /////////////////////////////////////////////////////////////////
+
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (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 // USE Simple 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;
+
+// initiator is transaction start side
+void soft_serial_initiator_init(SSTD_t *sstd_table);
+// target is interrupt accept side
+void soft_serial_target_init(SSTD_t *sstd_table);
+
+// initiator resullt
+#define TRANSACTION_END 0
+#define TRANSACTION_NO_RESPONSE 0x1
+#define TRANSACTION_DATA_ERROR 0x2
+#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 0x4
+#ifdef SERIAL_USE_MULTI_TRANSACTION
+int soft_serial_get_and_clean_status(int sstd_index);
+#endif
+
+#endif /* SOFT_SERIAL_H */
diff --git a/keyboards/lily58/serial_config.h b/keyboards/lily58/serial_config.h
new file mode 100644
index 000000000..fef689038
--- /dev/null
+++ b/keyboards/lily58/serial_config.h
@@ -0,0 +1,8 @@
+#define SERIAL_PIN_DDR DDRD
+#define SERIAL_PIN_PORT PORTD
+#define SERIAL_PIN_INPUT PIND
+#define SERIAL_PIN_MASK _BV(PD2)
+#define SERIAL_PIN_INTERRUPT INT2_vect
+
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH 1 \ No newline at end of file
diff --git a/keyboards/lily58/split_util.c b/keyboards/lily58/split_util.c
new file mode 100644
index 000000000..49b065518
--- /dev/null
+++ b/keyboards/lily58/split_util.c
@@ -0,0 +1,83 @@
+#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"
+#include "config.h"
+#include "timer.h"
+
+#ifdef USE_I2C
+# include "i2c.h"
+#else
+# include "serial.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_I2C
+ i2c_master_init();
+#else
+ serial_master_init();
+#endif
+}
+
+static void keyboard_slave_setup(void) {
+ timer_init();
+#ifdef USE_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();
+}
+
+void keyboard_slave_loop(void) {
+ matrix_init();
+
+ while (1) {
+ matrix_slave_scan();
+ }
+}
+
+// this code runs before the usb and keyboard is initialized
+void matrix_setup(void) {
+ split_keyboard_setup();
+
+ if (!has_usb()) {
+ keyboard_slave_loop();
+ }
+}
diff --git a/keyboards/ergotravel/split_util.h b/keyboards/lily58/split_util.h
index 595a0659e..595a0659e 100644
--- a/keyboards/ergotravel/split_util.h
+++ b/keyboards/lily58/split_util.h
diff --git a/keyboards/m10a/keymaps/gam3cat/config.h b/keyboards/m10a/keymaps/gam3cat/config.h
deleted file mode 100644
index 73bc50bc2..000000000
--- a/keyboards/m10a/keymaps/gam3cat/config.h
+++ /dev/null
@@ -1,2 +0,0 @@
-#include "../../config.h"
-#define PREVENT_STUCK_MODIFIERS
diff --git a/keyboards/m10a/keymaps/gam3cat/keymap.c b/keyboards/m10a/keymaps/gam3cat/keymap.c
index 8f4c878da..8ee35d50a 100644
--- a/keyboards/m10a/keymaps/gam3cat/keymap.c
+++ b/keyboards/m10a/keymaps/gam3cat/keymap.c
@@ -1,6 +1,4 @@
-#include "m10a.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
#include "version.h"
extern keymap_config_t keymap_config;
@@ -18,46 +16,48 @@ enum layers {
_L9
};
-enum m10a_keycodes {
+enum custom_keycodes {
DYNAMIC_MACRO_RANGE = SAFE_RANGE,
+ QMK_REV,
+ KC_WEB,
+ KC_WCLS
};
+extern backlight_config_t backlight_config;
+
#include "dynamic_macro.h"
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-#define FN_ZERO LT(_L9, KC_0)
+#define FN_ZERO LT(_L9, KC_KP_0)
#define KC_DMR1 DYN_REC_START1
#define KC_DMR2 DYN_REC_START2
#define KC_DMP1 DYN_MACRO_PLAY1
#define KC_DMP2 DYN_MACRO_PLAY2
#define KC_DMRS DYN_REC_STOP
-static uint8_t current_layer;
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* .-----------. .-----------. .-----------. .-----------. .-----------.
- * | 7| 8| 9| | +| -| *| | ^| &| !| |VLU|Ver|WFD| |VLU|NXT|FFD|
- * |-----------| |-----------| |-----------| |-----------| |-----------|
- * | 4| 5| 6| | /| %| ,| | D| E| F| |MUT|C-W|CHR| |MUT|STP|PLY|
- * |-----------| |-----------| |-----------| |-----------| |-----------|
- * | 1| 2| 3| | .| =|Ent| | A| B| C| |VLD|CMP|WBK| |VLD|PRV|RWD|
- * |-----------| |-----------| |-----------| |-----------| |-----------|
- * |L0 | _L9/0| |L1 | _L9 | |L2 | _L9 | |L3 | _L9 | |L4 | _L9 |
- * *-----------* *-----------* *-----------* *-----------* *-----------*
- * .-----------. .-----------. .-----------. .-----------. .-----------.
- * | | | | | | | | |MP1| |MP2| | | |RST| |_L6|_L7|_L8|
- * |-----------| |-----------| |-----------| |-----------| |-----------|
- * | | | | | | | | | |MRS| | | | | | |_L3|_L4|_L5|
- * |-----------| |-----------| |-----------| |-----------| |-----------|
- * | | | | | | | | |MR1| |MR2| | | | | |_L0|_L1|_L2|
- * |-----------| |-----------| |-----------| |-----------| |-----------|
- * |L5 | _L9 | |L6 | _L9 | |L7 | _L9 | |L8 | _L9 | |L9 | |
- * *-----------* *-----------* *-----------* *-----------* *-----------*
+ /*## Layout Config:
+ * .-----------. .-----------. .-----------. .-----------. .-----------.
+ * |7 |8 |9 | |+ |- |* | |^ |& |! | |VLU|Ver|WFD| |VLU|NXT|FFD|
+ * |-----------| |-----------| |-----------| |-----------| |-----------|
+ * |4 |5 |6 | |/ |% |, | |D |E |F | |MUT|C-W|CHR| |MUT|STP|PLY|
+ * |-----------| |-----------| |-----------| |-----------| |-----------|
+ * |1 |2 |3 | |. |= |Ent| |A |B |C | |VLD|CMP|WBK| |VLD|PRV|RWD|
+ * |-----------| |-----------| |-----------| |-----------| |-----------|
+ * |#L0|_L9/0 | |#L1|_L9 | |#L2|_L9 | |#L3|_L9 | |#L4|_L9 |
+ * *-----------* *-----------* *-----------* *-----------* *-----------*
+ * .-----------. .-----------. .-----------. .-----------. .-----------.
+ * | | | | | | | | |MP1| |MP2| | | |RST| |_L6|_L7|_L8|
+ * |-----------| |-----------| |-----------| |-----------| |-----------|
+ * | | | | | | | | | |MRS| | | | | | |_L3|_L4|_L5|
+ * |-----------| |-----------| |-----------| |-----------| |-----------|
+ * | | | | | | | | |MR1| |MR2| | | | | |_L0|_L1|_L2|
+ * |-----------| |-----------| |-----------| |-----------| |-----------|
+ * |#L5|_L9 | |#L6|_L9 | |#L7|_L9 | |#L8|_L9 | |#L9| |
+ * *-----------* *-----------* *-----------* *-----------* *-----------*
*/
- [_L0] = {{KC_7, KC_8, KC_9 }, {KC_4, KC_5, KC_6 }, {KC_1, KC_2, KC_3 }, {XXXXXXX, XXXXXXX, FN_ZERO}},
+ [_L0] = {{KC_KP_7, KC_KP_8, KC_KP_9}, {KC_KP_4, KC_KP_5, KC_KP_6}, {KC_KP_1, KC_KP_2, KC_KP_3}, {XXXXXXX, XXXXXXX, FN_ZERO}},
[_L1] = {{KC_PPLS, KC_PMNS, KC_PAST}, {KC_PSLS, KC_PERC, KC_COMM}, {KC_PDOT, KC_EQL, KC_PENT}, {XXXXXXX, XXXXXXX, MO(_L9)}},
[_L2] = {{KC_CIRC, KC_AMPR, KC_EXLM}, {S(KC_D), S(KC_E), S(KC_F)}, {S(KC_A), S(KC_B), S(KC_C)}, {XXXXXXX, XXXXXXX, MO(_L9)}},
- [_L3] = {{KC_VOLU, F(0), KC_WFWD}, {KC_MUTE, M(1), M(0) }, {KC_VOLD, KC_MYCM, KC_WBAK}, {XXXXXXX, XXXXXXX, MO(_L9)}},
+ [_L3] = {{KC_VOLU, QMK_REV, KC_WFWD}, {KC_MUTE, KC_WCLS, KC_WEB }, {KC_VOLD, KC_MYCM, KC_WBAK}, {XXXXXXX, XXXXXXX, MO(_L9)}},
[_L4] = {{KC_VOLU, KC_MNXT, KC_MFFD}, {KC_MUTE, KC_MSTP, KC_MPLY}, {KC_VOLD, KC_MPRV, KC_MRWD}, {XXXXXXX, XXXXXXX, MO(_L9)}},
[_L5] = {{_______, _______, _______}, {_______, _______, _______}, {_______, _______, _______}, {XXXXXXX, XXXXXXX, MO(_L9)}},
[_L6] = {{_______, _______, _______}, {_______, _______, _______}, {_______, _______, _______}, {XXXXXXX, XXXXXXX, MO(_L9)}},
@@ -66,96 +66,93 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_L9] = {{DF(_L6), DF(_L7), DF(_L8)}, {DF(_L3), DF(_L4), DF(_L5)}, {DF(_L0), DF(_L1), DF(_L2)}, {XXXXXXX, XXXXXXX, _______}},
};
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch(id) {
- case 0:
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMK_REV:
if (record->event.pressed) {
- return MACRO(I(10), D(LGUI), T(R), U(LGUI), END);
+ SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION ":" QMK_BUILDDATE);
}
- else {
+ return false;
+ break;
+ case KC_WEB:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LGUI("r"));
+ wait_ms(100);
SEND_STRING("chrome.exe\n");
- return false;
}
- break;
- case 1:
+ return false;
+ break;
+ case KC_WCLS:
if (record->event.pressed) {
- return MACRO(I(10), D(LCTL), T(W), U(LCTL), END);
+ SEND_STRING (SS_LCTRL("w"));
}
- break;
+ return false;
+ break;
}
- return MACRO_NONE;
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_FUNCTION(0),
-};
-
-void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) {
- switch (id) {
- case 0:
- if (record->event.pressed) {
- SEND_STRING ("[Keyboard: " QMK_KEYBOARD "] -- [QMK Version: " QMK_VERSION "] -- [Keymap: " QMK_KEYMAP "]");
- }
- break;
+ // Dynamic Macros.
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
}
+ return true;
+}
+
+void custom_backlight_level(uint8_t level) {
+ if (level > BACKLIGHT_LEVELS)
+ level = BACKLIGHT_LEVELS;
+ backlight_config.level = level;
+ backlight_config.enable = !!backlight_config.level;
+ backlight_set(backlight_config.level);
}
void matrix_init_user(void) {
#ifdef BACKLIGHT_ENABLE
- backlight_level(0);
+ custom_backlight_level(0);
#endif
}
-// Runs constantly in the background, in a loop.
void matrix_scan_user(void) {
- uint8_t layer = biton32(layer_state);
- if (current_layer == layer) {
- }
- else {
- current_layer = layer;
- switch (layer) {
- case 0:
- backlight_level(0);
- break;
- case 1:
- backlight_level(1);
- break;
- case 2:
- backlight_level(2);
- break;
- case 3:
- backlight_level(3);
- break;
- case 4:
- backlight_level(4);
- break;
- case 5:
- backlight_level(5);
- break;
- case 6:
- backlight_level(6);
- break;
- case 7:
- backlight_level(6);
- break;
- case 8:
- backlight_level(6);
- break;
- case 9:
- backlight_level(0);
- break;
- default:
- backlight_level(0);
- break;
- }
- }
}
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- // Enable Dynamic Macros.
- if (!process_record_dynamic_macro(keycode, record)) {
- return false;
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case _L0:
+ custom_backlight_level(0);
+ break;
+ case _L1:
+ custom_backlight_level(1);
+ break;
+ case _L2:
+ custom_backlight_level(2);
+ break;
+ case _L3:
+ custom_backlight_level(3);
+ break;
+ case _L4:
+ custom_backlight_level(4);
+ break;
+ case _L5:
+ custom_backlight_level(5);
+ break;
+ case _L6:
+ custom_backlight_level(6);
+ break;
+ case _L7:
+ custom_backlight_level(6);
+ break;
+ case _L8:
+ custom_backlight_level(6);
+ break;
+ case _L9:
+ custom_backlight_level(0);
+ break;
+ default:
+ custom_backlight_level(0);
+ break;
}
- return true;
+ return state;
+}
+
+void led_set_user(uint8_t usb_led) {
+
}
diff --git a/keyboards/m10a/keymaps/gam3cat/readme.md b/keyboards/m10a/keymaps/gam3cat/readme.md
index 879a6c5a3..5c68e8c89 100644
--- a/keyboards/m10a/keymaps/gam3cat/readme.md
+++ b/keyboards/m10a/keymaps/gam3cat/readme.md
@@ -2,13 +2,13 @@
make m10a:gam3cat
## Layout Config:
.-----------. .-----------. .-----------. .-----------. .-----------.
- | 7| 8| 9| | +| -| *| | ^| &| !| |VLU|Ver|WFD| |VLU|NXT|FFD|
+ |7 |8 |9 | |+ |- |* | |^ |& |! | |VLU|Ver|WFD| |VLU|NXT|FFD|
|-----------| |-----------| |-----------| |-----------| |-----------|
- | 4| 5| 6| | /| %| ,| | D| E| F| |MUT|C-W|CHR| |MUT|STP|PLY|
+ |4 |5 |6 | |/ |% |, | |D |E |F | |MUT|C-W|CHR| |MUT|STP|PLY|
|-----------| |-----------| |-----------| |-----------| |-----------|
- | 1| 2| 3| | .| =|Ent| | A| B| C| |VLD|CMP|WBK| |VLD|PRV|RWD|
+ |1 |2 |3 | |. |= |Ent| |A |B |C | |VLD|CMP|WBK| |VLD|PRV|RWD|
|-----------| |-----------| |-----------| |-----------| |-----------|
- |L0 | _L9/0| |L1 | _L9 | |L2 | _L9 | |L3 | _L9 | |L4 | _L9 |
+ |#L0|_L9/0 | |#L1|_L9 | |#L2|_L9 | |#L3|_L9 | |#L4|_L9 |
*-----------* *-----------* *-----------* *-----------* *-----------*
.-----------. .-----------. .-----------. .-----------. .-----------.
| | | | | | | | |MP1| |MP2| | | |RST| |_L6|_L7|_L8|
@@ -17,5 +17,5 @@ make m10a:gam3cat
|-----------| |-----------| |-----------| |-----------| |-----------|
| | | | | | | | |MR1| |MR2| | | | | |_L0|_L1|_L2|
|-----------| |-----------| |-----------| |-----------| |-----------|
- |L5 | _L9 | |L6 | _L9 | |L7 | _L9 | |L8 | _L9 | |L9 | |
+ |#L5|_L9 | |#L6|_L9 | |#L7|_L9 | |#L8|_L9 | |#L9| |
*-----------* *-----------* *-----------* *-----------* *-----------*
diff --git a/keyboards/m10a/keymaps/gam3cat/rules.mk b/keyboards/m10a/keymaps/gam3cat/rules.mk
index 457a3d01d..00515a31e 100644
--- a/keyboards/m10a/keymaps/gam3cat/rules.mk
+++ b/keyboards/m10a/keymaps/gam3cat/rules.mk
@@ -1,3 +1,24 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+TAP_DANCE_ENABLE = no # Enable TapDance functionality
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+1500)
+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 # Nkey Rollover - If this doesn't work, add this to config.h: #define FORCE_NKRO
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+UNICODE_ENABLE = no # Unicode
+UNICODEMAP_ENABLE = no # Enable extended unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Uses buzzer to emulate clicky switches. By default, uses the C6 pin, same as AUDIO_ENABLE.
+#VARIABLE_TRACE = no # Use this to debug changes to variable values
+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/massdrop/alt/alt.h b/keyboards/massdrop/alt/alt.h
new file mode 100644
index 000000000..8dfed8d2d
--- /dev/null
+++ b/keyboards/massdrop/alt/alt.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#include "quantum.h"
+#include "config_led.h"
+#include "matrix.h"
+
+#include "i2c_master.h"
+#include "led_matrix.h" //For led keycodes
+#include "usb/udi_cdc.h"
+#include "usb/usb2422.h"
+
+#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, K65, K66, K67 \
+) { \
+ { 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, KC_NO, K43, K44, }, \
+ { K45, KC_NO, K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, K56, K57, K58, }, \
+ { K59, K60, K61, KC_NO, KC_NO, KC_NO, K62, KC_NO, KC_NO, KC_NO, K63, K64, K65, K66, K67, }, \
+}
+
+#define TOGGLE_FLAG_AND_PRINT(var, name) { \
+ if (var) { \
+ dprintf(name " disabled\r\n"); \
+ var = !var; \
+ } else { \
+ var = !var; \
+ dprintf(name " enabled\r\n"); \
+ } \
+ }
diff --git a/keyboards/massdrop/alt/config.h b/keyboards/massdrop/alt/config.h
new file mode 100644
index 000000000..660d44421
--- /dev/null
+++ b/keyboards/massdrop/alt/config.h
@@ -0,0 +1,126 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x04D8
+#define PRODUCT_ID 0xEED3
+#define DEVICE_VER 0x0101
+
+#define MANUFACTURER "Massdrop Inc."
+#define PRODUCT "ALT Keyboard"
+#define SERIAL_NUM "Unavailable"
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* MCU Port name definitions */
+#define PA 0
+#define PB 1
+
+/* Port and Pin definition of key row hardware configuration */
+#define MATRIX_ROW_PORTS PA, PA, PA, PA, PA
+#define MATRIX_ROW_PINS 0, 1, 2, 3, 4
+
+/* Port and Pin definition of key column hardware configuration */
+#define MATRIX_COL_PORTS PB, PB, PB, PB, PB, PB, PB, PB, PB, PB, PA, PA, PA, PA, PA
+#define MATRIX_COL_PINS 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 6, 7, 10, 11
+
+/* This Shift Register expands available hardware output lines to control additional peripherals */
+/* It uses four lines from the MCU to provide 16 output lines */
+/* Shift Register Clock configuration (MCU to ShiftRegister.RCLK) */
+#define SR_EXP_RCLK_PORT PB
+#define SR_EXP_RCLK_PIN 14
+/* Shift Register Output Enable configuration (MCU to ShiftRegister.OE_N) */
+#define SR_EXP_OE_N_PORT PB
+#define SR_EXP_OE_N_PIN 15
+/* SERCOM port to use for Shift Register SPI */
+/* DATAOUT and SCLK must be configured to use hardware pins of this port */
+#define SR_EXP_SERCOM SERCOM2
+/* Shift Register SPI Data Out configuration (MCU.SERCOMx.PAD[0] to ShiftRegister.SER) */
+#define SR_EXP_DATAOUT_PORT PA
+#define SR_EXP_DATAOUT_PIN 12
+#define SR_EXP_DATAOUT_MUX 2
+/* Shift Register SPI Serial Clock configuration (MCU.SERCOMx.PAD[1] to ShiftRegister.SRCLK) */
+#define SR_EXP_SCLK_PORT PA
+#define SR_EXP_SCLK_PIN 13
+#define SR_EXP_SCLK_MUX 2
+
+/* Debug LED (Small LED Located near MCU) */
+#define DEBUG_LED_ENABLE 1
+#define DEBUG_LED_PORT PA
+#define DEBUG_LED_PIN 27
+
+/* Additional debugging ports */
+/* PCB M21 */
+#define DEBUG_PORT1_ENABLE 1
+#define DEBUG_PORT1_PORT PB
+#define DEBUG_PORT1_PIN 3
+/* PCB M23 */
+#define DEBUG_PORT2_ENABLE 1
+#define DEBUG_PORT2_PORT PB
+#define DEBUG_PORT2_PIN 17
+/* PCB M25 */
+#define DEBUG_PORT3_ENABLE 1
+#define DEBUG_PORT3_PORT PA
+#define DEBUG_PORT3_PIN 20
+
+/* Debug Boot Tracing - During boot sequence, ground this pin to halt and display debug code using Debug LED */
+/* This is useful in determining which hardware device may have malfunctioned or is improperly configured */
+/* Feature is automatically disabled after successful boot */
+/* PCB M27 */
+#define DEBUG_BOOT_TRACING_ENABLE 1
+#define DEBUG_BOOT_TRACING_PORT PB
+#define DEBUG_BOOT_TRACING_PIN 23
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Force boot in NKRO mode */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/massdrop/alt/config_led.h b/keyboards/massdrop/alt/config_led.h
new file mode 100644
index 000000000..a049e3817
--- /dev/null
+++ b/keyboards/massdrop/alt/config_led.h
@@ -0,0 +1,178 @@
+/*
+Copyright 2018 Massdrop Inc.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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_led_h_
+#define _config_led_h_
+
+//Define number of ISSI3733 drivers being used (1...16)
+#define ISSI3733_DRIVER_COUNT 2
+
+//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
+#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
+
+//LED I2C bus speed
+#define I2C_HZ 580000
+
+//Count of LED bodies
+#define ISSI3733_LED_COUNT 105
+
+//Default Global Current Register value (Default brightness 0 - 255)
+#define ISSI3733_GCR_DEFAULT 128
+
+#define LED_GCR_MAX 165 //Max GCR value (0 - 255) WARNING: Raising this value may overload the LED drivers and USB bus
+#define LED_GCR_STEP 10 //GCR increment/decrement value
+
+//Automatic power rollback and recovery
+#define V5_HIGH 2540 //5V high level (After low power detect, point at which LEDs are allowed to use more power )
+#define V5_LOW 2480 //5V low level (LED power rolled back to stay above this limit)
+#define V5_CAT 2200 //5V catastrophic level (Host USB port potential to shut down)
+
+#define ANIMATION_SPEED_STEP 1
+
+#define BREATHE_MIN_STEP 0
+#define BREATHE_MAX_STEP 255
+
+//LED Mapping - More practically generated from a spreadsheet program
+//id: ID of the LED (Sync with PCB callouts)
+//x: Physical X coordinate of LED (units do not matter)
+//y: Physical Y coordinate of LED (units do not matter)
+//drv: 1-Based index of ISSI3773_DRIVER_ADDRESSES
+//cs: Matrix wiring CS col (1-16)
+//swr: Matrix wiring SW Red row (1-12)
+//swg: Matrix wiring SW Green row (1-12)
+//swb: Matrix wiring SW Blue row (1-12)
+//scan: Associated key scancode if any
+//Note: Origin 0,0 may be located anywhere as the software will do the final layout
+#define ISSI3733_LED_MAP { \
+ { .id = 1, .x = 0, .y = 0, .adr = { .drv = 2, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 0 }, \
+ { .id = 2, .x = 0.75, .y = 0, .adr = { .drv = 2, .cs = 3, .swr = 5, .swg = 4, .swb = 6 }, .scan = 1 }, \
+ { .id = 3, .x = 1.5, .y = 0, .adr = { .drv = 2, .cs = 4, .swr = 5, .swg = 4, .swb = 6 }, .scan = 2 }, \
+ { .id = 4, .x = 2.25, .y = 0, .adr = { .drv = 2, .cs = 5, .swr = 5, .swg = 4, .swb = 6 }, .scan = 3 }, \
+ { .id = 5, .x = 3, .y = 0, .adr = { .drv = 2, .cs = 6, .swr = 5, .swg = 4, .swb = 6 }, .scan = 4 }, \
+ { .id = 6, .x = 3.75, .y = 0, .adr = { .drv = 2, .cs = 7, .swr = 5, .swg = 4, .swb = 6 }, .scan = 5 }, \
+ { .id = 7, .x = 4.5, .y = 0, .adr = { .drv = 2, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 6 }, \
+ { .id = 8, .x = 5.25, .y = 0, .adr = { .drv = 2, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 7 }, \
+ { .id = 9, .x = 6, .y = 0, .adr = { .drv = 1, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 8 }, \
+ { .id = 10, .x = 6.75, .y = 0, .adr = { .drv = 1, .cs = 2, .swr = 5, .swg = 4, .swb = 6 }, .scan = 9 }, \
+ { .id = 11, .x = 7.5, .y = 0, .adr = { .drv = 1, .cs = 3, .swr = 5, .swg = 4, .swb = 6 }, .scan = 10 }, \
+ { .id = 12, .x = 8.25, .y = 0, .adr = { .drv = 1, .cs = 4, .swr = 5, .swg = 4, .swb = 6 }, .scan = 11 }, \
+ { .id = 13, .x = 9, .y = 0, .adr = { .drv = 1, .cs = 5, .swr = 5, .swg = 4, .swb = 6 }, .scan = 12 }, \
+ { .id = 14, .x = 10.125, .y = 0, .adr = { .drv = 1, .cs = 6, .swr = 5, .swg = 4, .swb = 6 }, .scan = 13 }, \
+ { .id = 15, .x = 11.25, .y = 0, .adr = { .drv = 1, .cs = 7, .swr = 2, .swg = 1, .swb = 3 }, .scan = 14 }, \
+ { .id = 16, .x = 0.188, .y = -0.75, .adr = { .drv = 2, .cs = 2, .swr = 5, .swg = 4, .swb = 6 }, .scan = 15 }, \
+ { .id = 17, .x = 1.125, .y = -0.75, .adr = { .drv = 2, .cs = 3, .swr = 8, .swg = 7, .swb = 9 }, .scan = 16 }, \
+ { .id = 18, .x = 1.875, .y = -0.75, .adr = { .drv = 2, .cs = 4, .swr = 8, .swg = 7, .swb = 9 }, .scan = 17 }, \
+ { .id = 19, .x = 2.625, .y = -0.75, .adr = { .drv = 2, .cs = 5, .swr = 8, .swg = 7, .swb = 9 }, .scan = 18 }, \
+ { .id = 20, .x = 3.375, .y = -0.75, .adr = { .drv = 2, .cs = 6, .swr = 8, .swg = 7, .swb = 9 }, .scan = 19 }, \
+ { .id = 21, .x = 4.125, .y = -0.75, .adr = { .drv = 2, .cs = 7, .swr = 8, .swg = 7, .swb = 9 }, .scan = 20 }, \
+ { .id = 22, .x = 4.875, .y = -0.75, .adr = { .drv = 2, .cs = 8, .swr = 8, .swg = 7, .swb = 9 }, .scan = 21 }, \
+ { .id = 23, .x = 5.625, .y = -0.75, .adr = { .drv = 1, .cs = 1, .swr = 8, .swg = 7, .swb = 9 }, .scan = 22 }, \
+ { .id = 24, .x = 6.375, .y = -0.75, .adr = { .drv = 1, .cs = 2, .swr = 8, .swg = 7, .swb = 9 }, .scan = 23 }, \
+ { .id = 25, .x = 7.125, .y = -0.75, .adr = { .drv = 1, .cs = 3, .swr = 8, .swg = 7, .swb = 9 }, .scan = 24 }, \
+ { .id = 26, .x = 7.875, .y = -0.75, .adr = { .drv = 1, .cs = 4, .swr = 8, .swg = 7, .swb = 9 }, .scan = 25 }, \
+ { .id = 27, .x = 8.625, .y = -0.75, .adr = { .drv = 1, .cs = 5, .swr = 8, .swg = 7, .swb = 9 }, .scan = 26 }, \
+ { .id = 28, .x = 9.375, .y = -0.75, .adr = { .drv = 1, .cs = 11, .swr = 11, .swg = 10, .swb = 12 }, .scan = 27 }, \
+ { .id = 29, .x = 10.313, .y = -0.75, .adr = { .drv = 1, .cs = 6, .swr = 8, .swg = 7, .swb = 9 }, .scan = 28 }, \
+ { .id = 30, .x = 11.25, .y = -0.75, .adr = { .drv = 1, .cs = 7, .swr = 5, .swg = 4, .swb = 6 }, .scan = 29 }, \
+ { .id = 31, .x = 0.281, .y = -1.5, .adr = { .drv = 2, .cs = 2, .swr = 8, .swg = 7, .swb = 9 }, .scan = 30 }, \
+ { .id = 32, .x = 1.313, .y = -1.5, .adr = { .drv = 2, .cs = 3, .swr = 11, .swg = 10, .swb = 12 }, .scan = 31 }, \
+ { .id = 33, .x = 2.063, .y = -1.5, .adr = { .drv = 2, .cs = 4, .swr = 11, .swg = 10, .swb = 12 }, .scan = 32 }, \
+ { .id = 34, .x = 2.813, .y = -1.5, .adr = { .drv = 2, .cs = 5, .swr = 11, .swg = 10, .swb = 12 }, .scan = 33 }, \
+ { .id = 35, .x = 3.563, .y = -1.5, .adr = { .drv = 2, .cs = 6, .swr = 11, .swg = 10, .swb = 12 }, .scan = 34 }, \
+ { .id = 36, .x = 4.313, .y = -1.5, .adr = { .drv = 2, .cs = 7, .swr = 11, .swg = 10, .swb = 12 }, .scan = 35 }, \
+ { .id = 37, .x = 5.063, .y = -1.5, .adr = { .drv = 2, .cs = 8, .swr = 11, .swg = 10, .swb = 12 }, .scan = 36 }, \
+ { .id = 38, .x = 5.813, .y = -1.5, .adr = { .drv = 1, .cs = 1, .swr = 11, .swg = 10, .swb = 12 }, .scan = 37 }, \
+ { .id = 39, .x = 6.563, .y = -1.5, .adr = { .drv = 1, .cs = 2, .swr = 11, .swg = 10, .swb = 12 }, .scan = 38 }, \
+ { .id = 40, .x = 7.313, .y = -1.5, .adr = { .drv = 1, .cs = 3, .swr = 11, .swg = 10, .swb = 12 }, .scan = 39 }, \
+ { .id = 41, .x = 8.063, .y = -1.5, .adr = { .drv = 1, .cs = 4, .swr = 11, .swg = 10, .swb = 12 }, .scan = 40 }, \
+ { .id = 42, .x = 8.813, .y = -1.5, .adr = { .drv = 1, .cs = 5, .swr = 11, .swg = 10, .swb = 12 }, .scan = 41 }, \
+ { .id = 43, .x = 10.031, .y = -1.5, .adr = { .drv = 1, .cs = 6, .swr = 11, .swg = 10, .swb = 12 }, .scan = 43 }, \
+ { .id = 44, .x = 11.25, .y = -1.5, .adr = { .drv = 1, .cs = 7, .swr = 8, .swg = 7, .swb = 9 }, .scan = 44 }, \
+ { .id = 45, .x = 0.469, .y = -2.25, .adr = { .drv = 2, .cs = 2, .swr = 11, .swg = 10, .swb = 12 }, .scan = 45 }, \
+ { .id = 46, .x = 1.688, .y = -2.25, .adr = { .drv = 2, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 47 }, \
+ { .id = 47, .x = 2.438, .y = -2.25, .adr = { .drv = 2, .cs = 9, .swr = 2, .swg = 1, .swb = 3 }, .scan = 48 }, \
+ { .id = 48, .x = 3.188, .y = -2.25, .adr = { .drv = 2, .cs = 9, .swr = 11, .swg = 10, .swb = 12 }, .scan = 49 }, \
+ { .id = 49, .x = 3.938, .y = -2.25, .adr = { .drv = 2, .cs = 9, .swr = 8, .swg = 7, .swb = 9 }, .scan = 50 }, \
+ { .id = 50, .x = 4.688, .y = -2.25, .adr = { .drv = 2, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 51 }, \
+ { .id = 51, .x = 5.438, .y = -2.25, .adr = { .drv = 2, .cs = 13, .swr = 11, .swg = 10, .swb = 12 }, .scan = 52 }, \
+ { .id = 52, .x = 6.188, .y = -2.25, .adr = { .drv = 1, .cs = 9, .swr = 11, .swg = 10, .swb = 12 }, .scan = 53 }, \
+ { .id = 53, .x = 6.938, .y = -2.25, .adr = { .drv = 1, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 54 }, \
+ { .id = 54, .x = 7.688, .y = -2.25, .adr = { .drv = 1, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 55 }, \
+ { .id = 55, .x = 8.438, .y = -2.25, .adr = { .drv = 1, .cs = 11, .swr = 8, .swg = 7, .swb = 9 }, .scan = 56 }, \
+ { .id = 56, .x = 9.469, .y = -2.25, .adr = { .drv = 1, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 57 }, \
+ { .id = 57, .x = 10.5, .y = -2.25, .adr = { .drv = 1, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 58 }, \
+ { .id = 58, .x = 11.25, .y = -2.25, .adr = { .drv = 1, .cs = 7, .swr = 11, .swg = 10, .swb = 12 }, .scan = 59 }, \
+ { .id = 59, .x = 0.094, .y = -3, .adr = { .drv = 2, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 60 }, \
+ { .id = 60, .x = 1.031, .y = -3, .adr = { .drv = 2, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 61 }, \
+ { .id = 61, .x = 1.969, .y = -3, .adr = { .drv = 2, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 62 }, \
+ { .id = 62, .x = 4.781, .y = -3, .adr = { .drv = 2, .cs = 12, .swr = 8, .swg = 7, .swb = 9 }, .scan = 66 }, \
+ { .id = 63, .x = 7.594, .y = -3, .adr = { .drv = 1, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 70 }, \
+ { .id = 64, .x = 8.531, .y = -3, .adr = { .drv = 1, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 71 }, \
+ { .id = 65, .x = 9.75, .y = -3, .adr = { .drv = 1, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 72 }, \
+ { .id = 66, .x = 10.5, .y = -3, .adr = { .drv = 1, .cs = 12, .swr = 8, .swg = 7, .swb = 9 }, .scan = 73 }, \
+ { .id = 67, .x = 11.25, .y = -3, .adr = { .drv = 1, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 74 }, \
+ { .id = 68, .x = -0.338, .y = -3.338, .adr = { .drv = 2, .cs = 11, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
+ { .id = 69, .x = 0.39, .y = -3.443, .adr = { .drv = 2, .cs = 11, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
+ { .id = 70, .x = 1.263, .y = -3.443, .adr = { .drv = 2, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
+ { .id = 71, .x = 2.135, .y = -3.443, .adr = { .drv = 2, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 72, .x = 3.008, .y = -3.443, .adr = { .drv = 2, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 73, .x = 3.88, .y = -3.443, .adr = { .drv = 2, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
+ { .id = 74, .x = 4.753, .y = -3.443, .adr = { .drv = 2, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
+ { .id = 75, .x = 5.625, .y = -3.443, .adr = { .drv = 2, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
+ { .id = 76, .x = 6.497, .y = -3.443, .adr = { .drv = 1, .cs = 9, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
+ { .id = 77, .x = 7.37, .y = -3.443, .adr = { .drv = 1, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
+ { .id = 78, .x = 8.242, .y = -3.443, .adr = { .drv = 1, .cs = 9, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 79, .x = 9.115, .y = -3.443, .adr = { .drv = 1, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 80, .x = 9.987, .y = -3.443, .adr = { .drv = 1, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
+ { .id = 81, .x = 10.86, .y = -3.443, .adr = { .drv = 1, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
+ { .id = 82, .x = 11.588, .y = -3.338, .adr = { .drv = 1, .cs = 13, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
+ { .id = 83, .x = 11.693, .y = -2.623, .adr = { .drv = 1, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
+ { .id = 84, .x = 11.693, .y = -1.873, .adr = { .drv = 1, .cs = 8, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
+ { .id = 85, .x = 11.693, .y = -1.123, .adr = { .drv = 1, .cs = 8, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
+ { .id = 86, .x = 11.693, .y = -0.373, .adr = { .drv = 1, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
+ { .id = 87, .x = 11.588, .y = 0.338, .adr = { .drv = 1, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 88, .x = 9.908, .y = 0.443, .adr = { .drv = 1, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 89, .x = 9.288, .y = 0.443, .adr = { .drv = 1, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 90, .x = 8.625, .y = 0.443, .adr = { .drv = 1, .cs = 4, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 91, .x = 7.875, .y = 0.443, .adr = { .drv = 1, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 92, .x = 7.125, .y = 0.443, .adr = { .drv = 1, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 93, .x = 6.375, .y = 0.443, .adr = { .drv = 1, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 94, .x = 5.625, .y = 0.443, .adr = { .drv = 1, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 95, .x = 4.875, .y = 0.443, .adr = { .drv = 2, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 96, .x = 4.125, .y = 0.443, .adr = { .drv = 2, .cs = 7, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 97, .x = 3.375, .y = 0.443, .adr = { .drv = 2, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 98, .x = 2.625, .y = 0.443, .adr = { .drv = 2, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 99, .x = 1.875, .y = 0.443, .adr = { .drv = 2, .cs = 4, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 100, .x = 1.125, .y = 0.443, .adr = { .drv = 2, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 101, .x = -0.338, .y = 0.338, .adr = { .drv = 2, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 102, .x = -0.443, .y = -0.373, .adr = { .drv = 2, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
+ { .id = 103, .x = -0.443, .y = -1.123, .adr = { .drv = 2, .cs = 1, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
+ { .id = 104, .x = -0.443, .y = -1.873, .adr = { .drv = 2, .cs = 1, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
+ { .id = 105, .x = -0.443, .y = -2.623, .adr = { .drv = 2, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
+};
+
+
+#define USB_LED_INDICATOR_ENABLE //Comment out to disable indicator functionality
+#ifdef USB_LED_INDICATOR_ENABLE //Scan codes refer to actual key matrix codes, not KC_* (255 to disable)
+ #define USB_LED_NUM_LOCK_SCANCODE 255
+ #define USB_LED_CAPS_LOCK_SCANCODE 30
+ #define USB_LED_SCROLL_LOCK_SCANCODE 255
+ #define USB_LED_COMPOSE_SCANCODE 255
+ #define USB_LED_KANA_SCANCODE 255
+#endif //USB_LED_INDICATOR_ENABLE
+
+#endif //_config_led_h_
diff --git a/keyboards/massdrop/alt/info.json b/keyboards/massdrop/alt/info.json
new file mode 100644
index 000000000..8f85bece2
--- /dev/null
+++ b/keyboards/massdrop/alt/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "ALT",
+ "url": "https://www.massdrop.com/buy/massdrop-alt-mechanical-keyboard",
+ "maintainer": "Massdrop",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"ESCAPE", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"MINUS", "x":11, "y":0},
+ {"label":"EQUALS", "x":12, "y":0},
+ {"label":"BACKSPACE", "x":13, "y":0, "w":2},
+ {"label":"DELETE", "x":15, "y":0},
+ {"label":"TAB", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"LEFT BRACKET", "x":11.5, "y":1},
+ {"label":"RIGHT BRACKET", "x":12.5, "y":1},
+ {"label":"BACK SLASH", "x":13.5, "y":1, "w":1.5},
+ {"label":"HOME", "x":15, "y":1},
+ {"label":"CAPS LOCK", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":"SEMICOLON", "x":10.75, "y":2},
+ {"label":"SINGLE TICK", "x":11.75, "y":2},
+ {"label":"ENTER", "x":12.75, "y":2, "w":2.25},
+ {"label":"PAGE UP", "x":15, "y":2},
+ {"label":"LEFT 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":"COMMA", "x":9.25, "y":3},
+ {"label":"PERIOD", "x":10.25, "y":3},
+ {"label":"FORWARD SLASH", "x":11.25, "y":3},
+ {"label":"RIGHT SHIFT", "x":12.25, "y":3, "w":1.75},
+ {"label":"UP ARROW", "x":14, "y":3},
+ {"label":"PAGE DOWN", "x":15, "y":3},
+ {"label":"LEFT CTRL", "x":0, "y":4, "w":1.25},
+ {"label":"LEFT WIN", "x":1.25, "y":4, "w":1.25},
+ {"label":"LEFT ALT", "x":2.5, "y":4, "w":1.25},
+ {"label":"SPACEBAR", "x":3.75, "y":4, "w":6.25},
+ {"label":"RIGHT ALT", "x":10, "y":4, "w":1.25},
+ {"label":"FN", "x":11.25, "y":4, "w":1.25},
+ {"label":"LEFT ARROW", "x":13, "y":4},
+ {"label":"DOWN ARROW", "x":14, "y":4},
+ {"label":"RIGHT ARROW", "x":15, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/massdrop/alt/keymaps/abishalom/keymap.c b/keyboards/massdrop/alt/keymaps/abishalom/keymap.c
new file mode 100644
index 000000000..7ffa53dca
--- /dev/null
+++ b/keyboards/massdrop/alt/keymaps/abishalom/keymap.c
@@ -0,0 +1,189 @@
+#include QMK_KEYBOARD_H
+
+enum alt_keycodes {
+ L_BRI = SAFE_RANGE, //LED Brightness Increase
+ L_BRD, //LED Brightness Decrease
+ L_PTN, //LED Pattern Select Next
+ L_PTP, //LED Pattern Select Previous
+ L_PSI, //LED Pattern Speed Increase
+ L_PSD, //LED Pattern Speed Decrease
+ L_T_MD, //LED Toggle Mode
+ L_T_ONF, //LED Toggle On / Off
+ L_ON, //LED On
+ L_OFF, //LED Off
+ L_T_BR, //LED Toggle Breath Effect
+ L_T_PTD, //LED Toggle Scrolling Pattern Direction
+ U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active
+ U_T_AGCR, //USB Toggle Automatic GCR control
+ DBG_TOG, //DEBUG Toggle On / Off
+ DBG_MTRX, //DEBUG Toggle Matrix Prints
+ DBG_KBD, //DEBUG Toggle Keyboard Prints
+ DBG_MOU, //DEBUG Toggle Mouse Prints
+ MD_BOOT, //Restart into bootloader after hold timeout
+};
+
+#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
+
+keymap_config_t keymap_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ [1] = LAYOUT(
+ 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_MUTE, \
+ L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_END, \
+ L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \
+ KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_VOLD, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
+ /*
+ [X] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ */
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+};
+
+#define MODS_SHIFT (keyboard_report->mods & MOD_BIT(KC_LSHIFT) || keyboard_report->mods & MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL (keyboard_report->mods & MOD_BIT(KC_LCTL) || keyboard_report->mods & MOD_BIT(KC_RCTRL))
+#define MODS_ALT (keyboard_report->mods & MOD_BIT(KC_LALT) || keyboard_report->mods & MOD_BIT(KC_RALT))
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ static uint32_t key_timer;
+
+ switch (keycode) {
+ case L_BRI:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
+ else gcr_desired += LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_BRD:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
+ else gcr_desired -= LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_PTN:
+ if (record->event.pressed) {
+ if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
+ else led_animation_id++;
+ }
+ return false;
+ case L_PTP:
+ if (record->event.pressed) {
+ if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
+ else led_animation_id--;
+ }
+ return false;
+ case L_PSI:
+ if (record->event.pressed) {
+ led_animation_speed += ANIMATION_SPEED_STEP;
+ }
+ return false;
+ case L_PSD:
+ if (record->event.pressed) {
+ led_animation_speed -= ANIMATION_SPEED_STEP;
+ if (led_animation_speed < 0) led_animation_speed = 0;
+ }
+ return false;
+ case L_T_MD:
+ if (record->event.pressed) {
+ led_lighting_mode++;
+ if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
+ }
+ return false;
+ case L_T_ONF:
+ if (record->event.pressed) {
+ led_enabled = !led_enabled;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_ON:
+ if (record->event.pressed) {
+ led_enabled = 1;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_OFF:
+ if (record->event.pressed) {
+ led_enabled = 0;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_T_BR:
+ if (record->event.pressed) {
+ led_animation_breathing = !led_animation_breathing;
+ if (led_animation_breathing) {
+ gcr_breathe = gcr_desired;
+ led_animation_breathe_cur = BREATHE_MIN_STEP;
+ breathe_dir = 1;
+ }
+ }
+ return false;
+ case L_T_PTD:
+ if (record->event.pressed) {
+ led_animation_direction = !led_animation_direction;
+ }
+ return false;
+ case U_T_AUTO:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
+ }
+ return false;
+ case U_T_AGCR:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
+ }
+ return false;
+ case DBG_TOG:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
+ }
+ return false;
+ case DBG_MTRX:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
+ }
+ return false;
+ case DBG_KBD:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
+ }
+ return false;
+ case DBG_MOU:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
+ }
+ return false;
+ case MD_BOOT:
+ if (record->event.pressed) {
+ key_timer = timer_read32();
+ } else {
+ if (timer_elapsed32(key_timer) >= 500) {
+ reset_keyboard();
+ }
+ }
+ return false;
+ default:
+ return true; //Process all other keycodes normally
+ }
+}
diff --git a/keyboards/massdrop/alt/keymaps/default/keymap.c b/keyboards/massdrop/alt/keymaps/default/keymap.c
new file mode 100644
index 000000000..a5c443ffc
--- /dev/null
+++ b/keyboards/massdrop/alt/keymaps/default/keymap.c
@@ -0,0 +1,193 @@
+#include QMK_KEYBOARD_H
+
+enum alt_keycodes {
+ L_BRI = SAFE_RANGE, //LED Brightness Increase
+ L_BRD, //LED Brightness Decrease
+ L_PTN, //LED Pattern Select Next
+ L_PTP, //LED Pattern Select Previous
+ L_PSI, //LED Pattern Speed Increase
+ L_PSD, //LED Pattern Speed Decrease
+ L_T_MD, //LED Toggle Mode
+ L_T_ONF, //LED Toggle On / Off
+ L_ON, //LED On
+ L_OFF, //LED Off
+ L_T_BR, //LED Toggle Breath Effect
+ L_T_PTD, //LED Toggle Scrolling Pattern Direction
+ U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active
+ U_T_AGCR, //USB Toggle Automatic GCR control
+ DBG_TOG, //DEBUG Toggle On / Off
+ DBG_MTRX, //DEBUG Toggle Matrix Prints
+ DBG_KBD, //DEBUG Toggle Keyboard Prints
+ DBG_MOU, //DEBUG Toggle Mouse Prints
+ MD_BOOT, //Restart into bootloader after hold timeout
+};
+
+#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
+
+keymap_config_t keymap_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ [1] = LAYOUT(
+ 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_MUTE, \
+ L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_END, \
+ L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \
+ KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_VOLD, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
+ /*
+ [X] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ */
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+};
+
+#define MODS_SHIFT (keyboard_report->mods & MOD_BIT(KC_LSHIFT) || keyboard_report->mods & MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL (keyboard_report->mods & MOD_BIT(KC_LCTL) || keyboard_report->mods & MOD_BIT(KC_RCTRL))
+#define MODS_ALT (keyboard_report->mods & MOD_BIT(KC_LALT) || keyboard_report->mods & MOD_BIT(KC_RALT))
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ static uint32_t key_timer;
+
+ switch (keycode) {
+ case L_BRI:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
+ else gcr_desired += LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_BRD:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
+ else gcr_desired -= LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_PTN:
+ if (record->event.pressed) {
+ if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
+ else led_animation_id++;
+ }
+ return false;
+ case L_PTP:
+ if (record->event.pressed) {
+ if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
+ else led_animation_id--;
+ }
+ return false;
+ case L_PSI:
+ if (record->event.pressed) {
+ led_animation_speed += ANIMATION_SPEED_STEP;
+ }
+ return false;
+ case L_PSD:
+ if (record->event.pressed) {
+ led_animation_speed -= ANIMATION_SPEED_STEP;
+ if (led_animation_speed < 0) led_animation_speed = 0;
+ }
+ return false;
+ case L_T_MD:
+ if (record->event.pressed) {
+ led_lighting_mode++;
+ if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
+ }
+ return false;
+ case L_T_ONF:
+ if (record->event.pressed) {
+ led_enabled = !led_enabled;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_ON:
+ if (record->event.pressed) {
+ led_enabled = 1;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_OFF:
+ if (record->event.pressed) {
+ led_enabled = 0;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_T_BR:
+ if (record->event.pressed) {
+ led_animation_breathing = !led_animation_breathing;
+ if (led_animation_breathing) {
+ gcr_breathe = gcr_desired;
+ led_animation_breathe_cur = BREATHE_MIN_STEP;
+ breathe_dir = 1;
+ }
+ }
+ return false;
+ case L_T_PTD:
+ if (record->event.pressed) {
+ led_animation_direction = !led_animation_direction;
+ }
+ return false;
+ case U_T_AUTO:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
+ }
+ return false;
+ case U_T_AGCR:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
+ }
+ return false;
+ case DBG_TOG:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
+ }
+ return false;
+ case DBG_MTRX:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
+ }
+ return false;
+ case DBG_KBD:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
+ }
+ return false;
+ case DBG_MOU:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
+ }
+ return false;
+ case MD_BOOT:
+ if (record->event.pressed) {
+ key_timer = timer_read32();
+ } else {
+ if (timer_elapsed32(key_timer) >= 500) {
+ reset_keyboard();
+ }
+ }
+ return false;
+ default:
+ return true; //Process all other keycodes normally
+ }
+}
diff --git a/keyboards/massdrop/alt/keymaps/mac/keymap.c b/keyboards/massdrop/alt/keymaps/mac/keymap.c
new file mode 100644
index 000000000..d6978fd80
--- /dev/null
+++ b/keyboards/massdrop/alt/keymaps/mac/keymap.c
@@ -0,0 +1,193 @@
+#include QMK_KEYBOARD_H
+
+enum alt_keycodes {
+ L_BRI = SAFE_RANGE, //LED Brightness Increase
+ L_BRD, //LED Brightness Decrease
+ L_PTN, //LED Pattern Select Next
+ L_PTP, //LED Pattern Select Previous
+ L_PSI, //LED Pattern Speed Increase
+ L_PSD, //LED Pattern Speed Decrease
+ L_T_MD, //LED Toggle Mode
+ L_T_ONF, //LED Toggle On / Off
+ L_ON, //LED On
+ L_OFF, //LED Off
+ L_T_BR, //LED Toggle Breath Effect
+ L_T_PTD, //LED Toggle Scrolling Pattern Direction
+ U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active
+ U_T_AGCR, //USB Toggle Automatic GCR control
+ DBG_TOG, //DEBUG Toggle On / Off
+ DBG_MTRX, //DEBUG Toggle Matrix Prints
+ DBG_KBD, //DEBUG Toggle Keyboard Prints
+ DBG_MOU, //DEBUG Toggle Mouse Prints
+ MD_BOOT, //Restart into bootloader after hold timeout
+};
+
+#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
+
+keymap_config_t keymap_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_MUTE, \
+ L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_END, \
+ L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, \
+ KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_VOLD, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END \
+ ),
+ /*
+ [X] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ */
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+};
+
+#define MODS_SHIFT (keyboard_report->mods & MOD_BIT(KC_LSHIFT) || keyboard_report->mods & MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL (keyboard_report->mods & MOD_BIT(KC_LCTL) || keyboard_report->mods & MOD_BIT(KC_RCTRL))
+#define MODS_ALT (keyboard_report->mods & MOD_BIT(KC_LALT) || keyboard_report->mods & MOD_BIT(KC_RALT))
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ static uint32_t key_timer;
+
+ switch (keycode) {
+ case L_BRI:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
+ else gcr_desired += LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_BRD:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
+ else gcr_desired -= LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_PTN:
+ if (record->event.pressed) {
+ if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
+ else led_animation_id++;
+ }
+ return false;
+ case L_PTP:
+ if (record->event.pressed) {
+ if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
+ else led_animation_id--;
+ }
+ return false;
+ case L_PSI:
+ if (record->event.pressed) {
+ led_animation_speed += ANIMATION_SPEED_STEP;
+ }
+ return false;
+ case L_PSD:
+ if (record->event.pressed) {
+ led_animation_speed -= ANIMATION_SPEED_STEP;
+ if (led_animation_speed < 0) led_animation_speed = 0;
+ }
+ return false;
+ case L_T_MD:
+ if (record->event.pressed) {
+ led_lighting_mode++;
+ if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
+ }
+ return false;
+ case L_T_ONF:
+ if (record->event.pressed) {
+ led_enabled = !led_enabled;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_ON:
+ if (record->event.pressed) {
+ led_enabled = 1;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_OFF:
+ if (record->event.pressed) {
+ led_enabled = 0;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_T_BR:
+ if (record->event.pressed) {
+ led_animation_breathing = !led_animation_breathing;
+ if (led_animation_breathing) {
+ gcr_breathe = gcr_desired;
+ led_animation_breathe_cur = BREATHE_MIN_STEP;
+ breathe_dir = 1;
+ }
+ }
+ return false;
+ case L_T_PTD:
+ if (record->event.pressed) {
+ led_animation_direction = !led_animation_direction;
+ }
+ return false;
+ case U_T_AUTO:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
+ }
+ return false;
+ case U_T_AGCR:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
+ }
+ return false;
+ case DBG_TOG:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
+ }
+ return false;
+ case DBG_MTRX:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
+ }
+ return false;
+ case DBG_KBD:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
+ }
+ return false;
+ case DBG_MOU:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
+ }
+ return false;
+ case MD_BOOT:
+ if (record->event.pressed) {
+ key_timer = timer_read32();
+ } else {
+ if (timer_elapsed32(key_timer) >= 500) {
+ reset_keyboard();
+ }
+ }
+ return false;
+ default:
+ return true; //Process all other keycodes normally
+ }
+}
diff --git a/keyboards/massdrop/alt/keymaps/reywood/keymap.c b/keyboards/massdrop/alt/keymaps/reywood/keymap.c
new file mode 100644
index 000000000..8b69f0e8e
--- /dev/null
+++ b/keyboards/massdrop/alt/keymaps/reywood/keymap.c
@@ -0,0 +1,195 @@
+#include QMK_KEYBOARD_H
+#include "rgb_matrix_user.h"
+
+enum alt_keycodes {
+ L_BRI = SAFE_RANGE, //LED Brightness Increase
+ L_BRD, //LED Brightness Decrease
+ L_PTN, //LED Pattern Select Next
+ L_PTP, //LED Pattern Select Previous
+ L_PSI, //LED Pattern Speed Increase
+ L_PSD, //LED Pattern Speed Decrease
+ L_T_MD, //LED Toggle Mode
+ L_T_ONF, //LED Toggle On / Off
+ L_ON, //LED On
+ L_OFF, //LED Off
+ L_T_BR, //LED Toggle Breath Effect
+ L_T_PTD, //LED Toggle Scrolling Pattern Direction
+ U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active
+ U_T_AGCR, //USB Toggle Automatic GCR control
+ DBG_TOG, //DEBUG Toggle On / Off
+ DBG_MTRX, //DEBUG Toggle Matrix Prints
+ DBG_KBD, //DEBUG Toggle Keyboard Prints
+ DBG_MOU, //DEBUG Toggle Mouse Prints
+ MD_BOOT, //Restart into bootloader after hold timeout
+};
+
+#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
+#define ______ KC_TRNS
+
+keymap_config_t keymap_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MUTE, \
+ _______, _______, _______, KC_UP, _______, _______, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
+ _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, KC_VOLU, _______, \
+ _______, _______, _______, KC_MPLY, MO(2), _______, KC_MRWD, KC_VOLD, KC_MFFD \
+ ),
+ [2] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ L_T_BR, L_PSD, L_BRI, L_PSI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ L_T_PTD, L_PTP, L_BRD, L_PTN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, L_T_MD, L_T_ONF, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+};
+
+#define MODS_SHIFT (keyboard_report->mods & MOD_BIT(KC_LSHIFT) || keyboard_report->mods & MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL (keyboard_report->mods & MOD_BIT(KC_LCTL) || keyboard_report->mods & MOD_BIT(KC_RCTRL))
+#define MODS_ALT (keyboard_report->mods & MOD_BIT(KC_LALT) || keyboard_report->mods & MOD_BIT(KC_RALT))
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ static uint32_t key_timer;
+
+ rgb_matrix_record_key_press(record);
+
+ switch (keycode) {
+ case L_BRI:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
+ else gcr_desired += LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_BRD:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
+ else gcr_desired -= LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_PTN:
+ if (record->event.pressed) {
+ if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
+ else led_animation_id++;
+ }
+ return false;
+ case L_PTP:
+ if (record->event.pressed) {
+ if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
+ else led_animation_id--;
+ }
+ return false;
+ case L_PSI:
+ if (record->event.pressed) {
+ led_animation_speed += ANIMATION_SPEED_STEP;
+ }
+ return false;
+ case L_PSD:
+ if (record->event.pressed) {
+ led_animation_speed -= ANIMATION_SPEED_STEP;
+ if (led_animation_speed < 0) led_animation_speed = 0;
+ }
+ return false;
+ case L_T_MD:
+ if (record->event.pressed) {
+ led_lighting_mode++;
+ if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
+ }
+ return false;
+ case L_T_ONF:
+ if (record->event.pressed) {
+ led_enabled = !led_enabled;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_ON:
+ if (record->event.pressed) {
+ led_enabled = 1;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_OFF:
+ if (record->event.pressed) {
+ led_enabled = 0;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_T_BR:
+ if (record->event.pressed) {
+ led_animation_breathing = !led_animation_breathing;
+ if (led_animation_breathing) {
+ gcr_breathe = gcr_desired;
+ led_animation_breathe_cur = BREATHE_MIN_STEP;
+ breathe_dir = 1;
+ }
+ }
+ return false;
+ case L_T_PTD:
+ if (record->event.pressed) {
+ led_animation_direction = !led_animation_direction;
+ }
+ return false;
+ case U_T_AUTO:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
+ }
+ return false;
+ case U_T_AGCR:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
+ }
+ return false;
+ case DBG_TOG:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
+ }
+ return false;
+ case DBG_MTRX:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
+ }
+ return false;
+ case DBG_KBD:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
+ }
+ return false;
+ case DBG_MOU:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
+ }
+ return false;
+ case MD_BOOT:
+ if (record->event.pressed) {
+ key_timer = timer_read32();
+ } else {
+ if (timer_elapsed32(key_timer) >= 500) {
+ reset_keyboard();
+ }
+ }
+ return false;
+ default:
+ return true; //Process all other keycodes normally
+ }
+}
diff --git a/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.c b/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.c
new file mode 100644
index 000000000..36131e202
--- /dev/null
+++ b/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.c
@@ -0,0 +1,193 @@
+#include "quantum.h"
+#include "led_matrix.h"
+
+extern issi3733_led_t *led_cur;
+extern uint8_t led_per_run;
+extern issi3733_led_t *lede;
+extern issi3733_led_t led_map[];
+
+static uint16_t last_boost_update;
+static uint8_t led_boosts[ISSI3733_LED_COUNT];
+static uint8_t led_boost_index;
+static uint8_t led_cur_index;
+
+#define LED_BOOST_REFRESH_INTERVAL_IN_MS 40
+#define LED_BOOST_DECAY 0.7
+#define LED_BOOST_PROPAGATE 0.5
+#define LED_BOOST_PEAK 100
+
+#define MIN_RGB 0x050008
+#define MIN_R (MIN_RGB >> 16 & 0xff)
+#define MIN_G (MIN_RGB >> 8 & 0xff)
+#define MIN_B (MIN_RGB & 0xff)
+
+#define MAX_RGB 0xc26eff
+#define MAX_R (MAX_RGB >> 16 & 0xff)
+#define MAX_G (MAX_RGB >> 8 & 0xff)
+#define MAX_B (MAX_RGB & 0xff)
+
+#define UNDERGLOW_RGB 0x4f002e
+#define UNDERGLOW_R (UNDERGLOW_RGB >> 16 & 0xff)
+#define UNDERGLOW_G (UNDERGLOW_RGB >> 8 & 0xff)
+#define UNDERGLOW_B (UNDERGLOW_RGB & 0xff)
+
+#define UNDERGLOW_SCAN_CODE 255
+
+#define max(a, b) (((a) > (b)) ? (a) : (b))
+
+#define __ -1
+static const uint8_t KEY_TO_LED_MAP[MATRIX_ROWS][MATRIX_COLS] = {
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14},
+ {15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29},
+ {30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, __, 42, 43},
+ {44, __, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57},
+ {58, 59, 60, __, __, __, 61, __, __, __, 62, 63, 64, 65, 66},
+};
+
+#define KEY_LED_COUNT 67
+#define KP(c, r) { .col = c, .row = r } // shorthand for keypos_t
+static const keypos_t LED_TO_KEY_MAP[KEY_LED_COUNT] = {
+ KP(0, 0), KP(1, 0), KP(2, 0), KP(3, 0), KP(4, 0), KP(5, 0), KP(6, 0), KP(7, 0), KP(8, 0), KP(9, 0), KP(10, 0), KP(11, 0), KP(12, 0), KP(13, 0), KP(14, 0),
+ KP(0, 1), KP(1, 1), KP(2, 1), KP(3, 1), KP(4, 1), KP(5, 1), KP(6, 1), KP(7, 1), KP(8, 1), KP(9, 1), KP(10, 1), KP(11, 1), KP(12, 1), KP(13, 1), KP(14, 1),
+ KP(0, 2), KP(1, 2), KP(2, 2), KP(3, 2), KP(4, 2), KP(5, 2), KP(6, 2), KP(7, 2), KP(8, 2), KP(9, 2), KP(10, 2), KP(11, 2), KP(13, 2), KP(14, 2),
+ KP(0, 3), KP(2, 3), KP(3, 3), KP(4, 3), KP(5, 3), KP(6, 3), KP(7, 3), KP(8, 3), KP(9, 3), KP(10, 3), KP(11, 3), KP(12, 3), KP(13, 3), KP(14, 3),
+ KP(0, 4), KP(1, 4), KP(2, 4), KP(6, 4), KP(10, 4), KP(11, 4), KP(12, 4), KP(13, 4), KP(14, 4),
+};
+
+
+static void update_led_boosts(void);
+static void update_led_cur_rgb_values(void);
+static void set_nearest_led_to_max(uint8_t col, uint8_t row);
+static uint8_t calculate_new_color_component_value(uint8_t max, uint8_t min);
+static void calculate_new_led_boosts(uint8_t new_led_boosts[]);
+static uint8_t calculate_new_led_boost_at(int index);
+static uint8_t get_propagated_boost_from_neighbors(int led_position);
+static uint8_t get_led_boost_at_keypos(uint8_t row, uint8_t col);
+static void set_new_led_boosts(uint8_t* new_led_boosts);
+static uint8_t map_key_position_to_led_index(uint8_t col, uint8_t row);
+
+
+void rgb_matrix_init_user(void) {
+ for (int i = 0; i < ISSI3733_LED_COUNT; i++) {
+ led_boosts[i] = 0;
+ }
+ last_boost_update = timer_read();
+ led_boost_index = 0;
+ led_cur_index = 0;
+}
+
+void led_matrix_run(void) {
+ uint8_t led_this_run = 0;
+
+ if (led_cur == 0) { //Denotes start of new processing cycle in the case of chunked processing
+ led_cur = led_map;
+ led_cur_index = 0;
+ }
+ update_led_boosts();
+
+ while (led_cur < lede && led_this_run < led_per_run) {
+ update_led_cur_rgb_values();
+
+ led_cur++;
+ led_cur_index++;
+ led_this_run++;
+ }
+}
+
+void rgb_matrix_record_key_press(keyrecord_t *record) {
+ if (record->event.pressed) {
+ keypos_t key = record->event.key;
+ set_nearest_led_to_max(key.col, key.row);
+ }
+}
+
+
+static void update_led_boosts(void) {
+ if (timer_elapsed(last_boost_update) > LED_BOOST_REFRESH_INTERVAL_IN_MS) {
+ last_boost_update = timer_read();
+
+ uint8_t new_led_boosts[ISSI3733_LED_COUNT];
+ calculate_new_led_boosts(new_led_boosts);
+ set_new_led_boosts(new_led_boosts);
+ }
+}
+
+static void update_led_cur_rgb_values(void) {
+ if (led_cur->scan == UNDERGLOW_SCAN_CODE) {
+ *led_cur->rgb.r = UNDERGLOW_R;
+ *led_cur->rgb.g = UNDERGLOW_G;
+ *led_cur->rgb.b = UNDERGLOW_B;
+ } else {
+ *led_cur->rgb.r = calculate_new_color_component_value(MAX_R, MIN_R);
+ *led_cur->rgb.g = calculate_new_color_component_value(MAX_G, MIN_G);
+ *led_cur->rgb.b = calculate_new_color_component_value(MAX_B, MIN_B);
+ }
+}
+
+static void set_nearest_led_to_max(uint8_t col, uint8_t row) {
+ uint8_t led_index = map_key_position_to_led_index(col, row);
+ if (led_index >= 0 && led_index < ISSI3733_LED_COUNT) {
+ led_boosts[led_index] = LED_BOOST_PEAK;
+ }
+}
+
+static uint8_t calculate_new_color_component_value(uint8_t max, uint8_t min) {
+ uint8_t current_boost = led_boosts[led_cur_index];
+ return (float)(max - min) * current_boost / LED_BOOST_PEAK + min;
+}
+
+static void calculate_new_led_boosts(uint8_t new_led_boosts[]) {
+ for (int i = 0; i < ISSI3733_LED_COUNT; i++) {
+ new_led_boosts[i] = calculate_new_led_boost_at(i);
+ }
+}
+
+static uint8_t calculate_new_led_boost_at(int index) {
+ uint8_t decayed_boost = led_boosts[index] * LED_BOOST_DECAY;
+ uint8_t propagated_boost = get_propagated_boost_from_neighbors(index);
+ uint8_t new_boost = (propagated_boost > decayed_boost) ? propagated_boost : decayed_boost;
+ if (new_boost > LED_BOOST_PEAK) {
+ new_boost = LED_BOOST_PEAK;
+ }
+ return new_boost;
+}
+
+static uint8_t get_propagated_boost_from_neighbors(int led_position) {
+ if (led_position < 0 || led_position >= KEY_LED_COUNT) {
+ return 0;
+ }
+ keypos_t led_keypos = LED_TO_KEY_MAP[led_position];
+ uint8_t top_boost = get_led_boost_at_keypos(led_keypos.row - 1, led_keypos.col);
+ uint8_t bottom_boost = get_led_boost_at_keypos(led_keypos.row + 1, led_keypos.col);
+ uint8_t left_boost = get_led_boost_at_keypos(led_keypos.row, led_keypos.col - 1);
+ uint8_t right_boost = get_led_boost_at_keypos(led_keypos.row, led_keypos.col + 1);
+ uint8_t max_boost = max(max(top_boost, bottom_boost), max(left_boost, right_boost));
+ if (max_boost > LED_BOOST_PEAK) {
+ max_boost = LED_BOOST_PEAK;
+ }
+ return max_boost * LED_BOOST_PROPAGATE;
+}
+
+static uint8_t get_led_boost_at_keypos(uint8_t row, uint8_t col) {
+ if (row < 0 || row >= MATRIX_ROWS || col < 0 || col >= MATRIX_COLS) {
+ return 0;
+ }
+ uint8_t led_index = KEY_TO_LED_MAP[row][col];
+ if (led_index < 0) {
+ return 0;
+ }
+ return led_boosts[led_index];
+}
+
+static void set_new_led_boosts(uint8_t* new_led_boosts) {
+ for (int i = 0; i < ISSI3733_LED_COUNT; i++) {
+ led_boosts[i] = new_led_boosts[i];
+ }
+}
+
+static uint8_t map_key_position_to_led_index(uint8_t col, uint8_t row) {
+ if (row >= 0 && row < MATRIX_ROWS && col >= 0 && col < MATRIX_COLS) {
+ return KEY_TO_LED_MAP[row][col];
+ }
+ return -1;
+}
diff --git a/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.h b/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.h
new file mode 100644
index 000000000..4ffd202e9
--- /dev/null
+++ b/keyboards/massdrop/alt/keymaps/reywood/rgb_matrix_user.h
@@ -0,0 +1,3 @@
+#pragma once
+
+void rgb_matrix_record_key_press(keyrecord_t *record);
diff --git a/keyboards/massdrop/alt/keymaps/reywood/rules.mk b/keyboards/massdrop/alt/keymaps/reywood/rules.mk
new file mode 100644
index 000000000..b5b961a0f
--- /dev/null
+++ b/keyboards/massdrop/alt/keymaps/reywood/rules.mk
@@ -0,0 +1,34 @@
+# project specific files
+SRC = led_programs.c
+SRC += matrix.c
+SRC += rgb_matrix_user.c
+
+#For platform and packs
+ARM_ATSAM = SAMD51J18A
+MCU = cortex-m4
+
+CUSTOM_MATRIX = yes
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+VIRTSER_ENABLE = no # USB Serial Driver
+RAW_ENABLE = no # Raw device
+AUTO_SHIFT_ENABLE = no # Auto Shift
diff --git a/keyboards/massdrop/alt/led_programs.c b/keyboards/massdrop/alt/led_programs.c
new file mode 100644
index 000000000..b3b7a7e90
--- /dev/null
+++ b/keyboards/massdrop/alt/led_programs.c
@@ -0,0 +1,120 @@
+/*
+Copyright 2018 Massdrop Inc.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "alt.h"
+#include "led_matrix.h"
+
+//Teal <-> Salmon
+led_setup_t leds_teal_salmon[] = {
+ { .hs = 0, .he = 33, .rs = 24, .re = 24, .gs = 215, .ge = 215, .bs = 204, .be = 204, .ef = EF_NONE },
+ { .hs = 33, .he = 66, .rs = 24, .re = 255, .gs = 215, .ge = 114, .bs = 204, .be = 118, .ef = EF_NONE },
+ { .hs = 66, .he = 100, .rs = 255, .re = 255, .gs = 114, .ge = 114, .bs = 118, .be = 118, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//Yellow
+led_setup_t leds_yellow[] = {
+ { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//Off
+led_setup_t leds_off[] = {
+ { .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//Red
+led_setup_t leds_red[] = {
+ { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//Green
+led_setup_t leds_green[] = {
+ { .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//Blue
+led_setup_t leds_blue[] = {
+ { .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//White
+led_setup_t leds_white[] = {
+ { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 255, .be = 255, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//White with moving red stripe
+led_setup_t leds_white_with_red_stripe[] = {
+ { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 255, .be = 255, .ef = EF_NONE },
+ { .hs = 0, .he = 15, .rs = 0, .re = 0, .gs = 0, .ge = 255, .bs = 0, .be = 255, .ef = EF_SCR_R | EF_SUBTRACT },
+ { .hs = 15, .he = 30, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 0, .ef = EF_SCR_R | EF_SUBTRACT },
+ { .end = 1 },
+};
+
+//Black with moving red stripe
+led_setup_t leds_black_with_red_stripe[] = {
+ { .hs = 0, .he = 15, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_SCR_R },
+ { .hs = 15, .he = 30, .rs = 255, .re = 0, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_SCR_R },
+ { .end = 1 },
+};
+
+//Rainbow no scrolling
+led_setup_t leds_rainbow_ns[] = {
+ { .hs = 0, .he = 16.67, .rs = 255, .re = 255, .gs = 0, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER },
+ { .hs = 16.67, .he = 33.33, .rs = 255, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER },
+ { .hs = 33.33, .he = 50, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 255, .ef = EF_OVER },
+ { .hs = 50, .he = 66.67, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER },
+ { .hs = 66.67, .he = 83.33, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER },
+ { .hs = 83.33, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 0, .ef = EF_OVER },
+ { .end = 1 },
+};
+
+//Rainbow scrolling
+led_setup_t leds_rainbow_s[] = {
+ { .hs = 0, .he = 16.67, .rs = 255, .re = 255, .gs = 0, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER | EF_SCR_R },
+ { .hs = 16.67, .he = 33.33, .rs = 255, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER | EF_SCR_R },
+ { .hs = 33.33, .he = 50, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 255, .ef = EF_OVER | EF_SCR_R },
+ { .hs = 50, .he = 66.67, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER | EF_SCR_R },
+ { .hs = 66.67, .he = 83.33, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER | EF_SCR_R },
+ { .hs = 83.33, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 0, .ef = EF_OVER | EF_SCR_R },
+ { .end = 1 },
+};
+
+//Add new LED animations here using one from above as example
+//The last entry must be { .end = 1 }
+//Add the new animation name to the list below following its format
+
+void *led_setups[] = {
+ leds_rainbow_s,
+ leds_rainbow_ns,
+ leds_teal_salmon,
+ leds_yellow,
+ leds_red,
+ leds_green,
+ leds_blue,
+ leds_white,
+ leds_white_with_red_stripe,
+ leds_black_with_red_stripe,
+ leds_off
+};
+
+const uint8_t led_setups_count = sizeof(led_setups) / sizeof(led_setups[0]);
diff --git a/keyboards/massdrop/alt/matrix.c b/keyboards/massdrop/alt/matrix.c
new file mode 100644
index 000000000..892d38791
--- /dev/null
+++ b/keyboards/massdrop/alt/matrix.c
@@ -0,0 +1,182 @@
+/*
+Copyright 2018 Massdrop Inc.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "alt.h"
+
+#include "d51_util.h"
+#include "debug.h"
+#include "clks.h"
+#include <string.h>
+
+matrix_row_t mlatest[MATRIX_ROWS];
+matrix_row_t mlast[MATRIX_ROWS];
+matrix_row_t mdebounced[MATRIX_ROWS];
+
+uint8_t row_ports[] = { MATRIX_ROW_PORTS };
+uint8_t row_pins[] = { MATRIX_ROW_PINS };
+uint8_t col_ports[] = { MATRIX_COL_PORTS };
+uint8_t col_pins[] = { MATRIX_COL_PINS };
+uint32_t row_masks[2]; //NOTE: If more than PA PB used in the future, adjust code to accomodate
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void matrix_init(void)
+{
+ memset(mlatest, 0, MATRIX_ROWS * sizeof(matrix_row_t));
+ memset(mlast, 0, MATRIX_ROWS * sizeof(matrix_row_t));
+ memset(mdebounced, 0, MATRIX_ROWS * sizeof(matrix_row_t));
+
+ row_masks[PA] = 0;
+ row_masks[PB] = 0;
+
+ uint8_t row;
+ for (row = 0; row < MATRIX_ROWS; row++)
+ {
+ PORT->Group[row_ports[row]].DIRCLR.reg = 1 << row_pins[row]; //Input
+ PORT->Group[row_ports[row]].OUTCLR.reg = 1 << row_pins[row]; //Low
+ PORT->Group[row_ports[row]].PINCFG[row_pins[row]].bit.INEN = 1; //Input Enable,
+ PORT->Group[row_ports[row]].PINCFG[row_pins[row]].bit.PULLEN = 1; //Pull Enable
+ row_masks[row_ports[row]] |= 1 << row_pins[row]; //Add pin to proper row mask
+ }
+
+ uint8_t col;
+ for (col = 0; col < MATRIX_COLS; col++)
+ {
+ PORT->Group[col_ports[col]].DIRSET.reg = 1 << col_pins[col]; //Output
+ PORT->Group[col_ports[col]].OUTCLR.reg = 1 << col_pins[col]; //Low
+ }
+
+ matrix_init_quantum();
+}
+
+#define MATRIX_SCAN_DELAY 10 //Delay after setting a col to output (in us)
+
+uint64_t mdebouncing = 0;
+uint8_t matrix_scan(void)
+{
+ uint8_t mchanged;
+ uint8_t row;
+ uint8_t col;
+ uint32_t scans[2]; //PA PB
+
+ if (CLK_get_ms() < mdebouncing) return 1; //mdebouncing == 0 when no debouncing active
+
+ //DBG_1_OFF; //Profiling scans
+
+ memset(mlatest, 0, MATRIX_ROWS * sizeof(matrix_row_t)); //Zero the result buffer
+
+ for (col = 0; col < MATRIX_COLS; col++)
+ {
+ PORT->Group[col_ports[col]].OUTSET.reg = 1 << col_pins[col]; //Set col output
+
+ CLK_delay_us(MATRIX_SCAN_DELAY); //Delay for output
+
+ scans[PA] = PORT->Group[PA].IN.reg & row_masks[PA]; //Read PA row pins data
+ scans[PB] = PORT->Group[PB].IN.reg & row_masks[PB]; //Read PB row pins data
+
+ PORT->Group[col_ports[col]].OUTCLR.reg = 1 << col_pins[col]; //Clear col output
+
+ for (row = 0; row < MATRIX_ROWS; row++)
+ {
+ //Move scan bits from scans array into proper row bit locations
+ if (scans[row_ports[row]] & (1 << row_pins[row]))
+ mlatest[row] |= 1 << col;
+ }
+ }
+
+ mchanged = 0; //Default to no matrix change since last
+
+ for (row = 0; row < MATRIX_ROWS; row++)
+ {
+ if (mlast[row] != mlatest[row])
+ mchanged = 1;
+ mlast[row] = mlatest[row];
+ }
+
+ if (!mchanged)
+ {
+ for (row = 0; row < MATRIX_ROWS; row++)
+ mdebounced[row] = mlatest[row];
+ mdebouncing = 0;
+ }
+ else
+ {
+ //Begin or extend debounce on change
+ mdebouncing = CLK_get_ms() + DEBOUNCING_DELAY;
+ }
+
+ //DBG_1_ON; //Profiling scans
+
+ matrix_scan_quantum();
+
+ return 1;
+}
+
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return mdebounced[row];
+}
+
+void matrix_print(void)
+{
+ char buf[(MATRIX_COLS+8)*(MATRIX_ROWS+1)] = "R C";
+ char *pbuf = buf+3;
+ uint32_t cols;
+ uint32_t rows;
+ matrix_row_t row;
+
+ for (cols = 1; cols <= MATRIX_COLS; cols++)
+ {
+ *pbuf = (cols%10)+48;
+ pbuf++;
+ }
+ *pbuf = '\r'; pbuf++;
+ *pbuf = '\n'; pbuf++;
+
+ for (rows = 1; rows <= MATRIX_ROWS; rows++)
+ {
+ row = matrix_get_row(rows-1);
+ if (rows < 10) { *pbuf = rows+48; pbuf++; *pbuf = ' '; pbuf++; *pbuf = ' '; pbuf++; }
+ else { *pbuf = (rows/10)+48; pbuf++; *pbuf = (rows%10)+48; pbuf++; *pbuf = ' '; pbuf++; }
+ for (cols = 0; cols < MATRIX_COLS; cols++)
+ {
+ if (row & 1 << cols) *pbuf = 'X';
+ else *pbuf = '.';
+ pbuf++;
+ }
+ *pbuf = '\r'; pbuf++;
+ *pbuf = '\n'; pbuf++;
+ }
+ *pbuf = 0;
+ dprint(buf);
+}
diff --git a/keyboards/massdrop/alt/matrix.h b/keyboards/massdrop/alt/matrix.h
new file mode 100644
index 000000000..3eab6dece
--- /dev/null
+++ b/keyboards/massdrop/alt/matrix.h
@@ -0,0 +1,77 @@
+/*
+Copyright 2011 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/>.
+*/
+#ifndef MATRIX_H
+#define MATRIX_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "keyboard.h"
+
+#if (MATRIX_COLS <= 8)
+typedef uint8_t matrix_row_t;
+#elif (MATRIX_COLS <= 16)
+typedef uint16_t matrix_row_t;
+#elif (MATRIX_COLS <= 32)
+typedef uint32_t matrix_row_t;
+#else
+#error "MATRIX_COLS: invalid value"
+#endif
+
+#define MATRIX_IS_ON(row, col) (matrix_get_row(row) && (1<<col))
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* number of matrix rows */
+uint8_t matrix_rows(void);
+/* number of matrix columns */
+uint8_t matrix_cols(void);
+/* should be called at early stage of startup before matrix_init.(optional) */
+void matrix_setup(void);
+/* intialize matrix for scaning. */
+void matrix_init(void);
+/* scan all key states on matrix */
+uint8_t matrix_scan(void);
+/* whether modified from previous scan. used after matrix_scan. */
+bool matrix_is_modified(void) __attribute__ ((deprecated));
+/* whether a switch is on */
+bool matrix_is_on(uint8_t row, uint8_t col);
+/* matrix state on row */
+matrix_row_t matrix_get_row(uint8_t row);
+/* print matrix for debug */
+void matrix_print(void);
+
+/* power control */
+void matrix_power_up(void);
+void matrix_power_down(void);
+
+/* executes code for Quantum */
+void matrix_init_quantum(void);
+void matrix_scan_quantum(void);
+
+void matrix_init_kb(void);
+void matrix_scan_kb(void);
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/keyboards/massdrop/alt/readme.md b/keyboards/massdrop/alt/readme.md
new file mode 100644
index 000000000..57e2e5f17
--- /dev/null
+++ b/keyboards/massdrop/alt/readme.md
@@ -0,0 +1,20 @@
+# ALT
+
+![ALT](https://massdrop-s3.imgix.net/product-images/alt-keyboard/FP/WNxwR19gTua3nxiiQWP3_AI7B3311%20copy%20page.jpg?auto=format&fm=jpg&fit=max&w=700&h=467&dpr=1&q=80)
+
+The Massdrop ALT is a 65% mechanical keyboard featuring dual USB-C connectors, an integrated Hi-Speed USB 2.0 hub, and fully customizable RGB backlighting and underlighting.
+
+Keyboard Maintainer: [Massdrop](https://github.com/massdrop)
+Hardware Supported: Massdrop, Inc. ALT PCBs utilizing Microchip's ATSAMD51J18A MCU and USB2422 2-Port USB 2.0 Hi-Speed Hub Controller, and ISSI's IS31FL3733 LED Drivers.
+Hardware Availability: [Massdrop ALT Mechanical Keyboard](https://www.massdrop.com/buy/massdrop-alt-mechanical-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make massdrop/alt:default
+
+For information on flashing this keyboard, visit the following links:
+
+[Massdrop Loader Releases](https://github.com/Massdrop/mdloader/releases/tag/0.0.1)
+[Massdrop Loader Repository and Instructions](https://github.com/Massdrop/mdloader)
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.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/massdrop/alt/rules.mk b/keyboards/massdrop/alt/rules.mk
new file mode 100644
index 000000000..c5539158f
--- /dev/null
+++ b/keyboards/massdrop/alt/rules.mk
@@ -0,0 +1,33 @@
+# project specific files
+SRC = led_programs.c
+SRC += matrix.c
+
+#For platform and packs
+ARM_ATSAM = SAMD51J18A
+MCU = cortex-m4
+
+CUSTOM_MATRIX = yes
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+VIRTSER_ENABLE = no # USB Serial Driver
+RAW_ENABLE = no # Raw device
+AUTO_SHIFT_ENABLE = no # Auto Shift
diff --git a/keyboards/massdrop/ctrl/config.h b/keyboards/massdrop/ctrl/config.h
new file mode 100644
index 000000000..31eccda87
--- /dev/null
+++ b/keyboards/massdrop/ctrl/config.h
@@ -0,0 +1,126 @@
+/*
+Copyright 2015 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x04D8
+#define PRODUCT_ID 0xEED2
+#define DEVICE_VER 0x0101
+
+#define MANUFACTURER "Massdrop Inc."
+#define PRODUCT "CTRL Keyboard"
+#define SERIAL_NUM "Unavailable"
+
+/* key matrix size */
+#define MATRIX_ROWS 11
+#define MATRIX_COLS 8
+
+/* MCU Port name definitions */
+#define PA 0
+#define PB 1
+
+/* Port and Pin definition of key row hardware configuration */
+#define MATRIX_ROW_PORTS PB, PB, PB, PB, PB, PB, PA, PA, PB, PB, PB
+#define MATRIX_ROW_PINS 4, 5, 6, 7, 8, 9, 10, 11, 10, 11, 12
+
+/* Port and Pin definition of key column hardware configuration */
+#define MATRIX_COL_PORTS PA, PA, PA, PA, PA, PA, PA, PA
+#define MATRIX_COL_PINS 0, 1, 2, 3, 4, 5, 6, 7
+
+/* This Shift Register expands available hardware output lines to control additional peripherals */
+/* It uses four lines from the MCU to provide 16 output lines */
+/* Shift Register Clock configuration (MCU to ShiftRegister.RCLK) */
+#define SR_EXP_RCLK_PORT PB
+#define SR_EXP_RCLK_PIN 14
+/* Shift Register Output Enable configuration (MCU to ShiftRegister.OE_N) */
+#define SR_EXP_OE_N_PORT PB
+#define SR_EXP_OE_N_PIN 15
+/* SERCOM port to use for Shift Register SPI */
+/* DATAOUT and SCLK must be configured to use hardware pins of this port */
+#define SR_EXP_SERCOM SERCOM2
+/* Shift Register SPI Data Out configuration (MCU.SERCOMx.PAD[0] to ShiftRegister.SER) */
+#define SR_EXP_DATAOUT_PORT PA
+#define SR_EXP_DATAOUT_PIN 12
+#define SR_EXP_DATAOUT_MUX 2
+/* Shift Register SPI Serial Clock configuration (MCU.SERCOMx.PAD[1] to ShiftRegister.SRCLK) */
+#define SR_EXP_SCLK_PORT PA
+#define SR_EXP_SCLK_PIN 13
+#define SR_EXP_SCLK_MUX 2
+
+/* Debug LED (Small LED Located near MCU) */
+#define DEBUG_LED_ENABLE 1
+#define DEBUG_LED_PORT PA
+#define DEBUG_LED_PIN 27
+
+/* Additional debugging ports */
+/* PCB M21 */
+#define DEBUG_PORT1_ENABLE 1
+#define DEBUG_PORT1_PORT PB
+#define DEBUG_PORT1_PIN 3
+/* PCB M23 */
+#define DEBUG_PORT2_ENABLE 1
+#define DEBUG_PORT2_PORT PB
+#define DEBUG_PORT2_PIN 17
+/* PCB M25 */
+#define DEBUG_PORT3_ENABLE 1
+#define DEBUG_PORT3_PORT PA
+#define DEBUG_PORT3_PIN 20
+
+/* Debug Boot Tracing - During boot sequence, ground this pin to halt and display debug code using Debug LED */
+/* This is useful in determining which hardware device may have malfunctioned or is improperly configured */
+/* Feature is automatically disabled after successful boot */
+/* PCB M27 */
+#define DEBUG_BOOT_TRACING_ENABLE 1
+#define DEBUG_BOOT_TRACING_PORT PB
+#define DEBUG_BOOT_TRACING_PIN 23
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* Force boot in NKRO mode */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/massdrop/ctrl/config_led.h b/keyboards/massdrop/ctrl/config_led.h
new file mode 100644
index 000000000..471ab7007
--- /dev/null
+++ b/keyboards/massdrop/ctrl/config_led.h
@@ -0,0 +1,191 @@
+/*
+Copyright 2018 Massdrop Inc.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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_led_h_
+#define _config_led_h_
+
+//Define number of ISSI3733 drivers being used (1...16)
+#define ISSI3733_DRIVER_COUNT 2
+
+//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
+#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
+
+//LED I2C bus speed
+#define I2C_HZ 580000
+
+//Count of LED bodies
+#define ISSI3733_LED_COUNT 119
+
+//Default Global Current Register value (Default brightness 0 - 255)
+#define ISSI3733_GCR_DEFAULT 128
+
+#define LED_GCR_MAX 165 //Max GCR value (0 - 255) WARNING: Raising this value may overload the LED drivers and USB bus
+#define LED_GCR_STEP 10 //GCR increment/decrement value
+
+//Automatic power rollback and recovery
+#define V5_HIGH 2540 //5V high level (After low power detect, point at which LEDs are allowed to use more power )
+#define V5_LOW 2480 //5V low level (LED power rolled back to stay above this limit)
+#define V5_CAT 2200 //5V catastrophic level (Host USB port potential to shut down)
+
+#define ANIMATION_SPEED_STEP 1
+
+#define BREATHE_MIN_STEP 0
+#define BREATHE_MAX_STEP 255
+
+//LED Mapping - More practically generated from a spreadsheet program
+//id: ID of the LED (Sync with PCB callouts)
+//x: Physical X coordinate of LED (units do not matter)
+//y: Physical Y coordinate of LED (units do not matter)
+//drv: 1-Based index of ISSI3773_DRIVER_ADDRESSES
+//cs: Matrix wiring CS col (1-16)
+//swr: Matrix wiring SW Red row (1-12)
+//swg: Matrix wiring SW Green row (1-12)
+//swb: Matrix wiring SW Blue row (1-12)
+//scan: Associated key scancode if any
+//Note: Origin 0,0 may be located anywhere as the software will do the final layout
+#define ISSI3733_LED_MAP { \
+ { .id = 1, .x = 0, .y = 0, .adr = { .drv = 2, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 0 }, \
+ { .id = 2, .x = 1.5, .y = 0, .adr = { .drv = 2, .cs = 3, .swr = 5, .swg = 4, .swb = 6 }, .scan = 1 }, \
+ { .id = 3, .x = 2.25, .y = 0, .adr = { .drv = 2, .cs = 4, .swr = 5, .swg = 4, .swb = 6 }, .scan = 2 }, \
+ { .id = 4, .x = 3, .y = 0, .adr = { .drv = 2, .cs = 5, .swr = 5, .swg = 4, .swb = 6 }, .scan = 3 }, \
+ { .id = 5, .x = 3.75, .y = 0, .adr = { .drv = 2, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 4 }, \
+ { .id = 6, .x = 4.875, .y = 0, .adr = { .drv = 2, .cs = 7, .swr = 5, .swg = 4, .swb = 6 }, .scan = 5 }, \
+ { .id = 7, .x = 5.625, .y = 0, .adr = { .drv = 2, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 6 }, \
+ { .id = 8, .x = 6.375, .y = 0, .adr = { .drv = 1, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 7 }, \
+ { .id = 9, .x = 7.125, .y = 0, .adr = { .drv = 1, .cs = 2, .swr = 5, .swg = 4, .swb = 6 }, .scan = 48 }, \
+ { .id = 10, .x = 8.25, .y = 0, .adr = { .drv = 1, .cs = 3, .swr = 5, .swg = 4, .swb = 6 }, .scan = 49 }, \
+ { .id = 11, .x = 9, .y = 0, .adr = { .drv = 1, .cs = 4, .swr = 5, .swg = 4, .swb = 6 }, .scan = 50 }, \
+ { .id = 12, .x = 9.75, .y = 0, .adr = { .drv = 1, .cs = 5, .swr = 5, .swg = 4, .swb = 6 }, .scan = 51 }, \
+ { .id = 13, .x = 10.5, .y = 0, .adr = { .drv = 1, .cs = 6, .swr = 5, .swg = 4, .swb = 6 }, .scan = 52 }, \
+ { .id = 14, .x = 11.625, .y = 0, .adr = { .drv = 1, .cs = 7, .swr = 5, .swg = 4, .swb = 6 }, .scan = 53 }, \
+ { .id = 15, .x = 12.375, .y = 0, .adr = { .drv = 1, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 54 }, \
+ { .id = 16, .x = 13.125, .y = 0, .adr = { .drv = 1, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 55 }, \
+ { .id = 17, .x = 0, .y = -1.125, .adr = { .drv = 2, .cs = 1, .swr = 8, .swg = 7, .swb = 9 }, .scan = 8 }, \
+ { .id = 18, .x = 0.75, .y = -1.125, .adr = { .drv = 2, .cs = 2, .swr = 8, .swg = 7, .swb = 9 }, .scan = 9 }, \
+ { .id = 19, .x = 1.5, .y = -1.125, .adr = { .drv = 2, .cs = 3, .swr = 8, .swg = 7, .swb = 9 }, .scan = 10 }, \
+ { .id = 20, .x = 2.25, .y = -1.125, .adr = { .drv = 2, .cs = 4, .swr = 8, .swg = 7, .swb = 9 }, .scan = 11 }, \
+ { .id = 21, .x = 3, .y = -1.125, .adr = { .drv = 2, .cs = 5, .swr = 8, .swg = 7, .swb = 9 }, .scan = 12 }, \
+ { .id = 22, .x = 3.75, .y = -1.125, .adr = { .drv = 2, .cs = 6, .swr = 8, .swg = 7, .swb = 9 }, .scan = 13 }, \
+ { .id = 23, .x = 4.5, .y = -1.125, .adr = { .drv = 2, .cs = 7, .swr = 8, .swg = 7, .swb = 9 }, .scan = 14 }, \
+ { .id = 24, .x = 5.25, .y = -1.125, .adr = { .drv = 2, .cs = 8, .swr = 8, .swg = 7, .swb = 9 }, .scan = 15 }, \
+ { .id = 25, .x = 6, .y = -1.125, .adr = { .drv = 1, .cs = 1, .swr = 8, .swg = 7, .swb = 9 }, .scan = 56 }, \
+ { .id = 26, .x = 6.75, .y = -1.125, .adr = { .drv = 1, .cs = 2, .swr = 8, .swg = 7, .swb = 9 }, .scan = 57 }, \
+ { .id = 27, .x = 7.5, .y = -1.125, .adr = { .drv = 1, .cs = 3, .swr = 8, .swg = 7, .swb = 9 }, .scan = 58 }, \
+ { .id = 28, .x = 8.25, .y = -1.125, .adr = { .drv = 1, .cs = 4, .swr = 8, .swg = 7, .swb = 9 }, .scan = 59 }, \
+ { .id = 29, .x = 9, .y = -1.125, .adr = { .drv = 1, .cs = 5, .swr = 8, .swg = 7, .swb = 9 }, .scan = 60 }, \
+ { .id = 30, .x = 10.125, .y = -1.125, .adr = { .drv = 1, .cs = 6, .swr = 8, .swg = 7, .swb = 9 }, .scan = 61 }, \
+ { .id = 31, .x = 11.625, .y = -1.125, .adr = { .drv = 1, .cs = 7, .swr = 8, .swg = 7, .swb = 9 }, .scan = 62 }, \
+ { .id = 32, .x = 12.375, .y = -1.125, .adr = { .drv = 1, .cs = 8, .swr = 8, .swg = 7, .swb = 9 }, .scan = 63 }, \
+ { .id = 33, .x = 13.125, .y = -1.125, .adr = { .drv = 1, .cs = 9, .swr = 8, .swg = 7, .swb = 9 }, .scan = 79 }, \
+ { .id = 34, .x = 0.188, .y = -1.875, .adr = { .drv = 2, .cs = 1, .swr = 11, .swg = 10, .swb = 12 }, .scan = 16 }, \
+ { .id = 35, .x = 1.125, .y = -1.875, .adr = { .drv = 2, .cs = 2, .swr = 11, .swg = 10, .swb = 12 }, .scan = 17 }, \
+ { .id = 36, .x = 1.875, .y = -1.875, .adr = { .drv = 2, .cs = 3, .swr = 11, .swg = 10, .swb = 12 }, .scan = 18 }, \
+ { .id = 37, .x = 2.625, .y = -1.875, .adr = { .drv = 2, .cs = 4, .swr = 11, .swg = 10, .swb = 12 }, .scan = 19 }, \
+ { .id = 38, .x = 3.375, .y = -1.875, .adr = { .drv = 2, .cs = 5, .swr = 11, .swg = 10, .swb = 12 }, .scan = 20 }, \
+ { .id = 39, .x = 4.125, .y = -1.875, .adr = { .drv = 2, .cs = 6, .swr = 11, .swg = 10, .swb = 12 }, .scan = 21 }, \
+ { .id = 40, .x = 4.875, .y = -1.875, .adr = { .drv = 2, .cs = 7, .swr = 11, .swg = 10, .swb = 12 }, .scan = 22 }, \
+ { .id = 41, .x = 5.625, .y = -1.875, .adr = { .drv = 2, .cs = 8, .swr = 11, .swg = 10, .swb = 12 }, .scan = 23 }, \
+ { .id = 42, .x = 6.375, .y = -1.875, .adr = { .drv = 1, .cs = 1, .swr = 11, .swg = 10, .swb = 12 }, .scan = 64 }, \
+ { .id = 43, .x = 7.125, .y = -1.875, .adr = { .drv = 1, .cs = 2, .swr = 11, .swg = 10, .swb = 12 }, .scan = 65 }, \
+ { .id = 44, .x = 7.875, .y = -1.875, .adr = { .drv = 1, .cs = 3, .swr = 11, .swg = 10, .swb = 12 }, .scan = 66 }, \
+ { .id = 45, .x = 8.625, .y = -1.875, .adr = { .drv = 1, .cs = 4, .swr = 11, .swg = 10, .swb = 12 }, .scan = 67 }, \
+ { .id = 46, .x = 9.375, .y = -1.875, .adr = { .drv = 1, .cs = 5, .swr = 11, .swg = 10, .swb = 12 }, .scan = 68 }, \
+ { .id = 47, .x = 10.312, .y = -1.875, .adr = { .drv = 1, .cs = 6, .swr = 11, .swg = 10, .swb = 12 }, .scan = 69 }, \
+ { .id = 48, .x = 11.625, .y = -1.875, .adr = { .drv = 1, .cs = 7, .swr = 11, .swg = 10, .swb = 12 }, .scan = 70 }, \
+ { .id = 49, .x = 12.375, .y = -1.875, .adr = { .drv = 1, .cs = 8, .swr = 11, .swg = 10, .swb = 12 }, .scan = 71 }, \
+ { .id = 50, .x = 13.125, .y = -1.875, .adr = { .drv = 1, .cs = 9, .swr = 11, .swg = 10, .swb = 12 }, .scan = 78 }, \
+ { .id = 51, .x = 0.281, .y = -2.625, .adr = { .drv = 2, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 24 }, \
+ { .id = 52, .x = 1.313, .y = -2.625, .adr = { .drv = 2, .cs = 2, .swr = 5, .swg = 4, .swb = 6 }, .scan = 25 }, \
+ { .id = 53, .x = 2.063, .y = -2.625, .adr = { .drv = 2, .cs = 13, .swr = 11, .swg = 10, .swb = 12 }, .scan = 26 }, \
+ { .id = 54, .x = 2.812, .y = -2.625, .adr = { .drv = 2, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 27 }, \
+ { .id = 55, .x = 3.562, .y = -2.625, .adr = { .drv = 2, .cs = 11, .swr = 11, .swg = 10, .swb = 12 }, .scan = 28 }, \
+ { .id = 56, .x = 4.312, .y = -2.625, .adr = { .drv = 2, .cs = 6, .swr = 5, .swg = 4, .swb = 6 }, .scan = 29 }, \
+ { .id = 57, .x = 5.062, .y = -2.625, .adr = { .drv = 2, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 30 }, \
+ { .id = 58, .x = 5.812, .y = -2.625, .adr = { .drv = 2, .cs = 9, .swr = 11, .swg = 10, .swb = 12 }, .scan = 31 }, \
+ { .id = 59, .x = 6.562, .y = -2.625, .adr = { .drv = 1, .cs = 16, .swr = 11, .swg = 10, .swb = 12 }, .scan = 72 }, \
+ { .id = 60, .x = 7.312, .y = -2.625, .adr = { .drv = 1, .cs = 15, .swr = 11, .swg = 10, .swb = 12 }, .scan = 73 }, \
+ { .id = 61, .x = 8.062, .y = -2.625, .adr = { .drv = 1, .cs = 14, .swr = 11, .swg = 10, .swb = 12 }, .scan = 74 }, \
+ { .id = 62, .x = 8.812, .y = -2.625, .adr = { .drv = 1, .cs = 13, .swr = 11, .swg = 10, .swb = 12 }, .scan = 75 }, \
+ { .id = 63, .x = 10.031, .y = -2.625, .adr = { .drv = 1, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 76 }, \
+ { .id = 64, .x = 0.469, .y = -3.375, .adr = { .drv = 2, .cs = 14, .swr = 5, .swg = 4, .swb = 6 }, .scan = 32 }, \
+ { .id = 65, .x = 1.688, .y = -3.375, .adr = { .drv = 2, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 33 }, \
+ { .id = 66, .x = 2.438, .y = -3.375, .adr = { .drv = 2, .cs = 12, .swr = 8, .swg = 7, .swb = 9 }, .scan = 34 }, \
+ { .id = 67, .x = 3.188, .y = -3.375, .adr = { .drv = 2, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 35 }, \
+ { .id = 68, .x = 3.938, .y = -3.375, .adr = { .drv = 2, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 36 }, \
+ { .id = 69, .x = 4.688, .y = -3.375, .adr = { .drv = 2, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 37 }, \
+ { .id = 70, .x = 5.438, .y = -3.375, .adr = { .drv = 2, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 38 }, \
+ { .id = 71, .x = 6.188, .y = -3.375, .adr = { .drv = 2, .cs = 9, .swr = 8, .swg = 7, .swb = 9 }, .scan = 39 }, \
+ { .id = 72, .x = 6.938, .y = -3.375, .adr = { .drv = 1, .cs = 16, .swr = 8, .swg = 7, .swb = 9 }, .scan = 80 }, \
+ { .id = 73, .x = 7.688, .y = -3.375, .adr = { .drv = 1, .cs = 15, .swr = 8, .swg = 7, .swb = 9 }, .scan = 81 }, \
+ { .id = 74, .x = 8.438, .y = -3.375, .adr = { .drv = 1, .cs = 14, .swr = 8, .swg = 7, .swb = 9 }, .scan = 82 }, \
+ { .id = 75, .x = 9.844, .y = -3.375, .adr = { .drv = 1, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 83 }, \
+ { .id = 76, .x = 12.375, .y = -3.375, .adr = { .drv = 1, .cs = 11, .swr = 8, .swg = 7, .swb = 9 }, .scan = 77 }, \
+ { .id = 77, .x = 0.094, .y = -4.125, .adr = { .drv = 2, .cs = 14, .swr = 11, .swg = 10, .swb = 12 }, .scan = 40 }, \
+ { .id = 78, .x = 1.031, .y = -4.125, .adr = { .drv = 2, .cs = 14, .swr = 8, .swg = 7, .swb = 9 }, .scan = 41 }, \
+ { .id = 79, .x = 1.969, .y = -4.125, .adr = { .drv = 2, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 42 }, \
+ { .id = 80, .x = 4.781, .y = -4.125, .adr = { .drv = 2, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 43 }, \
+ { .id = 81, .x = 7.594, .y = -4.125, .adr = { .drv = 1, .cs = 16, .swr = 5, .swg = 4, .swb = 6 }, .scan = 44 }, \
+ { .id = 82, .x = 8.531, .y = -4.125, .adr = { .drv = 1, .cs = 15, .swr = 5, .swg = 4, .swb = 6 }, .scan = 45 }, \
+ { .id = 83, .x = 9.469, .y = -4.125, .adr = { .drv = 1, .cs = 14, .swr = 5, .swg = 4, .swb = 6 }, .scan = 46 }, \
+ { .id = 84, .x = 10.406, .y = -4.125, .adr = { .drv = 1, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 47 }, \
+ { .id = 85, .x = 11.625, .y = -4.125, .adr = { .drv = 1, .cs = 12, .swr = 8, .swg = 7, .swb = 9 }, .scan = 84 }, \
+ { .id = 86, .x = 12.375, .y = -4.125, .adr = { .drv = 1, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 85 }, \
+ { .id = 87, .x = 13.125, .y = -4.125, .adr = { .drv = 1, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 86 }, \
+ { .id = 88, .x = 13.433, .y = -4.43, .adr = { .drv = 1, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 89, .x = 12.285, .y = -4.535, .adr = { .drv = 1, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 90, .x = 11.14, .y = -4.535, .adr = { .drv = 1, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 91, .x = 9.995, .y = -4.535, .adr = { .drv = 1, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 92, .x = 8.85, .y = -4.535, .adr = { .drv = 1, .cs = 15, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 93, .x = 7.705, .y = -4.535, .adr = { .drv = 1, .cs = 16, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 94, .x = 6.56, .y = -4.535, .adr = { .drv = 2, .cs = 9, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 95, .x = 5.415, .y = -4.535, .adr = { .drv = 2, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 96, .x = 4.27, .y = -4.535, .adr = { .drv = 2, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 97, .x = 3.125, .y = -4.535, .adr = { .drv = 2, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 98, .x = 1.98, .y = -4.535, .adr = { .drv = 2, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 99, .x = 0.835, .y = -4.535, .adr = { .drv = 2, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 100, .x = -0.307, .y = -4.43, .adr = { .drv = 2, .cs = 15, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 101, .x = -0.41, .y = -3.245, .adr = { .drv = 2, .cs = 15, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
+ { .id = 102, .x = -0.41, .y = -2.06, .adr = { .drv = 2, .cs = 15, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
+ { .id = 103, .x = -0.41, .y = -0.875, .adr = { .drv = 2, .cs = 15, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
+ { .id = 104, .x = -0.308, .y = 0.31, .adr = { .drv = 2, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 105, .x = 0.835, .y = 0.415, .adr = { .drv = 2, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 106, .x = 1.98, .y = 0.415, .adr = { .drv = 2, .cs = 4, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 107, .x = 3.125, .y = 0.415, .adr = { .drv = 2, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 108, .x = 4.27, .y = 0.415, .adr = { .drv = 2, .cs = 7, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 109, .x = 5.415, .y = 0.415, .adr = { .drv = 2, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 110, .x = 6.56, .y = 0.415, .adr = { .drv = 1, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 111, .x = 7.705, .y = 0.415, .adr = { .drv = 1, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 112, .x = 8.85, .y = 0.415, .adr = { .drv = 1, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 113, .x = 9.995, .y = 0.415, .adr = { .drv = 1, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 114, .x = 11.14, .y = 0.415, .adr = { .drv = 1, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 115, .x = 12.285, .y = 0.415, .adr = { .drv = 1, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 116, .x = 13.432, .y = 0.31, .adr = { .drv = 1, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
+ { .id = 117, .x = 13.535, .y = -0.875, .adr = { .drv = 1, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
+ { .id = 118, .x = 13.535, .y = -2.06, .adr = { .drv = 1, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
+ { .id = 119, .x = 13.535, .y = -3.245, .adr = { .drv = 1, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
+};
+
+#define USB_LED_INDICATOR_ENABLE //Comment out to disable indicator functionality
+#ifdef USB_LED_INDICATOR_ENABLE //Scan codes refer to actual key matrix codes, not KC_* (255 to disable)
+ #define USB_LED_NUM_LOCK_SCANCODE 255
+ #define USB_LED_CAPS_LOCK_SCANCODE 24
+ #define USB_LED_SCROLL_LOCK_SCANCODE 54
+ #define USB_LED_COMPOSE_SCANCODE 255
+ #define USB_LED_KANA_SCANCODE 255
+#endif //USB_LED_INDICATOR_ENABLE
+
+#endif //_config_led_h_
diff --git a/keyboards/massdrop/ctrl/ctrl.h b/keyboards/massdrop/ctrl/ctrl.h
new file mode 100644
index 000000000..c83efca16
--- /dev/null
+++ b/keyboards/massdrop/ctrl/ctrl.h
@@ -0,0 +1,42 @@
+#pragma once
+
+#include "quantum.h"
+#include "config_led.h"
+#include "matrix.h"
+
+#include "i2c_master.h"
+#include "led_matrix.h" //For led keycodes
+#include "usb/udi_cdc.h"
+#include "usb/usb2422.h"
+
+#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, K65, K66, K67, K68, K69, K70, K71, K72, K73, K74, K75, \
+ K76, K77, K78, K79, K80, K81, K82, K83, K84, K85, K86, K87 \
+ \
+) { \
+ { K01, K02, K03, K04, K05, K06, K07, K08 }, \
+ { K17, K18, K19, K20, K21, K22, K23, K24 }, \
+ { K34, K35, K36, K37, K38, K39, K40, K41 }, \
+ { K51, K52, K53, K54, K55, K56, K57, K58 }, \
+ { K64, K65, K66, K67, K68, K69, K70, K71 }, \
+ { K77, K78, K79, K80, K81, K82, K83, K84 }, \
+ { K09, K10, K11, K12, K13, K14, K15, K16 }, \
+ { K25, K26, K27, K28, K29, K30, K31, K32 }, \
+ { K42, K43, K44, K45, K46, K47, K48, K49 }, \
+ { K59, K60, K61, K62, K63, K76, K50, K33 }, \
+ { K72, K73, K74, K75, K85, K86, K87, }, \
+}
+
+#define TOGGLE_FLAG_AND_PRINT(var, name) { \
+ if (var) { \
+ dprintf(name " disabled\r\n"); \
+ var = !var; \
+ } else { \
+ var = !var; \
+ dprintf(name " enabled\r\n"); \
+ } \
+ }
diff --git a/keyboards/massdrop/ctrl/info.json b/keyboards/massdrop/ctrl/info.json
new file mode 100644
index 000000000..2212540e5
--- /dev/null
+++ b/keyboards/massdrop/ctrl/info.json
@@ -0,0 +1,100 @@
+{
+ "keyboard_name": "CTRL",
+ "url": "https://www.massdrop.com/buy/massdrop-ctrl-mechanical-keyboard",
+ "maintainer": "Massdrop",
+ "width": 18.5,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"ESCAPE", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"PRINT SCREEN", "x":15.5, "y":0},
+ {"label":"SCROLL LOCK", "x":16.5, "y":0},
+ {"label":"PAUSE BREAK", "x":17.5, "y":0},
+ {"label":"BACKTICK", "x":0, "y":1.5},
+ {"label":"1", "x":1, "y":1.5},
+ {"label":"2", "x":2, "y":1.5},
+ {"label":"3", "x":3, "y":1.5},
+ {"label":"4", "x":4, "y":1.5},
+ {"label":"5", "x":5, "y":1.5},
+ {"label":"6", "x":6, "y":1.5},
+ {"label":"7", "x":7, "y":1.5},
+ {"label":"8", "x":8, "y":1.5},
+ {"label":"9", "x":9, "y":1.5},
+ {"label":"0", "x":10, "y":1.5},
+ {"label":"MINUS", "x":11, "y":1.5},
+ {"label":"EQUALS", "x":12, "y":1.5},
+ {"label":"BACKSPACE", "x":13, "y":1.5, "w":2},
+ {"label":"INSERT", "x":15.5, "y":1.5},
+ {"label":"HOME", "x":16.5, "y":1.5},
+ {"label":"PAGE UP", "x":17.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":"LEFT BRACKET", "x":11.5, "y":2.5},
+ {"label":"RIGHT BRACKET", "x":12.5, "y":2.5},
+ {"label":"BACK SLASH", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"DELETE", "x":15.5, "y":2.5},
+ {"label":"END", "x":16.5, "y":2.5},
+ {"label":"PAGE DOWN", "x":17.5, "y":2.5},
+ {"label":"CAPS LOCK", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":"SEMICOLON", "x":10.75, "y":3.5},
+ {"label":"SINGLE TICK", "x":11.75, "y":3.5},
+ {"label":"ENTER", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"LEFT 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":"COMMA", "x":9.25, "y":4.5},
+ {"label":"PERIOD", "x":10.25, "y":4.5},
+ {"label":"FORWARD SLASH", "x":11.25, "y":4.5},
+ {"label":"RIGHT SHIFT", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"UP ARROW", "x":16.5, "y":4.5},
+ {"label":"LEFT CTRL", "x":0.005, "y":5.5, "w":1.24},
+ {"label":"LEFT WIN", "x":1.255, "y":5.5, "w":1.24},
+ {"label":"LEFT ALT", "x":2.505, "y":5.5, "w":1.24},
+ {"label":"SPACEBAR", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"RIGHT ALT", "x":10, "y":5.5, "w":1.25},
+ {"label":"FN", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"MENU", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"RIGHT CTRL", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"LEFT ARROW", "x":15.5, "y":5.5},
+ {"label":"DOWN ARROW", "x":16.5, "y":5.5},
+ {"label":"RIGHT ARROW", "x":17.5, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/massdrop/ctrl/keymaps/default/keymap.c b/keyboards/massdrop/ctrl/keymaps/default/keymap.c
new file mode 100644
index 000000000..88c1ac312
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/default/keymap.c
@@ -0,0 +1,196 @@
+#include QMK_KEYBOARD_H
+
+enum ctrl_keycodes {
+ L_BRI = SAFE_RANGE, //LED Brightness Increase
+ L_BRD, //LED Brightness Decrease
+ L_PTN, //LED Pattern Select Next
+ L_PTP, //LED Pattern Select Previous
+ L_PSI, //LED Pattern Speed Increase
+ L_PSD, //LED Pattern Speed Decrease
+ L_T_MD, //LED Toggle Mode
+ L_T_ONF, //LED Toggle On / Off
+ L_ON, //LED On
+ L_OFF, //LED Off
+ L_T_BR, //LED Toggle Breath Effect
+ L_T_PTD, //LED Toggle Scrolling Pattern Direction
+ U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active
+ U_T_AGCR, //USB Toggle Automatic GCR control
+ DBG_TOG, //DEBUG Toggle On / Off
+ DBG_MTRX, //DEBUG Toggle Matrix Prints
+ DBG_KBD, //DEBUG Toggle Keyboard Prints
+ DBG_MOU, //DEBUG Toggle Mouse Prints
+ MD_BOOT, //Restart into bootloader after hold timeout
+};
+
+#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
+
+keymap_config_t keymap_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+ [1] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MSTP, KC_VOLU, \
+ L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_VOLD, \
+ L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ /*
+ [X] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ */
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+};
+
+#define MODS_SHIFT (keyboard_report->mods & MOD_BIT(KC_LSHIFT) || keyboard_report->mods & MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL (keyboard_report->mods & MOD_BIT(KC_LCTL) || keyboard_report->mods & MOD_BIT(KC_RCTRL))
+#define MODS_ALT (keyboard_report->mods & MOD_BIT(KC_LALT) || keyboard_report->mods & MOD_BIT(KC_RALT))
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ static uint32_t key_timer;
+
+ switch (keycode) {
+ case L_BRI:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
+ else gcr_desired += LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_BRD:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
+ else gcr_desired -= LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_PTN:
+ if (record->event.pressed) {
+ if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
+ else led_animation_id++;
+ }
+ return false;
+ case L_PTP:
+ if (record->event.pressed) {
+ if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
+ else led_animation_id--;
+ }
+ return false;
+ case L_PSI:
+ if (record->event.pressed) {
+ led_animation_speed += ANIMATION_SPEED_STEP;
+ }
+ return false;
+ case L_PSD:
+ if (record->event.pressed) {
+ led_animation_speed -= ANIMATION_SPEED_STEP;
+ if (led_animation_speed < 0) led_animation_speed = 0;
+ }
+ return false;
+ case L_T_MD:
+ if (record->event.pressed) {
+ led_lighting_mode++;
+ if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
+ }
+ return false;
+ case L_T_ONF:
+ if (record->event.pressed) {
+ led_enabled = !led_enabled;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_ON:
+ if (record->event.pressed) {
+ led_enabled = 1;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_OFF:
+ if (record->event.pressed) {
+ led_enabled = 0;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_T_BR:
+ if (record->event.pressed) {
+ led_animation_breathing = !led_animation_breathing;
+ if (led_animation_breathing) {
+ gcr_breathe = gcr_desired;
+ led_animation_breathe_cur = BREATHE_MIN_STEP;
+ breathe_dir = 1;
+ }
+ }
+ return false;
+ case L_T_PTD:
+ if (record->event.pressed) {
+ led_animation_direction = !led_animation_direction;
+ }
+ return false;
+ case U_T_AUTO:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
+ }
+ return false;
+ case U_T_AGCR:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
+ }
+ return false;
+ case DBG_TOG:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
+ }
+ return false;
+ case DBG_MTRX:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
+ }
+ return false;
+ case DBG_KBD:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
+ }
+ return false;
+ case DBG_MOU:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
+ }
+ return false;
+ case MD_BOOT:
+ if (record->event.pressed) {
+ key_timer = timer_read32();
+ } else {
+ if (timer_elapsed32(key_timer) >= 500) {
+ reset_keyboard();
+ }
+ }
+ return false;
+ default:
+ return true; //Process all other keycodes normally
+ }
+}
diff --git a/keyboards/massdrop/ctrl/keymaps/mac/keymap.c b/keyboards/massdrop/ctrl/keymaps/mac/keymap.c
new file mode 100644
index 000000000..6c5dfe19c
--- /dev/null
+++ b/keyboards/massdrop/ctrl/keymaps/mac/keymap.c
@@ -0,0 +1,196 @@
+#include QMK_KEYBOARD_H
+
+enum ctrl_keycodes {
+ L_BRI = SAFE_RANGE, //LED Brightness Increase
+ L_BRD, //LED Brightness Decrease
+ L_PTN, //LED Pattern Select Next
+ L_PTP, //LED Pattern Select Previous
+ L_PSI, //LED Pattern Speed Increase
+ L_PSD, //LED Pattern Speed Decrease
+ L_T_MD, //LED Toggle Mode
+ L_T_ONF, //LED Toggle On / Off
+ L_ON, //LED On
+ L_OFF, //LED Off
+ L_T_BR, //LED Toggle Breath Effect
+ L_T_PTD, //LED Toggle Scrolling Pattern Direction
+ U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active
+ U_T_AGCR, //USB Toggle Automatic GCR control
+ DBG_TOG, //DEBUG Toggle On / Off
+ DBG_MTRX, //DEBUG Toggle Matrix Prints
+ DBG_KBD, //DEBUG Toggle Keyboard Prints
+ DBG_MOU, //DEBUG Toggle Mouse Prints
+ MD_BOOT, //Restart into bootloader after hold timeout
+};
+
+#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
+
+keymap_config_t keymap_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_APP, 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_MUTE, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_MSTP, KC_VOLU, \
+ L_T_BR, L_PSD, L_BRI, L_PSI, KC_TRNS, KC_TRNS, KC_TRNS, U_T_AUTO,U_T_AGCR,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, KC_VOLD, \
+ L_T_PTD, L_PTP, L_BRD, L_PTN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, L_T_MD, L_T_ONF, KC_TRNS, KC_TRNS, MD_BOOT, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ /*
+ [X] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, TG_NKRO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS \
+ ),
+ */
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+// Runs just one time when the keyboard initializes.
+void matrix_init_user(void) {
+};
+
+// Runs constantly in the background, in a loop.
+void matrix_scan_user(void) {
+};
+
+#define MODS_SHIFT (keyboard_report->mods & MOD_BIT(KC_LSHIFT) || keyboard_report->mods & MOD_BIT(KC_RSHIFT))
+#define MODS_CTRL (keyboard_report->mods & MOD_BIT(KC_LCTL) || keyboard_report->mods & MOD_BIT(KC_RCTRL))
+#define MODS_ALT (keyboard_report->mods & MOD_BIT(KC_LALT) || keyboard_report->mods & MOD_BIT(KC_RALT))
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ static uint32_t key_timer;
+
+ switch (keycode) {
+ case L_BRI:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > LED_GCR_MAX - gcr_desired) gcr_desired = LED_GCR_MAX;
+ else gcr_desired += LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_BRD:
+ if (record->event.pressed) {
+ if (LED_GCR_STEP > gcr_desired) gcr_desired = 0;
+ else gcr_desired -= LED_GCR_STEP;
+ if (led_animation_breathing) gcr_breathe = gcr_desired;
+ }
+ return false;
+ case L_PTN:
+ if (record->event.pressed) {
+ if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
+ else led_animation_id++;
+ }
+ return false;
+ case L_PTP:
+ if (record->event.pressed) {
+ if (led_animation_id == 0) led_animation_id = led_setups_count - 1;
+ else led_animation_id--;
+ }
+ return false;
+ case L_PSI:
+ if (record->event.pressed) {
+ led_animation_speed += ANIMATION_SPEED_STEP;
+ }
+ return false;
+ case L_PSD:
+ if (record->event.pressed) {
+ led_animation_speed -= ANIMATION_SPEED_STEP;
+ if (led_animation_speed < 0) led_animation_speed = 0;
+ }
+ return false;
+ case L_T_MD:
+ if (record->event.pressed) {
+ led_lighting_mode++;
+ if (led_lighting_mode > LED_MODE_MAX_INDEX) led_lighting_mode = LED_MODE_NORMAL;
+ }
+ return false;
+ case L_T_ONF:
+ if (record->event.pressed) {
+ led_enabled = !led_enabled;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_ON:
+ if (record->event.pressed) {
+ led_enabled = 1;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_OFF:
+ if (record->event.pressed) {
+ led_enabled = 0;
+ I2C3733_Control_Set(led_enabled);
+ }
+ return false;
+ case L_T_BR:
+ if (record->event.pressed) {
+ led_animation_breathing = !led_animation_breathing;
+ if (led_animation_breathing) {
+ gcr_breathe = gcr_desired;
+ led_animation_breathe_cur = BREATHE_MIN_STEP;
+ breathe_dir = 1;
+ }
+ }
+ return false;
+ case L_T_PTD:
+ if (record->event.pressed) {
+ led_animation_direction = !led_animation_direction;
+ }
+ return false;
+ case U_T_AUTO:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
+ }
+ return false;
+ case U_T_AGCR:
+ if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
+ TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
+ }
+ return false;
+ case DBG_TOG:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
+ }
+ return false;
+ case DBG_MTRX:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_matrix, "Debug matrix");
+ }
+ return false;
+ case DBG_KBD:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_keyboard, "Debug keyboard");
+ }
+ return false;
+ case DBG_MOU:
+ if (record->event.pressed) {
+ TOGGLE_FLAG_AND_PRINT(debug_mouse, "Debug mouse");
+ }
+ return false;
+ case MD_BOOT:
+ if (record->event.pressed) {
+ key_timer = timer_read32();
+ } else {
+ if (timer_elapsed32(key_timer) >= 500) {
+ reset_keyboard();
+ }
+ }
+ return false;
+ default:
+ return true; //Process all other keycodes normally
+ }
+}
diff --git a/keyboards/massdrop/ctrl/led_programs.c b/keyboards/massdrop/ctrl/led_programs.c
new file mode 100644
index 000000000..ca2701645
--- /dev/null
+++ b/keyboards/massdrop/ctrl/led_programs.c
@@ -0,0 +1,120 @@
+/*
+Copyright 2018 Massdrop Inc.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "ctrl.h"
+#include "led_matrix.h"
+
+//Teal <-> Salmon
+led_setup_t leds_teal_salmon[] = {
+ { .hs = 0, .he = 33, .rs = 24, .re = 24, .gs = 215, .ge = 215, .bs = 204, .be = 204, .ef = EF_NONE },
+ { .hs = 33, .he = 66, .rs = 24, .re = 255, .gs = 215, .ge = 114, .bs = 204, .be = 118, .ef = EF_NONE },
+ { .hs = 66, .he = 100, .rs = 255, .re = 255, .gs = 114, .ge = 114, .bs = 118, .be = 118, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//Yellow
+led_setup_t leds_yellow[] = {
+ { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//Off
+led_setup_t leds_off[] = {
+ { .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//Red
+led_setup_t leds_red[] = {
+ { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//Green
+led_setup_t leds_green[] = {
+ { .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//Blue
+led_setup_t leds_blue[] = {
+ { .hs = 0, .he = 100, .rs = 0, .re = 0, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//White
+led_setup_t leds_white[] = {
+ { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 255, .be = 255, .ef = EF_NONE },
+ { .end = 1 },
+};
+
+//White with moving red stripe
+led_setup_t leds_white_with_red_stripe[] = {
+ { .hs = 0, .he = 100, .rs = 255, .re = 255, .gs = 255, .ge = 255, .bs = 255, .be = 255, .ef = EF_NONE },
+ { .hs = 0, .he = 15, .rs = 0, .re = 0, .gs = 0, .ge = 255, .bs = 0, .be = 255, .ef = EF_SCR_R | EF_SUBTRACT },
+ { .hs = 15, .he = 30, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 0, .ef = EF_SCR_R | EF_SUBTRACT },
+ { .end = 1 },
+};
+
+//Black with moving red stripe
+led_setup_t leds_black_with_red_stripe[] = {
+ { .hs = 0, .he = 15, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_SCR_R },
+ { .hs = 15, .he = 30, .rs = 255, .re = 0, .gs = 0, .ge = 0, .bs = 0, .be = 0, .ef = EF_SCR_R },
+ { .end = 1 },
+};
+
+//Rainbow no scrolling
+led_setup_t leds_rainbow_ns[] = {
+ { .hs = 0, .he = 16.67, .rs = 255, .re = 255, .gs = 0, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER },
+ { .hs = 16.67, .he = 33.33, .rs = 255, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER },
+ { .hs = 33.33, .he = 50, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 255, .ef = EF_OVER },
+ { .hs = 50, .he = 66.67, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER },
+ { .hs = 66.67, .he = 83.33, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER },
+ { .hs = 83.33, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 0, .ef = EF_OVER },
+ { .end = 1 },
+};
+
+//Rainbow scrolling
+led_setup_t leds_rainbow_s[] = {
+ { .hs = 0, .he = 16.67, .rs = 255, .re = 255, .gs = 0, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER | EF_SCR_R },
+ { .hs = 16.67, .he = 33.33, .rs = 255, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 0, .ef = EF_OVER | EF_SCR_R },
+ { .hs = 33.33, .he = 50, .rs = 0, .re = 0, .gs = 255, .ge = 255, .bs = 0, .be = 255, .ef = EF_OVER | EF_SCR_R },
+ { .hs = 50, .he = 66.67, .rs = 0, .re = 0, .gs = 255, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER | EF_SCR_R },
+ { .hs = 66.67, .he = 83.33, .rs = 0, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 255, .ef = EF_OVER | EF_SCR_R },
+ { .hs = 83.33, .he = 100, .rs = 255, .re = 255, .gs = 0, .ge = 0, .bs = 255, .be = 0, .ef = EF_OVER | EF_SCR_R },
+ { .end = 1 },
+};
+
+//Add new LED animations here using one from above as example
+//The last entry must be { .end = 1 }
+//Add the new animation name to the list below following its format
+
+void *led_setups[] = {
+ leds_rainbow_s,
+ leds_rainbow_ns,
+ leds_teal_salmon,
+ leds_yellow,
+ leds_red,
+ leds_green,
+ leds_blue,
+ leds_white,
+ leds_white_with_red_stripe,
+ leds_black_with_red_stripe,
+ leds_off
+};
+
+const uint8_t led_setups_count = sizeof(led_setups) / sizeof(led_setups[0]);
diff --git a/keyboards/massdrop/ctrl/matrix.c b/keyboards/massdrop/ctrl/matrix.c
new file mode 100644
index 000000000..3580577dc
--- /dev/null
+++ b/keyboards/massdrop/ctrl/matrix.c
@@ -0,0 +1,182 @@
+/*
+Copyright 2018 Massdrop Inc.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "ctrl.h"
+
+#include "d51_util.h"
+#include "debug.h"
+#include "clks.h"
+#include <string.h>
+
+matrix_row_t mlatest[MATRIX_ROWS];
+matrix_row_t mlast[MATRIX_ROWS];
+matrix_row_t mdebounced[MATRIX_ROWS];
+
+uint8_t row_ports[] = { MATRIX_ROW_PORTS };
+uint8_t row_pins[] = { MATRIX_ROW_PINS };
+uint8_t col_ports[] = { MATRIX_COL_PORTS };
+uint8_t col_pins[] = { MATRIX_COL_PINS };
+uint32_t row_masks[2]; //NOTE: If more than PA PB used in the future, adjust code to accomodate
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void matrix_init(void)
+{
+ memset(mlatest, 0, MATRIX_ROWS * sizeof(matrix_row_t));
+ memset(mlast, 0, MATRIX_ROWS * sizeof(matrix_row_t));
+ memset(mdebounced, 0, MATRIX_ROWS * sizeof(matrix_row_t));
+
+ row_masks[PA] = 0;
+ row_masks[PB] = 0;
+
+ uint8_t row;
+ for (row = 0; row < MATRIX_ROWS; row++)
+ {
+ PORT->Group[row_ports[row]].DIRCLR.reg = 1 << row_pins[row]; //Input
+ PORT->Group[row_ports[row]].OUTCLR.reg = 1 << row_pins[row]; //Low
+ PORT->Group[row_ports[row]].PINCFG[row_pins[row]].bit.INEN = 1; //Input Enable,
+ PORT->Group[row_ports[row]].PINCFG[row_pins[row]].bit.PULLEN = 1; //Pull Enable
+ row_masks[row_ports[row]] |= 1 << row_pins[row]; //Add pin to proper row mask
+ }
+
+ uint8_t col;
+ for (col = 0; col < MATRIX_COLS; col++)
+ {
+ PORT->Group[col_ports[col]].DIRSET.reg = 1 << col_pins[col]; //Output
+ PORT->Group[col_ports[col]].OUTCLR.reg = 1 << col_pins[col]; //Low
+ }
+
+ matrix_init_quantum();
+}
+
+#define MATRIX_SCAN_DELAY 10 //Delay after setting a col to output (in us)
+
+uint64_t mdebouncing = 0;
+uint8_t matrix_scan(void)
+{
+ uint8_t mchanged;
+ uint8_t row;
+ uint8_t col;
+ uint32_t scans[2]; //PA PB
+
+ if (CLK_get_ms() < mdebouncing) return 1; //mdebouncing == 0 when no debouncing active
+
+ //DBG_1_OFF; //Profiling scans
+
+ memset(mlatest, 0, MATRIX_ROWS * sizeof(matrix_row_t)); //Zero the result buffer
+
+ for (col = 0; col < MATRIX_COLS; col++)
+ {
+ PORT->Group[col_ports[col]].OUTSET.reg = 1 << col_pins[col]; //Set col output
+
+ CLK_delay_us(MATRIX_SCAN_DELAY); //Delay for output
+
+ scans[PA] = PORT->Group[PA].IN.reg & row_masks[PA]; //Read PA row pins data
+ scans[PB] = PORT->Group[PB].IN.reg & row_masks[PB]; //Read PB row pins data
+
+ PORT->Group[col_ports[col]].OUTCLR.reg = 1 << col_pins[col]; //Clear col output
+
+ for (row = 0; row < MATRIX_ROWS; row++)
+ {
+ //Move scan bits from scans array into proper row bit locations
+ if (scans[row_ports[row]] & (1 << row_pins[row]))
+ mlatest[row] |= 1 << col;
+ }
+ }
+
+ mchanged = 0; //Default to no matrix change since last
+
+ for (row = 0; row < MATRIX_ROWS; row++)
+ {
+ if (mlast[row] != mlatest[row])
+ mchanged = 1;
+ mlast[row] = mlatest[row];
+ }
+
+ if (!mchanged)
+ {
+ for (row = 0; row < MATRIX_ROWS; row++)
+ mdebounced[row] = mlatest[row];
+ mdebouncing = 0;
+ }
+ else
+ {
+ //Begin or extend debounce on change
+ mdebouncing = CLK_get_ms() + DEBOUNCING_DELAY;
+ }
+
+ //DBG_1_ON; //Profiling scans
+
+ matrix_scan_quantum();
+
+ return 1;
+}
+
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return mdebounced[row];
+}
+
+void matrix_print(void)
+{
+ char buf[(MATRIX_COLS+8)*(MATRIX_ROWS+1)] = "R C";
+ char *pbuf = buf+3;
+ uint32_t cols;
+ uint32_t rows;
+ matrix_row_t row;
+
+ for (cols = 1; cols <= MATRIX_COLS; cols++)
+ {
+ *pbuf = (cols%10)+48;
+ pbuf++;
+ }
+ *pbuf = '\r'; pbuf++;
+ *pbuf = '\n'; pbuf++;
+
+ for (rows = 1; rows <= MATRIX_ROWS; rows++)
+ {
+ row = matrix_get_row(rows-1);
+ if (rows < 10) { *pbuf = rows+48; pbuf++; *pbuf = ' '; pbuf++; *pbuf = ' '; pbuf++; }
+ else { *pbuf = (rows/10)+48; pbuf++; *pbuf = (rows%10)+48; pbuf++; *pbuf = ' '; pbuf++; }
+ for (cols = 0; cols < MATRIX_COLS; cols++)
+ {
+ if (row & 1 << cols) *pbuf = 'X';
+ else *pbuf = '.';
+ pbuf++;
+ }
+ *pbuf = '\r'; pbuf++;
+ *pbuf = '\n'; pbuf++;
+ }
+ *pbuf = 0;
+ dprint(buf);
+}
diff --git a/keyboards/massdrop/ctrl/matrix.h b/keyboards/massdrop/ctrl/matrix.h
new file mode 100644
index 000000000..3eab6dece
--- /dev/null
+++ b/keyboards/massdrop/ctrl/matrix.h
@@ -0,0 +1,77 @@
+/*
+Copyright 2011 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/>.
+*/
+#ifndef MATRIX_H
+#define MATRIX_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "keyboard.h"
+
+#if (MATRIX_COLS <= 8)
+typedef uint8_t matrix_row_t;
+#elif (MATRIX_COLS <= 16)
+typedef uint16_t matrix_row_t;
+#elif (MATRIX_COLS <= 32)
+typedef uint32_t matrix_row_t;
+#else
+#error "MATRIX_COLS: invalid value"
+#endif
+
+#define MATRIX_IS_ON(row, col) (matrix_get_row(row) && (1<<col))
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* number of matrix rows */
+uint8_t matrix_rows(void);
+/* number of matrix columns */
+uint8_t matrix_cols(void);
+/* should be called at early stage of startup before matrix_init.(optional) */
+void matrix_setup(void);
+/* intialize matrix for scaning. */
+void matrix_init(void);
+/* scan all key states on matrix */
+uint8_t matrix_scan(void);
+/* whether modified from previous scan. used after matrix_scan. */
+bool matrix_is_modified(void) __attribute__ ((deprecated));
+/* whether a switch is on */
+bool matrix_is_on(uint8_t row, uint8_t col);
+/* matrix state on row */
+matrix_row_t matrix_get_row(uint8_t row);
+/* print matrix for debug */
+void matrix_print(void);
+
+/* power control */
+void matrix_power_up(void);
+void matrix_power_down(void);
+
+/* executes code for Quantum */
+void matrix_init_quantum(void);
+void matrix_scan_quantum(void);
+
+void matrix_init_kb(void);
+void matrix_scan_kb(void);
+
+void matrix_init_user(void);
+void matrix_scan_user(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/keyboards/massdrop/ctrl/readme.md b/keyboards/massdrop/ctrl/readme.md
new file mode 100644
index 000000000..656ef9ac9
--- /dev/null
+++ b/keyboards/massdrop/ctrl/readme.md
@@ -0,0 +1,20 @@
+# CTRL
+
+![CTRL](https://massdrop-s3.imgix.net/product-images/massdrop-ntkl-mechanical-keyboard/FP/W6zvr0cTR4KVDY5z8rwp_AI7B6588%20copy%20page.jpg?auto=format&fm=jpg&fit=max&w=700&h=467&dpr=1&q=80)
+
+The Massdrop CTRL is a TKL mechanical keyboard featuring dual USB-C connectors, an integrated Hi-Speed USB 2.0 hub, and fully customizable RGB backlighting and underlighting.
+
+Keyboard Maintainer: [Massdrop](https://github.com/massdrop)
+Hardware Supported: Massdrop, Inc. CTRL PCBs utilizing Microchip's ATSAMD51J18A MCU and USB2422 2-Port USB 2.0 Hi-Speed Hub Controller, and ISSI's IS31FL3733 LED Drivers.
+Hardware Availability: [Massdrop CTRL Mechanical Keyboard](https://www.massdrop.com/buy/massdrop-ctrl-mechanical-keyboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make massdrop/ctrl:default
+
+For information on flashing this keyboard, visit the following links:
+
+[Massdrop Loader Releases](https://github.com/Massdrop/mdloader/releases/tag/0.0.1)
+[Massdrop Loader Repository and Instructions](https://github.com/Massdrop/mdloader)
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.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/massdrop/ctrl/rules.mk b/keyboards/massdrop/ctrl/rules.mk
new file mode 100644
index 000000000..c5539158f
--- /dev/null
+++ b/keyboards/massdrop/ctrl/rules.mk
@@ -0,0 +1,33 @@
+# project specific files
+SRC = led_programs.c
+SRC += matrix.c
+
+#For platform and packs
+ARM_ATSAM = SAMD51J18A
+MCU = cortex-m4
+
+CUSTOM_MATRIX = yes
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
+VIRTSER_ENABLE = no # USB Serial Driver
+RAW_ENABLE = no # Raw device
+AUTO_SHIFT_ENABLE = no # Auto Shift
diff --git a/keyboards/mechmini/v1/keymaps/pitty/keymap.c b/keyboards/mechmini/v1/keymaps/pitty/keymap.c
new file mode 100644
index 000000000..7db2dc183
--- /dev/null
+++ b/keyboards/mechmini/v1/keymaps/pitty/keymap.c
@@ -0,0 +1,54 @@
+/*
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You 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 _QWERTY 0
+#define _NMBR 1
+#define _NAV 2
+#define _MOUSE 3
+#define _FUNCT 4
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_split_space(
+ 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, LT(_FUNCT, 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_LCTL, KC_LGUI, KC_LALT, LT(_NAV, KC_SPC), KC_BSPC, KC_RALT, TT(_MOUSE), TT(_NMBR)
+ ),
+ [_NAV] = LAYOUT_split_space(
+ _______, _______, KC_UP, _______, KC_LPRN, KC_RPRN, _______, KC_7, KC_8, KC_9, KC_KP_SLASH, KC_DEL,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_LCBR, KC_RCBR, _______, KC_4, KC_5, KC_6, KC_KP_ASTERISK,
+ _______, _______, _______, _______, KC_LABK, KC_RABK, KC_GRV, KC_1, KC_2, KC_3, KC_KP_MINUS,
+ _______, _______, _______, _______, _______, _______, KC_KP_DOT, KC_KP_PLUS
+ ),
+ [_NMBR] = LAYOUT_split_space(
+ 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_4, KC_5, KC_6, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_7, KC_8, KC_9, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, TO(_QWERTY), _______, _______, _______
+ ),
+ [_MOUSE] = LAYOUT_split_space(
+ _______, KC_BTN1, KC_MS_U, KC_BTN2, _______, _______, _______, _______, KC_WH_U, _______, _______, _______,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_R, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, TO(_QWERTY), _______, _______, _______
+ ),
+ [_FUNCT] = LAYOUT_split_space(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, KC_INS, KC_HOME, KC_PGUP, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_DEL, KC_END, KC_PGDN, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, RGB_TOG, RGB_MOD, _______, _______, RESET
+ )
+};
diff --git a/keyboards/mechmini/v1/v1.h b/keyboards/mechmini/v1/v1.h
index 501bd89c5..1e392b353 100644
--- a/keyboards/mechmini/v1/v1.h
+++ b/keyboards/mechmini/v1/v1.h
@@ -40,4 +40,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
}
+#define LAYOUT_split_space( \
+ K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, \
+ K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, \
+ K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, \
+ K00, K10, K20, K56, K57, KB0, KC0, K66 \
+) \
+{ \
+ { K00, K10, K20, K56, KC_NO, KC_NO, K57, KC_NO, KB0, KC0, K66, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
+}
+
#endif
diff --git a/keyboards/mechmini/v2/config.h b/keyboards/mechmini/v2/config.h
index 58c751e0f..e0922bb7e 100755
--- a/keyboards/mechmini/v2/config.h
+++ b/keyboards/mechmini/v2/config.h
@@ -62,9 +62,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/mechmini/v2/keymaps/arkag/config.h b/keyboards/mechmini/v2/keymaps/arkag/config.h
new file mode 100644
index 000000000..e89adc097
--- /dev/null
+++ b/keyboards/mechmini/v2/keymaps/arkag/config.h
@@ -0,0 +1,7 @@
+#pragma once
+
+// save me space!
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+// #define DISABLE_LEADER
+#define NO_MUSIC_MODE
diff --git a/keyboards/mechmini/v2/keymaps/arkag/keymap.c b/keyboards/mechmini/v2/keymaps/arkag/keymap.c
new file mode 100644
index 000000000..29e125394
--- /dev/null
+++ b/keyboards/mechmini/v2/keymaps/arkag/keymap.c
@@ -0,0 +1,39 @@
+#include QMK_KEYBOARD_H
+#include "arkag.h"
+
+/*
+ Userspace:
+ https://github.com/arkag/qmk_firmware/blob/master/users/arkag/arkag.c
+*/
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_2u_space_ortho(
+ KC_LEAD, 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, QUOTE,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT,
+ M_PMOD, LRALT, M_SMOD, LOWER, RAISE, KC_SPC, KC_SLSH, KC_BSLS, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [_RAISE] = LAYOUT_2u_space_ortho(
+ GRAVE, KC_1, KC_2, THREE, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, OBRACK, CBRACK, KC_EQL, HYPHEN, _______, _______, KC_4, KC_5, KC_6, _______, KC_NLCK,
+ _______, _______, _______, CEDILLA, _______, KC_COMM, KC_PDOT, KC_1, KC_2, KC_3, KC_PPLS, KC_PENT,
+ _______, _______, _______, KEEB, _______, _______, _______, M_OS, KC_PSLS, KC_PMNS, KC_PAST),
+
+ [_LOWER] = LAYOUT_2u_space_ortho(
+ KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, M_P_B, M_C_A_D,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_CAPS, KC_DEL, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END),
+
+ [_KEEB] = LAYOUT_2u_space_ortho(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, BL_TOGG, BL_STEP, BL_INC, BL_DEC, BL_BRTG, _______, _______, _______, _______, _______, _______,
+ RGB_M_P, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+ [_LAZY] = LAYOUT_2u_space_ortho(
+ _______, _______, _______, _______, _______, M_TM, _______, M_SNIPT, M_SHRUG, _______, _______, KC_MUTE,
+ _______, _______, _______, _______, _______, M_GGT, _______, M_UF, M_LOD, M_REPO, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, M_TF, M_LENNY, _______, KC_VOLU, KC_MPLY,
+ _______, _______, _______, _______, _______, _______, M_CALC, _______, KC_MPRV, KC_VOLD, KC_MNXT),
+};
diff --git a/keyboards/mechmini/v2/keymaps/arkag/rules.mk b/keyboards/mechmini/v2/keymaps/arkag/rules.mk
new file mode 100644
index 000000000..c1d5afa1e
--- /dev/null
+++ b/keyboards/mechmini/v2/keymaps/arkag/rules.mk
@@ -0,0 +1,17 @@
+BOOTMAGIC_ENABLE = no
+MOUSEKEY_ENABLE = no
+STENO_ENABLE = no
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = no
+COMMAND_ENABLE = no
+SLEEP_LED_ENABLE = no
+NKRO_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE = yes
+UNICODE_ENABLE = yes
+LEADER_ENABLE = yes
+
+# save me space!
+EXTRAFLAGS += -flto
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/config.h b/keyboards/mechmini/v2/keymaps/lbibass_625_space/config.h
new file mode 100755
index 000000000..7adb68d34
--- /dev/null
+++ b/keyboards/mechmini/v2/keymaps/lbibass_625_space/config.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#define ONESHOT_TAP_TOGGLE 3
+#define TAPPING_TERM 200
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c b/keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c
new file mode 100755
index 000000000..fba582e1b
--- /dev/null
+++ b/keyboards/mechmini/v2/keymaps/lbibass_625_space/keymap.c
@@ -0,0 +1,50 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FN1 2
+#define _FN2 3
+#define _WIN 1
+#define _FN3 4
+//Tap Dance Declarations
+enum
+{
+ TD_DOTCOM = 0
+};
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ //Tap once for Esc, twice for Caps Lock
+ [TD_DOTCOM] = ACTION_TAP_DANCE_DOUBLE(KC_COMMA, KC_DOT)
+ // Other declarations would go here, separated by commas, if you have them
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BL] = LAYOUT_625_space(
+ LT(OSL(2), KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ GUI_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_ENT),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TD(TD_DOTCOM), OSL(2), OSM(MOD_RSFT),
+ KC_ESC, KC_LALT, KC_LCTL, KC_SPC, KC_RGUI, MO(4)),
+ [_WIN] = LAYOUT_625_space(
+ LT(OSL(2), KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(4, KC_ENT),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, TD(TD_DOTCOM), OSL(2), OSM(MOD_RSFT),
+ KC_ESC, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, RGB_TOG),
+ [_FN1] = LAYOUT_625_space(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ GUI_T(KC_ESC), KC_PGUP, KC_VOLU, KC_DEL, KC_TRNS, KC_BSLS, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_TRNS,
+ KC_LSFT, KC_PGDN, KC_VOLD, BL_STEP, BL_TOGG, KC_SCLN, KC_QUOT, KC_SLSH, KC_DOT, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [_FN2] = LAYOUT_625_space(
+ KC_PWR, KC_BRID, KC_BRIU, KC_NO, KC_NO, KC_NO, KC_NO, KC_MRWD, KC_MPLY, KC_MFFD, KC_MUTE, RESET,
+ MT(KC_LGUI, KC_ESC), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(1), KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [_FN3] = LAYOUT_625_space(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET,
+ MT(KC_LGUI, KC_ESC), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(1), KC_TRNS, KC_TRNS, KC_F11, KC_F12, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+
+};
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/readme.md b/keyboards/mechmini/v2/keymaps/lbibass_625_space/readme.md
new file mode 100644
index 000000000..e09e52013
--- /dev/null
+++ b/keyboards/mechmini/v2/keymaps/lbibass_625_space/readme.md
@@ -0,0 +1,2 @@
+# /u/Lbibass's 6.25u spacebar Mechmini 2.0 Layout.
+
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_625_space/rules.mk b/keyboards/mechmini/v2/keymaps/lbibass_625_space/rules.mk
new file mode 100755
index 000000000..7bc50168d
--- /dev/null
+++ b/keyboards/mechmini/v2/keymaps/lbibass_625_space/rules.mk
@@ -0,0 +1,11 @@
+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 = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE = yes
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/config.h b/keyboards/mechmini/v2/keymaps/lbibass_split_space/config.h
new file mode 100755
index 000000000..2f3553062
--- /dev/null
+++ b/keyboards/mechmini/v2/keymaps/lbibass_split_space/config.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#define ONESHOT_TAP_TOGGLE 3
+#define TAPPING_TERM 200
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c b/keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c
new file mode 100755
index 000000000..7ad2aa81e
--- /dev/null
+++ b/keyboards/mechmini/v2/keymaps/lbibass_split_space/keymap.c
@@ -0,0 +1,33 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FN1 2
+#define _FN2 3
+#define _WIN 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BL] = LAYOUT_split_space(
+ LT(2, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ GUI_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_ENT),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, MO(2), KC_RSHIFT,
+ KC_ESC, KC_LALT, KC_LCTL, KC_SPC, KC_SPC, KC_RGUI, KC_RALT, RGB_TOG),
+ [_WIN] = LAYOUT_split_space(
+ LT(2, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(3, KC_ENT),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, MO(2), KC_RSHIFT,
+ KC_ESC, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_LCTL, RGB_TOG),
+ [_FN1] = LAYOUT_split_space(
+ 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_PGUP, KC_VOLU, KC_TRNS, KC_TRNS, KC_BSLS, KC_LBRC, KC_RBRC, KC_MINS, KC_EQL, KC_TRNS,
+ KC_LSFT, KC_PGDN, KC_VOLD, KC_TRNS, KC_TRNS, KC_SCLN, KC_QUOT, KC_SLSH, KC_DOT, KC_RSHIFT, KC_HOME,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [_FN2] = LAYOUT_split_space(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET,
+ MT(KC_LGUI, KC_ESC), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, TG(1), KC_TRNS, KC_TRNS, KC_F11, KC_F12, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_END,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
+
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/readme.md b/keyboards/mechmini/v2/keymaps/lbibass_split_space/readme.md
new file mode 100644
index 000000000..34888fbb1
--- /dev/null
+++ b/keyboards/mechmini/v2/keymaps/lbibass_split_space/readme.md
@@ -0,0 +1,2 @@
+# /u/Lbibass's Split Space Mechmini 2.0 Layout
+
diff --git a/keyboards/mechmini/v2/keymaps/lbibass_split_space/rules.mk b/keyboards/mechmini/v2/keymaps/lbibass_split_space/rules.mk
new file mode 100755
index 000000000..fd3621e84
--- /dev/null
+++ b/keyboards/mechmini/v2/keymaps/lbibass_split_space/rules.mk
@@ -0,0 +1,11 @@
+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 = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = yes
+TAP_DANCE_ENABLE = no
diff --git a/keyboards/mehkee96/config.h b/keyboards/mehkee96/config.h
new file mode 100644
index 000000000..70ca273c3
--- /dev/null
+++ b/keyboards/mehkee96/config.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x20A0
+#define PRODUCT_ID 0x422D
+#define MANUFACTURER mehkee
+#define PRODUCT 96kee
+
+/* matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 15
+
+#define RGBLED_NUM 16
+#define RGBLIGHT_ANIMATIONS
+/* key combination for command */
+#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
diff --git a/keyboards/mehkee96/i2c.c b/keyboards/mehkee96/i2c.c
new file mode 100644
index 000000000..a4f952135
--- /dev/null
+++ b/keyboards/mehkee96/i2c.c
@@ -0,0 +1,106 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Please do not modify this file
+
+#include <avr/io.h>
+#include <util/twi.h>
+
+#include "i2c.h"
+
+void i2c_set_bitrate(uint16_t bitrate_khz) {
+ uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
+ if (bitrate_div >= 16) {
+ bitrate_div = (bitrate_div - 16) / 2;
+ }
+ TWBR = bitrate_div;
+}
+
+void i2c_init(void) {
+ // set pull-up resistors on I2C bus pins
+ PORTC |= 0b11;
+
+ i2c_set_bitrate(400);
+
+ // enable TWI (two-wire interface)
+ TWCR |= (1 << TWEN);
+
+ // enable TWI interrupt and slave address ACK
+ TWCR |= (1 << TWIE);
+ TWCR |= (1 << TWEA);
+}
+
+uint8_t i2c_start(uint8_t address) {
+ // reset TWI control register
+ TWCR = 0;
+
+ // begin transmission and wait for it to end
+ TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ // check if the start condition was successfully transmitted
+ if ((TWSR & 0xF8) != TW_START) {
+ return 1;
+ }
+
+ // transmit address and wait
+ TWDR = address;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ // check if the device has acknowledged the READ / WRITE mode
+ uint8_t twst = TW_STATUS & 0xF8;
+ if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
+ return 1;
+ }
+
+ return 0;
+}
+
+void i2c_stop(void) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+}
+
+uint8_t i2c_write(uint8_t data) {
+ TWDR = data;
+
+ // transmit data and wait
+ TWCR = (1<<TWINT) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
+ return 1;
+ }
+
+ return 0;
+}
+
+uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
+ if (i2c_start(address)) {
+ return 1;
+ }
+
+ for (uint16_t i = 0; i < length; i++) {
+ if (i2c_write(data[i])) {
+ return 1;
+ }
+ }
+
+ i2c_stop();
+
+ return 0;
+}
diff --git a/keyboards/mehkee96/i2c.h b/keyboards/mehkee96/i2c.h
new file mode 100644
index 000000000..7ce50cdb5
--- /dev/null
+++ b/keyboards/mehkee96/i2c.h
@@ -0,0 +1,27 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Please do not modify this file
+
+#ifndef __I2C_H__
+#define __I2C_H__
+
+void i2c_init(void);
+void i2c_set_bitrate(uint16_t bitrate_khz);
+uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
+
+#endif
diff --git a/keyboards/mehkee96/info.json b/keyboards/mehkee96/info.json
new file mode 100644
index 000000000..75da3e591
--- /dev/null
+++ b/keyboards/mehkee96/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "mehkee96",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 19,
+ "height": 6,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"Print Screen", "x":13, "y":0}, {"label":"Delete", "x":14, "y":0}, {"label":"Home", "x":15, "y":0}, {"label":"End", "x":16, "y":0}, {"label":"Page Up", "x":17, "y":0}, {"label":"Page Down", "x":18, "y":0}, {"label":"`", "x":0, "y":1}, {"label":"1", "x":1, "y":1}, {"label":"2", "x":2, "y":1}, {"label":"3", "x":3, "y":1}, {"label":"4", "x":4, "y":1}, {"label":"5", "x":5, "y":1}, {"label":"6", "x":6, "y":1}, {"label":"7", "x":7, "y":1}, {"label":"8", "x":8, "y":1}, {"label":"9", "x":9, "y":1}, {"label":"0", "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":"P/", "x":16, "y":1}, {"label":"P*", "x":17, "y":1}, {"label":"P-", "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":"P7", "x":15, "y":2}, {"label":"P8", "x":16, "y":2}, {"label":"P9", "x":17, "y":2}, {"label":"P+", "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":"P4", "x":15, "y":3}, {"label":"P5", "x":16, "y":3}, {"label":"P6", "x":17, "y":3}, {"label":"P+", "x":18, "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":"Up", "x":14, "y":4}, {"label":"P1", "x":15, "y":4}, {"label":"P2", "x":16, "y":4}, {"label":"P3", "x":17, "y":4}, {"label":"PEnter", "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}, {"label":"Fn", "x":12, "y":5}, {"label":"Left", "x":13, "y":5}, {"label":"Down", "x":14, "y":5}, {"label":"Right", "x":15, "y":5}, {"label":"P0", "x":16, "y":5}, {"label":"P.", "x":17, "y":5}, {"label":"PEnter", "x":18, "y":5}]
+ }
+ }
+}
diff --git a/keyboards/mehkee96/keymaps/default/keymap.c b/keyboards/mehkee96/keymaps/default/keymap.c
new file mode 100644
index 000000000..cd69fb2fe
--- /dev/null
+++ b/keyboards/mehkee96/keymaps/default/keymap.c
@@ -0,0 +1,80 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Layer 0, default layer
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | | | | | |
+| ESC* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | P SCN | DEL | HOME | END | P Up | P Down |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | | | | | | | | | | | | | | BACK | NUM | | | |
+| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | \ | SPACE | LOCK | / | * | - |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | | | | | | | | | | | [ | ] | | | | | |
+| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | + |
+|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________|
+| | | | | | | | | | | ; | ' | | | | | |
+| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | + |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | | | | | | , | . | / | | | | | | |
+| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | ENTER |
+|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________|
+| | | | | | | MO | | | | | | |
+| CTRL | LGUI | L ALT | SPACE | R ALT | RGUI | _FN | LEFT | DOWN | RIGHT | 0 | . | ENTER |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+*/
+
+
+
+ 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_DEL, 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_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
+
+
+
+ /* Layer 1, function layer
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | VOL | VOL | | | |
+| RESET | | | | | | | | | | | | | MUTE | DOWN | UP | | | |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | | | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | | | |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | RGB | | RGB | HUE | HUE | SATUR. | SATUR. | VALUE | VALUE | | | | | | | | |
+| | TOGGLE | | MODE |INCREASE| DCRSE |INCREASE| DCRSE |INCREASE| DCRSE | | | | | | | | |
+|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________|
+| BACKLIGHT | | | | | | | | | | | | | | | | |
+| TOGGLE | | | | | | | | | | | | | | | | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | |BACKLHT |BACKLHT |BACKLHT | | | | | | | | | | | |
+| | | | | DCRSE |TOGGLE |INCREASE| | | | | | | | | | | |
+|_________|________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________|
+| | | | | | | | | | | | | |
+| | | | | | | | | | | | | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+BL_TOGG, BL_DEC, BL_INC changes the in-switch LEDs
+*/
+
+
+ LAYOUT(
+ 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
diff --git a/keyboards/mehkee96/keymaps/johann/keymap.c b/keyboards/mehkee96/keymaps/johann/keymap.c
new file mode 100644
index 000000000..a0212702a
--- /dev/null
+++ b/keyboards/mehkee96/keymaps/johann/keymap.c
@@ -0,0 +1,80 @@
+#include "mehkee96.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Layer 0, default layer
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | | | | | |
+| ESC* | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | P SCN | HOME | DEL | INSERT | P Up | P Down |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | | | | | | | | | | | | | | BACK | NUM | | | Play |
+| ~` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | _ - | = + | \ | SPACE | LOCK | / | * | Pause |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | | | | | | | | | | | [ | ] | | | | | |
+| TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | | \ | 7 | 8 | 9 | Next |
+|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________|
+| | | | | | | | | | | ; | ' | | | | | |
+| CAPS LOCK | A | S | D | F | G | H | J | K | L | : | " | ENTER | 4 | 5 | 6 | - |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | | | | | | , | . | / | | | | | | |
+| SHIFT | Z | X | C | V | B | N | M | < | > | ? | SHIFT | UP | 1 | 2 | 3 | + |
+|__________________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________|
+| | | | | | | MO | | | | | | |
+| CTRL | LGUI | L ALT | SPACE | R ALT | RGUI | _FN | LEFT | DOWN | RIGHT | 0 | . | ENTER |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+*/
+
+
+
+ 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_HOME, KC_DEL, KC_INS, KC_PGUP, KC_PGDN,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_MPLY,
+ KC_TAB, KC_Q, KC_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_MNXT,
+ KC_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_PMNS,
+ 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_PPLS,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(1), KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_PENT),
+
+
+
+ /* Layer 1, function layer
+____________________________________________________________________________________________________________________________________________________________________________
+| | | | | | | | | | | | | | | VOL | VOL | | | |
+| RESET | | | | | | | | | | | | | MUTE | DOWN | UP | | | |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | | | | | | | | | | | | | | | | | | |
+| | | | | | | | | | | | | | | | | | | |
+|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|________|
+| | RGB | | RGB | HUE | HUE | SATUR. | SATUR. | VALUE | VALUE | | | | | | | | |
+| | TOGGLE | | MODE |INCREASE| DCRSE |INCREASE| DCRSE |INCREASE| DCRSE | | | | | | | | |
+|____________|________|________|________|________|________|________|________|________|________|________|________|________|_____________|________|________|________|________|
+| BACKLIGHT | | | | | | | | | | | | | | | | |
+| TOGGLE | | | | | | | | | | | | | | | | |
+|______________|________|________|________|________|________|________|________|________|________|________|________|____________________|________|________|________|________|
+| | | | |BACKLHT |BACKLHT |BACKLHT | | | | | | | | | | | |
+| | | | | DCRSE |TOGGLE |INCREASE| | | | | | | | | | | |
+|_________|________|________|________|________|________|________|________|________|________|________|________|________________|________|________|________|________|________|
+| | | | | | | | | | | | | |
+| | | | | | | | | | | | | |
+|__________|__________|__________|________________________________________________________|________|________|________|________|________|________|________|________|________|
+BL_TOGG, BL_DEC, BL_INC changes the in-switch LEDs
+*/
+
+
+ LAYOUT(
+ 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
diff --git a/keyboards/mehkee96/matrix.c b/keyboards/mehkee96/matrix.c
new file mode 100644
index 000000000..bbb84e52e
--- /dev/null
+++ b/keyboards/mehkee96/matrix.c
@@ -0,0 +1,130 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <avr/io.h>
+#include <util/delay.h>
+
+#include "matrix.h"
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+static uint8_t debouncing = DEBOUNCE;
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+void matrix_set_row_status(uint8_t row);
+uint8_t bit_reverse(uint8_t x);
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+void matrix_init(void) {
+ // all outputs for rows high
+ DDRB = 0xFF;
+ PORTB = 0xFF;
+ // all inputs for columns
+ DDRA = 0x00;
+ DDRC &= ~(0x111111<<2);
+ DDRD &= ~(1<<PIND7);
+ // all columns are pulled-up
+ PORTA = 0xFF;
+ PORTC |= (0b111111<<2);
+ PORTD |= (1<<PIND7);
+
+ // initialize matrix state: all keys off
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix[row] = 0x00;
+ matrix_debouncing[row] = 0x00;
+ }
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void) {
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix_set_row_status(row);
+ _delay_us(5);
+
+ matrix_row_t cols = (
+ // cols 0..7, PORTA 0 -> 7
+ (~PINA) & 0xFF
+ ) | (
+ // cols 8..13, PORTC 7 -> 0
+ bit_reverse((~PINC) & 0xFF) << 8
+ ) | (
+ // col 14, PORTD 7
+ ((~PIND) & (1 << PIND7)) << 7
+ );
+
+ if (matrix_debouncing[row] != cols) {
+ matrix_debouncing[row] = cols;
+ debouncing = DEBOUNCE;
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+
+ matrix_scan_quantum();
+
+ return 1;
+}
+
+// declarations
+void matrix_set_row_status(uint8_t row) {
+ DDRB = (1 << row);
+ PORTB = ~(1 << row);
+}
+
+uint8_t bit_reverse(uint8_t x) {
+ x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
+ x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
+ x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
+ return x;
+}
+
+inline matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+}
diff --git a/keyboards/mehkee96/mehkee96.c b/keyboards/mehkee96/mehkee96.c
new file mode 100644
index 000000000..604fad803
--- /dev/null
+++ b/keyboards/mehkee96/mehkee96.c
@@ -0,0 +1,81 @@
+/*
+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 "mehkee96.h"
+#include "rgblight.h"
+
+#include <avr/pgmspace.h>
+
+#include "action_layer.h"
+#include "i2c.h"
+#include "quantum.h"
+
+// for keyboard subdirectory level init functions
+// @Override
+void matrix_init_kb(void) {
+ // call user level keymaps, if any
+ matrix_init_user();
+}
+
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+
+// custom RGB driver
+void rgblight_set(void) {
+ if (!rgblight_config.enable) {
+ for (uint8_t i=0; i<RGBLED_NUM; i++) {
+ led[i].r = 0;
+ led[i].g = 0;
+ led[i].b = 0;
+ }
+ }
+
+ i2c_init();
+ i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+}
+
+bool rgb_init = false;
+
+void matrix_scan_kb(void) {
+ // if LEDs were previously on before poweroff, turn them back on
+ if (rgb_init == false && rgblight_config.enable) {
+ i2c_init();
+ i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+ rgb_init = true;
+ }
+
+#ifdef RGBLIGHT_ANIMATION
+ rgblight_task();
+#endif
+
+#else
+void matrix_scan_kb(void) {
+#endif
+ matrix_scan_user();
+ /* Nothing else for now. */
+}
+
+__attribute__((weak)) // overridable
+void matrix_init_user(void) {
+
+}
+
+
+__attribute__((weak)) // overridable
+void matrix_scan_user(void) {
+
+}
diff --git a/keyboards/mehkee96/mehkee96.h b/keyboards/mehkee96/mehkee96.h
new file mode 100644
index 000000000..1e1eb44a6
--- /dev/null
+++ b/keyboards/mehkee96/mehkee96.h
@@ -0,0 +1,24 @@
+#ifndef KEYMAP_COMMON_H
+#define KEYMAP_COMMON_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K05, K25, K35, K45, K55, K06, KA6, KA7, K07, KB5, KC5, KD5, KE5, KD1, KE2, KD0, K67, K87, K97, \
+ K04, K14, K24, K34, K44, K54, K16, KB6, KB7, K17, KA4, KB4, KC4, KE4, K64, K74, K84, K94, \
+ K03, K13, K23, K33, K43, K53, K26, KC6, KC7, K27, KA3, KB3, KC3, KD3, K63, K73, K83, K93, \
+ K02, K12, K22, K32, K42, K52, K36, KD6, KD7, K37, KA2, KB2, KD2, K62, K72, K82, K92, \
+ K01, K11, K21, K31, K41, K51, K46, KE6, KE7, K47, KA1, KB1, K86, K61, K71, K81, K91, \
+ K00, K10, K20, K56, K57, KA0, KB0, K66, K76, K96, K60, K80, K90 \
+) { \
+ { K00, K10, K20, KC_NO, KC_NO, KC_NO, K60, KC_NO, K80, K90, KA0, KB0, KC_NO, KD0, KC_NO }, \
+ { K01, K11, K21, K31, K41, K51, K61, K71, K81, K91, KA1, KB1, KC_NO, KD1, KC_NO }, \
+ { K02, K12, K22, K32, K42, K52, K62, K72, K82, K92, KA2, KB2, KC_NO, KD2, KE2 }, \
+ { K03, K13, K23, K33, K43, K53, K63, K73, K83, K93, KA3, KB3, KC3, KD3, KC_NO }, \
+ { K04, K14, K24, K34, K44, K54, K64, K74, K84, K94, KA4, KB4, KC4, KC_NO, KE4 }, \
+ { K05, KC_NO, K25, K35, K45, K55, KC_NO, KC_NO,KC_NO, KC_NO, KC_NO, KB5, KC5, KD5, KE5 }, \
+ { K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6, KE6 }, \
+ { K07, K17, K27, K37, K47, K57, K67, KC_NO,K87, K97, KA7, KB7, KC7, KD7, KE7 } \
+}
+
+#endif
diff --git a/keyboards/mehkee96/program b/keyboards/mehkee96/program
new file mode 100644
index 000000000..b777b9110
--- /dev/null
+++ b/keyboards/mehkee96/program
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+# Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>, Sebastian Kaim <sebb@sebb767.de>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from __future__ import print_function
+
+import os
+import sys
+import time
+import usb
+
+
+def checkForKeyboardInNormalMode():
+ """Returns a device if a ps2avrGB device in normal made (that is in keyboard mode) or None if it is not found."""
+ return usb.core.find(idVendor=0x20A0, idProduct=0x422D)
+
+def checkForKeyboardInBootloaderMode():
+ """Returns True if a ps2avrGB device in bootloader (flashable) mode is found and False otherwise."""
+ return (usb.core.find(idVendor=0x16c0, idProduct=0x05df) is not None)
+
+def flashKeyboard(firmware_file):
+ """Calls bootloadHID to flash the given file to the device."""
+ print('Flashing firmware to device ...')
+ if os.system('bootloadHID -r "%s"' % firmware_file) == 0:
+ print('\nDone!')
+ else:
+ print('\nbootloadHID returned an error.')
+
+def printDeviceInfo(dev):
+ """Prints all infos for a given USB device"""
+ print('Device Information:')
+ print(' idVendor: %d (0x%04x)' % (dev.idVendor, dev.idVendor))
+ print(' idProduct: %d (0x%04x)' % (dev.idProduct, dev.idProduct))
+ print('Manufacturer: %s' % (dev.iManufacturer))
+ print('Serial: %s' % (dev.iSerialNumber))
+ print('Product: %s' % (dev.iProduct), end='\n\n')
+
+def sendDeviceToBootloaderMode(dev):
+ """Tries to send a given ps2avrGB keyboard to bootloader mode to allow flashing."""
+ try:
+ dev.set_configuration()
+
+ request_type = usb.util.build_request_type(
+ usb.util.CTRL_OUT,
+ usb.util.CTRL_TYPE_CLASS,
+ usb.util.CTRL_RECIPIENT_DEVICE)
+
+ USBRQ_HID_SET_REPORT = 0x09
+ HID_REPORT_OPTION = 0x0301
+
+ dev.ctrl_transfer(request_type, USBRQ_HID_SET_REPORT, HID_REPORT_OPTION, 0, [0, 0, 0xFF] + [0] * 5)
+ except usb.core.USBError:
+ # for some reason I keep getting USBError, but it works!
+ pass
+
+
+if len(sys.argv) < 2:
+ print('Usage: %s <firmware.hex>' % sys.argv[0])
+ sys.exit(1)
+
+kb = checkForKeyboardInNormalMode()
+
+if kb is not None:
+ print('Found a keyboard in normal mode. Attempting to send it to bootloader mode ...', end='')
+ sendDeviceToBootloaderMode(kb)
+ print(' done.')
+ print("Hint: If your keyboard can't be set to bootloader mode automatically, plug it in while pressing the bootloader key to do so manually.")
+ print(" You can find more infos about this here: https://github.com/qmk/qmk_firmware/tree/master/keyboards/ps2avrGB#setting-the-board-to-bootloader-mode")
+
+attempts = 12 # 60 seconds
+found = False
+for attempt in range(1, attempts + 1):
+ print("Searching for keyboard in bootloader mode (%i/%i) ... " % (attempt, attempts), end='')
+
+ if checkForKeyboardInBootloaderMode():
+ print('Found', end='\n\n')
+ flashKeyboard(sys.argv[1])
+ found = True
+ break
+ else:
+ print('Nothing.', end='')
+
+ if attempt != attempts: # no need to wait on the last attempt
+ print(' Sleeping 5 seconds.', end='')
+ time.sleep(5)
+
+ # print a newline
+ print()
+
+if not found:
+ print("Couldn't find a flashable keyboard. Aborting.")
+ sys.exit(2)
+
diff --git a/keyboards/mehkee96/readme.md b/keyboards/mehkee96/readme.md
new file mode 100644
index 000000000..9dfad2a79
--- /dev/null
+++ b/keyboards/mehkee96/readme.md
@@ -0,0 +1,16 @@
+# Mehkee 96KEE
+
+![mehkee96](https://cdn.shopify.com/s/files/1/1799/1839/products/96KEE_-_1_-_Copy_1024x1024.jpg?v=1516262148)
+
+96-key Keyboard from mehkee
+
+Keyboard Maintainer: [johanntang](https://github.com/johanntang)
+Hardware Supported: mehkee96
+Hardware Availability: [mehkee, group buy closed](https://mehkee.com/products/96kee?variant=46912017423)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mehkee96:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
diff --git a/keyboards/mehkee96/rules.mk b/keyboards/mehkee96/rules.mk
new file mode 100644
index 000000000..e6e7d4a58
--- /dev/null
+++ b/keyboards/mehkee96/rules.mk
@@ -0,0 +1,35 @@
+# MCU name
+MCU = atmega32a
+PROTOCOL = VUSB
+
+# unsupported features for now
+NO_UART = yes
+NO_SUSPEND_POWER_DOWN = yes
+
+# Processor frequency.
+F_CPU = 12000000
+
+# Bootloader
+BOOTLOADER = bootloadHID
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes
+RGBLIGHT_CUSTOM_DRIVER = yes
+
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+# custom matrix setup
+CUSTOM_MATRIX = yes
+SRC = matrix.c i2c.c
+
+# programming options
+PROGRAM_CMD = ./keyboards/mehkee96/program $(TARGET).hex
diff --git a/keyboards/mehkee96/usbconfig.h b/keyboards/mehkee96/usbconfig.h
new file mode 100644
index 000000000..d2d848fcd
--- /dev/null
+++ b/keyboards/mehkee96/usbconfig.h
@@ -0,0 +1,396 @@
+/* Name: usbconfig.h
+ * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
+ * Author: Christian Starkjohann
+ * Creation Date: 2005-04-01
+ * Tabsize: 4
+ * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
+ * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
+ * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
+ */
+
+#ifndef __usbconfig_h_included__
+#define __usbconfig_h_included__
+
+#include "config.h"
+
+/*
+General Description:
+This file is an example configuration (with inline documentation) for the USB
+driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
+also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
+wire the lines to any other port, as long as D+ is also wired to INT0 (or any
+other hardware interrupt, as long as it is the highest level interrupt, see
+section at the end of this file).
+*/
+
+/* ---------------------------- Hardware Config ---------------------------- */
+
+#define USB_CFG_IOPORTNAME D
+/* This is the port where the USB bus is connected. When you configure it to
+ * "B", the registers PORTB, PINB and DDRB will be used.
+ */
+#define USB_CFG_DMINUS_BIT 3
+/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
+ * This may be any bit in the port.
+ */
+#define USB_CFG_DPLUS_BIT 2
+/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
+ * This may be any bit in the port. Please note that D+ must also be connected
+ * to interrupt pin INT0! [You can also use other interrupts, see section
+ * "Optional MCU Description" below, or you can connect D- to the interrupt, as
+ * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
+ * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
+ * markers every millisecond.]
+ */
+#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
+/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
+ * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
+ * require no crystal, they tolerate +/- 1% deviation from the nominal
+ * frequency. All other rates require a precision of 2000 ppm and thus a
+ * crystal!
+ * Since F_CPU should be defined to your actual clock rate anyway, you should
+ * not need to modify this setting.
+ */
+#define USB_CFG_CHECK_CRC 0
+/* Define this to 1 if you want that the driver checks integrity of incoming
+ * data packets (CRC checks). CRC checks cost quite a bit of code size and are
+ * currently only available for 18 MHz crystal clock. You must choose
+ * USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
+ */
+
+/* ----------------------- Optional Hardware Config ------------------------ */
+
+/* #define USB_CFG_PULLUP_IOPORTNAME D */
+/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
+ * V+, you can connect and disconnect the device from firmware by calling
+ * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
+ * This constant defines the port on which the pullup resistor is connected.
+ */
+/* #define USB_CFG_PULLUP_BIT 4 */
+/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
+ * above) where the 1.5k pullup resistor is connected. See description
+ * above for details.
+ */
+
+/* --------------------------- Functional Range ---------------------------- */
+
+#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
+/* Define this to 1 if you want to compile a version with two endpoints: The
+ * default control endpoint 0 and an interrupt-in endpoint (any other endpoint
+ * number).
+ */
+#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1
+/* Define this to 1 if you want to compile a version with three endpoints: The
+ * default control endpoint 0, an interrupt-in endpoint 3 (or the number
+ * configured below) and a catch-all default interrupt-in endpoint as above.
+ * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
+ */
+#define USB_CFG_EP3_NUMBER 3
+/* If the so-called endpoint 3 is used, it can now be configured to any other
+ * endpoint number (except 0) with this macro. Default if undefined is 3.
+ */
+/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
+/* The above macro defines the startup condition for data toggling on the
+ * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
+ * Since the token is toggled BEFORE sending any data, the first packet is
+ * sent with the oposite value of this configuration!
+ */
+#define USB_CFG_IMPLEMENT_HALT 0
+/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
+ * for endpoint 1 (interrupt endpoint). Although you may not need this feature,
+ * it is required by the standard. We have made it a config option because it
+ * bloats the code considerably.
+ */
+#define USB_CFG_SUPPRESS_INTR_CODE 0
+/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
+ * want to send any data over them. If this macro is defined to 1, functions
+ * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
+ * you need the interrupt-in endpoints in order to comply to an interface
+ * (e.g. HID), but never want to send any data. This option saves a couple
+ * of bytes in flash memory and the transmit buffers in RAM.
+ */
+#define USB_CFG_INTR_POLL_INTERVAL 1
+/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
+ * interval. The value is in milliseconds and must not be less than 10 ms for
+ * low speed devices.
+ */
+#define USB_CFG_IS_SELF_POWERED 0
+/* Define this to 1 if the device has its own power supply. Set it to 0 if the
+ * device is powered from the USB bus.
+ */
+#define USB_CFG_MAX_BUS_POWER 500
+/* Set this variable to the maximum USB bus power consumption of your device.
+ * The value is in milliamperes. [It will be divided by two since USB
+ * communicates power requirements in units of 2 mA.]
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITE 1
+/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
+ * transfers. Set it to 0 if you don't need it and want to save a couple of
+ * bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_READ 0
+/* Set this to 1 if you need to send control replies which are generated
+ * "on the fly" when usbFunctionRead() is called. If you only want to send
+ * data from a static buffer, set it to 0 and return the data from
+ * usbFunctionSetup(). This saves a couple of bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
+/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
+ * You must implement the function usbFunctionWriteOut() which receives all
+ * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
+ * can be found in 'usbRxToken'.
+ */
+#define USB_CFG_HAVE_FLOWCONTROL 0
+/* Define this to 1 if you want flowcontrol over USB data. See the definition
+ * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
+ * usbdrv.h.
+ */
+#define USB_CFG_DRIVER_FLASH_PAGE 0
+/* If the device has more than 64 kBytes of flash, define this to the 64 k page
+ * where the driver's constants (descriptors) are located. Or in other words:
+ * Define this to 1 for boot loaders on the ATMega128.
+ */
+#define USB_CFG_LONG_TRANSFERS 0
+/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
+ * in a single control-in or control-out transfer. Note that the capability
+ * for long transfers increases the driver size.
+ */
+/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
+/* This macro is a hook if you want to do unconventional things. If it is
+ * defined, it's inserted at the beginning of received message processing.
+ * If you eat the received message and don't want default processing to
+ * proceed, do a return after doing your things. One possible application
+ * (besides debugging) is to flash a status LED on each packet.
+ */
+/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
+/* This macro is a hook if you need to know when an USB RESET occurs. It has
+ * one parameter which distinguishes between the start of RESET state and its
+ * end.
+ */
+/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
+/* This macro (if defined) is executed when a USB SET_ADDRESS request was
+ * received.
+ */
+#define USB_COUNT_SOF 1
+/* define this macro to 1 if you need the global variable "usbSofCount" which
+ * counts SOF packets. This feature requires that the hardware interrupt is
+ * connected to D- instead of D+.
+ */
+/* #ifdef __ASSEMBLER__
+ * macro myAssemblerMacro
+ * in YL, TCNT0
+ * sts timer0Snapshot, YL
+ * endm
+ * #endif
+ * #define USB_SOF_HOOK myAssemblerMacro
+ * This macro (if defined) is executed in the assembler module when a
+ * Start Of Frame condition is detected. It is recommended to define it to
+ * the name of an assembler macro which is defined here as well so that more
+ * than one assembler instruction can be used. The macro may use the register
+ * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
+ * immediately after an SOF pulse may be lost and must be retried by the host.
+ * What can you do with this hook? Since the SOF signal occurs exactly every
+ * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
+ * designs running on the internal RC oscillator.
+ * Please note that Start Of Frame detection works only if D- is wired to the
+ * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
+ */
+#define USB_CFG_CHECK_DATA_TOGGLING 0
+/* define this macro to 1 if you want to filter out duplicate data packets
+ * sent by the host. Duplicates occur only as a consequence of communication
+ * errors, when the host does not receive an ACK. Please note that you need to
+ * implement the filtering yourself in usbFunctionWriteOut() and
+ * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
+ * for each control- and out-endpoint to check for duplicate packets.
+ */
+#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
+/* define this macro to 1 if you want the function usbMeasureFrameLength()
+ * compiled in. This function can be used to calibrate the AVR's RC oscillator.
+ */
+#define USB_USE_FAST_CRC 0
+/* The assembler module has two implementations for the CRC algorithm. One is
+ * faster, the other is smaller. This CRC routine is only used for transmitted
+ * messages where timing is not critical. The faster routine needs 31 cycles
+ * per byte while the smaller one needs 61 to 69 cycles. The faster routine
+ * may be worth the 32 bytes bigger code size if you transmit lots of data and
+ * run the AVR close to its limit.
+ */
+
+/* -------------------------- Device Description --------------------------- */
+
+#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
+/* USB vendor ID for the device, low byte first. If you have registered your
+ * own Vendor ID, define it here. Otherwise you may use one of obdev's free
+ * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
+/* This is the ID of the product, low byte first. It is interpreted in the
+ * scope of the vendor ID. If you have registered your own VID with usb.org
+ * or if you have licensed a PID from somebody else, define it here. Otherwise
+ * you may use one of obdev's free shared VID/PID pairs. See the file
+ * USB-IDs-for-free.txt for details!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
+#define USB_CFG_VENDOR_NAME_LEN 13
+/* These two values define the vendor name returned by the USB device. The name
+ * must be given as a list of characters under single quotes. The characters
+ * are interpreted as Unicode (UTF-16) entities.
+ * If you don't want a vendor name string, undefine these macros.
+ * ALWAYS define a vendor name containing your Internet domain name if you use
+ * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
+ * details.
+ */
+#define USB_CFG_DEVICE_NAME 'p', 's', '2', 'a', 'v', 'r', 'G', 'B'
+#define USB_CFG_DEVICE_NAME_LEN 8
+/* Same as above for the device name. If you don't want a device name, undefine
+ * the macros. See the file USB-IDs-for-free.txt before you assign a name if
+ * you use a shared VID/PID.
+ */
+/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
+/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
+/* Same as above for the serial number. If you don't want a serial number,
+ * undefine the macros.
+ * It may be useful to provide the serial number through other means than at
+ * compile time. See the section about descriptor properties below for how
+ * to fine tune control over USB descriptors such as the string descriptor
+ * for the serial number.
+ */
+#define USB_CFG_DEVICE_CLASS 0
+#define USB_CFG_DEVICE_SUBCLASS 0
+/* See USB specification if you want to conform to an existing device class.
+ * Class 0xff is "vendor specific".
+ */
+#define USB_CFG_INTERFACE_CLASS 3 /* HID */
+#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
+#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
+/* See USB specification if you want to conform to an existing device class or
+ * protocol. The following classes must be set at interface level:
+ * HID class is 3, no subclass and protocol required (but may be useful!)
+ * CDC class is 2, use subclass 2 and protocol 1 for ACM
+ */
+#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
+/* Define this to the length of the HID report descriptor, if you implement
+ * an HID device. Otherwise don't define it or define it to 0.
+ * If you use this define, you must add a PROGMEM character array named
+ * "usbHidReportDescriptor" to your code which contains the report descriptor.
+ * Don't forget to keep the array and this define in sync!
+ */
+
+/* #define USB_PUBLIC static */
+/* Use the define above if you #include usbdrv.c instead of linking against it.
+ * This technique saves a couple of bytes in flash memory.
+ */
+
+/* ------------------- Fine Control over USB Descriptors ------------------- */
+/* If you don't want to use the driver's default USB descriptors, you can
+ * provide our own. These can be provided as (1) fixed length static data in
+ * flash memory, (2) fixed length static data in RAM or (3) dynamically at
+ * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
+ * information about this function.
+ * Descriptor handling is configured through the descriptor's properties. If
+ * no properties are defined or if they are 0, the default descriptor is used.
+ * Possible properties are:
+ * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
+ * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
+ * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
+ * you want RAM pointers.
+ * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
+ * in static memory is in RAM, not in flash memory.
+ * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
+ * the driver must know the descriptor's length. The descriptor itself is
+ * found at the address of a well known identifier (see below).
+ * List of static descriptor names (must be declared PROGMEM if in flash):
+ * char usbDescriptorDevice[];
+ * char usbDescriptorConfiguration[];
+ * char usbDescriptorHidReport[];
+ * char usbDescriptorString0[];
+ * int usbDescriptorStringVendor[];
+ * int usbDescriptorStringDevice[];
+ * int usbDescriptorStringSerialNumber[];
+ * Other descriptors can't be provided statically, they must be provided
+ * dynamically at runtime.
+ *
+ * Descriptor properties are or-ed or added together, e.g.:
+ * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
+ *
+ * The following descriptors are defined:
+ * USB_CFG_DESCR_PROPS_DEVICE
+ * USB_CFG_DESCR_PROPS_CONFIGURATION
+ * USB_CFG_DESCR_PROPS_STRINGS
+ * USB_CFG_DESCR_PROPS_STRING_0
+ * USB_CFG_DESCR_PROPS_STRING_VENDOR
+ * USB_CFG_DESCR_PROPS_STRING_PRODUCT
+ * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
+ * USB_CFG_DESCR_PROPS_HID
+ * USB_CFG_DESCR_PROPS_HID_REPORT
+ * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
+ *
+ * Note about string descriptors: String descriptors are not just strings, they
+ * are Unicode strings prefixed with a 2 byte header. Example:
+ * int serialNumberDescriptor[] = {
+ * USB_STRING_DESCRIPTOR_HEADER(6),
+ * 'S', 'e', 'r', 'i', 'a', 'l'
+ * };
+ */
+
+#define USB_CFG_DESCR_PROPS_DEVICE 0
+#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_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/meira/config.h b/keyboards/meira/config.h
index 5e9dd6837..ff39f90eb 100644
--- a/keyboards/meira/config.h
+++ b/keyboards/meira/config.h
@@ -42,7 +42,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef RGBLIGHT_ENABLE
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 15 // Number of LEDs
#endif
diff --git a/keyboards/meira/keymaps/grahampheath/keymap.c b/keyboards/meira/keymaps/grahampheath/keymap.c
index 6a4b9333c..69815ef97 100644
--- a/keyboards/meira/keymaps/grahampheath/keymap.c
+++ b/keyboards/meira/keymaps/grahampheath/keymap.c
@@ -61,10 +61,10 @@ enum custom_keycodes {
bool TOG_STATUS = false;
int RGB_current_mode;
-#define KC_X0 MT(MOD_LCTL, KC_ESC) // Hold for Left Ctrl, Tap for ESC
+#define KC_X0 MT(MOD_LCTL, KC_ESC) // Hold for Left Ctrl, Tap for GraveESC
#define KC_X1 MT(MOD_RSFT, KC_ENT) // Hold for Right Shift, Tap for Enter
#define KC_X2 MT(MOD_RSFT, LGUI(KC_ENT)) // Send Command Enter
-#define KC_X3 MT(KC_LGUI, KC_SPC) // Hold for Left GUI, Tap for Space
+#define KC_X3 MT(MOD_LGUI, KC_SPC) // Hold for Left GUI, Tap for Space
#define KC_EMOJ TT(_EMOJI) // Hold for Emoji Layer, or tap 5 times.
#define KC_QS LGUI(KC_SPC) // Send Command + Space (for QuickSilver).
#define KC_TABR LGUI(KC_RCBR) // Send Command + } (for tab changing).
@@ -82,7 +82,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * |Emoji |Adjust| Ctrl | Alt |Lower | Cmd |Space |Raise | Left | Down | Up |Right |
+ * |Emoji | Ctrl | Alt |Lower | Cmd |Space+|Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
[_QWERTY] = KEYMAP( \
@@ -130,15 +130,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Emoji Layer
*
- * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
- * │HYPR0│ │ ;-) │ │ │ :-P │ │ │:'-( │FLIP │ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │HYPR1│ 👆 │SHRUG│ │ :-( │ │ <3 │ :-) │ │LLAP │ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
- * │HYPR2│ │ │ | :-\ │ │ │ :-D │ SHIT│ │ │ │
- * ├─────┼─────┼─────┼─────┼─────┼─────┴─────┼─────┼─────┼─────┼─────┼─────┤
- * │ │ │ │ │Brig-│ Sleep │Brig+│ 👈 │ 👎 | 👍 │ 👉 │
- * └─────┴─────┴─────┴─────┴─────┴───────────┴─────┴─────┴─────┴─────┴─────┘
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │HYPR0│ │ ;-) │ │ │ :-P │ │ │:'-( │FLIP │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │HYPR1│ 👆 │SHRUG│ │ :-( │ │ <3 │ :-) │ │LLAP │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │HYPR2│ │ │ | :-\ │ │ │ :-D │ SHIT│ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┴─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │Brig-│ Sleep │Brig+│ 👈 │ 👎 | 👍 │ 👉 │
+ * └─────┴─────┴─────┴─────┴─────┴───────────┴─────┴─────┴─────┴─────┴─────┘
*/
[_EMOJI] = KEYMAP ( \
HYPR_0, _______, WINK, _______, _______, TOUNGE, _______, _______, CRY, FLIP, _______, _______, \
@@ -151,20 +151,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Lower
* ,-----------------------------------------------------------------------------------.
- * | | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | ~ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Tab- | Vol- | Vol+ | Tab+ |
+ * | | | | | | | | Tab- | | | Tab+ |
* `-----------------------------------------------------------------------------------'
*/
[_LOWER] = KEYMAP( \
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_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______, \
- _______, _______, _______, _______, _______, KC_QS, KC_QS, _______, KC_TABL, THMBDN, THMBUP, KC_TABR \
+ _______, _______, _______, _______, _______, KC_QS, KC_QS, _______, KC_TABL, _______, _______, KC_TABR \
),
/* Raise
@@ -197,7 +197,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_ADJUST] = KEYMAP( \
- _______, RESET, _______, KC_MRWD, KC_MPLY, KC_MFFD, KC_PSCR, _______, _______, _______, _______, KC_DEL, \
+ _______, RESET, _______, _______, _______, _______, KC_PSCR, _______, _______, _______, _______, KC_DEL, \
_______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
diff --git a/keyboards/meira/rules.mk b/keyboards/meira/rules.mk
index d3e45fc8d..6c2472f43 100644
--- a/keyboards/meira/rules.mk
+++ b/keyboards/meira/rules.mk
@@ -59,7 +59,7 @@ 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
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
BACKLIGHT_CUSTOM_DRIVER = yes
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality, also set ISSI_ENABLE below for Miera
diff --git a/keyboards/melody96/config.h b/keyboards/melody96/config.h
index 6083dcf75..67123a7e5 100644
--- a/keyboards/melody96/config.h
+++ b/keyboards/melody96/config.h
@@ -43,9 +43,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/melody96/keymaps/default/keymap.c b/keyboards/melody96/keymaps/default/keymap.c
index 9142a0470..16f4561b5 100644
--- a/keyboards/melody96/keymaps/default/keymap.c
+++ b/keyboards/melody96/keymaps/default/keymap.c
@@ -73,12 +73,6 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
return MACRO_NONE;
}
-void matrix_init_user(void) {
-}
-
-void matrix_scan_user(void) {
-}
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
return true;
}
diff --git a/keyboards/mf68/README.md b/keyboards/mf68/README.md
deleted file mode 100644
index 7dd3a900a..000000000
--- a/keyboards/mf68/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-MF68
-====
-
-Magicforce 68 with [replacement PCB](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68) designed by [di0ib](https://github.com/di0ib).
-
-Keyboard Maintainer: [di0ib](http://www.40percent.club)
-Hardware Supported: Pro Micro
-Hardware Availability: [PCB files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68/pcb)
-
-Make example for this keyboard (after setting up your build environment):
-
- make mf68:default
-
-Example of flashing this keyboard:
-
- make mf68:default:avrdude
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/mf68/config.h b/keyboards/mf68/config.h
deleted file mode 100644
index 07d787eac..000000000
--- a/keyboards/mf68/config.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xCEEB
-#define PRODUCT_ID 0x0510
-#define DEVICE_VER 0x0101
-#define MANUFACTURER di0ib
-#define PRODUCT MF68
-#define DESCRIPTION Magicforce 68 with programmable PCB replacement
-
-/* key matrix size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 9
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-#define MATRIX_ROW_PINS { B6, B2, B3, B1, F7, F6, F5, F4 }
-#define MATRIX_COL_PINS { D3, D2, D1, D0, D4, C6, D7, E6, B4 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-#define BACKLIGHT_PIN B5
-#define BACKLIGHT_BREATHING
-#define BACKLIGHT_LEVELS 3
-
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-//#define FORCE_NKRO
-
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
-/* key combination for magic key command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* control how magic key switches layers */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
-
-/* override magic key keymap */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
-//#define MAGIC_KEY_HELP1 H
-//#define MAGIC_KEY_HELP2 SLASH
-//#define MAGIC_KEY_DEBUG D
-//#define MAGIC_KEY_DEBUG_MATRIX X
-//#define MAGIC_KEY_DEBUG_KBD K
-//#define MAGIC_KEY_DEBUG_MOUSE M
-//#define MAGIC_KEY_VERSION V
-//#define MAGIC_KEY_STATUS S
-//#define MAGIC_KEY_CONSOLE C
-//#define MAGIC_KEY_LAYER0_ALT1 ESC
-//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
-//#define MAGIC_KEY_LAYER0 0
-//#define MAGIC_KEY_LAYER1 1
-//#define MAGIC_KEY_LAYER2 2
-//#define MAGIC_KEY_LAYER3 3
-//#define MAGIC_KEY_LAYER4 4
-//#define MAGIC_KEY_LAYER5 5
-//#define MAGIC_KEY_LAYER6 6
-//#define MAGIC_KEY_LAYER7 7
-//#define MAGIC_KEY_LAYER8 8
-//#define MAGIC_KEY_LAYER9 9
-//#define MAGIC_KEY_BOOTLOADER PAUSE
-//#define MAGIC_KEY_LOCK CAPS
-//#define MAGIC_KEY_EEPROM E
-//#define MAGIC_KEY_NKRO N
-//#define MAGIC_KEY_SLEEP_LED Z
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/mf68/info.json b/keyboards/mf68/info.json
deleted file mode 100644
index d41c2176a..000000000
--- a/keyboards/mf68/info.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "keyboard_name": "MF68",
- "url": "",
- "maintainer": "qmk",
- "width": 17.25,
- "height": 5,
- "layouts": {
- "LAYOUT": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}]
- }
- }
-}
diff --git a/keyboards/mf68/keymaps/default/keymap.c b/keyboards/mf68/keymaps/default/keymap.c
deleted file mode 100644
index 73045f310..000000000
--- a/keyboards/mf68/keymaps/default/keymap.c
+++ /dev/null
@@ -1,68 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define _QWERTY 0
-#define _FN1 1
-#define _FN2 2
-#define KC_ KC_TRNS
-#define KC_X0 LT(_FN2, KC_GRV)
-#define KC_X1 MO(_FN1)
-#define KC_X2 BL_STEP
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL , BSPC , INS ,PGUP,
- /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------| |----`----| */
- TAB , Q , W , E , R , T , Y , U , I , O , P ,LBRC,RBRC, BSLS , DEL ,PGDN,
- /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------| `----`----' */
- X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT, ENTER ,
- /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------| ,----. */
- LSFT , Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, RSFT , UP ,
- /*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */
- LCTL ,LGUI ,LALT , SPACE , X1 ,RALT ,RCTL , LEFT,DOWN,RGHT
- /*`-----+-----+-----+------------------------------+------+-----+-----' `----+----+----' */
- ),
-
- [_FN1] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
- , , , UP , , , , , , , , , X2 , , VOLD,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
- , ,LEFT,DOWN,RGHT, , , , , , , , ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
- , , , , , , ,MUTE, , , , , MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
- , , , , , , , MPRV,MPLY,MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
- ),
-
- [_FN2] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
- , , , UP , , , , 7 , 8 , 9 , , , , , VOLD,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
- , ,LEFT,DOWN,RGHT, , , 4 , 5 , 6 , , , ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
- , , , , , , 0 , 1 , 2 , 3 , , , MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
- , , , , , , , MPRV,MPLY,MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+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;
-};
diff --git a/keyboards/mf68/keymaps/factory/keymap.c b/keyboards/mf68/keymaps/factory/keymap.c
deleted file mode 100644
index 0c5305e51..000000000
--- a/keyboards/mf68/keymaps/factory/keymap.c
+++ /dev/null
@@ -1,74 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define _QWERTY 0
-#define _FN1 1
-#define _FN2 2
-#define KC_ KC_TRNS
-#define KC_X0 LT(_FN2, KC_CAPS)
-#define KC_X1 MO(_FN1)
-#define KC_X2 BL_STEP
-#define KC_X3 BL_BRTG
-#define KC_X4 BL_TOGG
-#define KC_X5 BL_INC
-#define KC_X6 BL_DEC
-
-
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL , BSPC , INS ,PGUP,
- /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------| |----`----| */
- TAB , Q , W , E , R , T , Y , U , I , O , P ,LBRC,RBRC, BSLS , DEL ,PGDN,
- /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------| `----`----' */
- X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT, ENTER ,
- /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------| ,----. */
- LSFT , Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, RSFT , UP ,
- /*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */
- LCTL ,LGUI ,LALT , SPACE , X1 ,RALT ,RCTL , LEFT,DOWN,RGHT
- /*`-----+-----+-----+------------------------------+------+-----+-----' `----+----+----' */
- ),
-
- [_FN1] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , ,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
- , , UP , , , , , , ,PSCR,SLCK,PAUS, X2 , , ,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
- X0 ,LEFT,DOWN,RGHT, , X6 , X5 , X4 , X3 , X2 ,HOME, , ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
- , ,MPLY,MSTP,MPRV,MNXT,VOLD,VOLU,MUTE, ,END , , X5 ,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
- , , , , , , , X3 , X6 , X4
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
- ),
-
- [_FN2] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
- , , , UP , , , , 7 , 8 , 9 , , , , , VOLD,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
- , ,LEFT,DOWN,RGHT, , , 4 , 5 , 6 , , , ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
- , , , , , , 0 , 1 , 2 , 3 , , , MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
- , , , , , , , MPRV,MPLY,MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+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;
-};
diff --git a/keyboards/mf68/rules.mk b/keyboards/mf68/rules.mk
deleted file mode 100644
index a535a9d0e..000000000
--- a/keyboards/mf68/rules.mk
+++ /dev/null
@@ -1,66 +0,0 @@
-
-# MCU name
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-# 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 ?= yes # 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
diff --git a/keyboards/mf68_ble/README.md b/keyboards/mf68_ble/README.md
deleted file mode 100644
index 3829c8fd7..000000000
--- a/keyboards/mf68_ble/README.md
+++ /dev/null
@@ -1,27 +0,0 @@
-MF68
-====
-
-Magicforce 68 with [replacement PCB](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68) designed by [di0ib](https://github.com/di0ib).
-
-Keyboard Maintainer: [di0ib](http://www.40percent.club)
-Hardware Supported: [Feather 32u4 Bluefruit](https://learn.adafruit.com/adafruit-feather-32u4-bluefruit-le/)
-Please note: This is 32u4 and not M0
-Hardware Availability: [PCB files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/mf68/pcb)
-[MF68 thicc case files](https://github.com/harshitgoel96/mf68-case-thicc)
-Story
------
-
-The story and the idea behind this mod is available on [my reddit post](https://www.reddit.com/r/MechanicalKeyboards/comments/7eiiht/guide_i_built_a_bluetooth_enabled_magicforce68_no/)
-
-Wiring
-------
-
-Below is how you wire the Feather to PCB
-
-![wire map](https://i.imgur.com/zYOjlTA.png)
-
-Make example for this keyboard (after setting up your build environment):
-
- make mf68_ble:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/mf68_ble/config.h b/keyboards/mf68_ble/config.h
deleted file mode 100644
index 83c0a7a5a..000000000
--- a/keyboards/mf68_ble/config.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xCEEB
-#define PRODUCT_ID 0x0510
-#define DEVICE_VER 0x0101
-#define MANUFACTURER di0ib
-#define PRODUCT MF68
-#define DESCRIPTION Magicforce 68 BLE
-
-/* key matrix size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 9
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-#define MATRIX_ROW_PINS { D1, D0, C6, D7, B5, B6, B7, D6 }
-#define MATRIX_COL_PINS { C7, F7, F6, F5, F4, F1, F0, D2, D3 }
-#define UNUSED_PINS {B5}
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-/*
-#define BACKLIGHT_PIN B5
-#define BACKLIGHT_BREATHING
-#define BACKLIGHT_LEVELS 3
-*/
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-//#define FORCE_NKRO
-
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
-/* key combination for magic key command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* control how magic key switches layers */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
-
-/* override magic key keymap */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
-//#define MAGIC_KEY_HELP1 H
-//#define MAGIC_KEY_HELP2 SLASH
-//#define MAGIC_KEY_DEBUG D
-//#define MAGIC_KEY_DEBUG_MATRIX X
-//#define MAGIC_KEY_DEBUG_KBD K
-//#define MAGIC_KEY_DEBUG_MOUSE M
-//#define MAGIC_KEY_VERSION V
-//#define MAGIC_KEY_STATUS S
-//#define MAGIC_KEY_CONSOLE C
-//#define MAGIC_KEY_LAYER0_ALT1 ESC
-//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
-//#define MAGIC_KEY_LAYER0 0
-//#define MAGIC_KEY_LAYER1 1
-//#define MAGIC_KEY_LAYER2 2
-//#define MAGIC_KEY_LAYER3 3
-//#define MAGIC_KEY_LAYER4 4
-//#define MAGIC_KEY_LAYER5 5
-//#define MAGIC_KEY_LAYER6 6
-//#define MAGIC_KEY_LAYER7 7
-//#define MAGIC_KEY_LAYER8 8
-//#define MAGIC_KEY_LAYER9 9
-//#define MAGIC_KEY_BOOTLOADER PAUSE
-//#define MAGIC_KEY_LOCK CAPS
-//#define MAGIC_KEY_EEPROM E
-//#define MAGIC_KEY_NKRO N
-//#define MAGIC_KEY_SLEEP_LED Z
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/mf68_ble/info.json b/keyboards/mf68_ble/info.json
deleted file mode 100644
index 1f8aaed92..000000000
--- a/keyboards/mf68_ble/info.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "keyboard_name": "MF68 BLE",
- "url": "",
- "maintainer": "qmk",
- "width": 17.25,
- "height": 5,
- "layouts": {
- "LAYOUT": {
- "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15.25, "y":1}, {"x":16.25, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"x":15.25, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"x":14.25, "y":4}, {"x":15.25, "y":4}, {"x":16.25, "y":4}]
- }
- }
-}
diff --git a/keyboards/mf68_ble/keymaps/default/keymap.c b/keyboards/mf68_ble/keymaps/default/keymap.c
deleted file mode 100644
index 73045f310..000000000
--- a/keyboards/mf68_ble/keymaps/default/keymap.c
+++ /dev/null
@@ -1,68 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define _QWERTY 0
-#define _FN1 1
-#define _FN2 2
-#define KC_ KC_TRNS
-#define KC_X0 LT(_FN2, KC_GRV)
-#define KC_X1 MO(_FN1)
-#define KC_X2 BL_STEP
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QWERTY] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- ESC , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 0 ,MINS,EQL , BSPC , INS ,PGUP,
- /*|----`----`----`----`----`----`----`----`----`----`----`----`----`--------| |----`----| */
- TAB , Q , W , E , R , T , Y , U , I , O , P ,LBRC,RBRC, BSLS , DEL ,PGDN,
- /*|------`----`----`----`----`----`----`----`----`----`----`----`----`------| `----`----' */
- X0 , A , S , D , F , G , H , J , K , L ,SCLN,QUOT, ENTER ,
- /*|-------`----`----`----`----`----`----`----`----`----`----`----`----------| ,----. */
- LSFT , Z , X , C , V , B , N , M ,COMM,DOT ,SLSH, RSFT , UP ,
- /*|---------`----`----`----`----`----`----`----`----`----`----`-------------.--|----|----. */
- LCTL ,LGUI ,LALT , SPACE , X1 ,RALT ,RCTL , LEFT,DOWN,RGHT
- /*`-----+-----+-----+------------------------------+------+-----+-----' `----+----+----' */
- ),
-
- [_FN1] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
- , , , UP , , , , , , , , , X2 , , VOLD,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
- , ,LEFT,DOWN,RGHT, , , , , , , , ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
- , , , , , , ,MUTE, , , , , MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
- , , , , , , , MPRV,MPLY,MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+rght' */
- ),
-
- [_FN2] = LAYOUT_kc(
- /*,----+----+----+----+----+----+----+----+----+----+----+----+----+--------. ,----+----. */
- GRV , F1 , F2 , F3 , F4 , F5 , F6 , F7 , F8 , F9 ,F10 ,F11 ,F12 , BSPC , VOLU,HOME,
- /*|esc-`-1--`-2--`-3--`-4--`-5--`-6--`-7--`-8--`-9--`-0--`mnus`plus`--bksp--| |ins-`pgup| */
- , , , UP , , , , 7 , 8 , 9 , , , , , VOLD,END,
- /*|tab---`-q--`-w--`-e--`-r--`-t--`-y--`-u--`-i--`-o--`-p--`-{--`-}--`--|---| `del-`pgdn' */
- , ,LEFT,DOWN,RGHT, , , 4 , 5 , 6 , , , ,
- /*|caps---`-a--`-s--`-d--`-f--`-g--`-h--`-j--`-k--`-l--`-;--`-'--`----enter-| ,----. */
- , , , , , , 0 , 1 , 2 , 3 , , , MUTE,
- /*|shift----`-z--`-x--`-c--`-v--`-b--`-n--`-m--`-,--`-.--`-/--`-------shift-.--|-up-|----. */
- , , , , , , , MPRV,MPLY,MNXT
- /*`ctrl-+-gui-+-alt-+----------space---------------+-fn---+-alt-+ctrl-' `left+down+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;
-};
diff --git a/keyboards/mf68_ble/rules.mk b/keyboards/mf68_ble/rules.mk
deleted file mode 100644
index 07b59d785..000000000
--- a/keyboards/mf68_ble/rules.mk
+++ /dev/null
@@ -1,67 +0,0 @@
-
-# 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 = 8000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE ?= no # USB Nkey Rollover
-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
-BLUETOOTH = AdafruitBLE \ No newline at end of file
diff --git a/keyboards/miniaxe/config.h b/keyboards/miniaxe/config.h
new file mode 100644
index 000000000..2b732ca16
--- /dev/null
+++ b/keyboards/miniaxe/config.h
@@ -0,0 +1,248 @@
+/*
+Copyright 2018 ENDO Katsuhiro <ka2hiro@curlybracket.co.jp>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 0x3939
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ENDO Katsuhiro
+#define PRODUCT MiniAxe
+#define DESCRIPTION Yet another split keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 5
+
+/*
+ * 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)
+ * NO_DIODE = switches are directly connected to AVR pins
+ *
+*/
+// #define MATRIX_ROW_PINS { D0, D5 }
+// #define MATRIX_COL_PINS { F1, F0, B0 }
+#define NO_PIN 0xFF
+#define MATRIX_ROW_COL_PINS { \
+ { F1, E6, B0, B2, B3 }, \
+ { F5, F0, B1, B7, D2 }, \
+ { F6, F7, C7, D5, D3 }, \
+ { B5, C6, B6, NO_PIN, NO_PIN } \
+}
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION CUSTOM_MATRIX
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+/* Uncomment below if use underglow */
+#define RGB_DI_PIN F4
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 6
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
+
+/* Serial settings */
+#define USE_SERIAL
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+//#define EE_HANDS
+#define I2C_MASTER_LEFT
+//#define I2C_MASTER_RIGHT
+
+#define DISABLE_JTAG
+
diff --git a/keyboards/miniaxe/info.json b/keyboards/miniaxe/info.json
new file mode 100644
index 000000000..5fee787b5
--- /dev/null
+++ b/keyboards/miniaxe/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "MiniAxe",
+ "url": "",
+ "maintainer": "ka2hiro",
+ "width": 11,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"Q", "x":0, "y":0}, {"label":"W", "x":1, "y":0}, {"label":"E", "x":2, "y":0}, {"label":"R", "x":3, "y":0}, {"label":"T", "x":4, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"A", "x":0, "y":1}, {"label":"S", "x":1, "y":1}, {"label":"D", "x":2, "y":1}, {"label":"F", "x":3, "y":1}, {"label":"G", "x":4, "y":1}, {"label":"J", "x":6, "y":1}, {"label":"J", "x":7, "y":1}, {"label":"K", "x":8, "y":1}, {"label":"L", "x":9, "y":1}, {"label":";", "x":10, "y":1}, {"label":"Z", "x":0, "y":2}, {"label":"X", "x":1, "y":2}, {"label":"C", "x":2, "y":2}, {"label":"V", "x":3, "y":2}, {"label":"B", "x":4, "y":2}, {"label":"N", "x":6, "y":2}, {"label":"M", "x":7, "y":2}, {"label":",", "x":8, "y":2}, {"label":".", "x":9, "y":2}, {"label":"/", "x":10, "y":2}, {"label":"Cmd", "x":2, "y":3}, {"label":"&dArr;", "x":3, "y":3}, {"label":"Ctrl", "x":4, "y":3}, {"x":6, "y":3}, {"label":"&uArr;", "x":7, "y":3}, {"label":"Opt", "x":8, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/miniaxe/keymaps/default/keymap.c b/keyboards/miniaxe/keymaps/default/keymap.c
new file mode 100644
index 000000000..4b405e202
--- /dev/null
+++ b/keyboards/miniaxe/keymaps/default/keymap.c
@@ -0,0 +1,159 @@
+/* Copyright 2018 ENDO Katsuhiro <ka2hiro@curlybracket.co.jp>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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 _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ *
+ * ,----------------------------------. ,----------------------------------.
+ * | Q | W | E | R | T | | Y | U | I | O | P |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | A | S | D | F | G | | H | J | K | L | ; |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Z | X | C | V | B | | N | M | , | . | / |
+ * `-------------+------+------+------| |------+------+------+------+------'
+ * | GUI | LOWER|Ctrl/Esc| |Spc/Sft| RAISE|Alt/BkSp |
+ * `--------------------' `--------------------'
+ */
+[_QWERTY] = LAYOUT( \
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \
+ KC_LGUI, LOWER, MT(MOD_LCTL, KC_ESC), MT(MOD_LSFT, KC_SPC), RAISE, MT(MOD_LALT, KC_BSPC) \
+),
+
+/* Raise
+ *
+ * ,----------------------------------. ,----------------------------------.
+ * | ! | @ | # | $ | % | | ^ | & | * | ( | ) |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Tab | _ | + | | | ~ | | : | " | > | { | } |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Caps| - | = | \ | ` | | ; | ' | < | [ | ] |
+ * `-------------+------+------+------| |------+------+------+------+------'
+ * | | LOWER| | | Esc | RAISE| |
+ * `--------------------' `--------------------'
+ */
+[_RAISE] = LAYOUT( \
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \
+ KC_TAB, KC_UNDS, KC_PLUS, KC_PIPE, KC_TILD, KC_COLN, KC_DQUO, KC_GT, KC_LCBR, KC_RCBR, \
+ KC_CAPS, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_SCLN, KC_QUOT, KC_LT, KC_LBRC, KC_RBRC, \
+ _______, _______, _______, _______, _______, _______\
+),
+
+/* Lower
+ *
+ * ,----------------------------------. ,----------------------------------.
+ * | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Tab | | | | | | Left | Down | Up | Right| Enter|
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Ctrl| ` | GUI | Alt | Del | | BkSp | PgUp | PgDn | \ | ' |
+ * `-------------+------+------+------| |------+------+------+------+------'
+ * | | LOWER| | | | RAISE| |
+ * `--------------------' `--------------------'
+ */
+[_LOWER] = LAYOUT( \
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \
+ KC_TAB, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ENT, \
+ KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, KC_DEL, KC_BSPC, KC_PGUP, KC_PGDN, KC_BSLS, KC_QUOT, \
+ _______, _______, _______, _______, _______, _______ \
+),
+
+
+/* Adjust (Lower + Raise)
+ *
+ * ,----------------------------------. ,----------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | F11 | F12 | | | | | | | | | |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Reset| | | | | | Prev | Next | Vol- | Vol+ | Play |
+ * `-------------+------+------+------| |------+------+------+------+------'
+ * | | LOWER| | | | RAISE| |
+ * `--------------------' `--------------------'
+ */
+[_ADJUST] = LAYOUT( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \
+ KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, _______, \
+ RESET, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, \
+ _______, _______, _______, _______, _______, _______ \
+)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ // persistant_default_layer_set(1UL<<_QWERTY);
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+void led_set_user(uint8_t usb_led) {
+}
diff --git a/keyboards/miniaxe/keymaps/underglow/keymap.c b/keyboards/miniaxe/keymaps/underglow/keymap.c
new file mode 100644
index 000000000..6325b2056
--- /dev/null
+++ b/keyboards/miniaxe/keymaps/underglow/keymap.c
@@ -0,0 +1,159 @@
+/* Copyright 2018 ENDO Katsuhiro <ka2hiro@curlybracket.co.jp>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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 _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ *
+ * ,----------------------------------. ,----------------------------------.
+ * | Q | W | E | R | T | | Y | U | I | O | P |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | A | S | D | F | G | | H | J | K | L | ; |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Z | X | C | V | B | | N | M | , | . | / |
+ * `-------------+------+------+------| |------+------+------+------+------'
+ * | GUI | LOWER|Ctrl/Esc| |Spc/Sft| RAISE|Alt/BkSp |
+ * `--------------------' `--------------------'
+ */
+[_QWERTY] = LAYOUT( \
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \
+ KC_LGUI, LOWER, MT(MOD_LCTL, KC_ESC), MT(MOD_LSFT, KC_SPC), RAISE, MT(MOD_LALT, KC_BSPC) \
+),
+
+/* Raise
+ *
+ * ,----------------------------------. ,----------------------------------.
+ * | ! | @ | # | $ | % | | ^ | & | * | ( | ) |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Tab | _ | + | | | ~ | | : | " | > | { | } |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Caps| - | = | \ | ` | | ; | ' | < | [ | ] |
+ * `-------------+------+------+------| |------+------+------+------+------'
+ * | | LOWER| | | Esc | RAISE| |
+ * `--------------------' `--------------------'
+ */
+[_RAISE] = LAYOUT( \
+ KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, \
+ KC_TAB, KC_UNDS, KC_PLUS, KC_PIPE, KC_TILD, KC_COLN, KC_DQUO, KC_GT, KC_LCBR, KC_RCBR, \
+ KC_CAPS, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_SCLN, KC_QUOT, KC_LT, KC_LBRC, KC_RBRC, \
+ _______, _______, _______, _______, _______, _______\
+),
+
+/* Lower
+ *
+ * ,----------------------------------. ,----------------------------------.
+ * | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Tab | | | | Play | | Left | Down | Up | Right| Enter|
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Ctrl| ` | GUI | Alt | Del | | BkSp | PgUp | PgDn | \ | ' |
+ * `-------------+------+------+------| |------+------+------+------+------'
+ * | | LOWER| | | | RAISE| |
+ * `--------------------' `--------------------'
+ */
+[_LOWER] = LAYOUT( \
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \
+ KC_TAB, _______, _______, _______, KC_MPLY, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ENT, \
+ KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, KC_DEL, KC_BSPC, KC_PGUP, KC_PGDN, KC_BSLS, KC_QUOT, \
+ _______, _______, _______, _______, _______, _______ \
+),
+
+
+/* Adjust (Lower + Raise)
+ *
+ * ,----------------------------------. ,----------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | F11 | F12 | |RGBSAI|RGBSAD| |RGBVAI|RGBVAD| | | |
+ * |------+------+------+------+------| |------+------+------+------+------|
+ * | Reset|RGBTOG|RGBMOD|RGBHUI|RGBHUD| | Prev | Next | Vol- | Vol+ | Play |
+ * `-------------+------+------+------| |------+------+------+------+------'
+ * | | LOWER| | | | RAISE| |
+ * `--------------------' `--------------------'
+ */
+[_ADJUST] = LAYOUT( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, \
+ KC_F11, KC_F12, RGB_RMOD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, \
+ RESET, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, KC_MPRV, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, \
+ _______, _______, _______, _______, _______, _______ \
+)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ // persistant_default_layer_set(1UL<<_QWERTY);
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+void led_set_user(uint8_t usb_led) {
+}
diff --git a/keyboards/miniaxe/keymaps/underglow/rules.mk b/keyboards/miniaxe/keymaps/underglow/rules.mk
new file mode 100644
index 000000000..64fa91ded
--- /dev/null
+++ b/keyboards/miniaxe/keymaps/underglow/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+
diff --git a/keyboards/miniaxe/matrix.c b/keyboards/miniaxe/matrix.c
new file mode 100644
index 000000000..5fec1281d
--- /dev/null
+++ b/keyboards/miniaxe/matrix.c
@@ -0,0 +1,641 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "split_util.h"
+#include "pro_micro.h"
+#include "config.h"
+#include "timer.h"
+#include "split_flags.h"
+
+#ifdef BACKLIGHT_ENABLE
+# include "backlight.h"
+ extern backlight_config_t backlight_config;
+#endif
+
+#if defined(USE_I2C) || defined(EH)
+# include "i2c.h"
+#else // USE_SERIAL
+# include "serial.h"
+#endif
+
+#ifndef DEBOUNCING_DELAY
+# define DEBOUNCING_DELAY 5
+#endif
+
+#if (DEBOUNCING_DELAY > 0)
+ static uint16_t debouncing_time;
+ static bool debouncing = false;
+#endif
+
+#if defined(USE_I2C) || defined(EH)
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#else
+# error "Currently only supports 8 COLS"
+#endif
+
+#else // USE_SERIAL
+
+#if (MATRIX_COLS <= 8)
+# define print_matrix_header() print("\nr/c 01234567\n")
+# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop(matrix[i])
+# define ROW_SHIFTER ((uint8_t)1)
+#elif (MATRIX_COLS <= 16)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse16(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop16(matrix[i])
+# define ROW_SHIFTER ((uint16_t)1)
+#elif (MATRIX_COLS <= 32)
+# define print_matrix_header() print("\nr/c 0123456789ABCDEF0123456789ABCDEF\n")
+# define print_matrix_row(row) print_bin_reverse32(matrix_get_row(row))
+# define matrix_bitpop(i) bitpop32(matrix[i])
+# define ROW_SHIFTER ((uint32_t)1)
+#endif
+
+#endif
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+#define ERROR_DISCONNECT_COUNT 5
+
+#define ROWS_PER_HAND (MATRIX_ROWS/2)
+
+static uint8_t error_count = 0;
+
+#if ((DIODE_DIRECTION == COL2ROW) || (DIODE_DIRECTION == ROW2COL))
+static uint8_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static uint8_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+#elif (DIODE_DIRECTION == CUSTOM_MATRIX)
+static uint8_t row_col_pins[MATRIX_ROWS][MATRIX_COLS] = MATRIX_ROW_COL_PINS;
+#endif
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+#if (DIODE_DIRECTION == COL2ROW)
+ static void init_cols(void);
+ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
+ static void unselect_rows(void);
+ static void select_row(uint8_t row);
+ static void unselect_row(uint8_t row);
+#elif (DIODE_DIRECTION == ROW2COL)
+ static void init_rows(void);
+ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
+ static void unselect_cols(void);
+ static void unselect_col(uint8_t col);
+ static void select_col(uint8_t col);
+#elif (DIODE_DIRECTION == CUSTOM_MATRIX)
+ static void init_cols_rows(void);
+ static bool read_cols(matrix_row_t current_matrix[], uint8_t current_row);
+#endif
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_slave_scan_user(void) {
+}
+
+inline
+uint8_t matrix_rows(void)
+{
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void)
+{
+ return MATRIX_COLS;
+}
+
+void matrix_init(void)
+{
+#ifdef DISABLE_JTAG
+ // JTAG disable for PORT F. write JTD bit twice within four cycles.
+ MCUCR |= (1<<JTD);
+ MCUCR |= (1<<JTD);
+#endif
+
+ debug_enable = true;
+ debug_matrix = true;
+ debug_mouse = true;
+
+ // Set pinout for right half if pinout for that half is defined
+ if (!isLeftHand) {
+#ifdef MATRIX_ROW_PINS_RIGHT
+ const uint8_t row_pins_right[MATRIX_ROWS] = MATRIX_ROW_PINS_RIGHT;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++)
+ row_pins[i] = row_pins_right[i];
+#endif
+#ifdef MATRIX_COL_PINS_RIGHT
+ const uint8_t col_pins_right[MATRIX_COLS] = MATRIX_COL_PINS_RIGHT;
+ for (uint8_t i = 0; i < MATRIX_COLS; i++)
+ col_pins[i] = col_pins_right[i];
+#endif
+ }
+
+ // initialize row and col
+#if (DIODE_DIRECTION == COL2ROW)
+ unselect_rows();
+ init_cols();
+#elif (DIODE_DIRECTION == ROW2COL)
+ unselect_cols();
+ init_rows();
+#elif (DIODE_DIRECTION == CUSTOM_MATRIX)
+ init_cols_rows();
+#endif
+
+ // initialize matrix state: all keys off
+ for (uint8_t i=0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ matrix_debouncing[i] = 0;
+ }
+
+ matrix_init_quantum();
+
+}
+
+uint8_t _matrix_scan(void)
+{
+ int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
+#if (DIODE_DIRECTION == COL2ROW)
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
+# if (DEBOUNCING_DELAY > 0)
+ bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
+
+ if (matrix_changed) {
+ debouncing = true;
+ debouncing_time = timer_read();
+ }
+
+# else
+ read_cols_on_row(matrix+offset, current_row);
+# endif
+
+ }
+
+#elif (DIODE_DIRECTION == ROW2COL)
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+# if (DEBOUNCING_DELAY > 0)
+ bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
+ if (matrix_changed) {
+ debouncing = true;
+ debouncing_time = timer_read();
+ }
+# else
+ read_rows_on_col(matrix+offset, current_col);
+# endif
+
+ }
+
+#elif (DIODE_DIRECTION == CUSTOM_MATRIX)
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
+# if (DEBOUNCING_DELAY > 0)
+ bool matrix_changed = read_cols(matrix_debouncing+offset, current_row);
+ if (matrix_changed) {
+ debouncing = true;
+ debouncing_time = timer_read();
+ }
+# else
+ read_cols(matrix+offset, current_row);
+# endif
+ }
+#endif
+
+# if (DEBOUNCING_DELAY > 0)
+ if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
+ for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
+ matrix[i+offset] = matrix_debouncing[i+offset];
+ }
+ debouncing = false;
+ }
+# endif
+
+ return 1;
+}
+
+#if defined(USE_I2C) || defined(EH)
+
+// Get rows from other half over i2c
+int i2c_transaction(void) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+ int err = 0;
+
+ // write backlight info
+ #ifdef BACKLIGHT_ENABLE
+ if (BACKLIT_DIRTY) {
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+ if (err) goto i2c_error;
+
+ // Backlight location
+ err = i2c_master_write(I2C_BACKLIT_START);
+ if (err) goto i2c_error;
+
+ // Write backlight
+ i2c_master_write(get_backlight_level());
+
+ BACKLIT_DIRTY = false;
+ }
+ #endif
+
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+ if (err) goto i2c_error;
+
+ // start of matrix stored at I2C_KEYMAP_START
+ err = i2c_master_write(I2C_KEYMAP_START);
+ if (err) goto i2c_error;
+
+ // Start read
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_READ);
+ if (err) goto i2c_error;
+
+ if (!err) {
+ int i;
+ for (i = 0; i < ROWS_PER_HAND-1; ++i) {
+ matrix[slaveOffset+i] = i2c_master_read(I2C_ACK);
+ }
+ matrix[slaveOffset+i] = i2c_master_read(I2C_NACK);
+ i2c_master_stop();
+ } else {
+i2c_error: // the cable is disconnceted, or something else went wrong
+ i2c_reset_state();
+ return err;
+ }
+
+ #ifdef RGBLIGHT_ENABLE
+ if (RGB_DIRTY) {
+ err = i2c_master_start(SLAVE_I2C_ADDRESS + I2C_WRITE);
+ if (err) goto i2c_error;
+
+ // RGB Location
+ err = i2c_master_write(I2C_RGB_START);
+ if (err) goto i2c_error;
+
+ uint32_t dword = eeconfig_read_rgblight();
+
+ // Write RGB
+ err = i2c_master_write_data(&dword, 4);
+ if (err) goto i2c_error;
+
+ RGB_DIRTY = false;
+ i2c_master_stop();
+ }
+ #endif
+
+ return 0;
+}
+
+#else // USE_SERIAL
+
+
+typedef struct _Serial_s2m_buffer_t {
+ // TODO: if MATRIX_COLS > 8 change to uint8_t packed_matrix[] for pack/unpack
+ matrix_row_t smatrix[ROWS_PER_HAND];
+} Serial_s2m_buffer_t;
+
+volatile Serial_s2m_buffer_t serial_s2m_buffer = {};
+volatile Serial_m2s_buffer_t serial_m2s_buffer = {};
+uint8_t volatile status0 = 0;
+
+SSTD_t transactions[] = {
+ { (uint8_t *)&status0,
+ sizeof(serial_m2s_buffer), (uint8_t *)&serial_m2s_buffer,
+ sizeof(serial_s2m_buffer), (uint8_t *)&serial_s2m_buffer
+ }
+};
+
+void serial_master_init(void)
+{ soft_serial_initiator_init(transactions, TID_LIMIT(transactions)); }
+
+void serial_slave_init(void)
+{ soft_serial_target_init(transactions, TID_LIMIT(transactions)); }
+
+int serial_transaction(void) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+
+ if (soft_serial_transaction()) {
+ return 1;
+ }
+
+ // TODO: if MATRIX_COLS > 8 change to unpack()
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[slaveOffset+i] = serial_s2m_buffer.smatrix[i];
+ }
+
+ #ifdef RGBLIGHT_ENABLE
+ // Code to send RGB over serial goes here (not implemented yet)
+ #endif
+
+ #ifdef BACKLIGHT_ENABLE
+ // Write backlight level for slave to read
+ serial_m2s_buffer.backlight_level = backlight_config.enable ? backlight_config.level : 0;
+ #endif
+
+ return 0;
+}
+#endif
+
+uint8_t matrix_scan(void)
+{
+ uint8_t ret = _matrix_scan();
+
+#if defined(USE_I2C) || defined(EH)
+ if( i2c_transaction() ) {
+#else // USE_SERIAL
+ if( serial_transaction() ) {
+#endif
+
+ error_count++;
+
+ if (error_count > ERROR_DISCONNECT_COUNT) {
+ // reset other half if disconnected
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[slaveOffset+i] = 0;
+ }
+ }
+ } else {
+ error_count = 0;
+ }
+ matrix_scan_quantum();
+ return ret;
+}
+
+void matrix_slave_scan(void) {
+ _matrix_scan();
+
+ int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
+
+#if defined(USE_I2C) || defined(EH)
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ i2c_slave_buffer[I2C_KEYMAP_START+i] = matrix[offset+i];
+ }
+#else // USE_SERIAL
+ // TODO: if MATRIX_COLS > 8 change to pack()
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ serial_s2m_buffer.smatrix[i] = matrix[offset+i];
+ }
+#endif
+ matrix_slave_scan_user();
+}
+
+bool matrix_is_modified(void)
+{
+ if (debouncing) return false;
+ return true;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print("\nr/c 0123456789ABCDEF\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ pbin_reverse16(matrix_get_row(row));
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += bitpop16(matrix[i]);
+ }
+ return count;
+}
+
+#if (DIODE_DIRECTION == COL2ROW)
+
+static void init_cols(void)
+{
+ for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ uint8_t pin = col_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
+{
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[current_row];
+
+ // Clear data in matrix row
+ current_matrix[current_row] = 0;
+
+ // Select row and wait for row selecton to stabilize
+ select_row(current_row);
+ wait_us(30);
+
+ // For each col...
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+
+ // Select the col pin to read (active low)
+ uint8_t pin = col_pins[col_index];
+ uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
+
+ // Populate the matrix row with the state of the col pin
+ current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
+ }
+
+ // Unselect row
+ unselect_row(current_row);
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+static void select_row(uint8_t row)
+{
+ uint8_t pin = row_pins[row];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+}
+
+static void unselect_row(uint8_t row)
+{
+ uint8_t pin = row_pins[row];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+}
+
+static void unselect_rows(void)
+{
+ for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
+ uint8_t pin = row_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
+#elif (DIODE_DIRECTION == ROW2COL)
+
+static void init_rows(void)
+{
+ for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
+ uint8_t pin = row_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
+{
+ bool matrix_changed = false;
+
+ // Select col and wait for col selecton to stabilize
+ select_col(current_col);
+ wait_us(30);
+
+ // For each row...
+ for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
+ {
+
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[row_index];
+
+ // Check row pin state
+ if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
+ {
+ // Pin LO, set col bit
+ current_matrix[row_index] |= (ROW_SHIFTER << current_col);
+ }
+ else
+ {
+ // Pin HI, clear col bit
+ current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
+ {
+ matrix_changed = true;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+
+ return matrix_changed;
+}
+
+static void select_col(uint8_t col)
+{
+ uint8_t pin = col_pins[col];
+ _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
+ _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
+}
+
+static void unselect_col(uint8_t col)
+{
+ uint8_t pin = col_pins[col];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+}
+
+static void unselect_cols(void)
+{
+ for(uint8_t x = 0; x < MATRIX_COLS; x++) {
+ uint8_t pin = col_pins[x];
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
+ }
+}
+
+#elif (DIODE_DIRECTION == CUSTOM_MATRIX)
+
+static void init_cols_rows(void)
+{
+ for(int row = 0; row < MATRIX_ROWS; row++) {
+ for(int col = 0; col < MATRIX_COLS; col++) {
+ uint8_t pin = row_col_pins[row][col];
+ if(pin == NO_PIN) {
+ continue;
+ }
+ // DDxn set 0 for input
+ _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF);
+ // PORTxn set 1 for input/pullup
+ _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF);
+ }
+ }
+}
+
+static bool read_cols(matrix_row_t current_matrix[], uint8_t current_row)
+{
+ matrix_row_t last_row_value = current_matrix[current_row];
+ current_matrix[current_row] = 0;
+
+ for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+ uint8_t pin = row_col_pins[current_row][col_index];
+ if(pin == NO_PIN) {
+ current_matrix[current_row] |= 0;
+ }
+ else {
+ uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
+ current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
+ }
+ }
+
+ return (last_row_value != current_matrix[current_row]);
+}
+
+#endif
diff --git a/keyboards/miniaxe/miniaxe.c b/keyboards/miniaxe/miniaxe.c
new file mode 100644
index 000000000..965ada9a1
--- /dev/null
+++ b/keyboards/miniaxe/miniaxe.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 ENDO Katsuhiro <ka2hiro@curlybracket.co.jp>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "miniaxe.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/miniaxe/miniaxe.h b/keyboards/miniaxe/miniaxe.h
new file mode 100644
index 000000000..a0130ad28
--- /dev/null
+++ b/keyboards/miniaxe/miniaxe.h
@@ -0,0 +1,50 @@
+/* Copyright 2018 ENDO Katsuhiro <ka2hiro@curlybracket.co.jp>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 MINIAXE_H
+#define MINIAXE_H
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+
+// readability
+#define ___ KC_NO
+
+#define LAYOUT( \
+ L01, L02, L03, L04, L05, R01, R02, R03, R04, R05, \
+ L06, L07, L08, L09, L10, R06, R07, R08, R09, R10, \
+ L11, L12, L13, L14, L15, R11, R12, R13, R14, R15, \
+ L16, L17, L18, R16, R17, R18 \
+ ) \
+ { \
+ { L01, L02, L03, L04, L05 }, \
+ { L06, L07, L08, L09, L10 }, \
+ { L11, L12, L13, L14, L15 }, \
+ { L16, L17, L18, ___, ___ }, \
+ { R01, R02, R03, R04, R05 }, \
+ { R06, R07, R08, R09, R10 }, \
+ { R11, R12, R13, R14, R15 }, \
+ { R16, R17, R18, ___, ___ } \
+ }
+
+#endif
diff --git a/keyboards/miniaxe/readme.md b/keyboards/miniaxe/readme.md
new file mode 100644
index 000000000..57ed01a91
--- /dev/null
+++ b/keyboards/miniaxe/readme.md
@@ -0,0 +1,16 @@
+MiniAxe
+===
+
+![MiniAxe](https://i.imgur.com/1ApzrCz.jpg)
+
+Yet another split ortholinear keyboard with 3x5+3 keys.
+
+Keyboard Maintainer: [ka2hiro](https://github.com/ka2hiro) [@ka2hiro](https://twitter.com/ka2hiro)
+Hardware Supported: MiniAxe PCB, ATMEGA32U4
+Hardware Availability: [@ka2hiro](https://twitter.com/ka2hiro)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make miniaxe: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/miniaxe/rules.mk b/keyboards/miniaxe/rules.mk
new file mode 100644
index 000000000..96e27686b
--- /dev/null
+++ b/keyboards/miniaxe/rules.mk
@@ -0,0 +1,88 @@
+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
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality 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)
+
+DEBUG_ENABLE = no
+CUSTOM_MATRIX = yes # Use custom matrix code
+SPLIT_KEYBOARD = yes # Use shared split_common code
+
diff --git a/keyboards/minidox/keymaps/alairock/config.h b/keyboards/minidox/keymaps/alairock/config.h
index 445606031..6b0069f4b 100644
--- a/keyboards/minidox/keymaps/alairock/config.h
+++ b/keyboards/minidox/keymaps/alairock/config.h
@@ -30,11 +30,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D7
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 8 // Number of LEDs
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
-#define PREVENT_STUCK_MODIFIERS
#endif
diff --git a/keyboards/minidox/keymaps/alairock/rules.mk b/keyboards/minidox/keymaps/alairock/rules.mk
index cd7ab91c2..ebada165a 100644
--- a/keyboards/minidox/keymaps/alairock/rules.mk
+++ b/keyboards/minidox/keymaps/alairock/rules.mk
@@ -1,2 +1,2 @@
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
EXTRAKEY_ENABLE = yes
diff --git a/keyboards/minidox/keymaps/khitsule/config.h b/keyboards/minidox/keymaps/khitsule/config.h
index 702354864..645e80ee8 100644
--- a/keyboards/minidox/keymaps/khitsule/config.h
+++ b/keyboards/minidox/keymaps/khitsule/config.h
@@ -1,8 +1,6 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
-#define PREVENT_STUCK_MODIFIERS
-
#define IGNORE_MOD_TAP_INTERRUPT
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/minidox/keymaps/that_canadian/config.h b/keyboards/minidox/keymaps/that_canadian/config.h
index 5832d1866..b85609127 100644
--- a/keyboards/minidox/keymaps/that_canadian/config.h
+++ b/keyboards/minidox/keymaps/that_canadian/config.h
@@ -29,7 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D7
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 8 // Number of LEDs
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 10
diff --git a/keyboards/minidox/keymaps/that_canadian/rules.mk b/keyboards/minidox/keymaps/that_canadian/rules.mk
index 52ef1ad3e..7637dfc09 100644
--- a/keyboards/minidox/keymaps/that_canadian/rules.mk
+++ b/keyboards/minidox/keymaps/that_canadian/rules.mk
@@ -1,4 +1,4 @@
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
ifndef QUANTUM_DIR
include ../../../../Makefile
diff --git a/keyboards/minidox/keymaps/xyverz/config.h b/keyboards/minidox/keymaps/xyverz/config.h
index 6d7b6256a..ae26f9499 100644
--- a/keyboards/minidox/keymaps/xyverz/config.h
+++ b/keyboards/minidox/keymaps/xyverz/config.h
@@ -29,7 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D7
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 8 // Number of LEDs
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 10
diff --git a/keyboards/minidox/keymaps/xyverz/rules.mk b/keyboards/minidox/keymaps/xyverz/rules.mk
index d34df5b19..c777cb1b9 100644
--- a/keyboards/minidox/keymaps/xyverz/rules.mk
+++ b/keyboards/minidox/keymaps/xyverz/rules.mk
@@ -1 +1 @@
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
diff --git a/keyboards/minidox/readme.md b/keyboards/minidox/readme.md
index b44d66660..9ec306421 100644
--- a/keyboards/minidox/readme.md
+++ b/keyboards/minidox/readme.md
@@ -5,7 +5,7 @@ MiniDox
A compact version of the ErgoDox
-Keyboard Maintainer: That-Canadian
+Keyboard Maintainer: That-Canadian
Hardware Supported: MiniDox PCB rev1 Pro Micro
Make example for this keyboard (after setting up your build environment):
@@ -54,13 +54,13 @@ file will run on both hands instead of having to flash left and right handed
versions of the firmware to each half. To flash the EEPROM file for the left
half run:
```
-avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-lefthand.eep
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-lefthand.eep"
// or the equivalent in dfu-programmer
```
and similarly for right half
```
-avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:eeprom-righhand.eep
+avrdude -p atmega32u4 -P $(COM_PORT) -c avr109 -U eeprom:w:"./quantum/split_common/eeprom-righthand.eep"
// or the equivalent in dfu-programmer
```
diff --git a/keyboards/minidox/rules.mk b/keyboards/minidox/rules.mk
index 0c3a03bd7..861976e15 100644
--- a/keyboards/minidox/rules.mk
+++ b/keyboards/minidox/rules.mk
@@ -63,7 +63,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE ?= no # Enable WS2812 RGB underlight.
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
diff --git a/keyboards/mint60/config.h b/keyboards/mint60/config.h
new file mode 100644
index 000000000..a762c5ffe
--- /dev/null
+++ b/keyboards/mint60/config.h
@@ -0,0 +1,232 @@
+/*
+Copyright 2018 Eucalyn
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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"
+#include <serial_config.h>
+
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Eucalyn
+#define PRODUCT Mint60
+#define DESCRIPTION A row staggered split keyboard
+
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 100
+
+/* 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 { D4, B3, B1, F7, B2, B6, F6, F5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 8
+
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#define RGBLIGHT_ANIMATIONS
+
+
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
diff --git a/keyboards/mint60/i2c.c b/keyboards/mint60/i2c.c
new file mode 100644
index 000000000..4bee5c639
--- /dev/null
+++ b/keyboards/mint60/i2c.c
@@ -0,0 +1,162 @@
+#include <util/twi.h>
+#include <avr/io.h>
+#include <stdlib.h>
+#include <avr/interrupt.h>
+#include <util/twi.h>
+#include <stdbool.h>
+#include "i2c.h"
+
+#ifdef USE_I2C
+
+// Limits the amount of we wait for any one i2c transaction.
+// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
+// 9 bits, a single transaction will take around 90μs to complete.
+//
+// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
+// poll loop takes at least 8 clock cycles to execute
+#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
+
+#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
+
+volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
+
+static volatile uint8_t slave_buffer_pos;
+static volatile bool slave_has_register_set = false;
+
+// Wait for an i2c operation to finish
+inline static
+void i2c_delay(void) {
+ uint16_t lim = 0;
+ while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
+ lim++;
+
+ // easier way, but will wait slightly longer
+ // _delay_us(100);
+}
+
+// Setup twi to run at 100kHz or 400kHz (see ./i2c.h SCL_CLOCK)
+void i2c_master_init(void) {
+ // no prescaler
+ TWSR = 0;
+ // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
+ // Check datasheets for more info.
+ TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
+}
+
+// Start a transaction with the given i2c slave address. The direction of the
+// transfer is set with I2C_READ and I2C_WRITE.
+// returns: 0 => success
+// 1 => error
+uint8_t i2c_master_start(uint8_t address) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
+
+ i2c_delay();
+
+ // check that we started successfully
+ if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
+ return 1;
+
+ TWDR = address;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+
+ i2c_delay();
+
+ if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
+ return 1; // slave did not acknowledge
+ else
+ return 0; // success
+}
+
+
+// Finish the i2c transaction.
+void i2c_master_stop(void) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+
+ uint16_t lim = 0;
+ while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
+ lim++;
+}
+
+// Write one byte to the i2c slave.
+// returns 0 => slave ACK
+// 1 => slave NACK
+uint8_t i2c_master_write(uint8_t data) {
+ TWDR = data;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+
+ i2c_delay();
+
+ // check if the slave acknowledged us
+ return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
+}
+
+// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
+// if ack=0 the acknowledge bit is not set.
+// returns: byte read from i2c device
+uint8_t i2c_master_read(int ack) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
+
+ i2c_delay();
+ return TWDR;
+}
+
+void i2c_reset_state(void) {
+ TWCR = 0;
+}
+
+void i2c_slave_init(uint8_t address) {
+ TWAR = address << 0; // slave i2c address
+ // TWEN - twi enable
+ // TWEA - enable address acknowledgement
+ // TWINT - twi interrupt flag
+ // TWIE - enable the twi interrupt
+ TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
+}
+
+ISR(TWI_vect);
+
+ISR(TWI_vect) {
+ uint8_t ack = 1;
+ switch(TW_STATUS) {
+ case TW_SR_SLA_ACK:
+ // this device has been addressed as a slave receiver
+ slave_has_register_set = false;
+ break;
+
+ case TW_SR_DATA_ACK:
+ // this device has received data as a slave receiver
+ // The first byte that we receive in this transaction sets the location
+ // of the read/write location of the slaves memory that it exposes over
+ // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
+ // slave_buffer_pos after each write.
+ if(!slave_has_register_set) {
+ slave_buffer_pos = TWDR;
+ // don't acknowledge the master if this memory loctaion is out of bounds
+ if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
+ ack = 0;
+ slave_buffer_pos = 0;
+ }
+ slave_has_register_set = true;
+ } else {
+ i2c_slave_buffer[slave_buffer_pos] = TWDR;
+ BUFFER_POS_INC();
+ }
+ break;
+
+ case TW_ST_SLA_ACK:
+ case TW_ST_DATA_ACK:
+ // master has addressed this device as a slave transmitter and is
+ // requesting data.
+ TWDR = i2c_slave_buffer[slave_buffer_pos];
+ BUFFER_POS_INC();
+ break;
+
+ case TW_BUS_ERROR: // something went wrong, reset twi state
+ TWCR = 0;
+ default:
+ break;
+ }
+ // Reset everything, so we are ready for the next TWI interrupt
+ TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
+}
+#endif
diff --git a/keyboards/mint60/i2c.h b/keyboards/mint60/i2c.h
new file mode 100644
index 000000000..47cf6bd1b
--- /dev/null
+++ b/keyboards/mint60/i2c.h
@@ -0,0 +1,49 @@
+#ifndef I2C_H
+#define I2C_H
+
+#include <stdint.h>
+
+#ifndef F_CPU
+#define F_CPU 16000000UL
+#endif
+
+#define I2C_READ 1
+#define I2C_WRITE 0
+
+#define I2C_ACK 1
+#define I2C_NACK 0
+
+#define SLAVE_BUFFER_SIZE 0x10
+
+// i2c SCL clock frequency 400kHz
+#define SCL_CLOCK 400000L
+
+extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
+
+void i2c_master_init(void);
+uint8_t i2c_master_start(uint8_t address);
+void i2c_master_stop(void);
+uint8_t i2c_master_write(uint8_t data);
+uint8_t i2c_master_read(int);
+void i2c_reset_state(void);
+void i2c_slave_init(uint8_t address);
+
+
+static inline unsigned char i2c_start_read(unsigned char addr) {
+ return i2c_master_start((addr << 1) | I2C_READ);
+}
+
+static inline unsigned char i2c_start_write(unsigned char addr) {
+ return i2c_master_start((addr << 1) | I2C_WRITE);
+}
+
+// from SSD1306 scrips
+extern unsigned char i2c_rep_start(unsigned char addr);
+extern void i2c_start_wait(unsigned char addr);
+extern unsigned char i2c_readAck(void);
+extern unsigned char i2c_readNak(void);
+extern unsigned char i2c_read(unsigned char ack);
+
+#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
+
+#endif
diff --git a/keyboards/mint60/info.json b/keyboards/mint60/info.json
new file mode 100644
index 000000000..f03e6371b
--- /dev/null
+++ b/keyboards/mint60/info.json
@@ -0,0 +1,78 @@
+{
+ "keyboard_name": "Mint60",
+ "url": "",
+ "maintainer": "eucalyn",
+ "width": 16,
+ "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":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", "x":14, "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":7.5, "y":1},
+ {"label":"U", "x":8.5, "y":1},
+ {"label":"I", "x":9.5, "y":1},
+ {"label":"O", "x":10.5, "y":1},
+ {"label":"P", "x":11.5, "y":1},
+ {"label":"{", "x":12.5, "y":1},
+ {"label":"}", "x":13.5, "y":1},
+ {"label":"|", "x":14.5, "y":1, "w":1.5},
+ {"label":"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":7.75, "y":2},
+ {"label":"J", "x":8.75, "y":2},
+ {"label":"K", "x":9.75, "y":2},
+ {"label":"L", "x":10.75, "y":2},
+ {"label":":", "x":11.75, "y":2},
+ {"label":"\"", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":2, "w":2.25},
+ {"label":"Shift", "x":0, "y":3, "w":2},
+ {"label":"Z", "x":2, "y":3},
+ {"label":"X", "x":3, "y":3},
+ {"label":"C", "x":4, "y":3},
+ {"label":"V", "x":5, "y":3},
+ {"label":"B", "x":6, "y":3},
+ {"label":"N", "x":8, "y":3},
+ {"label":"M", "x":9, "y":3},
+ {"label":"<", "x":10, "y":3},
+ {"label":">", "x":11, "y":3},
+ {"label":"?", "x":12, "y":3},
+ {"label":"Shift", "x":13, "y":3},
+ {"label":"Up", "x":14, "y":3},
+ {"label":"Fn", "x":15, "y":3},
+ {"label":"Esc", "x":0, "y":4},
+ {"label":"Ctrl", "x":1, "y":4, "w":1.25},
+ {"label":"Win", "x":2.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":3.5, "y":4, "w":1.25},
+ {"label":"Space", "x":4.75, "y":4, "w":2.25},
+ {"label":"Space", "x":7.75, "y":4, "w":2.75},
+ {"label":"Win", "x":10.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":11.75, "y":4, "w":1.25},
+ {"label":"Left", "x":13, "y":4},
+ {"label":"Down", "x":14, "y":4},
+ {"label":"Right", "x":15, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/mint60/keymaps/default/config.h b/keyboards/mint60/keymaps/default/config.h
new file mode 100644
index 000000000..0195c61df
--- /dev/null
+++ b/keyboards/mint60/keymaps/default/config.h
@@ -0,0 +1,23 @@
+/* Copyright 2018 Eucalyn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+#define USE_SERIAL
+// #define USE_I2C
+
+// #define MASTER_RIGHT
diff --git a/keyboards/mint60/keymaps/default/keymap.c b/keyboards/mint60/keymaps/default/keymap.c
new file mode 100644
index 000000000..36895cb47
--- /dev/null
+++ b/keyboards/mint60/keymaps/default/keymap.c
@@ -0,0 +1,104 @@
+/* Copyright 2018 Eucalyn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+enum custom_keycodes {
+ RGBRST = SAFE_RANGE
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, MO(1), \
+ KC_ESC, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_BSPC, KC_ENT, LALT(KC_GRV), KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ [1] = LAYOUT( \
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ RGB_TOG, RGBRST, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_PGUP, _______, \
+ XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_END \
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+// define variables for reactive RGB
+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:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/mint60/keymaps/default/readme.md b/keyboards/mint60/keymaps/default/readme.md
new file mode 100644
index 000000000..37dec75a6
--- /dev/null
+++ b/keyboards/mint60/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for Mint60
diff --git a/keyboards/mint60/keymaps/eucalyn/config.h b/keyboards/mint60/keymaps/eucalyn/config.h
new file mode 100644
index 000000000..0195c61df
--- /dev/null
+++ b/keyboards/mint60/keymaps/eucalyn/config.h
@@ -0,0 +1,23 @@
+/* Copyright 2018 Eucalyn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+#define USE_SERIAL
+// #define USE_I2C
+
+// #define MASTER_RIGHT
diff --git a/keyboards/mint60/keymaps/eucalyn/keymap.c b/keyboards/mint60/keymaps/eucalyn/keymap.c
new file mode 100644
index 000000000..566d734a5
--- /dev/null
+++ b/keyboards/mint60/keymaps/eucalyn/keymap.c
@@ -0,0 +1,104 @@
+/* Copyright 2018 Eucalyn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+enum custom_keycodes {
+ RGBRST = SAFE_RANGE
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_COMM, KC_DOT, KC_SCLN, KC_M, KC_R, KC_D, KC_Y, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_O, KC_E, KC_I, KC_U, KC_G, KC_T, KC_K, KC_S, KC_N, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_F, KC_B, KC_H, KC_J, KC_L, KC_SLSH, KC_RSFT, KC_UP, MO(1), \
+ KC_ESC, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_BSPC, KC_ENT, LALT(KC_GRV), KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+ [1] = LAYOUT( \
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ RGB_TOG, RGBRST, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_PGUP, _______, \
+ XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_END \
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+// define variables for reactive RGB
+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:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/mint60/keymaps/eucalyn/readme.md b/keyboards/mint60/keymaps/eucalyn/readme.md
new file mode 100644
index 000000000..1478b951f
--- /dev/null
+++ b/keyboards/mint60/keymaps/eucalyn/readme.md
@@ -0,0 +1,3 @@
+# The Eucalyn keymap for Mint60
+
+It use "Eucalyn" Kemboard Layout.
diff --git a/keyboards/mint60/matrix.c b/keyboards/mint60/matrix.c
new file mode 100644
index 000000000..6d8878332
--- /dev/null
+++ b/keyboards/mint60/matrix.c
@@ -0,0 +1,349 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <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_I2C
+# include "i2c.h"
+#else // USE_SERIAL
+# include "serial.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;
+
+ // 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_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(void) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+ int ret=serial_update_buffers();
+ if (ret ) {
+ if(ret==2)RXLED1;
+ return 1;
+ }
+RXLED0;
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[slaveOffset+i] = serial_slave_buffer[i];
+ }
+ return 0;
+}
+#endif
+
+uint8_t matrix_scan(void)
+{
+ if (is_master) {
+ matrix_master_scan();
+ }else{
+ matrix_slave_scan();
+
+// if(serial_slave_DATA_CORRUPT()){
+// TXLED0;
+ int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[offset+i] = serial_master_buffer[i];
+ }
+
+// }else{
+// TXLED1;
+// }
+
+ matrix_scan_quantum();
+ }
+ return 1;
+}
+
+
+uint8_t matrix_master_scan(void) {
+
+ int ret = _matrix_scan();
+
+#ifndef KEYBOARD_helix_rev1
+ int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
+
+#ifdef USE_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
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ serial_master_buffer[i] = matrix[offset+i];
+ }
+#endif
+#endif
+
+#ifdef USE_I2C
+ if( i2c_transaction() ) {
+#else // USE_SERIAL
+ if( serial_transaction() ) {
+#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_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
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ serial_slave_buffer[i] = matrix[offset+i];
+ }
+#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/mint60/mint60.c b/keyboards/mint60/mint60.c
new file mode 100644
index 000000000..724bea757
--- /dev/null
+++ b/keyboards/mint60/mint60.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 Eucalyn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "mint60.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/mint60/mint60.h b/keyboards/mint60/mint60.h
new file mode 100644
index 000000000..ed2ee255f
--- /dev/null
+++ b/keyboards/mint60/mint60.h
@@ -0,0 +1,59 @@
+/* Copyright 2018 Eucalyn
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 MINT60_H
+#define MINT60_H
+
+#include "quantum.h"
+
+#ifdef RGBLIGHT_ENABLE
+//rgb led driver
+#include "ws2812.h"
+#endif
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT( \
+ L00,L01,L02,L03,L04,L05, R00,R01,R02,R03,R04,R05,R06, R07, \
+ L10, L11,L12,L13,L14,L15, R10,R11,R12,R13,R14,R15,R16,R17, \
+ L20, L21,L22,L23,L24,L25, R20,R21,R22,R23,R24,R25, R27, \
+ L30, L31,L32,L33,L34,L35, R30,R31,R32,R33,R34,R35,R36,R37, \
+ L40,L41, L42, L43, L44, R40, R41, R43, R45,R46,R47 \
+) \
+{ \
+ { L00, L01, L02, L03, L04, L05, KC_NO, KC_NO }, \
+ { L10, L11, L12, L13, L14, L15, KC_NO, KC_NO }, \
+ { L20, L21, L22, L23, L24, L25, KC_NO, KC_NO }, \
+ { L30, L31, L32, L33, L34, L35, KC_NO, KC_NO }, \
+ { L40, L41, L42, L43, L44, KC_NO, KC_NO, KC_NO }, \
+ { R00, R01, R02, R03, R04, R05, R06, R07 }, \
+ { R10, R11, R12, R13, R14, R15, R16, R17 }, \
+ { R20, R21, R22, R23, R24, R25, KC_NO, R27 }, \
+ { R30, R31, R32, R33, R34, R35, R36, R37 }, \
+ { R40, R41, KC_NO, R43, KC_NO, R45, R46, R47 }, \
+}
+
+#endif
diff --git a/keyboards/mint60/readme.md b/keyboards/mint60/readme.md
new file mode 100644
index 000000000..1824c682f
--- /dev/null
+++ b/keyboards/mint60/readme.md
@@ -0,0 +1,15 @@
+# Mint60
+
+![Mint60](https://i.imgur.com/suOE8HN.jpg)
+
+A short description of the keyboard/project
+
+Keyboard Maintainer: [Eucalyn](https://github.com/eucalyn) [@eucalyn_](https://twitter.com/eucalyn_)
+Hardware Supported: The Mint60 PCBs, ProMicro supported
+Hardware Availability: links to where you can find this hardware
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mint60: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/mint60/rules.mk b/keyboards/mint60/rules.mk
new file mode 100644
index 000000000..b4472153b
--- /dev/null
+++ b/keyboards/mint60/rules.mk
@@ -0,0 +1,78 @@
+SRC += i2c.c \
+ serial.c \
+ matrix.c \
+ split_util.c \
+
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = no # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+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
+USE_I2C = yes
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
diff --git a/keyboards/mint60/serial.c b/keyboards/mint60/serial.c
new file mode 100644
index 000000000..591941587
--- /dev/null
+++ b/keyboards/mint60/serial.c
@@ -0,0 +1,295 @@
+/*
+ * WARNING: be careful changing this code, it is very timing dependent
+ */
+
+#ifndef F_CPU
+#define F_CPU 16000000
+#endif
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <stdbool.h>
+#include "serial.h"
+
+#ifdef USE_SERIAL
+
+#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
+
+// Serial pulse period in microseconds.
+#define SELECT_SERIAL_SPEED 1
+#if SELECT_SERIAL_SPEED == 0
+ // Very High speed
+ #define SERIAL_DELAY 4 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 1
+ // High speed
+ #define SERIAL_DELAY 6 // micro sec
+ #define READ_WRITE_START_ADJUST 23 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 2
+ // Middle speed
+ #define SERIAL_DELAY 12 // micro sec
+ #define READ_WRITE_START_ADJUST 25 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 3
+ // Low speed
+ #define SERIAL_DELAY 24 // micro sec
+ #define READ_WRITE_START_ADJUST 25 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 4
+ // Very Low speed
+ #define SERIAL_DELAY 50 // micro sec
+ #define READ_WRITE_START_ADJUST 25 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#else
+#error Illegal Serial Speed
+#endif
+
+
+#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2)
+#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2)
+
+#define SLAVE_INT_WIDTH 1
+#define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY
+
+uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
+uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
+
+#define SLAVE_DATA_CORRUPT (1<<0)
+volatile uint8_t status = 0;
+
+inline static
+void serial_delay(void) {
+ _delay_us(SERIAL_DELAY);
+}
+
+inline static
+void serial_delay_half1(void) {
+ _delay_us(SERIAL_DELAY_HALF1);
+}
+
+inline static
+void serial_delay_half2(void) {
+ _delay_us(SERIAL_DELAY_HALF2);
+}
+
+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) {
+ SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
+ SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+inline static
+uint8_t serial_read_pin(void) {
+ return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
+}
+
+inline static
+void serial_low(void) {
+ SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
+}
+
+inline static
+void serial_high(void) {
+ SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+void serial_master_init(void) {
+ serial_output();
+ serial_high();
+}
+
+void serial_slave_init(void) {
+ serial_input_with_pullup();
+
+#if SERIAL_PIN_MASK == _BV(PD0)
+ // Enable INT0
+ EIMSK |= _BV(INT0);
+ // Trigger on falling edge of INT0
+ EICRA &= ~(_BV(ISC00) | _BV(ISC01));
+#elif SERIAL_PIN_MASK == _BV(PD2)
+ // Enable INT2
+ EIMSK |= _BV(INT2);
+ // Trigger on falling edge of INT2
+ EICRA &= ~(_BV(ISC20) | _BV(ISC21));
+#else
+ #error unknown SERIAL_PIN_MASK value
+#endif
+}
+
+// Used by the sender to synchronize timing with the reciver.
+static
+void sync_recv(void) {
+ for (int i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
+ }
+ // This shouldn't hang if the slave disconnects because the
+ // serial line will float to high if the slave does disconnect.
+ while (!serial_read_pin());
+}
+
+// Used by the reciver to send a synchronization signal to the sender.
+static
+void sync_send(void) {
+ serial_low();
+ serial_delay();
+ serial_high();
+}
+
+// Reads a byte from the serial line
+static
+uint8_t serial_read_byte(void) {
+ uint8_t byte = 0;
+ _delay_sub_us(READ_WRITE_START_ADJUST);
+ for ( uint8_t i = 0; i < 8; ++i) {
+ serial_delay_half1(); // read the middle of pulses
+ byte = (byte << 1) | serial_read_pin();
+ _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
+ serial_delay_half2();
+ }
+ return byte;
+}
+
+// Sends a byte with MSB ordering
+static
+void serial_write_byte(uint8_t data) {
+ uint8_t b = 1<<7;
+ while( b ) {
+ if(data & b) {
+ serial_high();
+ } else {
+ serial_low();
+ }
+ b >>= 1;
+ serial_delay();
+ }
+ serial_low(); // sync_send() / senc_recv() need raise edge
+}
+
+// interrupt handle to be used by the slave device
+ISR(SERIAL_PIN_INTERRUPT) {
+ serial_output();
+
+ // slave send phase
+ uint8_t checksum = 0;
+ for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
+ sync_send();
+ serial_write_byte(serial_slave_buffer[i]);
+ checksum += serial_slave_buffer[i];
+ }
+ sync_send();
+ serial_write_byte(checksum);
+
+ // slave switch to input
+ sync_send(); //0
+ serial_delay_half1(); //1
+ serial_low(); //2
+ serial_input_with_pullup(); //2
+ serial_delay_half1(); //3
+
+ // slave recive phase
+ uint8_t checksum_computed = 0;
+ for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
+ sync_recv();
+ serial_master_buffer[i] = serial_read_byte();
+ checksum_computed += serial_master_buffer[i];
+ }
+ sync_recv();
+ uint8_t checksum_received = serial_read_byte();
+
+ if ( checksum_computed != checksum_received ) {
+ status |= SLAVE_DATA_CORRUPT;
+ } else {
+ status &= ~SLAVE_DATA_CORRUPT;
+ }
+
+ sync_recv(); //weit master output to high
+}
+
+inline
+bool serial_slave_DATA_CORRUPT(void) {
+ return status & SLAVE_DATA_CORRUPT;
+}
+
+// Copies the serial_slave_buffer to the master and sends the
+// serial_master_buffer to the slave.
+//
+// Returns:
+// 0 => no error
+// 1 => slave did not respond
+// 2 => checksum error
+int serial_update_buffers(void) {
+ // this code is very time dependent, so we need to disable interrupts
+ cli();
+
+ // signal to the slave that we want to start a transaction
+ serial_output();
+ serial_low();
+ _delay_us(SLAVE_INT_WIDTH);
+
+ // wait for the slaves response
+ serial_input_with_pullup();
+ _delay_us(SLAVE_INT_RESPONSE_TIME);
+
+ // check if the slave is present
+ if (serial_read_pin()) {
+ // slave failed to pull the line low, assume not present
+ serial_output();
+ serial_high();
+ sei();
+ return 1;
+ }
+
+ // master recive phase
+ // if the slave is present syncronize with it
+
+ uint8_t checksum_computed = 0;
+ // receive data from the slave
+ for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
+ sync_recv();
+ serial_slave_buffer[i] = serial_read_byte();
+ checksum_computed += serial_slave_buffer[i];
+ }
+ sync_recv();
+ uint8_t checksum_received = serial_read_byte();
+
+ if (checksum_computed != checksum_received) {
+ serial_output();
+ serial_high();
+ sei();
+ return 2;
+ }
+
+ // master switch to output
+ sync_recv(); //0
+ serial_delay(); //1
+ serial_low(); //3
+ serial_output(); // 3
+ serial_delay_half1(); //4
+
+ // master send phase
+ uint8_t checksum = 0;
+
+ for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
+ sync_send();
+ serial_write_byte(serial_master_buffer[i]);
+ checksum += serial_master_buffer[i];
+ }
+ sync_send();
+ serial_write_byte(checksum);
+
+ // always, release the line when not in use
+ sync_send();
+
+ sei();
+ return 0;
+}
+
+#endif
diff --git a/keyboards/mint60/serial.h b/keyboards/mint60/serial.h
new file mode 100644
index 000000000..c3c9569b2
--- /dev/null
+++ b/keyboards/mint60/serial.h
@@ -0,0 +1,27 @@
+#ifndef SOFT_SERIAL_H
+#define SOFT_SERIAL_H
+
+#include <stdbool.h>
+
+// ////////////////////////////////////////////
+// Need Soft Serial defines in serial_config.h
+// ////////////////////////////////////////////
+// ex.
+// #define SERIAL_PIN_DDR DDRD
+// #define SERIAL_PIN_PORT PORTD
+// #define SERIAL_PIN_INPUT PIND
+// #define SERIAL_PIN_MASK _BV(PD?) ?=0,2
+// #define SERIAL_PIN_INTERRUPT INT?_vect ?=0,2
+// #define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+// #define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+// Buffers for master - slave communication
+extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
+extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+
+void serial_master_init(void);
+void serial_slave_init(void);
+int serial_update_buffers(void);
+bool serial_slave_data_corrupt(void);
+
+#endif /* SOFT_SERIAL_H */
diff --git a/keyboards/mint60/serial_config.h b/keyboards/mint60/serial_config.h
new file mode 100644
index 000000000..82c6e4e83
--- /dev/null
+++ b/keyboards/mint60/serial_config.h
@@ -0,0 +1,16 @@
+#ifndef SOFT_SERIAL_CONFIG_H
+#define SOFT_SERIAL_CONFIG_H
+
+/* Soft Serial defines */
+#define SERIAL_PIN_DDR DDRD
+#define SERIAL_PIN_PORT PORTD
+#define SERIAL_PIN_INPUT PIND
+#define SERIAL_PIN_MASK _BV(PD2)
+#define SERIAL_PIN_INTERRUPT INT2_vect
+
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+//// #error rev2 serial config
+
+#endif /* SOFT_SERIAL_CONFIG_H */
diff --git a/keyboards/mint60/split_util.c b/keyboards/mint60/split_util.c
new file mode 100644
index 000000000..cd3a1896e
--- /dev/null
+++ b/keyboards/mint60/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_I2C
+# include "i2c.h"
+#else
+# include "serial.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_I2C
+ i2c_master_init();
+#else
+ serial_master_init();
+#endif
+}
+
+static void keyboard_slave_setup(void) {
+
+#ifdef USE_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/mint60/split_util.h b/keyboards/mint60/split_util.h
new file mode 100644
index 000000000..687ca19bd
--- /dev/null
+++ b/keyboards/mint60/split_util.h
@@ -0,0 +1,19 @@
+#ifndef SPLIT_KEYBOARD_UTIL_H
+#define SPLIT_KEYBOARD_UTIL_H
+
+#include <stdbool.h>
+#include "eeconfig.h"
+
+#define SLAVE_I2C_ADDRESS 0x32
+
+extern volatile bool isLeftHand;
+
+// slave version of matix scan, defined in matrix.c
+void matrix_slave_scan(void);
+
+void split_keyboard_setup(void);
+bool has_usb(void);
+
+void matrix_master_OLED_init (void);
+
+#endif
diff --git a/keyboards/mitosis/config.h b/keyboards/mitosis/config.h
index 6101ee123..5cfd2e4b1 100644
--- a/keyboards/mitosis/config.h
+++ b/keyboards/mitosis/config.h
@@ -52,8 +52,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
* These options are also useful to firmware size reduction.
*/
-#define PREVENT_STUCK_MODIFIERS
-
/* disable debug print */
//#define NO_DEBUG
diff --git a/keyboards/mitosis/keymaps/datagrok/config.h b/keyboards/mitosis/keymaps/datagrok/config.h
index 9edb950cf..1c70a3791 100644
--- a/keyboards/mitosis/keymaps/datagrok/config.h
+++ b/keyboards/mitosis/keymaps/datagrok/config.h
@@ -1,12 +1,21 @@
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
-#include "../../config.h"
+#ifdef MITOSIS_DATAGROK_SLOWUART
+// This is the highest possible baud rate that a pro micro clocked at 8Mhz can
+// support without errors. I don't notice any difference in behavior at this
+// slower speed. (So I think it should maybe be the default, to allow a single
+// codebase to support both available flavors of pro micro.) This requires a
+// corresponding change to the wireless module firmware; see
+// https://github.com/reversebias/mitosis/pull/10
+#undef SERIAL_UART_BAUD // avoids redefinition warning
+#define SERIAL_UART_BAUD 250000
+#endif
// I want to place an underscore as tap behavior on the right shift key. But
// RSFT_T(KC_UNDS) doesn't work; mod-tap doesn't work with pre-shifted keys. So
-// instead we take advantage of Space Cadet Shift that does something similar
-// and just tweak it to use the -_ key instead of 0) See
+// instead I take advantage of Space Cadet Shift that does something similar
+// and just tweak it to use the -/_ key instead of 0/). See
// https://github.com/qmk/qmk_firmware/pull/2055
#define RSPC_KEY KC_MINS
@@ -18,11 +27,12 @@
//#define NO_ACTION_FUNCTION
#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(MARIO_MUSHROOM)
+#define DEFAULT_LAYER_SONGS { \
+ SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND), \
+ SONG(ZELDA_TREASURE), \
}
#define AUDIO_VOICES
#define AUDIO_CLICKY
@@ -30,3 +40,18 @@
#endif
#endif
+
+#define LAYOUT_bottomspace( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \
+ k31, k32, k33, k34, k35, k36, k37, k38, \
+ k41, k42, k43, k44, k45, k46, k47, k48 \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29 }, \
+ { KC_NO, k31, k32, k43, k44, k45, k46, k37, k38, KC_NO }, \
+ { KC_NO, k41, k42, k33, k34, k35, k36, k47, k48, KC_NO } \
+ }
diff --git a/keyboards/mitosis/keymaps/datagrok/keymap.c b/keyboards/mitosis/keymaps/datagrok/keymap.c
index 4fda3f839..d8c20bc43 100644
--- a/keyboards/mitosis/keymaps/datagrok/keymap.c
+++ b/keyboards/mitosis/keymaps/datagrok/keymap.c
@@ -1,16 +1,34 @@
#include QMK_KEYBOARD_H
+
#ifdef AUDIO_ENABLE
#include "audio.h"
+#ifdef DEFAULT_LAYER_SONGS
+extern float default_layer_songs[][16][2];
+#endif
#endif
enum mitosis_layers
-{
+ {
_xQ, // qwerty
+ _xC, // colemak
+ _xD, // dvorak
_xW, // workman
_xS, // symbols
_xN, // numbers
_xF // functions
-};
+ };
+
+enum mitosis_keycodes
+ {
+ KC_LAYO = SAFE_RANGE
+ };
+
+// Setting MITOSIS_DATAGROK_BOTTOMSPACE in rules.mk will swap the upper and
+// lower center four thumb-keys. See keymaps/datagrok/rules.mk.
+#ifdef MITOSIS_DATAGROK_BOTTOMSPACE
+#undef LAYOUT
+#define LAYOUT LAYOUT_bottomspace
+#endif
// Fillers to make layering more clear
#define _______ KC_TRNS // Transparent
@@ -31,58 +49,125 @@ enum mitosis_layers
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_xQ] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
- KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOT,
- /*, */ KC_LGUI, KC_LCTL, MO(_xS), KC_TAB, KC_SPC, MO(_xS), KC_RCTL, KC_RGUI,
- /*, */ KC_HENK, KC_LALT, MO(_xN), KC_LSFT, KC_RSPC, MO(_xN), KC_RALT, KC_MHEN),
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_QUOT,
+ /*, */ KC_LGUI, KC_LCTL, MO(_xS), KC_BSPC, KC_SPC, MO(_xS), KC_RCTL, KC_RGUI,
+ /*, */ KC_HENK, KC_LALT, MO(_xN), LSFT_T(KC_TAB), KC_RSPC, MO(_xN), KC_RALT, KC_MHEN),
+ [_xC] = LAYOUT(
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN,
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, 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,
+ /*, */ _______, _______, _______, _______, _______, _______, _______, _______,
+ /*, */ _______, _______, _______, _______, _______, _______, _______, _______),
+ [_xD] = LAYOUT(
+ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L,
+ KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S,
+ KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z,
+ /*, */ _______, _______, _______, _______, _______, _______, _______, _______,
+ /*, */ _______, _______, _______, _______, _______, _______, _______, _______),
[_xW] = LAYOUT(
- KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN,
- KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I,
- KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_QUOT,
- /*, */ _______, _______, _______, _______, _______, _______, _______, _______,
- /*, */ _______, _______, _______, _______, _______, _______, _______, _______),
+ KC_Q, KC_D, KC_R, KC_W, KC_B, KC_J, KC_F, KC_U, KC_P, KC_SCLN,
+ KC_A, KC_S, KC_H, KC_T, KC_G, KC_Y, KC_N, KC_E, KC_O, KC_I,
+ KC_Z, KC_X, KC_M, KC_C, KC_V, KC_K, KC_L, KC_COMM, KC_DOT, KC_QUOT,
+ /*, */ _______, _______, _______, _______, _______, _______, _______, _______,
+ /*, */ _______, _______, _______, _______, _______, _______, _______, _______),
[_xS] = LAYOUT(
- KC_ESC, KC_GRV , KC_UP, KC_EQL , KC_TILD, KC_PLUS, KC_CIRC, KC_AMPR, KC_PERC, KC_MINS,
- KC_BSPC, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_PIPE, KC_AT, KC_DLR, KC_HASH, KC_ENT,
- KC_BSLS, KC_LABK, KC_LCBR, KC_LPRN, KC_LBRC, KC_RBRC, KC_RCBR, KC_RPRN, KC_RABK, KC_SLSH,
- /*, */ _______, _______, _______, _______, _______, _______, _______, _______,
- /*, */ _______, _______, MO(_xF), _______, _______, MO(_xF), _______, _______),
+ KC_ESC, KC_GRV , KC_UP, KC_EQL , KC_TILD, KC_PLUS, KC_CIRC, KC_AMPR, KC_PERC, KC_MINS,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_PIPE, KC_AT, KC_DLR, KC_HASH, KC_ENT,
+ KC_BSLS, KC_LABK, KC_LCBR, KC_LPRN, KC_LBRC, KC_RBRC, KC_RPRN, KC_RCBR, KC_RABK, KC_SLSH,
+ /*, */ _______, _______, _______, KC_DEL, _______, _______, _______, _______,
+ /*, */ _______, _______, TT(_xF), _______, _______, TT(_xF), _______, _______),
[_xN] = LAYOUT(
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_PPLS, KC_7, KC_8, KC_9, KC_PMNS,
- _______, KC_F4, KC_F5, KC_F6, KC_F11, KC_NLCK, KC_4, KC_5, KC_6, KC_PENT,
- _______, KC_F1, KC_F2, KC_F3, KC_F12, KC_PAST, KC_1, KC_2, KC_3, KC_PSLS,
- /*, */ _______, _______, MO(_xF), _______, _______, MO(_xF), KC_0, KC_PDOT,
- /*, */ _______, _______, _______, _______, _______, _______, _______, _______),
+ KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F10, KC_PPLS, KC_7, KC_8, KC_9, KC_PMNS,
+ KC_SLCK, KC_F4, KC_F5, KC_F6, KC_F11, KC_NLCK, KC_4, KC_5, KC_6, KC_PENT,
+ KC_PAUS, KC_F1, KC_F2, KC_F3, KC_F12, KC_PAST, KC_1, KC_2, KC_3, KC_PSLS,
+ /*, */ _______, _______, TT(_xF), _______, _______, TT(_xF), KC_0, KC_DOT,
+ /*, */ _______, _______, _______, _______, _______, _______, _______, _______),
[_xF] = LAYOUT(
- RESET, KC_INS, KC_PGUP, KC_DEL, KC_VOLU, KC_PPLS, KC_P7, KC_P8, KC_P9, KC_PMNS,
- CK_TOGG, KC_HOME, KC_PGDN, KC_END, KC_VOLD, KC_NLCK, KC_P4, KC_P5, KC_P6, KC_PENT,
- TG(_xW), KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS,
- /*, */ CK_UP, MU_TOG, _______, _______, _______, _______, KC_P0, KC_PDOT,
- /*, */ CK_DOWN, MU_MOD, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS),
+ RESET, KC_INS, KC_PGUP, DEBUG, KC_VOLU, KC_PPLS, KC_P7, KC_P8, KC_P9, KC_PMNS,
+ CK_TOGG, KC_HOME, KC_PGDN, KC_END, KC_VOLD, KC_NLCK, KC_P4, KC_P5, KC_P6, KC_PENT,
+ KC_LAYO, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS,
+ /*, */ CK_UP, MU_TOG, _______, _______, _______, _______, KC_P0, KC_PDOT,
+ /*, */ CK_DOWN, MU_MOD, _______, _______, _______, _______, _______, _______),
};
+const bool defaultlayers[] = {
+ [_xQ] = true,
+ [_xC] = true,
+ [_xD] = true,
+ [_xW] = true,
+ [_xS] = false,
+ [_xN] = false,
+ [_xF] = false,
+};
+const size_t defaultlayers_n = sizeof(defaultlayers) / sizeof(defaultlayers[0]);
+
+// New keycode KC_LAYO rotates between available default layers (for e.g.,
+// selecting a base layout). Shift+KC_LAYO makes the current one persistent.
+bool process_record_layout(uint16_t keycode, keyrecord_t *record) {
+ uint32_t default_layer;
+ uint8_t i;
+ #if defined(AUDIO_ENABLE)
+ float saved_song[][2] = SONG(COIN_SOUND);
+ #endif
+
+ if (keycode != KC_LAYO || !record->event.pressed) {
+ return true;
+ }
-// This is a hack to place <question mark> on <shift-comma> and <exclaimation
+ if (get_mods() & (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT))) { // shift pressed
+ // save default layer. whatever the current default layer is, store that
+ eeconfig_update_default_layer(default_layer_state);
+ #if defined(AUDIO_ENABLE)
+ PLAY_SONG(saved_song);
+ #endif
+ } else {
+ // rotate default layer.
+ // find the current default layer
+ default_layer = biton32(default_layer_state);
+ // find next valid default layer
+ for (i = 1; i < defaultlayers_n; i++) {
+ if (defaultlayers[(default_layer + i) % defaultlayers_n]) {
+ break;
+ }
+ }
+ if (i == defaultlayers_n) {
+ // we fell out of the loop without finding another default layer to switch
+ // to.
+ return false;
+ }
+ default_layer = (default_layer + i) % defaultlayers_n;
+ default_layer_set(1U<<default_layer);
+ led_set(host_keyboard_leds());
+ #if defined(AUDIO_ENABLE) && defined(DEFAULT_LAYER_SONGS)
+ PLAY_SONG(default_layer_songs[default_layer]);
+ #endif
+ }
+ return false;
+}
+
+// This is a hack to place <question mark> on <shift-comma> and <exclamation
// mark> on <shift-period>, when using an operating system configured for a
// US/qwerty layout.
+// cdeq = "comma dot exclamation question"
bool comm_shifted = false;
bool ques_shifted = false;
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+bool process_record_cdeq(uint16_t keycode, keyrecord_t *record) {
uint8_t shifted;
uint16_t s_keycode;
bool *k_shifted;
switch (keycode) {
- case KC_COMM:
- s_keycode = KC_SLSH;
- k_shifted = &comm_shifted;
- break;
- case KC_DOT:
- s_keycode = KC_1;
- k_shifted = &ques_shifted;
- break;
- default:
- return true;
+ case KC_COMM:
+ s_keycode = KC_SLSH;
+ k_shifted = &comm_shifted;
+ break;
+ case KC_DOT:
+ s_keycode = KC_1;
+ k_shifted = &ques_shifted;
+ break;
+ default:
+ return true;
}
shifted = get_mods() & (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT));
@@ -104,47 +189,29 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
}
-#ifdef AUDIO_ENABLE
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float tone_dyn_macro_rec[][2] = SONG(DVORAK_SOUND);
-float tone_dyn_macro_play[][2] = SONG(COLEMAK_SOUND);
-float tone_fnpc[][2] = SONG(PLOVER_SOUND);
-float tone_fnmac[][2] = SONG(PLOVER_GOODBYE_SOUND);
-
-void startup_user()
-{
- float tone_startup[][2] = SONG(STARTUP_SOUND);
- _delay_ms(20); // gets rid of tick
- PLAY_SONG(tone_startup);
-}
-
-void shutdown_user()
-{
- float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
- PLAY_SONG(tone_goodbye);
- _delay_ms(150);
- stop_all_notes();
-}
-
-void music_on_user(void)
-{
- music_scale_user();
-}
-
-void music_scale_user(void)
-{
- float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
- PLAY_SONG(music_scale);
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return \
+ process_record_cdeq(keycode, record) && \
+ process_record_layout(keycode, record);
}
-#endif
-
// Set the bits of A selected by MASK to the corresponding bits of B
#define setbits(A, B, MASK) A = (A & (B | ~MASK)) | (B & MASK)
-void matrix_scan_user(void) {
+
+void led_set_user(uint8_t usb_leds) {
+ // A simple (but technically inaccurate) model of the momentary layer state:
+ // Red layer active -> indicator = red
+ // Blue layer active -> indicator = blue
+ // Purple layer active -> indicator = purple
+ // the Pro Micro tx LED displays Num Lock status.
//
+ // Workman layout active -> indicator = green
+ // Workman red layer -> indicator = yellow (red + green)
+ // Workman blue layer -> indicator = cyan (blue + green)
+ // Workman purple layer -> indicator = white (red + blue + green)
+
// Bit # 7 6 5 4 3 2 1 0
- // layer_state: [ | | | _xF | _xN | _xS | _xQ | _xW ]
+ // layer_state: [ | _xF | _xN | _xS | _xW | _xD | _xC | _xQ ]
// usb_led [ | | |kana |cmps |scrl |caps | num ]
// PORTB: [ NC | 10 | 9 | 8 | 14 | 16 | 15 |rxled]
// PORTC: [ NC | 5 | | | | | | ]
@@ -158,16 +225,16 @@ void matrix_scan_user(void) {
// board. Each may be connected to an LED by way of a resistor (4.7k to
// match the others) for a total of 14 additional indicators.
- // A simple (but technically inaccurate) model of the momentary layer state:
- // Fn1 key makes _xS active; indicator = red
- // Fn2 key makes _xN active; indicator = blue
- // Both keys make _xF active; indicator = purple
- // Toggling QWERTY mode makes indicator include green, so (red/blue/purple becomes yellow/cyan/white)
-
+ uint32_t portf_bits = \
+ ((layer_state|default_layer_state)&0b01100000)>>1 | \
+ ((layer_state|default_layer_state)&0b00010000)<<1 | \
+ ((layer_state|default_layer_state)&0b01000000)>>2;
+ uint32_t portd_bits = \
+ (usb_leds&0b1)<<5 | \
+ ((layer_state|default_layer_state)&0b1000)>>2;
// negated because for ports 0=LED on.
- uint32_t portf_bits = ~(layer_state|layer_state<<1|(layer_state&0b100)<<3);
- setbits(PORTF, portf_bits, 0b00110000);
- setbits(PORTD, ~layer_state, 0b00000010);
+ setbits(PORTF, ~portf_bits, 0b00110000);
+ setbits(PORTD, ~portd_bits, 0b00100010);
}
// vim: set sw=2 et:
diff --git a/keyboards/mitosis/keymaps/datagrok/readme.md b/keyboards/mitosis/keymaps/datagrok/readme.md
index 176e0f411..22d7f4d2f 100644
--- a/keyboards/mitosis/keymaps/datagrok/readme.md
+++ b/keyboards/mitosis/keymaps/datagrok/readme.md
@@ -1,54 +1,59 @@
# a layout for the Mitosis
- Emphasis on momentary modifiers, all usable from either hand, arranged symmetrically, but left/right distinguishable by the OS.
- Shift, Red ("Lower"), Blue ("Raise"), Super ("Windows"), Meta ("Alt"), Hyper (actually Henkan/Muhenkan).
+ I place left- and right-versions of Shift, GUI ("Super"), and Alt ("Meta"), and Henkan/Muhenkan (which I plan to overload for "Hyper").
+
I'm going for a [Space Cadet](https://en.wikipedia.org/wiki/Space-cadet_keyboard) aesthetic;
I want a keyboard that can (even just in theory) make use of all the bucky bits my operating system can support.
-- Red and Blue are used to momentary-enable (like a shift key) one of three layers:
+- Red key and Blue key momentary-enable (like a shift key) one of three layers:
- Red: Symbols layer
- Blue: Numbers layer
- "Purple" (both Red and Blue): Functions layer
+
+ This tri-state layer mechanism is a bit similar to Planck and Preonic's "Raise," "Lower," and "Adjust."
- The base layer is QWERTY.
- A slight variant of [Workman][] may be toggled using `Red`+`Blue`+`Z`.
+ [Colemak][], [Dvorak][], and [Workman][] may be toggled using `Red`+`Blue`+`Z`.
+ When you find the one you like, save it with `Shift`+`Red`+`Blue`+`Z`.
- Minimize hand travel, so as not to lose orientation with home row.
-- `?` and `!` are moved to take the place of `<` and `>`. Rationale: unmodded
- and shifted keys should be for prose, while symbols useful for programming
- should be colocated on their own layer.
+- `?` and `!` are moved to take the place of `<` and `>`.
+ Rationale: unmodded and shifted keys should be for prose, while symbols useful for programming should be colocated on their own layer.
- Key positions chosen for mnemonics.
For example, you can distinguish between alphanumeric numerals and keypad numerals, but they occupy the same key positions.
## Layout Images
-![mitosis:datagrok layout base layer](https://imgur.com/9LoLQUk.png)
+![mitosis:datagrok layout base layer](https://i.imgur.com/tap5Pjf.png)
Base layer. Notes:
- customized comma and period, which have exclamation point and question mark on their shift layer.
-- tap right-shift for underscore
+- tap right-shift for underscore, tap left-shift for tab.
-![mitosis:datagrok layout red layer](https://imgur.com/B5bnPGM.png)
+![mitosis:datagrok layout red layer](https://i.imgur.com/sMGr34T.png)
Red layer. Intended for common navigation and programming symbols. Notes:
- symmetric layout of paired braces/brackets/slashes for easier memorization
- arrows placed directly on home position
-![mitosis:datagrok layout blue layer](https://imgur.com/HGJ4G1U.png)
+![mitosis:datagrok layout blue layer](https://i.imgur.com/dDb2563.png)
Blue layer. Intended for "number pad." Notes:
-- Keycodes generated for numbers, enter key, and mathematical symbols are from the alphanumeric keys, not keypad. This way they are not influenced by the state of Num Lock. If you want to send the keypad equivalents, just use Red and Blue modifiers simultaneously.
+- Keycodes generated for numbers, enter key, and mathematical symbols are from the alphanumeric keys, not keypad.
+ This way they are not influenced by the state of Num Lock.
+ If you want to send the keypad equivalents, just press Blue as well to access keypad numbers in the same positions in the Purple layer.
-![mitosis:datagrok layout purple layer](https://imgur.com/lNsKDtA.png)
+![mitosis:datagrok layout purple layer](https://i.imgur.com/pESzy2u.png)
Purple (Red+Blue) layer. Intended for "true keypad" and various functions. Notes:
- Numbers on this layer send Keypad codes, so the result will be affected by the state of Num Lock.
-- "Switch Layout" toggles the alphabet keys between QWERTY and Workman
-- Page Up / Page Down / Home / End are placed on similar arrows
-- To press Print Screen it is necessary to use the left-side Red and Blue modifiers.
+- "Switch Layout" toggles the alphabet keys between QWERTY, Colemak, Dvorak, and Workman.
+ Shift + "Switch Layout" stores the currently selected alphabet layout in eeprom, so the selection persists across reboots and computers.
+- Page Up / Page Down / Home / End are placed on corresponding arrow keys.
Keyboard layout editor sources:
[base](http://www.keyboard-layout-editor.com/#/gists/bc2d06a3203d1bc3a14ed2245cf39643)
@@ -56,18 +61,45 @@ Keyboard layout editor sources:
[blue](http://www.keyboard-layout-editor.com/#/gists/240e807f3d7e1d3ddabe1b69ee675048)
[purple](http://www.keyboard-layout-editor.com/#/gists/9559f0f8bb1ee47677c8f2b4d766829d)
-[Imgur album](https://imgur.com/a/KSoVgPx)
+[Imgur album](https://imgur.com/a/hm4bbdM)
+
+## Indicators
+
+- When Red layer is active, the RGB indicator turns red.
+- When Blue layer is active, the RGB indicator turns blue.
+- When Purple layer is active, the RGB indicator turns purple.
+- When the Workman layer is active, the RGB indicator turns green.
+ Currently, this means that activating the Red layer while using the Workman layout will make the indicator show yellow. (red + green.)
+- The Num Lock status is shown on the Pro Micro tx LED.
+- If you attach a speaker to PC6 (pin 5) and compile with AUDIO_ENABLE=yes, music will be played at startup, when switching default layers, and when saving the default layer.
+
+## Variants
+
+Some additional compile-time options for this layout are available by editing rules.mk or compiling like so:
+
+Normal compilation:
+
+```make mitosis:datagrok```
+
+Swap Space onto bottom thumb row: swaps Red/Backspace/Space/Red with Blue/Shift/Shift/Blue:
+
+```make mitosis:datagrok MITOSIS_DATAGROK_BOTTOMSPACE=yes```
+
+Lower baud UART. Useful when using an 8Mhz pro micro; corresponding changes required in wireless firmware. See rules.mk for details.
+
+```make mitosis:datagrok MITOSIS_DATAGROK_SLOWUART=yes```
## Design notes
### Workman layout
-- I'm learning a new physical key placement, so I might as well go all-out and
- use an optimal non-QWERTY layout.
+- I'm learning a new physical key placement, so I might as well go all-out and use an optimal non-QWERTY layout.
+ Bonus: it's easy to switch back to QWERTY on a traditional row-staggered keyboard.
+ The designer of the Mitosis had [a similar experience](https://www.reddit.com/r/MechanicalKeyboards/comments/66588f/wireless_split_qmk_mitosis/dgfr22q/).
- I like the way Workman feels and some of its advantages over Colemak.
Unfortunately, it was designed using a weighting system based on a standard
- column-staggered keyboard so is probably not as optimal as one could achieve
+ row-staggered keyboard so is probably not as optimal as one could achieve
on an ergonomic board like the Mitosis. Maybe run an optimizer routine after I
determine good values for key difficulty on the Mitosis.
@@ -78,14 +110,10 @@ Keyboard layout editor sources:
The next fastest baudrate that works without errors is 250k baud.
So if you want to do the same:
- - Set the Pro Micro clock rate correctly in `rules.mk`:
+ - Set the Pro Micro clock and baud rate correctly in `rules.mk`:
```
F_CPU = 800000
- ```
- - Configure it to communicate at 250k baud in `config.h`:
- ```
- #undef SERIAL_UART_BAUD // avoids redefinition warning
- #define SERIAL_UART_BAUD 250000
+ MITOSIS_DATAGROK_SLOWUART = yes
```
- Configure the receiver's wireless module to communicate at 250k baud in `main.c`. See https://github.com/reversebias/mitosis/pull/10
```
@@ -99,7 +127,7 @@ Keyboard layout editor sources:
- Arrow keys are in the home position on the Red layer.
- - Blue+Arrows = PgUp/PgDn/Home/End, which is intuitive for me.
+ - Blue+Arrows = PgUp/PgDn/Home/End, which is intuitive for me and similar to what is done on Apple and some Dell keyboards.
- The number pad: I placed the ten-key number pad on the Blue layer.
However, this would do the wrong thing when Num Lock was not enabled.
@@ -111,11 +139,7 @@ Keyboard layout editor sources:
- The Function-keys are arranged to mimic the order of the ten-key pad.
- Enter is now in a more qwerty-familiar location, and may be activated with one hand.
- Numpad Enter is in the same position.
-
-- Rather than place Backspace opposite Space, I intentionally place it on a layer where it takes some effort to activate.
- Backspace is one of the keys I most dislike on a QWERTY keyboard because it moves me away from homerow and I need to use it so often.
- Rather than make it easier to strike, I want to discourage myself from using it by learning to type more accurately.
+ Numpad Enter is in the same position for mnemonics.
- Why do I dislike [snake\_case](https://en.wikipedia.org/wiki/Snake_case) (`__variable_names_that_use_underscores_`)?
Maybe because it's hard to type all those underscores requiring the shift key?
@@ -126,6 +150,22 @@ Keyboard layout editor sources:
### Current
+- Discard "intentionally difficult backspace" idea.
+ Tab returns to left-shift.
+ Del returns to Red+Backspace
+- "High Profile mode:" Swap Red/Backspace/Space/Red with Blue/Shift/Shift/Blue (placing space on lower thumb keys) using `MITOSIS_DATAGROK_BOTTOMSPACE=yes` when compiling.
+- Move Print Screen / Scroll Lock / Pause to pinky column on Blue layer.
+- Let's try using TT instead of MO so we can e.g. lock-on the keypad.
+ - We still use MO for first modifier, so e.g. Red + tapping Blue will lock purple.
+ So far it feels a bit janky, we'll see.
+- One key `KC_LAYO` to cycle through available base layers instead of a dedicated key for each;
+ Shift + `KC_LAYO` stores current base layer selection in eeprom so it comes back after disconnecting or a reset.
+- Added Colemak and Dvorak as default layers that may be selected.
+- Set UART to 250kbaud with make argument `MITOSIS_DATAGROK_SLOWUART=yes`, for use with 8Mhz Pro Micros.
+- Display Num Lock status on tx LED
+
+### 0.6.60
+
- Experiment: no-modifier underscore on right shift key.
- New combined numbers + keypad arrangement.
No more worrying about Num Lock key.
@@ -168,27 +208,33 @@ Keyboard layout editor sources:
### Abandoned ideas
-- "Since QWERTY and Workman keep angle brackets together, place other
- enclosing symbols on the same keys. This informs the numbers placement,
- which informs the function-key placement."
+- Abandoned: intentionally-difficult backspace.
+ "Backspace is one of the keys I most dislike on a QWERTY keyboard because it moves me away from homerow and I need to use it so often.
+ Rather than make it easier to strike, I want to discourage myself from using it and train myself to type more accurately."
+
+ - Many other people like an easy-to-reach backspace.
+ - Many other split-spacebar ergo boards place backspace at the thumbs.
+ - I can still train myself to type well with it in an easy location.
+ - I couldn't think of anything really better to put opposite space.
- - I tried this and it was bad. I don't like having to pick the right
- modifier to get the right flavor of bracket. Instead, now, one modifier
- activates a symbols layer where all brackets are easily accessible.
+- Abandoned: pile all brackets onto one pair of keys.
+ "Since QWERTY and Workman keep angle brackets together, place other enclosing symbols on the same keys."
-- Space/Enter to the left of layer select for Enter
+ - I didn't like having to pick the right modifier to get the right flavor of bracket.
+ Instead, now, one modifier activates a symbols layer where all brackets are easily accessible.
- - Doesn't work well; I always trigger space first when mashing the keys
+- Abandoned: chorded Enter without proper chording detection
+
+ - I tried to make Red+Space = Enter with the intention that I could hit both with my thumb.
+ That didn't work well; I always trigger space first when mashing the keys
simultaneously. ~~This might not continue to be true if I change the angle
at which I strike the keys e.g. with a neoprene base or a wrist support.~~
Even with a wrist rest or low-profile, this is hard to do with one hand.
Need to adjust the firmware to understand chorded thumb keys.
-- I used to have Blue on ring finger, but that was too hard to use in
- conjunction with shift.
-
## To do
+- Ctrl+'+' doesn't seem to work; fix.
- **Shared Layouts.**
Figure out how to make use of QMK's common `layouts/`
- **Chorded Combos.**
@@ -203,16 +249,23 @@ Keyboard layout editor sources:
Do any of my applications use it?
Should I have the firmware ensure it is set how I want it?
Maybe cause it to be momentary active with Blue?
- See [@drashna's comment](https://github.com/qmk/qmk_firmware/pull/2366#issuecomment-404951953)
-- Store default base layer in eeprom?
+ See [@drashna's comment](https://github.com/qmk/qmk_firmware/pull/2366#issuecomment-404951953) for code to force it always-on, which I don't know if I want.
+- ~~Store default layer in eeprom?~~
+- Allow "!? on ,." to be easily toggled-off.
+- Modularize "!? on ,." so it can be easily used on any QMK keyboard. (about half done)
- See if the henkan/muhenkan placement is at all useful for Japanese speakers,
or abuse different keysyms for Left/Right Hyper. (Original space cadet used
scancodes 145/175. 145 is LANG2, 175 is "reserved" in USB HID spec.)
- Implement "layer lock" key
+- Feature parity with popular boards e.g. Planck?
+ - Layers for ~~Dvorak, Coleman,~~ Plover
+ - More music and midi stuff
+ - Macros?
- Improve tri-layer behavior
-- Find a better location for PrintScr/SysRq, Scroll Lock, Pause/Break, Caps Lock.
-- ~~Figure out where to place non-numpad numbers so we don't need num lock turned
- on to type them?~~
+- Find out what `update_tri_layer_state` offers that my simple layers arrangement lacks.
+- ~~Find a better location for Caps Lock, PrintScr/SysRq, Scroll Lock, Pause/Break,~~.
+ Placed on Blue layer. Caps will be Shift+"Layer Lock," once I get that working.
+- ~~Figure out where to place non-numpad numbers so we don't need num lock turned on to type them?~~
- ~~Add Insert, PrintScr, Pause/Break~~
- ~~Make QWERTY base layer for people who customize layout in software?~~
I default to QWERTY now.
diff --git a/keyboards/mitosis/keymaps/datagrok/rules.mk b/keyboards/mitosis/keymaps/datagrok/rules.mk
index a321a67b2..215e58a7d 100644
--- a/keyboards/mitosis/keymaps/datagrok/rules.mk
+++ b/keyboards/mitosis/keymaps/datagrok/rules.mk
@@ -1,4 +1,19 @@
-AUDIO_ENABLE = yes # audio output
+# Space and "Red" modifier are keys I want in the easiest-to-reach position in
+# the thumb row. Depending on the angle and height of the Mitosis and the type
+# of keycaps you use, the upper row or the lower row of thumb keys might be more
+# comfortable for you. I put red/space on the upper row and blue/shift on the
+# lower, but to swap that, set MITOSIS_DATAGROK_BOTTOMSPACE = yes. This has the
+# effect of swapping only the four center keys on the upper row of thumb keys with that
+# of the lower row of thumb keys.
+MITOSIS_DATAGROK_BOTTOMSPACE = no
+
+# I used to use a pro micro clocked at 8Mhz. It can't reach the same baud rate
+# that the standard 16Mhz-clocked pro micro can, so the baud rate needs to be
+# lowered. Set this to "yes" to do that. See also
+# https://github.com/reversebias/mitosis/pull/10
+MITOSIS_DATAGROK_SLOWUART = no
+
+AUDIO_ENABLE = no # audio output
FAUXCLICKY_ENABLE = no
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
@@ -9,4 +24,12 @@ UNICODE_ENABLE = no # Unicode
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
MIDI_ENABLE = no # MIDI controls
+
+ifeq ($(strip $(MITOSIS_DATAGROK_BOTTOMSPACE)), yes)
+ OPT_DEFS += -DMITOSIS_DATAGROK_BOTTOMSPACE
+endif
+ifeq ($(strip $(MITOSIS_DATAGROK_SLOWUART)), yes)
+ OPT_DEFS += -DMITOSIS_DATAGROK_SLOWUART
+endif
+
# vim: set ts=8 noet:
diff --git a/keyboards/mitosis/mitosis.c b/keyboards/mitosis/mitosis.c
index f965f2a04..1ca7276e4 100644
--- a/keyboards/mitosis/mitosis.c
+++ b/keyboards/mitosis/mitosis.c
@@ -5,13 +5,12 @@ void uart_init(void) {
}
void led_init(void) {
- DDRD |= (1<<1);
- PORTD |= (1<<1);
- DDRF |= (1<<4) | (1<<5);
- PORTF |= (1<<4) | (1<<5);
+ DDRD |= (1<<1); // Pin to green, set as output
+ PORTD |= (1<<1); // Turn it off
+ DDRF |= (1<<4) | (1<<5); // Pins to red and blue, set as output
+ PORTF |= (1<<4) | (1<<5); // Turn them off
}
-
void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
@@ -20,16 +19,6 @@ void matrix_init_kb(void) {
led_init();
}
-void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
- matrix_scan_user();
-}
-
-void led_set_kb(uint8_t usb_led) {
-
-}
-
#ifdef SWAP_HANDS_ENABLE
__attribute__ ((weak))
const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
diff --git a/keyboards/mitosis/mitosis.h b/keyboards/mitosis/mitosis.h
index 5dd7cc778..4b73f0407 100644
--- a/keyboards/mitosis/mitosis.h
+++ b/keyboards/mitosis/mitosis.h
@@ -53,15 +53,14 @@
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, \
- k31, k32, k33, k34, k35, k36, k37, k38, \
- k41, k42, k43, k44, k45, k46, k47, k48 \
+ k31, k32, k33, k34, k35, k36, k37, k38, \
+ k41, k42, k43, k44, k45, k46, k47, k48 \
) \
-{ \
- { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \
- { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19 }, \
- { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29 }, \
- { KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, KC_NO }, \
- { KC_NO, k41, k42, k43, k44, k45, k46, k47, k48, KC_NO } \
-}
-
+ { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29 }, \
+ { KC_NO, k31, k32, k33, k34, k35, k36, k37, k38, KC_NO }, \
+ { KC_NO, k41, k42, k43, k44, k45, k46, k47, k48, KC_NO } \
+ }
#endif
diff --git a/keyboards/mitosis/readme.md b/keyboards/mitosis/readme.md
index 0d5a74a1d..e1b071101 100644
--- a/keyboards/mitosis/readme.md
+++ b/keyboards/mitosis/readme.md
@@ -1,11 +1,12 @@
-Mitosis
-=======
+# Mitosis
+
+![Mitosis](https://i.imgur.com/JTzXTCD.jpg)
A wireless split compact keyboard.
-Keyboard Maintainer: [@reversebias](https://github.com/reversebias)
-Hardware Supported: Mitosis PCB
-Hardware Availability: https://www.reddit.com/r/MechanicalKeyboards/comments/66588f/wireless_split_qmk_mitosis/
+Keyboard Maintainer: [@reversebias](https://github.com/reversebias)
+Hardware Supported: Mitosis PCB
+Hardware Availability: See the [Mitosis keyboard announcement and discussion](https://www.reddit.com/r/MechanicalKeyboards/comments/66588f/wireless_split_qmk_mitosis/)
Make example for this keyboard (after setting up your build environment):
@@ -13,12 +14,16 @@ Make example for this keyboard (after setting up your build environment):
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-## Mitosis Notes
+## Notes
+
+Some circuit board manufacturers including [DirtyPCBs](https://dirtypcbs.com/) and [PCBWay](https://www.pcbway.com/) offer a steeply discounted "prototyping" rate for a small quantity of identical circuit boards less than 100x100mm in size. The Mitosis was designed to take advantage of this, so that individuals might affordably manufacture their own without waiting for a group-buy.
+
+These configuration files were based off the Atreus keyboard. It assumes a Pro Micro is being used, however retains the 'make upload' feature from the Atreus branch.
-These configuration files were based off the Atreus keyboard. It assumes a Pro Micro is being used, however retains the 'make upload' feature from the Atreus branch. This keyboard uses a completely different 'matrix scan' system to other keyboards, it relies on an external nRF51822 microcontroller maintaining a matrix of keystates received from the keyboard halves. The matrix.c file contains the code to poll the external microcontroller for the key matrix. As long as this file is not changed, all other QMK features are supported.
+This keyboard uses a completely different 'matrix scan' system than most other keyboards supported by QMK. Here, QMK runs in a Pro Micro on a receiver module, and communicates only with an nRF51822 microcontroller module that in turn does wireless communication. The nRF51822 maintains a matrix of keystates received from the same microcontrollers on each of the keyboard halves. The matrix.c file contains the code to make the Pro Micro poll the external wireless microcontroller for the key matrix. As long as this file is not changed, all other QMK features are supported.
-Build log of the keyboard can be found [here](https://www.reddit.com/r/MechanicalKeyboards/comments/66588f/wireless_split_qmk_mitosis/)
+[Mitosis keyboard build log](https://imgur.com/a/mwTFj), including many photos and notes about the assembly process.
-Hardware design files can be found [here](https://github.com/reversebias/mitosis-hardware)
+[Mitosis keyboard hardware design files](https://github.com/reversebias/mitosis-hardware), including PCB schematics and manufacturing files, parts list, and a laser-cutting template for the neoprene base.
-Firmware for the nordic MCUs can be found [here](https://github.com/reversebias/mitosis)
+[Mitosis keyboard wireless firmware](https://github.com/reversebias/mitosis) for the Nordic microcontrollers.
diff --git a/keyboards/miuni32/config.h b/keyboards/miuni32/config.h
index 9f26b2291..37e9113f9 100644
--- a/keyboards/miuni32/config.h
+++ b/keyboards/miuni32/config.h
@@ -24,7 +24,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
-#define MANUFACTURER Bigtuna.io
+#define MANUFACTURER Bigtuna.io
#define PRODUCT Miuni32
#define DESCRIPTION A custom keyboard for writers
@@ -48,7 +48,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION ROW2COL
-
+
// #define BACKLIGHT_PIN B7
// #define BACKLIGHT_BREATHING
// #define BACKLIGHT_LEVELS 3
@@ -159,10 +159,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-#define RGBLIGHT_TIMER
+
#define RGB_DI_PIN D0 // The pin your RGB strip is wired to
-#define RGBLIGHT_TIMER // Require for fancier stuff (not compatible with audio)
-#define RGBLED_NUM 7 // Number of LEDs
+#define RGBLED_NUM 17 // Number of LEDs
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
diff --git a/keyboards/miuni32/keymaps/adam-lee/rules.mk b/keyboards/miuni32/keymaps/adam-lee/rules.mk
index 88a3aea74..3138ab57f 100644
--- a/keyboards/miuni32/keymaps/adam-lee/rules.mk
+++ b/keyboards/miuni32/keymaps/adam-lee/rules.mk
@@ -13,7 +13,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/miuni32/keymaps/default/rules.mk b/keyboards/miuni32/keymaps/default/rules.mk
index 88a3aea74..3138ab57f 100644
--- a/keyboards/miuni32/keymaps/default/rules.mk
+++ b/keyboards/miuni32/keymaps/default/rules.mk
@@ -13,7 +13,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/miuni32/keymaps/ht_156/rules.mk b/keyboards/miuni32/keymaps/ht_156/rules.mk
index 88a3aea74..3138ab57f 100644
--- a/keyboards/miuni32/keymaps/ht_156/rules.mk
+++ b/keyboards/miuni32/keymaps/ht_156/rules.mk
@@ -13,7 +13,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/miuni32/keymaps/ki/rules.mk b/keyboards/miuni32/keymaps/ki/rules.mk
index 8a72a6e4e..7639c2b3f 100644
--- a/keyboards/miuni32/keymaps/ki/rules.mk
+++ b/keyboards/miuni32/keymaps/ki/rules.mk
@@ -13,7 +13,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/miuni32/readme.md b/keyboards/miuni32/readme.md
index 050ec8ecd..7fc72d601 100644
--- a/keyboards/miuni32/readme.md
+++ b/keyboards/miuni32/readme.md
@@ -5,7 +5,7 @@ A compact 30% keyboard.
Keyboard Maintainer: QMK Community
Hardware Supported: miuni32 PCB
-Hardware Availability: https://zealpc.net/products/miuni32
+Hardware Availability: https://bigtuna.io
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/model01/config.h b/keyboards/model01/config.h
new file mode 100644
index 000000000..167310731
--- /dev/null
+++ b/keyboards/model01/config.h
@@ -0,0 +1,38 @@
+/*
+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
+
+#include <config_common.h>
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x1209
+#define PRODUCT_ID 0x2301
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Keyboardio
+#define PRODUCT Model 01
+#define DESCRIPTION (QMK)
+
+/* key matrix size; rows are doubled for split */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 8
+
+/* The scanners already debounce for us */
+#define DEBOUNCING_DELAY 0
+
+/* RGB matrix constants */
+#define DRIVER_LED_TOTAL 64
diff --git a/keyboards/model01/info.json b/keyboards/model01/info.json
new file mode 100644
index 000000000..60c914d5c
--- /dev/null
+++ b/keyboards/model01/info.json
@@ -0,0 +1,87 @@
+{
+ "keyboard_name": "model01",
+ "keyboard_folder": "model01",
+ "url": "https://keyboard.io",
+ "maintainer": "qmk",
+ "width": 18.5,
+ "height": 7.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"PROG", "x":0, "y":0.4, "h":1.3},
+ {"label":"1", "x":1, "y":0.2, "h":1.5},
+ {"label":"2", "x":2, "y":0.1, "h":1.1},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0.1},
+ {"label":"5", "x":5, "y":0.3},
+
+ {"label":"6", "x":12.5, "y":0.3},
+ {"label":"7", "x":13.5, "y":0.1},
+ {"label":"8", "x":14.5, "y":0},
+ {"label":"9", "x":15.5, "y":0.1, "h":1.1},
+ {"label":"0", "x":16.5, "y":0.2, "h":1.5},
+ {"label":"NUM", "x":17.5, "y":0.4, "h":1.3},
+
+ {"label":"GRAVE", "x":0, "y":1.7},
+ {"label":"Q", "x":1, "y":1.7},
+ {"label":"W", "x":2, "y":1.2},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1.1},
+ {"label":"T", "x":5, "y":1.3},
+ {"label":"LED", "x":6, "y":0.6, "h":1.5},
+
+ {"label":"ANY", "x":11.5, "y":0.6, "h":1.5},
+ {"label":"Y", "x":12.5, "y":1.3},
+ {"label":"U", "x":13.5, "y":1.1},
+ {"label":"I", "x":14.5, "y":1},
+ {"label":"O", "x":15.5, "y":1.2},
+ {"label":"P", "x":16.5, "y":1.7},
+ {"label":"EQUAL", "x":17.5, "y":1.7},
+
+ {"label":"PAGEUP", "x":0, "y":2.7},
+ {"label":"A", "x":1, "y":2.7},
+ {"label":"S", "x":2, "y":2.2},
+ {"label":"D", "x":3, "y":2},
+ {"label":"F", "x":4, "y":2.1},
+ {"label":"G", "x":5, "y":2.3},
+ {"label":"TAB", "x":6, "y":2.1, "h":1.3},
+
+ {"label":"ENTER", "x":11.5, "y":2.1, "h":1.3},
+ {"label":"H", "x":12.5, "y":2.3},
+ {"label":"J", "x":13.5, "y":2.1},
+ {"label":"K", "x":14.5, "y":2},
+ {"label":"L", "x":15.5, "y":2.2},
+ {"label":"SEMICOLON", "x":16.5, "y":2.7},
+ {"label":"QUOTE", "x":17.5, "y":2.7},
+
+ {"label":"PAGEDOWN", "x":0, "y":3.7, "h":1.2},
+ {"label":"Z", "x":1, "y":3.7},
+ {"label":"X", "x":2, "y":3.2, "h":1.15},
+ {"label":"C", "x":3, "y":3},
+ {"label":"V", "x":4, "y":3.1},
+ {"label":"B", "x":5, "y":3.3},
+ {"label":"ESC", "x":6, "y":3.4, "h":1.1},
+
+ {"label":"BUTTERFLY", "x":11.5, "y":3.4, "h":1.1},
+ {"label":"N", "x":12.5, "y":3.3},
+ {"label":"M", "x":13.5, "y":3.1},
+ {"label":"COMMA", "x":14.5, "y":3},
+ {"label":"DOT", "x":15.5, "y":3.2, "h":1.15},
+ {"label":"SLASH", "x":16.5, "y":3.7},
+ {"label":"MINS", "x":17.5, "y":3.7, "h":1.2},
+
+ {"label":"LCTL", "x":4.75, "y":4.3},
+ {"label":"RCTL", "x":12.75, "y":4.3},
+ {"label":"BACKSPACE", "x":5.75, "y":4.5},
+ {"label":"SPACE", "x":11.75, "y":4.5},
+ {"label":"LGUI", "x":6.75, "y":4.7},
+ {"label":"RALT", "x":10.75, "y":4.7},
+ {"label":"LSHIFT", "x":7.75, "y":5.1},
+ {"label":"RSHIFT", "x":9.75, "y":5.1},
+
+ {"label":"FN", "x":6.25, "y":6.1, "h":1.4},
+ {"label":"FN", "x":11.25, "y":6.1, "h":1.4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/model01/keymaps/default/config.h b/keyboards/model01/keymaps/default/config.h
new file mode 100644
index 000000000..8ab9d8b02
--- /dev/null
+++ b/keyboards/model01/keymaps/default/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/default/keymap.c b/keyboards/model01/keymaps/default/keymap.c
new file mode 100644
index 000000000..a6e5303fe
--- /dev/null
+++ b/keyboards/model01/keymaps/default/keymap.c
@@ -0,0 +1,124 @@
+/* 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/>.
+ */
+#include QMK_KEYBOARD_H
+
+/* layer constants */
+enum {
+ DEF = 0,
+ NUM,
+ FUN,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[DEF] = LAYOUT(
+ RESET , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , TG(NUM),
+ KC_GRV , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_MOD, _______, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_EQL ,
+ KC_PGUP, KC_A , KC_S , KC_D , KC_F , KC_G , KC_TAB , KC_ENT , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
+ KC_PGDN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_ESC , _______, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_MINS,
+ KC_LCTL, KC_RCTL,
+ KC_BSPC, KC_SPC ,
+ KC_LGUI, KC_RALT,
+ KC_LSFT, KC_RSFT,
+ MO(FUN), MO(FUN)
+ ),
+[NUM] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, KC_P7 , KC_P8 , KC_P9 , KC_PMNS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P4 , KC_P5 , KC_P6 , KC_PPLS, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P1 , KC_P2 , KC_P3 , KC_PEQL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_P0 , KC_PDOT, KC_PAST, KC_PSLS, KC_PENT,
+ _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______
+ ),
+[FUN] = LAYOUT(
+ _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
+ KC_TAB , _______, KC_MS_U, _______, KC_BTN3, _______, RGB_TOG, KC_MPRV, KC_MNXT, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 ,
+ KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, _______, _______, KC_MPLY, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, _______,
+ KC_END , KC_PSCR, KC_INS , _______, KC_BTN2, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, KC_BSLS, KC_PIPE,
+ _______, _______,
+ KC_DEL , KC_ENT ,
+ _______, _______,
+ _______, _______,
+ _______, _______
+ )
+};
+
+/* template for new layouts:
+LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______,
+ _______, _______
+ )
+*/
+
+static void set_numpad_colours(int on, void (*write)(int, uint8_t, uint8_t, uint8_t)) {
+ if (!on) {
+ for (int i=44; i<=60; i++)
+ write(i, 0, 0, 0);
+ write(63, 0, 0, 0);
+ return;
+ }
+
+ /* main number keys */
+ for (int i=44; i<=47; i++)
+ write(i, 255, 0, 0);
+ for (int i=49; i<=54; i++)
+ write(i, 255, 0, 0);
+
+ /* accessory keys */
+ write(48, 128, 128, 0);
+ for (int i=55; i<=59; i++)
+ write(i, 128, 128, 0);
+
+ // enter
+ write(63, 0, 128, 0);
+
+ // num key
+ write(60, 128, 0, 128);
+}
+
+#ifdef RGB_MATRIX_ENABLE
+/* the RGB matrix effects will overwrite the numpad indicator.
+ * this handy mechanism allows to override the matrix effects.
+ */
+void rgb_matrix_indicators_user(void) {
+ if (layer_state & (1<<NUM)) {
+ set_numpad_colours(1, &rgb_matrix_set_color);
+ }
+}
+#else /* no RGB matrix support */
+
+uint32_t layer_state_set_user(uint32_t state) {
+ if (state & (1<<NUM)) {
+ set_numpad_colours(1, &set_led_to);
+ } else {
+ set_numpad_colours(0, &set_led_to);
+ }
+
+ return state;
+}
+#endif
+
+/* vim: set ts=2 sw=2 et: */
diff --git a/keyboards/model01/keymaps/default/readme.md b/keyboards/model01/keymaps/default/readme.md
new file mode 100644
index 000000000..740515a26
--- /dev/null
+++ b/keyboards/model01/keymaps/default/readme.md
@@ -0,0 +1,3 @@
+# The default keymap for Keyboardio's Model01
+
+This implements all of their default keymap, except for mouse warping.
diff --git a/keyboards/model01/keymaps/default/rules.mk b/keyboards/model01/keymaps/default/rules.mk
new file mode 100644
index 000000000..4d1abd88a
--- /dev/null
+++ b/keyboards/model01/keymaps/default/rules.mk
@@ -0,0 +1,2 @@
+# used by default keymap
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
diff --git a/keyboards/model01/keymaps/dshields/config.h b/keyboards/model01/keymaps/dshields/config.h
new file mode 100644
index 000000000..1c78217f2
--- /dev/null
+++ b/keyboards/model01/keymaps/dshields/config.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_DIGITAL_RAIN_DROPS 18
+#define USB_MAX_POWER_CONSUMPTION 100
+#define ONESHOT_TAP_TOGGLE 2
+#define ONESHOT_TIMEOUT 3000
+
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 40
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
+
+// dynamic macro keys
+#define DM_PLAY DYN_MACRO_PLAY1
+#define DM_STRT DYN_REC_START1
+#define DM_STOP DYN_REC_STOP
+
+// one-shot layer keys
+#define OSL_FUN OSL(FUN)
+
+// one-shot modifier keys
+#define OSMLCTL OSM(MOD_LCTL)
+#define OSMRCTL OSM(MOD_RCTL)
+#define OSMLALT OSM(MOD_LALT)
+#define OSMRALT OSM(MOD_RALT)
+#define OSMLSFT OSM(MOD_LSFT)
+#define OSMRSFT OSM(MOD_RSFT)
+
diff --git a/keyboards/model01/keymaps/dshields/keymap.c b/keyboards/model01/keymaps/dshields/keymap.c
new file mode 100644
index 000000000..3a89d062b
--- /dev/null
+++ b/keyboards/model01/keymaps/dshields/keymap.c
@@ -0,0 +1,53 @@
+#include QMK_KEYBOARD_H
+
+enum { DEF, FUN };
+enum { DYNAMIC_MACRO_RANGE = SAFE_RANGE };
+
+#include "dynamic_macro.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[DEF] = LAYOUT(
+ RESET , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______,
+ KC_GRV , KC_Q , KC_W , KC_E , KC_R , KC_T , RGB_TOG, DM_PLAY, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_EQL ,
+ KC_PGUP, KC_A , KC_S , KC_D , KC_F , KC_G , KC_TAB , KC_ENT , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT,
+ KC_PGDN, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_ESC , _______, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_MINS,
+ OSMLCTL, KC_RCTL,
+ KC_BSPC, KC_SPC ,
+ KC_LGUI, OSMRALT,
+ OSMLSFT, OSMRSFT,
+ OSL_FUN, OSL_FUN
+ ),
+[FUN] = LAYOUT(
+ _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 ,
+ KC_TAB , _______, KC_MS_U, _______, KC_BTN3, _______, RGB_MOD, DM_STRT, _______, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_F12 ,
+ KC_HOME, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN1, _______, _______, DM_STOP, KC_LEFT, KC_DOWN, KC_UP , KC_RGHT, _______, _______,
+ KC_END , KC_PSCR, KC_INS , _______, KC_BTN2, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, KC_PIPE,
+ _______, _______,
+ KC_DEL , KC_ENT ,
+ _______, _______,
+ _______, _______,
+ _______, _______
+ )
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case DEF:
+ set_all_leds_to(0,0,0);
+ break;
+ case FUN:
+ // TODO light the fn keys
+ // set_led_to(?, 0, 128, 0);
+ // set_led_to(?, 0, 128, 0);
+ break;
+ }
+ return state;
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (!process_record_dynamic_macro(keycode, record)) {
+ return false;
+ }
+ return true;
+}
+
diff --git a/keyboards/model01/keymaps/dshields/readme.md b/keyboards/model01/keymaps/dshields/readme.md
new file mode 100644
index 000000000..ead1c1aad
--- /dev/null
+++ b/keyboards/model01/keymaps/dshields/readme.md
@@ -0,0 +1,10 @@
+
+About
+------
+
+A lightly modded version of the default keymap.
+
+- One-shot modifiers and layers.
+- Dynamic macros
+- No num lock layer
+
diff --git a/keyboards/model01/keymaps/dshields/rules.mk b/keyboards/model01/keymaps/dshields/rules.mk
new file mode 100644
index 000000000..d3754cc1f
--- /dev/null
+++ b/keyboards/model01/keymaps/dshields/rules.mk
@@ -0,0 +1,3 @@
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = no
+CONSOLE_ENABLE = no
diff --git a/keyboards/model01/leds.c b/keyboards/model01/leds.c
new file mode 100644
index 000000000..7a62c7424
--- /dev/null
+++ b/keyboards/model01/leds.c
@@ -0,0 +1,169 @@
+/* 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/>.
+ */
+#include <quantum.h>
+#include <i2c_master.h>
+#include <led_tables.h>
+#include <rgb_matrix.h>
+#include <string.h>
+#include "model01.h"
+
+#define I2C_TIMEOUT 1000
+
+void set_all_leds_to(uint8_t r, uint8_t g, uint8_t b) {
+ uint8_t buf[] = {
+ TWI_CMD_LED_SET_ALL_TO,
+ b, g, r
+ };
+ i2c_transmit(I2C_ADDR(LEFT), buf, sizeof(buf), I2C_TIMEOUT);
+ i2c_transmit(I2C_ADDR(RIGHT), buf, sizeof(buf), I2C_TIMEOUT);
+ _delay_us(10);
+}
+
+void set_led_to(int led, uint8_t r, uint8_t g, uint8_t b) {
+ uint8_t buf[] = {
+ TWI_CMD_LED_SET_ONE_TO,
+ led & 0x1f,
+ b, g, r
+ };
+ int hand = (led >= 32) ? RIGHT : LEFT;
+ i2c_transmit(I2C_ADDR(hand), buf, sizeof(buf), I2C_TIMEOUT);
+ _delay_us(10);
+}
+
+#ifdef RGB_MATRIX_ENABLE
+
+__attribute__ ((weak))
+const rgb_led g_rgb_leds[DRIVER_LED_TOTAL] = {
+ {{0x73}, { 3, 35}, 0},
+ {{0x72}, { 0, 26}, 0},
+ {{0x71}, { 0, 17}, 0},
+ {{0x70}, { 0, 6}, 0},
+ {{0x60}, { 14, 5}, 0},
+ {{0x61}, { 15, 16}, 0},
+ {{0x62}, { 16, 25}, 0},
+ {{0x63}, { 17, 34}, 0},
+ {{0x53}, { 31, 29}, 0},
+ {{0x52}, { 31, 19}, 0},
+ {{0x51}, { 30, 11}, 0},
+ {{0x50}, { 30, 1}, 0},
+ {{0x40}, { 45, 0}, 0},
+ {{0x41}, { 45, 8}, 0},
+ {{0x42}, { 46, 17}, 0},
+ {{0x43}, { 46, 27}, 0},
+ {{0x33}, { 60, 27}, 0},
+ {{0x32}, { 60, 18}, 0},
+ {{0x31}, { 60, 9}, 0},
+ {{0x30}, { 60, 0}, 0},
+ {{0x20}, { 74, 2}, 0},
+ {{0x21}, { 74, 11}, 0},
+ {{0x22}, { 75, 20}, 0},
+ {{0x23}, { 74, 28}, 0},
+ {{0x12}, { 89, 30}, 0},
+ {{0x11}, { 89, 19}, 0},
+ {{0x10}, { 89, 7}, 0},
+ {{0x00}, { 70, 38}, 1},
+ {{0x01}, { 82, 41}, 1},
+ {{0x02}, { 93, 45}, 1},
+ {{0x03}, {104, 50}, 1},
+ {{0x13}, { 74, 64}, 1},
+ {{0x67}, {149, 64}, 1},
+ {{0x77}, {119, 50}, 1},
+ {{0x76}, {130, 45}, 1},
+ {{0x75}, {141, 41}, 1},
+ {{0x74}, {153, 38}, 1},
+ {{0x64}, {134, 7}, 0},
+ {{0x65}, {134, 19}, 0},
+ {{0x66}, {134, 30}, 0},
+ {{0x57}, {149, 28}, 0},
+ {{0x56}, {148, 20}, 0},
+ {{0x55}, {149, 11}, 0},
+ {{0x54}, {149, 2}, 0},
+ {{0x44}, {163, 0}, 0},
+ {{0x45}, {163, 9}, 0},
+ {{0x46}, {163, 18}, 0},
+ {{0x47}, {163, 27}, 0},
+ {{0x37}, {177, 27}, 0},
+ {{0x36}, {177, 17}, 0},
+ {{0x35}, {178, 8}, 0},
+ {{0x34}, {178, 0}, 0},
+ {{0x24}, {193, 1}, 0},
+ {{0x25}, {193, 11}, 0},
+ {{0x26}, {192, 19}, 0},
+ {{0x27}, {192, 29}, 0},
+ {{0x17}, {206, 34}, 0},
+ {{0x16}, {207, 25}, 0},
+ {{0x15}, {208, 16}, 0},
+ {{0x14}, {209, 5}, 0},
+ {{0x04}, {224, 6}, 0},
+ {{0x05}, {223, 17}, 0},
+ {{0x06}, {223, 26}, 0},
+ {{0x07}, {220, 35}, 0},
+};
+
+static struct {
+ uint8_t b;
+ uint8_t g;
+ uint8_t r;
+} __attribute__((packed)) led_state[64];
+
+static void set_color(int index, uint8_t r, uint8_t g, uint8_t b) {
+ led_state[index].r = r;
+ led_state[index].g = g;
+ led_state[index].b = b;
+}
+
+static void set_color_all(uint8_t r, uint8_t g, uint8_t b) {
+ for (int i=0; i<DRIVER_LED_TOTAL; i++)
+ set_color(i, r, g, b);
+}
+
+static void init(void) {
+ // Enable high current pathway to LEDs - this does violate the USB spec though! (1.6 amps...)
+ DDRE |= _BV(6);
+ PORTE &= ~_BV(6);
+
+ // Overcurrent check input
+ DDRB &= ~_BV(4);
+ PORTB &= ~_BV(4);
+}
+
+static void flush(void) {
+ uint8_t *bank_data = (uint8_t*)&led_state[0];
+ uint8_t command[1 + 8*3];
+ for (int hand=0; hand<2; hand++) {
+ int addr = I2C_ADDR(hand);
+
+ for (int bank=0; bank<4; bank++) {
+ command[0] = TWI_CMD_LED_BASE + bank;
+ memcpy(&command[1], bank_data, 8*3);
+ i2c_transmit(addr, command, sizeof(command), I2C_TIMEOUT);
+ _delay_us(100);
+
+ bank_data += 8*3;
+ }
+ }
+}
+
+const rgb_matrix_driver_t rgb_matrix_driver = {
+ .init = init,
+ .flush = flush,
+ .set_color = set_color,
+ .set_color_all = set_color_all
+};
+
+#endif
+
+/* vim: set ts=2 sw=2 et: */
diff --git a/keyboards/model01/leds.h b/keyboards/model01/leds.h
new file mode 100644
index 000000000..405bdf328
--- /dev/null
+++ b/keyboards/model01/leds.h
@@ -0,0 +1,22 @@
+/* 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
+
+#include <quantum.h>
+#include <rgb_matrix.h>
+
+void set_all_leds_to(uint8_t r, uint8_t g, uint8_t b);
+void set_led_to(int led, uint8_t r, uint8_t g, uint8_t b);
diff --git a/keyboards/model01/matrix.c b/keyboards/model01/matrix.c
new file mode 100644
index 000000000..f1f9024c7
--- /dev/null
+++ b/keyboards/model01/matrix.c
@@ -0,0 +1,94 @@
+/* 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/>.
+ */
+#include <quantum.h>
+#include <i2c_master.h>
+#include <string.h>
+#include "model01.h"
+
+/* If no key events have occurred, the scanners will time out on reads.
+ * So we don't want to be too permissive here. */
+#define I2C_TIMEOUT 10
+
+static matrix_row_t rows[MATRIX_ROWS];
+#define ROWS_PER_HAND (MATRIX_ROWS / 2)
+
+inline
+uint8_t matrix_rows(void) {
+ return MATRIX_ROWS;
+}
+
+inline
+uint8_t matrix_cols(void) {
+ return MATRIX_COLS;
+}
+
+static int i2c_read_hand(int hand) {
+ uint8_t buf[5];
+ i2c_status_t ret = i2c_receive(I2C_ADDR(hand), buf, sizeof(buf), I2C_TIMEOUT);
+ if (ret != I2C_STATUS_SUCCESS)
+ return 1;
+
+ if (buf[0] != TWI_REPLY_KEYDATA)
+ return 2;
+
+ int start_row = hand ? ROWS_PER_HAND : 0;
+ uint8_t *out = &rows[start_row];
+ memcpy(out, &buf[1], 4);
+ return 0;
+}
+
+static int i2c_set_keyscan_interval(int hand, int delay) {
+ uint8_t buf[] = {TWI_CMD_KEYSCAN_INTERVAL, delay};
+ i2c_status_t ret = i2c_transmit(I2C_ADDR(hand), buf, sizeof(buf), I2C_TIMEOUT);
+ return ret;
+}
+
+void matrix_init(void) {
+ /* Ensure scanner power is on - else right hand will not work */
+ DDRC |= _BV(7);
+ PORTC |= _BV(7);
+
+ i2c_init();
+ i2c_set_keyscan_interval(LEFT, 2);
+ i2c_set_keyscan_interval(RIGHT, 2);
+ memset(rows, 0, sizeof(rows));
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void) {
+ uint8_t ret = 0;
+ ret |= i2c_read_hand(LEFT);
+ ret |= i2c_read_hand(RIGHT);
+ matrix_scan_quantum();
+ return ret;
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row) {
+ return rows[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");
+ }
+}
+
+/* vim: set ts=2 sw=2 et: */
diff --git a/keyboards/model01/model01.c b/keyboards/model01/model01.c
new file mode 100644
index 000000000..29615ca86
--- /dev/null
+++ b/keyboards/model01/model01.c
@@ -0,0 +1,38 @@
+/* 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/>.
+ */
+#include <quantum.h>
+#include <i2c_master.h>
+#include <string.h>
+#include "model01.h"
+
+void matrix_init_kb(void) {
+ /* the bootloader can leave LEDs on, so */
+ set_all_leds_to(0, 0, 0);
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) {
+}
+
diff --git a/keyboards/model01/model01.h b/keyboards/model01/model01.h
new file mode 100644
index 000000000..a83e33cd8
--- /dev/null
+++ b/keyboards/model01/model01.h
@@ -0,0 +1,50 @@
+/* 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
+
+#include <quantum.h>
+
+#define LAYOUT( \
+ L07, L06, L05, L04, L03, L02, R05, R04, R03, R02, R01, R00, \
+ L17, L16, L15, L14, L13, L12, L01, R06, R15, R14, R13, R12, R11, R10, \
+ L27, L26, L25, L24, L23, L22, L11, R16, R25, R24, R23, R22, R21, R20, \
+ L37, L36, L35, L34, L33, L32, L21, R26, R35, R34, R33, R32, R31, R30, \
+ L00, R07, \
+ L10, R17, \
+ L20, R27, \
+ L30, R37, \
+ L31, R36 \
+ ) { \
+ {L00, L01, L02, L03, L04, L05, L06, L07}, \
+ {L10, L11, L12, L13, L14, L15, L16, L17}, \
+ {L20, L21, L22, L23, L24, L25, L26, L27}, \
+ {L30, L31, L32, L33, L34, L35, L36, L37}, \
+ {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} \
+ }
+
+#include "wire-protocol-constants.h"
+#define I2C_ADDR_LEFT (0x58 << 1)
+#define I2C_ADDR_RIGHT (I2C_ADDR_LEFT + 6)
+#define I2C_ADDR(hand) ((hand) ? I2C_ADDR_RIGHT : I2C_ADDR_LEFT)
+#define LEFT 0
+#define RIGHT 1
+
+#include "leds.h"
+
+/* vim: set ts=2 sw=2 et: */
diff --git a/keyboards/model01/readme.md b/keyboards/model01/readme.md
new file mode 100644
index 000000000..34bd291e2
--- /dev/null
+++ b/keyboards/model01/readme.md
@@ -0,0 +1,37 @@
+# Keyboardio Model 01
+
+A split keyboard.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Keyboardio Model 01
+Hardware Availability: [Keyboardio](https://shop.keyboard.io)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make model01: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).
+
+## Programming the Keyboard
+
+To program the keyboard, if you have avrdude installed:
+
+ make model01:default:avrdude
+
+When prompted to reset your keyboard, press the prog key at upper left. If the
+keyboard does not reset, you can hold the prog key while plugging it into your
+computer. The prog key will light up red in programming mode.
+
+## Features
+
+This implements the standard keymap, including mousekeys.
+
+It doesn't do cursor warping - QMK does not support absolute mouse positioning.
+
+LED support is limited. Gamma compensation and the high speed batch update
+functions supported by the hardware are not implemented. The high current power
+switch is also not implemented, so if you try and turn all the LEDs on at full
+brightness, something may conk out.
+
+Hotplugging the two halves works but is not extensively tested.
diff --git a/keyboards/model01/rules.mk b/keyboards/model01/rules.mk
new file mode 100644
index 000000000..49ab981d1
--- /dev/null
+++ b/keyboards/model01/rules.mk
@@ -0,0 +1,64 @@
+SRC += i2c_master.c \
+ leds.c \
+ matrix.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+
+CUSTOM_MATRIX = yes
+
+# You can set RGB_MATRIX_ENABLE = no in your rules.mk to disable this and save the Flash
+RGB_MATRIX_ENABLE = custom # Enable RGB matrix effects (+10000).
diff --git a/keyboards/model01/wire-protocol-constants.h b/keyboards/model01/wire-protocol-constants.h
new file mode 100644
index 000000000..90a528582
--- /dev/null
+++ b/keyboards/model01/wire-protocol-constants.h
@@ -0,0 +1,53 @@
+/*
+ * This file is taken from the KeyboardioScanner module:
+ * https://github.com/keyboardio/KeyboardioScanner/blob/master/wire-protocol-constants.h
+ *
+ * Copyright (C) 2015-2018 Keyboard.io, Inc
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+#pragma once
+
+#define TWI_CMD_NONE 0x00
+#define TWI_CMD_VERSION 0x01
+#define TWI_CMD_KEYSCAN_INTERVAL 0x02
+#define TWI_CMD_LED_SET_ALL_TO 0x03
+#define TWI_CMD_LED_SET_ONE_TO 0x04
+#define TWI_CMD_COLS_USE_PULLUPS 0x05
+#define TWI_CMD_LED_SPI_FREQUENCY 0x06
+
+#define LED_SPI_FREQUENCY_4MHZ 0x07
+#define LED_SPI_FREQUENCY_2MHZ 0x06
+#define LED_SPI_FREQUENCY_1MHZ 0x05
+#define LED_SPI_FREQUENCY_512KHZ 0x04
+#define LED_SPI_FREQUENCY_256KHZ 0x03
+#define LED_SPI_FREQUENCY_128KHZ 0x02
+#define LED_SPI_FREQUENCY_64KHZ 0x01
+#define LED_SPI_OFF 0x00
+
+
+// 512KHZ seems to be the sweet spot in early testing
+// so make it the default
+#define LED_SPI_FREQUENCY_DEFAULT LED_SPI_FREQUENCY_512KHZ
+
+
+#define TWI_CMD_LED_BASE 0x80
+
+#define TWI_REPLY_NONE 0x00
+#define TWI_REPLY_KEYDATA 0x01
diff --git a/keyboards/mt40/rules.mk b/keyboards/mt40/rules.mk
index 64e7413f5..db6ec93f5 100644
--- a/keyboards/mt40/rules.mk
+++ b/keyboards/mt40/rules.mk
@@ -27,7 +27,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 ?= yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight.
RGBLIGHT_CUSTOM_DRIVER = yes
TAP_DANCE_ENABLE = no
diff --git a/keyboards/mxss/rgblight.c b/keyboards/mxss/rgblight.c
index da7959c6a..73f94f3ab 100644
--- a/keyboards/mxss/rgblight.c
+++ b/keyboards/mxss/rgblight.c
@@ -234,7 +234,7 @@ void rgblight_step_reverse(void) {
rgblight_mode(mode);
}
-uint32_t rgblight_get_mode(void) {
+uint8_t rgblight_get_mode(void) {
if (!rgblight_config.enable) {
return false;
}
diff --git a/keyboards/namecard2x4/config.h b/keyboards/namecard2x4/config.h
new file mode 100644
index 000000000..d0c26193c
--- /dev/null
+++ b/keyboards/namecard2x4/config.h
@@ -0,0 +1,223 @@
+/*
+Copyright 2018 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 namecard2x4
+#define DESCRIPTION A custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 2
+#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 { B4,B5 }
+#define MATRIX_COL_PINS { E6,D7,C6,D4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define RGB_DI_PIN F4
+#define RGBLED_NUM 4
+#define RGBLIGHT_ANIMATIONS
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 10
+#define RGBLIGHT_VAL_STEP 10
+
+//#define BACKLIGHT_PIN F4
+//#define BACKLIGHT_BREATHING
+//#define BACKLIGHT_LEVELS 1
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/namecard2x4/info.json b/keyboards/namecard2x4/info.json
new file mode 100644
index 000000000..3d6c33215
--- /dev/null
+++ b/keyboards/namecard2x4/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "namecard2x4",
+ "url": "https://skyhigh-works.hatenablog.com/",
+ "maintainer": "takashiski",
+ "bootloader": "atmel-dfu",
+ "width": 4,
+ "height": 2,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"1", "x":0, "y":0}, {"label":"2", "x":1, "y":0}, {"label":"3", "x":2, "y":0}, {"label":"4", "x":3, "y":0}, {"label":"5", "x":0, "y":1}, {"label":"6", "x":1, "y":1}, {"label":"7", "x":2, "y":1}, {"label":"8", "x":3, "y":1}]
+ }
+ }
+}
diff --git a/keyboards/namecard2x4/keymaps/brainfuck/config.h b/keyboards/namecard2x4/keymaps/brainfuck/config.h
new file mode 100644
index 000000000..dbacdcce5
--- /dev/null
+++ b/keyboards/namecard2x4/keymaps/brainfuck/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 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/namecard2x4/keymaps/brainfuck/keymap.c b/keyboards/namecard2x4/keymaps/brainfuck/keymap.c
new file mode 100644
index 000000000..287e011de
--- /dev/null
+++ b/keyboards/namecard2x4/keymaps/brainfuck/keymap.c
@@ -0,0 +1,59 @@
+/* Copyright 2018 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
+#include "keymap_jp.h"
+
+enum Layer
+{
+ JP,
+ EN,
+ CONFIG
+};
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[JP] = LAYOUT(
+ JP_LT,JP_GT,JP_PLUS,JP_MINS,\
+ LT(CONFIG,JP_DOT),JP_COMM,JP_LBRC,LT(CONFIG,JP_RBRC)\
+ ),
+[EN] = LAYOUT(
+ KC_LT,KC_GT,KC_PLUS,KC_MINS,\
+ LT(CONFIG,KC_DOT),KC_COMM,KC_LBRC,LT(CONFIG,KC_RBRC)\
+ ),
+[CONFIG]= LAYOUT(
+ KC_NO,DF(JP),DF(JP),KC_NO,\
+ KC_TRNS,DF(EN),DF(JP),KC_TRNS\
+ )
+
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/namecard2x4/keymaps/brainfuck/readme.md b/keyboards/namecard2x4/keymaps/brainfuck/readme.md
new file mode 100644
index 000000000..7fee17acd
--- /dev/null
+++ b/keyboards/namecard2x4/keymaps/brainfuck/readme.md
@@ -0,0 +1,12 @@
+# keymap for brainfuck
+
+ This keymap is specialized for the brainfuck programming language.
+
+| < | > | + | - |
+| . | , | [ | ] |
+
+and when you hold . or ], change config layer.
+
+default layer is for JP keyboard(logical pairing).
+you can choose EN keyboard(typewrite pairing).
+
diff --git a/keyboards/namecard2x4/keymaps/default/config.h b/keyboards/namecard2x4/keymaps/default/config.h
new file mode 100644
index 000000000..dbacdcce5
--- /dev/null
+++ b/keyboards/namecard2x4/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 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/namecard2x4/keymaps/default/keymap.c b/keyboards/namecard2x4/keymaps/default/keymap.c
new file mode 100644
index 000000000..1a0a727fc
--- /dev/null
+++ b/keyboards/namecard2x4/keymaps/default/keymap.c
@@ -0,0 +1,60 @@
+/* Copyright 2018 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 Layer
+{
+ DF,
+ LW,
+ RS
+};
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[DF] = LAYOUT(
+ KC_1,KC_2,KC_3,LT(LW,KC_4),
+ KC_5,KC_6,KC_7,LT(RS,KC_8)
+ ),
+[LW]= LAYOUT(
+
+ RGB_VAD,RGB_VAI,RGB_HUI,RGB_HUD,
+ KC_TRNS,RGB_MOD,RGB_RMOD,KC_TRNS
+ ),
+[RS]= LAYOUT(
+
+ KC_MYCM,KC_MAIL,KC_VOLU,KC_MUTE,
+ KC_WSCH,KC_CALC,KC_VOLD,KC_TRNS
+ )
+
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/namecard2x4/keymaps/default/readme.md b/keyboards/namecard2x4/keymaps/default/readme.md
new file mode 100644
index 000000000..83601c9cf
--- /dev/null
+++ b/keyboards/namecard2x4/keymaps/default/readme.md
@@ -0,0 +1,9 @@
+# The default keymap for namecard2x4
+
+this is test keymap.
+
+| 1 | 2 | 3 | 4 |
+| 5 | 6 | 7 | 8 |
+
+if hold 4, change to Backlight settings Layer.
+if hold 8, change to Windows action Layer(Open my computer, Open calculater and others).
diff --git a/keyboards/namecard2x4/namecard2x4.c b/keyboards/namecard2x4/namecard2x4.c
new file mode 100644
index 000000000..349923daf
--- /dev/null
+++ b/keyboards/namecard2x4/namecard2x4.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 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 "namecard2x4.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/namecard2x4/namecard2x4.h b/keyboards/namecard2x4/namecard2x4.h
new file mode 100644
index 000000000..f2e27a010
--- /dev/null
+++ b/keyboards/namecard2x4/namecard2x4.h
@@ -0,0 +1,33 @@
+/* Copyright 2018 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/>.
+ */
+#ifndef NAMECARD2X4_H
+#define NAMECARD2X4_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// The following is an example using the Planck MIT layout
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT( \
+ k00, k01, k02, k03, \
+ k10, k11, k12, k13 \
+) { \
+ { k00, k01, k02, k03 }, \
+ { k10, k11, k12, k13 }, \
+}
+
+#endif
diff --git a/keyboards/namecard2x4/readme.md b/keyboards/namecard2x4/readme.md
new file mode 100644
index 000000000..ec98bc673
--- /dev/null
+++ b/keyboards/namecard2x4/readme.md
@@ -0,0 +1,24 @@
+# namecard2x4
+
+日本式名刺サイズのキーボードです(55x91mm)。
+Kailh PCB SocketとWS2812/SK6812に対応しています。
+
+This keyboard is Japanese namecard size(55x91mm) keyboard.
+
+namecard2x4 has 8 switch and kailh PCB socket.
+
+![namecard2x4](https://i.imgur.com/Bi9SV9A.jpg)
+
+![namecard2x4 with case](https://i.imgur.com/yTv1vSz.jpg)
+
+
+
+Keyboard Maintainer: [takashiski](https://github.com/takashiski)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make namecard2x4: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/namecard2x4/rules.mk b/keyboards/namecard2x4/rules.mk
new file mode 100644
index 000000000..51d2cbcb2
--- /dev/null
+++ b/keyboards/namecard2x4/rules.mk
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = 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
+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)
+
+#UNICODEMAP_ENABLE = yes # for emoji user
+#RGBLIGHT_ENABLE = yes # uncomment if you want addressable led strips
diff --git a/keyboards/nano/config.h b/keyboards/nano/config.h
deleted file mode 100644
index 5c4f920df..000000000
--- a/keyboards/nano/config.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xCEEB
-#define PRODUCT_ID 0x0007
-#define DEVICE_VER 0x0001
-#define MANUFACTURER di0ib
-#define PRODUCT Nano
-#define DESCRIPTION 8 key microswitch board
-
-/* key matrix size */
-#define MATRIX_ROWS 2
-#define MATRIX_COLS 4
-
-/* ws2812 RGB LED */
-#define RGB_DI_PIN B1
-#define RGBLIGHT_TIMER
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 6 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-#define TAPPING_TERM 200
-
-#endif
diff --git a/keyboards/nano/keymaps/default/keymap.c b/keyboards/nano/keymaps/default/keymap.c
deleted file mode 100644
index cd9d4549d..000000000
--- a/keyboards/nano/keymaps/default/keymap.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define _MAIN 0
-#define _FN 1
-
-#define _______ KC_TRNS
-#define KC_X0 LT(_FN, KC_ESC)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_MAIN] = LAYOUT(
- KC_VOLU, KC_MPLY, KC_MPRV, KC_PGUP,
- KC_VOLD, KC_MUTE, KC_MNXT, KC_PGDN
- ),
-
- [_FN] = LAYOUT(
- KC_F, _______, RGB_HUI, _______,
- RGB_TOG, RGB_MOD, RGB_HUD, _______
- )
-};
diff --git a/keyboards/nano/keymaps/default/rules.mk b/keyboards/nano/keymaps/default/rules.mk
deleted file mode 100644
index 457a3d01d..000000000
--- a/keyboards/nano/keymaps/default/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/nano/readme.md b/keyboards/nano/readme.md
deleted file mode 100644
index e8278e340..000000000
--- a/keyboards/nano/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-Nano
-====
-
-A 2x4 mini switch pad built using 6mm x 6mm tactile switches and a Pro Micro. [More info here.](http://www.40percent.club/2016/12/nano-tmk.html)
-
-Keyboard Maintainer: [di0ib](https://github.com/di0ib)
-Hardware Supported: Pro Micro ATmega32U4
-Hardware Availability: [PCB Files](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/nano/pcb)
-
-Make example for this keyboard (after setting up your build environment):
-
- make nano:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/nano/rules.mk b/keyboards/nano/rules.mk
deleted file mode 100644
index dc510bc0d..000000000
--- a/keyboards/nano/rules.mk
+++ /dev/null
@@ -1,70 +0,0 @@
-SRC = matrix.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)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = yes # 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
-CUSTOM_MATRIX = yes
diff --git a/keyboards/newgame40/config.h b/keyboards/newgame40/config.h
new file mode 100644
index 000000000..01c9142f7
--- /dev/null
+++ b/keyboards/newgame40/config.h
@@ -0,0 +1,75 @@
+/*
+Copyright 2018 Go Takigawa <gotakigawa@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER GoTakigawa
+#define PRODUCT NEWGAME40
+#define DESCRIPTION 4x10key keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 10
+
+/* pin-out */
+#define MATRIX_ROW_PINS { F7, B1, B3, B2 }
+#define MATRIX_COL_PINS { D3, D2, D1, D0, D4, C6, D7, E6, B4, B5 }
+#define UNUSED_PINS
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN F6
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 25 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#ifndef IOS_DEVICE_ENABLE
+ #if RGBLED_NUM <= 6
+ #define RGBLIGHT_LIMIT_VAL 255
+ #else
+ #define RGBLIGHT_LIMIT_VAL 130
+ #endif
+ #define RGBLIGHT_VAL_STEP 17
+#else
+ #if RGBLED_NUM <= 6
+ #define RGBLIGHT_LIMIT_VAL 90
+ #else
+ #define RGBLIGHT_LIMIT_VAL 45
+ #endif
+ #define RGBLIGHT_VAL_STEP 4
+#endif
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
+ #define USB_MAX_POWER_CONSUMPTION 400
+#else
+ // fix iPhone and iPad power adapter issue
+ // iOS device need lessthan 100
+ #define USB_MAX_POWER_CONSUMPTION 100
+#endif
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define TAPPING_TERM 200
+
diff --git a/keyboards/newgame40/info.json b/keyboards/newgame40/info.json
new file mode 100644
index 000000000..023961408
--- /dev/null
+++ b/keyboards/newgame40/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "NEWGAME40",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 10,
+ "height": 4,
+ "layouts": {
+ "LAYOUT_ortho_4x10": {
+ "key_count": 40,
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/newgame40/keymaps/default/config.h b/keyboards/newgame40/keymaps/default/config.h
new file mode 100644
index 000000000..d533d806c
--- /dev/null
+++ b/keyboards/newgame40/keymaps/default/config.h
@@ -0,0 +1,5 @@
+
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/newgame40/keymaps/default/keymap.c b/keyboards/newgame40/keymaps/default/keymap.c
new file mode 100644
index 000000000..b42fef00f
--- /dev/null
+++ b/keyboards/newgame40/keymaps/default/keymap.c
@@ -0,0 +1,208 @@
+/* Copyright 2018 GoTakigawa
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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
+
+ extern keymap_config_t keymap_config;
+
+enum layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _EUCALYN,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+ enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ EUCALYN,
+ ADJUST,
+ };
+
+ // Fillers to make layering more clear
+ #define LOWER MO(_LOWER)
+ #define RAISE MO(_RAISE)
+
+ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Qwerty
+ * ,---------------------------------------------------------------------.
+ * | Q | W | E | R | T | Y | U | I | O | P |
+ * |------+------+------+------+------+------|------+------+------+------|
+ * | A | S | D | F | G | H | J | K | L | - |
+ * |------+------+------+------+------+------+-------------+------+------|
+ * | Z | X | C | V | B | N | M | , | . | / |
+ * |-------------+------+------+------+------+------+------+------+------'
+ * |Shift | GUI |Lower | Ctrl |Space | Bksp |Enter |Raise | Left |Right |
+ * `---------------------------------------------------------------------'
+ */
+ [_QWERTY] = LAYOUT_ortho_4x10( \
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_MINS, \
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, \
+ KC_LSFT, KC_LGUI, LT(_LOWER,KC_LANG2), KC_LCTL, KC_SPC, KC_BSPC, KC_ENT, LT(_RAISE,KC_LANG1), KC_LEFT, KC_RGHT\
+ ),
+
+ /* Colemak
+ * ,---------------------------------------------------------------------.
+ * | Q | W | F | P | G | J | L | U | Y | - |
+ * |------+------+------+------+------+------|------+------+------+------|
+ * | A | R | S | T | D | H | N | E | I | O |
+ * |------+------+------+------+------+------+-------------+------+------|
+ * | Z | X | C | V | B | K | M | , | . | / |
+ * |-------------+------+------+------+------+------+------+------+------'
+ * |Shift | GUI |Lower | Ctrl |Space | Bksp |Enter |Raise | Left |Right |
+ * `---------------------------------------------------------------------'
+ */
+ [_COLEMAK] = LAYOUT_ortho_4x10( \
+ KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_MINS, \
+ KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, 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_SLSH, \
+ KC_LSFT, KC_LGUI, LT(_LOWER,KC_LANG2), KC_LCTL, KC_SPC, KC_BSPC, KC_ENT, LT(_RAISE,KC_LANG1), KC_LEFT, KC_RGHT\
+ ),
+
+ /* Dvorak
+ * ,---------------------------------------------------------------------.
+ * | " | , | . | P | Y | F | G | C | R | L |
+ * |------+------+------+------+------+------|------+------+------+------|
+ * | A | O | E | U | I | D | H | T | N | S |
+ * |------+------+------+------+------+------+-------------+------+------|
+ * | ; | Q | J | K | X | B | M | W | V | Z |
+ * |-------------+------+------+------+------+------+------+------+------'
+ * |Shift | GUI |Lower | Ctrl |Space | Bksp |Enter |Raise | Left |Right |
+ * `---------------------------------------------------------------------'
+ */
+ [_DVORAK] = LAYOUT_ortho_4x10( \
+ KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, \
+ KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, \
+ KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, \
+ KC_LSFT, KC_LGUI, LT(_LOWER,KC_LANG2), KC_LCTL, KC_SPC, KC_BSPC, KC_ENT, LT(_RAISE,KC_LANG1), KC_LEFT, KC_RGHT\
+ ),
+
+ /* Lower
+ * ,---------------------------------------------------------------------.
+ * | Esc | | | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------|
+ * | | | | | | | | | | |
+ * |------+------+------+------+------+------+-------------+------+------|
+ * | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | F21 | F22 |
+ * |-------------+------+------+------+------+------+------+------+------'
+ * | F1 | F2 | | F3 | F4 | F5 | F6 | | F7 | F8 |
+ * `---------------------------------------------------------------------'
+ */
+ [_LOWER] = LAYOUT_ortho_4x10( \
+ KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, \
+ KC_F1, KC_F2, _______, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_F7, KC_F8 \
+ ),
+
+ /* Raise
+ * ,---------------------------------------------------------------------.
+ * | 1 | 2 |  3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
+ * |------+------+------+------+------+------|------+------+------+------|
+ * | ! | " | # | $ | % | & | ' | (  | ) | _ |
+ * |------+------+------+------+------+------+-------------+------+------|
+ * | = | ¥ | { | } | * | ~ | | | < | > | ? |
+ * |-------------+------+------+------+------+------+------+------+------'
+ * | F1 | Alt | | [ | ] | ; | : | | \ | / |
+ * `---------------------------------------------------------------------'
+ */
+ [_RAISE] = LAYOUT_ortho_4x10( \
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, \
+ KC_EXLM, KC_DQT, KC_HASH, KC_DLR, KC_PERC, KC_AMPR, KC_QUOT, KC_LPRN, KC_RPRN, KC_UNDS, \
+ KC_EQL, KC_JYEN, KC_LCBR, KC_RCBR, KC_ASTR, KC_TILD, KC_PIPE, KC_LABK, KC_RABK, KC_QUES, \
+ KC_F1, KC_LALT, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, _______, KC_BSLS, KC_SLSH \
+ ),
+
+ /* EUCALYN
+ * ,---------------------------------------------------------------------.
+ * | Q | W | , | . | ; | M | R | D | Y | P |
+ * |------+------+------+------+------+------|------+------+------+------|
+ * | A | O | E | I | U | G | T | K | S | N |
+ * |------+------+------+------+------+------+-------------+------+------|
+ * | Z | X | C | V | F | B | H | J | L | / |
+ * `-------------+------+------+------+------+------+------+-------------'
+ * |Shift | GUI |Lower | Ctrl |Space | Bksp |Enter |Raise | Left |Right |
+ * `---------------------------------------------------------------------'
+ */
+ [_EUCALYN] = LAYOUT_ortho_4x10( \
+ KC_Q, KC_W, KC_COMM, KC_DOT, KC_SCLN, KC_M, KC_R, KC_D, KC_Y, KC_P, \
+ KC_A, KC_O, KC_E, KC_I, KC_U, KC_G, KC_T, KC_K, KC_S, KC_N, \
+ KC_Z, KC_X, KC_C, KC_V, KC_F, KC_B, KC_H, KC_J, KC_L, KC_SLSH, \
+ KC_LSFT, KC_LGUI, LT(_LOWER,KC_LANG2), KC_LCTL, KC_SPC, KC_BSPC, KC_ENT, LT(_RAISE,KC_LANG1), KC_LEFT, KC_RGHT\
+ ),
+
+ /* Adjust (Lower + Raise)
+ * ,---------------------------------------------------------------------.
+ * | |RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| |
+ * |------+------+------+------+------+------.------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap| |BL TOG|BL STP|
+ * |------+------+------+------+------+------+------+------+------+------|
+ * |Qwerty|Colemk|Dvorak|Eucalyn| | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | |
+ * `---------------------------------------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_ortho_4x10( \
+ _______, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, BL_TOGG, BL_STEP, \
+ QWERTY, COLEMAK, DVORAK, EUCALYN, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ )
+
+
+ };
+
+ uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+ }
+
+ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case EUCALYN:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_EUCALYN);
+ }
+ return false;
+ break;
+ }
+ return true;
+ }
diff --git a/keyboards/newgame40/newgame40.c b/keyboards/newgame40/newgame40.c
new file mode 100644
index 000000000..e55b25b3d
--- /dev/null
+++ b/keyboards/newgame40/newgame40.c
@@ -0,0 +1,5 @@
+#include "newgame40.h"
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
diff --git a/keyboards/newgame40/newgame40.h b/keyboards/newgame40/newgame40.h
new file mode 100644
index 000000000..6044f3765
--- /dev/null
+++ b/keyboards/newgame40/newgame40.h
@@ -0,0 +1,19 @@
+#ifndef NEWGAME40_H
+#define NEWGAME40_H
+
+#include "quantum.h"
+
+#define LAYOUT_ortho_4x10( \
+ k101, k102, k103, k104, k105, k106, k107, k108, k109, k110, \
+ k201, k202, k203, k204, k205, k206, k207, k208, k209, k210, \
+ k301, k302, k303, k304, k305, k306, k307, k308, k309, k310, \
+ k401, k402, k403, k404, k405, k406, k407, k408, k409, k410 \
+) \
+{ \
+ {k101, k102, k103, k104, k105, k106, k107, k108, k109, k110}, \
+ {k201, k202, k203, k204, k205, k206, k207, k208, k209, k210}, \
+ {k301, k302, k303, k304, k305, k306, k307, k308, k309, k310}, \
+ {k401, k402, k403, k404, k405, k406, k407, k408, k409, k410} \
+}
+
+#endif
diff --git a/keyboards/newgame40/readme.md b/keyboards/newgame40/readme.md
new file mode 100644
index 000000000..2aa568cfb
--- /dev/null
+++ b/keyboards/newgame40/readme.md
@@ -0,0 +1,17 @@
+# NEWGAME40
+
+![NEWGAME40](https://i.imgur.com/HtujXda.jpg)
+
+40% (4x10) ortholinear keyboard.
+
+Keyboard Maintainer:
+[GoTakigawa](https://github.com/GoTakigawa)
+[@Go_Drums](https://twitter.com/Go_Drums)
+Hardware Supported: The NEWGAME40 PCBs, ProMicro supported
+Hardware Availability: Group buy soon
+
+Make example for this keyboard (after setting up your build environment):
+
+ make newgame40: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/newgame40/rules.mk b/keyboards/newgame40/rules.mk
new file mode 100644
index 000000000..cca40ce8e
--- /dev/null
+++ b/keyboards/newgame40/rules.mk
@@ -0,0 +1,74 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+BOOTLOADER = caterina
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = yes # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+IOS_DEVICE_ENABLE = no # connect to IOS Device
+
+ ifeq ($(strip $(IOS_DEVICE_ENABLE )), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+ 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
+
+LAYOUTS = ortho_4x10
diff --git a/keyboards/niu_mini/config.h b/keyboards/niu_mini/config.h
index 2f2230616..b9d3ed4e9 100644
--- a/keyboards/niu_mini/config.h
+++ b/keyboards/niu_mini/config.h
@@ -64,9 +64,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/niu_mini/keymaps/abhixec/keymap.c b/keyboards/niu_mini/keymaps/abhixec/keymap.c
new file mode 100644
index 000000000..6d3ff8a37
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/abhixec/keymap.c
@@ -0,0 +1,183 @@
+/* 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
+
+extern keymap_config_t keymap_config;
+
+enum layers {
+ _QWERTY,
+ _COLEMAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ EXT_PLV
+};
+
+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 |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_mit(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_planck_mit(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ _______, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_mit(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_mit(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | |AG_NRM|AG_SWP|Qwerty|Colemk| | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_mit(
+ _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL ,
+ _______, _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/niu_mini/keymaps/abhixec/readme.md b/keyboards/niu_mini/keymaps/abhixec/readme.md
new file mode 100644
index 000000000..1bc312a03
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/abhixec/readme.md
@@ -0,0 +1,5 @@
+# Abhixec's Layout
+
+This is inspired by planck but removed most of the unwanted and extra features of planck that is not there in this keyboard.
+
+
diff --git a/keyboards/niu_mini/keymaps/abhixec/rules.mk b/keyboards/niu_mini/keymaps/abhixec/rules.mk
new file mode 100644
index 000000000..3bf3f2731
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/abhixec/rules.mk
@@ -0,0 +1 @@
+AUDIO_ENABLE = no
diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/config.h b/keyboards/niu_mini/keymaps/spacebarracecar/config.h
new file mode 100644
index 000000000..6f70f09be
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/spacebarracecar/config.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c b/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c
new file mode 100644
index 000000000..9bee87f38
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/spacebarracecar/keymap.c
@@ -0,0 +1,138 @@
+#include QMK_KEYBOARD_H
+#include "spacebarracecar.h"
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+enum layers {
+ _BASE,
+ _RAISE,
+ _LOWER
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Base
+,-----------------------------------------------------------------------------------------------------------------------.
+|Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace|
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Esc/Nav |A |S |D |F |G |H |J |K |L |; |' |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Shift |Y |X |C |V |B |N |M |, |. |/ |Shift |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|LCtrl | |Win |Alt |Lower |Space |Enter |Raise |AltGr |Win |Menu |RCtrl |
+`-----------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_BASE] = LAYOUT_ortho_4x12(
+ KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC,
+ CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT,
+ CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT,
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+),
+
+/* Lower
+,-----------------------------------------------------------------------------------------------------------------------.
+|~ |! |" |# |$ |% |^ |& |* |( |) | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |? | | | | | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | | | | | | | |
+`-----------------------------------------------------------------------------------------------------------------------'
+*/
+[_LOWER] = LAYOUT_ortho_4x12(
+ DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______,
+ _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE,
+ _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Raise
+,-----------------------------------------------------------------------------------------------------------------------.
+|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |F7 |F8 |F9 |F10 |F11 |F12 | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | | | | | | | |
+`-----------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_RAISE] = LAYOUT_ortho_4x12(
+ CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Deadkey
+,-----------------------------------------------------------------------------------------------------------------------.
+| | | | | | | |Ü | |Ö | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Ä |ß | | | | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | |" |" | | | | | |
+`-----------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_DEADKEY] = LAYOUT_ortho_4x12(
+ KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______,
+ _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ,
+ _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______,
+ _______, _______, _______, _______, _______, CU_DDQ, CU_DDQ, _______, _______, _______, _______, _______
+),
+
+/* Navigation
+,-----------------------------------------------------------------------------------------------------------------------.
+|ALT F4 |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|RESET |ESCT | | | | | | | | | |Game |
+`-----------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_NAV] = LAYOUT_ortho_4x12(
+ ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, RGB_M_P, KC_ENT,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, RGB_TOG, RGB_MOD, RGB_HUI, CU_RGBV, _______,
+ RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME
+)
+
+};
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+switch (keycode) {
+ case MO(_LOWER):
+ if (game){
+ if(record->event.pressed) {
+ register_code(KC_SPC);
+ } else {
+ unregister_code(KC_SPC);
+ }
+ return false;
+ } else {
+ return true;
+ }
+ case KC_LALT:
+ if (game) {
+ if (record->event.pressed){
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ } else {
+ return true;
+ }
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/readme.md b/keyboards/niu_mini/keymaps/spacebarracecar/readme.md
new file mode 100644
index 000000000..967274381
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/spacebarracecar/readme.md
@@ -0,0 +1,5 @@
+# SpacebarRacecar US-International NIU Mini Keymap for German PCs
+
+This keymap emulates most keys of the US-International layout on PCs that have German set as input language.
+This allows the use of the keyboard on any PC in Germany without the need to change any settings.
+The keymap is mostly based on the Planck default layout but adds essential features for german input, like access to Ä, Ö, Ü, ß.
diff --git a/keyboards/niu_mini/keymaps/spacebarracecar/rules.mk b/keyboards/niu_mini/keymaps/spacebarracecar/rules.mk
new file mode 100644
index 000000000..124de79de
--- /dev/null
+++ b/keyboards/niu_mini/keymaps/spacebarracecar/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 = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# Userspace defines
+GERMAN_ENABLE = yes # Enable Custom US Ansi Keycodes for PC with German set as input language
diff --git a/keyboards/niu_mini/keymaps/xtonhasvim/config.h b/keyboards/niu_mini/keymaps/xtonhasvim/config.h
index a22bcab0f..aa13d7b73 100644
--- a/keyboards/niu_mini/keymaps/xtonhasvim/config.h
+++ b/keyboards/niu_mini/keymaps/xtonhasvim/config.h
@@ -3,7 +3,7 @@
#include "../../config.h"
-#define MUSIC_MASK (keycode != KC_NO)
+// #define MUSIC_MASK (keycode != KC_NO)
/*
* MIDI options
@@ -16,7 +16,7 @@
- MIDI notes can be sent when in Music mode is on
*/
-#define MIDI_BASIC
+// #define MIDI_BASIC
/* enable advanced MIDI features:
- MIDI notes can be added to the keymap
@@ -32,12 +32,6 @@
// help for fast typist+dual function keys?
#define PERMISSIVE_HOLD
-/* disable debug print */
-#define NO_DEBUG
-
-/* disable print */
-#define NO_PRINT
-
/* speed up mousekeys a bit */
#define MOUSEKEY_DELAY 50
#define MOUSEKEY_INTERVAL 20
diff --git a/keyboards/niu_mini/keymaps/xtonhasvim/keymap.c b/keyboards/niu_mini/keymaps/xtonhasvim/keymap.c
index dd764826f..bfda81273 100644
--- a/keyboards/niu_mini/keymaps/xtonhasvim/keymap.c
+++ b/keyboards/niu_mini/keymaps/xtonhasvim/keymap.c
@@ -16,6 +16,7 @@
#include QMK_KEYBOARD_H
#include "xtonhasvim.h"
+#include "fancylighting.h"
/************************************
* states
@@ -27,7 +28,15 @@ enum layers {
_RAISE,
_ADJUST,
_MOVE,
- _MOUSE
+ _MOUSE,
+ _CMD
+};
+
+extern uint8_t vim_cmd_layer(void) { return _CMD; }
+
+enum keymap_keycodes {
+ RAISE = VIM_SAFE_RANGE,
+ LOWER
};
/************************************
@@ -48,14 +57,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*
* - Ctrl acts as Esc when tapped.
- * - Holding A or ; switches to movement layer.
+ * - Holding ; switches to movement layer.
* - Raise and Lower are one-shot layers.
*/
[_QWERTY] = LAYOUT_planck_mit(
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- LCTL_T(KC_ESC), LT(_MOVE,KC_A), KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,KC_SCLN), KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT),
- TG(_MOUSE), X_____X, KC_LALT, KC_LGUI, OSL(_LOWER), KC_SPC, OSL(_RAISE), KC_LGUI, KC_LALT, X_____X, VIM_START
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT(_MOVE,KC_SCLN), KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT),
+ LSFT(KC_LALT), TG(_MOUSE), KC_LALT, KC_LGUI, LOWER, KC_SPC, RAISE, KC_LGUI, KC_LALT, X_____X, VIM_START
),
/* Lower
@@ -70,10 +79,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_LOWER] = LAYOUT_planck_mit(
- KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSPC,
- KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, X_____X, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY,
- X_____X, TO(_QWERTY), _______, _______, _______, KC_BSPC, OSL(_ADJUST), _______, _______, TO(_QWERTY), X_____X
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSPC,
+ KC_DEL, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, X_____X, X_____X, X_____X, X_____X, FIREY_RETURN,
+ _______, TO(_QWERTY), _______, _______, _______, KC_BSPC, _______, _______, _______, TO(_QWERTY), X_____X
),
/* Raise
@@ -88,10 +97,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_RAISE] = LAYOUT_planck_mit(
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSPC,
- KC_DEL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY,
- X_____X, TO(_QWERTY), _______, _______, OSL(_ADJUST), X_____X, _______, _______, _______, TO(_QWERTY), X_____X
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_DEL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, X_____X, X_____X, X_____X, X_____X, FIREY_RETURN,
+ _______, TO(_QWERTY), _______, _______, _______, KC_BSPC, _______, _______, _______, TO(_QWERTY), X_____X
),
@@ -99,17 +108,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ,-------------------------------------------------------------------------------------.
* |RGBPlain| Reset| | | | | | | | | | Del |
* |--------+------+------+------+------+-------------+------+------+------+------+------|
- * |RGBMode-| | |Aud on|Audoff|AGnorm|AGswap| | | | |Lite+ |
+ * |RGBMode-| | | | | | | | | | |Lite+ |
* |--------+------+------+------+------+------|------+------+------+------+------+------|
- * |RGBMode+|Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | |Lite- |
+ * |RGBMode+| | | | | | | Next | Vol- | Vol+ | Play |Lite- |
* |--------+------+------+------+------+------+------+------+------+------+------+------|
* | RGB | Bail | | | | | | | | Bail | |
* `-------------------------------------------------------------------------------------'
*/
[_ADJUST] = LAYOUT_planck_mit(
RGB_MODE_PLAIN, RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
- RGB_MODE_REVERSE, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, RGB_VAI,
- RGB_MODE_FORWARD, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, RGB_VAD,
+ RGB_MODE_REVERSE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAI,
+ RGB_MODE_FORWARD, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, RGB_VAD,
RGB_TOG, TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY), X_____X
),
@@ -120,7 +129,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
TO(_QWERTY), X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X,
_______, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, X_____X, X_____X,
_______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
- X_____X, TO(_QWERTY), _______, _______, _______, X_____X, _______, _______, _______, TO(_QWERTY), X_____X
+ _______, TO(_QWERTY), _______, _______, _______, X_____X, _______, _______, _______, TO(_QWERTY), X_____X
),
/* mouse layer
@@ -132,68 +141,124 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, TO(_QWERTY), _______, _______, _______, X_____X, _______, _______, _______, TO(_QWERTY), X_____X
),
-/* vim edit mode. just has an escape -> _CMD key */
-[_EDIT] = LAYOUT_planck_mit(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- VIM_START, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, TO(_QWERTY), _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY), _______
-),
-
/* vim command layer.
*/
[_CMD] = LAYOUT_planck_mit(
- X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X,
- VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X,
- VIM_SHIFT, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT,
- X_____X, TO(_QWERTY), _______, _______, X_____X, X_____X, X_____X, _______, _______, TO(_QWERTY), X_____X
+ X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X,
+ VIM_ESC, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X,
+ VIM_SHIFT, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT,
+ _______, TO(_QWERTY), _______, _______, X_____X, X_____X, X_____X, _______, _______, TO(_QWERTY), X_____X
)
};
+#define C_RED 0xFF, 0x00, 0x00
+#define C_GRN 0x00, 0xFF, 0x00
+#define C_BLU 0x00, 0x00, 0xFF
+
+#define C_YAN 0x00, 0xFF, 0xFF
+#define C_PRP 0x7A, 0x00, 0xFF
+#define C_ORG 0xFF, 0x93, 0x00
+
/** Set just 4 LEDs closest to the user. Slightly less annoying to bystanders.*/
-void rgbflag(uint8_t r, uint8_t g, uint8_t b) {
- for(int i = 0; i < RGBLED_NUM; i++){
- switch(i) {
- case 9 ... 12:
- // rgblight_setrgb_at(r,g,b,i);
- led[i].r = r;
- led[i].g = g;
- led[i].b = b;
- break;
- default:
- // rgblight_setrgb_at(0,0,0,i);
- led[i].r = 0;
- led[i].g = 0;
- led[i].b = 0;
- break;
+void rgbflag(uint8_t r, uint8_t g, uint8_t b, uint8_t rr, uint8_t gg, uint8_t bb) {
+ LED_TYPE *target_led = user_rgb_mode ? shadowed_led : led;
+ for (int i = 0; i < RGBLED_NUM; i++) {
+ switch (i) {
+ case 12: case 13:
+ target_led[i].r = r;
+ target_led[i].g = g;
+ target_led[i].b = b;
+ break;
+ case 8: case 9:
+ target_led[i].r = rr;
+ target_led[i].g = gg;
+ target_led[i].b = bb;
+ break;
+ default:
+ target_led[i].r = 0;
+ target_led[i].g = 0;
+ target_led[i].b = 0;
+ break;
}
}
rgblight_set();
}
-uint32_t layer_state_set_user(uint32_t state) {
- if(rgblight_get_mode() == 1) {
- switch (biton32(state)) {
+void set_state_leds(void) {
+ if (rgblight_get_mode() == 1) {
+ switch (biton32(layer_state)) {
case _RAISE:
+ rgbflag(C_BLU, C_GRN);
+ break;
case _LOWER:
+ rgbflag(C_BLU, C_RED);
+ break;
case _ADJUST:
- rgbflag(0x00, 0x00, 0xFF);
- break;
+ rgbflag(C_BLU, C_PRP);
+ break;
case _MOVE:
+ rgbflag(C_RED, C_PRP);
+ break;
case _MOUSE:
- rgbflag(0xFF, 0x00, 0x00);
- break;
+ rgbflag(C_RED, C_GRN);
+ break;
case _CMD:
- rgbflag(0x00, 0xFF, 0x00);
- break;
- case _EDIT:
- rgbflag(0x7A, 0x00, 0xFF);
- break;
+ switch(vstate) {
+ case VIM_V:
+ case VIM_VI:
+ case VIM_VS:
+ rgbflag(C_GRN, C_YAN);
+ break;
+ case VIM_C:
+ case VIM_CI:
+ rgbflag(C_GRN, C_ORG);
+ break;
+ case VIM_D:
+ case VIM_DI:
+ rgbflag(C_GRN, C_RED);
+ break;
+ case VIM_G:
+ rgbflag(C_GRN, C_BLU);
+ break;
+ case VIM_Y:
+ rgbflag(C_GRN, C_PRP);
+ break;
+ case VIM_START:
+ default:
+ rgbflag(C_GRN, C_GRN);
+ break;
+ }
+ break;
default: // for any other layers, or the default layer
- rgbflag(0x00, 0xFF, 0xFF);
- break;
+ rgbflag(C_YAN, C_YAN);
+ break;
}
}
- return state;
+}
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
}
diff --git a/keyboards/niu_mini/keymaps/xtonhasvim/rules.mk b/keyboards/niu_mini/keymaps/xtonhasvim/rules.mk
index 3a93f9fd8..359f94f1e 100644
--- a/keyboards/niu_mini/keymaps/xtonhasvim/rules.mk
+++ b/keyboards/niu_mini/keymaps/xtonhasvim/rules.mk
@@ -4,3 +4,5 @@ endif
MOUSEKEY_ENABLE = yes
BACKLIGHT_ENABLE = no
+AUDIO_ENABLE = no
+CONSOLE_ENABLE = no # Console for debug(+400)
diff --git a/keyboards/novelpad/config.h b/keyboards/novelpad/config.h
index 0d6a71343..3a47c0eb6 100755
--- a/keyboards/novelpad/config.h
+++ b/keyboards/novelpad/config.h
@@ -53,9 +53,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
false \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define BACKLIGHT_LEVELS 10
#define BACKLIGHT_PIN B7
diff --git a/keyboards/noxary/268/config.h b/keyboards/noxary/268/config.h
index b2cb95e95..7eec79a1b 100644
--- a/keyboards/noxary/268/config.h
+++ b/keyboards/noxary/268/config.h
@@ -60,9 +60,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
/* ws2812b options */
#define RGB_DI_PIN B5
#ifdef RGB_DI_PIN
@@ -73,4 +70,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_VAL_STEP 16
#endif
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/noxary/268_2/268_2.c b/keyboards/noxary/268_2/268_2.c
new file mode 100644
index 000000000..da4e5efb7
--- /dev/null
+++ b/keyboards/noxary/268_2/268_2.c
@@ -0,0 +1,54 @@
+/* Copyright 2018 Rozakiin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#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);
+ }
+}
diff --git a/keyboards/noxary/268_2/268_2.h b/keyboards/noxary/268_2/268_2.h
new file mode 100644
index 000000000..2f5d985a3
--- /dev/null
+++ b/keyboards/noxary/268_2/268_2.h
@@ -0,0 +1,43 @@
+/* Copyright 2018 Rozakiin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, 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, } \
+}
+
+#endif
diff --git a/keyboards/noxary/268_2/config.h b/keyboards/noxary/268_2/config.h
new file mode 100644
index 000000000..f5308d8ec
--- /dev/null
+++ b/keyboards/noxary/268_2/config.h
@@ -0,0 +1,221 @@
+/*
+Copyright 2018 Rozakiin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 0x4E58
+#define PRODUCT_ID 0x0044
+#define DEVICE_VER 0x0002
+#define MANUFACTURER Noxary
+#define PRODUCT 268.2
+#define DESCRIPTION QMK keyboard firmware for 268.2
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+/* 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
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/noxary/268_2/info.json b/keyboards/noxary/268_2/info.json
new file mode 100644
index 000000000..8d227afd8
--- /dev/null
+++ b/keyboards/noxary/268_2/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Noxary 268.2",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":15, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/noxary/268_2/keymaps/default/config.h b/keyboards/noxary/268_2/keymaps/default/config.h
new file mode 100644
index 000000000..9c4c2b630
--- /dev/null
+++ b/keyboards/noxary/268_2/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 Rozakiin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/noxary/268_2/keymaps/default/keymap.c b/keyboards/noxary/268_2/keymaps/default/keymap.c
new file mode 100644
index 000000000..994fe36b0
--- /dev/null
+++ b/keyboards/noxary/268_2/keymaps/default/keymap.c
@@ -0,0 +1,83 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL1 1
+#define _FL2 2
+
+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|
+ * `----------------------------------------------------------------'
+ */
+ [_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_TAB, KC_Q, KC_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-| |
+ * `----------------------------------------------------------------'
+ */
+ [_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, _______,
+ _______, _______, _______, _______, 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(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+};
+
+
+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/keymaps/default/readme.md b/keyboards/noxary/268_2/keymaps/default/readme.md
new file mode 100644
index 000000000..c4c832cc6
--- /dev/null
+++ b/keyboards/noxary/268_2/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for 268_2
diff --git a/keyboards/noxary/268_2/readme.md b/keyboards/noxary/268_2/readme.md
new file mode 100644
index 000000000..85d1a4717
--- /dev/null
+++ b/keyboards/noxary/268_2/readme.md
@@ -0,0 +1,16 @@
+# Noxary 268.2
+
+![268.2](https://www.keebtalk.com/uploads/db8059/original/2X/6/65b93c83cadd98bbf8e3b1d739621d54b682609a.jpg)
+
+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)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make noxary/268_2: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/noxary/268_2/rules.mk b/keyboards/noxary/268_2/rules.mk
new file mode 100644
index 000000000..9b6d7e672
--- /dev/null
+++ b/keyboards/noxary/268_2/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 = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/noxary/README.md b/keyboards/noxary/README.md
index 81e525506..8dbd85f7e 100644
--- a/keyboards/noxary/README.md
+++ b/keyboards/noxary/README.md
@@ -1,7 +1,11 @@
# Noxary Firmware
-All files related to firmware of Noxary Keyboards designed by Rozakiin.
+All files related to firmware of Noxary Keyboards designed by [Rozakiin](https://github.com/rozakiin).
### Keyboards
-- [268](./268/): Original repo [here](https://github.com/Rozakiin/Noxary_Firmware). Imported by kind [permission](https://github.com/Rozakiin/Noxary_Firmware/issues/1) of @rozakiin
+- [268](./268/): Original repo [here](https://github.com/Rozakiin/Noxary_Firmware). Imported by kind [permission](https://github.com/Rozakiin/Noxary_Firmware/issues/1) of @rozakiin
+
+- [268.2](./268_2/): Original repo [here](https://github.com/Rozakiin/Noxary_Firmware). Imported by kind [permission](https://github.com/Rozakiin/Noxary_Firmware/issues/1) of @rozakiin
+
+- [x268](./x268/): Original repo [here](https://github.com/Rozakiin/Noxary_Firmware). Imported by kind [permission](https://github.com/Rozakiin/Noxary_Firmware/issues/1) of @rozakiin
diff --git a/keyboards/noxary/x268/config.h b/keyboards/noxary/x268/config.h
new file mode 100644
index 000000000..5c4f6cdad
--- /dev/null
+++ b/keyboards/noxary/x268/config.h
@@ -0,0 +1,230 @@
+/*
+Copyright 2018 Rozakiin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 0x4E58
+#define PRODUCT_ID 0x0044
+#define DEVICE_VER 0x00F2
+#define MANUFACTURER Noxary
+#define PRODUCT x268
+#define DESCRIPTION QMK keyboard firmware for x268
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F7, F6, F5, F0, B4 }
+#define MATRIX_COL_PINS { C6, B6, C7, F4, E6, B2, D6, D0, D1, D7, D4, D5, D3, F1, D2, B1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* ws2812b options */
+#define RGB_DI_PIN B5
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 16
+#define RGBLIGHT_HUE_STEP 16
+#define RGBLIGHT_SAT_STEP 16
+#define RGBLIGHT_VAL_STEP 16
+/*#define RGBLIGHT_LIMIT_VAL 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 */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0
diff --git a/keyboards/noxary/x268/info.json b/keyboards/noxary/x268/info.json
new file mode 100644
index 000000000..cac7559ba
--- /dev/null
+++ b/keyboards/noxary/x268/info.json
@@ -0,0 +1,86 @@
+{
+ "keyboard_name": "Noxary x268",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 71,
+ "layout": [
+ {"label":"ESC", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+ {"label":"7", "x":7, "y":0},
+ {"label":"8", "x":8, "y":0},
+ {"label":"9", "x":9, "y":0},
+ {"label":"0", "x":10, "y":0},
+ {"label":"MINUS", "x":11, "y":0},
+ {"label":"EQUAL", "x":12, "y":0},
+ {"label":"BACKSLASH", "x":13, "y":0},
+ {"label":"BACKSPACE", "x":14, "y":0},
+ {"label":"GRAVE", "x":15, "y":0},
+ {"label":"TAB", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"LBRACKET", "x":11.5, "y":1},
+ {"label":"RBRACKET", "x":12.5, "y":1},
+ {"label":"BACKSLASH", "x":13.5, "y":1, "w":1.5},
+ {"label":"DELETE", "x":15, "y":1},
+ {"label":"CAPS LOCK", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":"SEMICOLON", "x":10.75, "y":2},
+ {"label":"QUOTE", "x":11.75, "y":2},
+ {"label":"ISO HASH", "x":12.75, "y":2},
+ {"label":"ENTER", "x":13.75, "y":2, "w":1.25},
+ {"label":"PAGE UP", "x":15, "y":2},
+ {"label":"LSHIFT", "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":"COMMA", "x":9.25, "y":3},
+ {"label":"PERIOD", "x":10.25, "y":3},
+ {"label":"SLASH", "x":11.25, "y":3},
+ {"label":"RSHIFT", "x":12.25, "y":3, "w":1.75},
+ {"label":"UP", "x":14, "y":3},
+ {"label":"PAGE DOWN", "x":15, "y":3},
+ {"label":"LCTRL", "x":0, "y":4, "w":1.25},
+ {"label":"LGUI", "x":1.25, "y":4, "w":1.25},
+ {"label":"LALT", "x":2.5, "y":4, "w":1.25},
+ {"label":"SPACE", "x":3.75, "y":4, "w":6.25},
+ {"label":"LALT", "x":10, "y":4},
+ {"label":"FN", "x":11, "y":4},
+ {"label":"RCTRL", "x":12, "y":4},
+ {"label":"LEFT", "x":13, "y":4},
+ {"label":"DOWN", "x":14, "y":4},
+ {"label":"RIGHT", "x":15, "y":4}
+ ]
+ }
+ }
+}
+
diff --git a/keyboards/noxary/x268/keymaps/default/config.h b/keyboards/noxary/x268/keymaps/default/config.h
new file mode 100644
index 000000000..9c4c2b630
--- /dev/null
+++ b/keyboards/noxary/x268/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 Rozakiin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/noxary/x268/keymaps/default/keymap.c b/keyboards/noxary/x268/keymaps/default/keymap.c
new file mode 100644
index 000000000..ae07f5213
--- /dev/null
+++ b/keyboards/noxary/x268/keymaps/default/keymap.c
@@ -0,0 +1,83 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL1 1
+#define _FL2 2
+
+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|
+ * `----------------------------------------------------------------'
+ */
+ [_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_TAB, KC_Q, KC_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_NUHS, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, MO(_FL1), KC_RCTL, 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-| |
+ * `----------------------------------------------------------------'
+ */
+ [_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, _______,
+ RGB_TOG, RGB_VAI, RGB_SAI, RGB_HUI, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS,
+ _______, RGB_VAD, RGB_SAD, RGB_HUD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, 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(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______),
+
+
+};
+
+
+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/x268/keymaps/default/readme.md b/keyboards/noxary/x268/keymaps/default/readme.md
new file mode 100644
index 000000000..5d5bd6959
--- /dev/null
+++ b/keyboards/noxary/x268/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for x268
diff --git a/keyboards/noxary/x268/readme.md b/keyboards/noxary/x268/readme.md
new file mode 100644
index 000000000..c1c05c34d
--- /dev/null
+++ b/keyboards/noxary/x268/readme.md
@@ -0,0 +1,18 @@
+# Noxary x268
+
+![x268](https://geekhack.org/index.php?action=dlattach;topic=96377.0;attach=198826;image)
+
+A fully customizable 65% keyboard.
+
+* Keyboard Maintainer: [Rozakiin](https://github.com/rozakiin)
+* Hardware Supported: x268 PCB
+ * rev1
+* Hardware Availability:
+ * [Noxary - 268](https://geekhack.org/index.php?topic=92066.0)
+ * [LZ - CLS ms](https://geekhack.org/index.php?topic=96377)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make noxary/x268: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/noxary/x268/rules.mk b/keyboards/noxary/x268/rules.mk
new file mode 100644
index 000000000..3c4a26ad1
--- /dev/null
+++ b/keyboards/noxary/x268/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 = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/noxary/x268/x268.c b/keyboards/noxary/x268/x268.c
new file mode 100644
index 000000000..3921270ac
--- /dev/null
+++ b/keyboards/noxary/x268/x268.c
@@ -0,0 +1,53 @@
+/* Copyright 2018 Rozakiin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "x268.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);
+}
+
+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);
+ }
+}
diff --git a/keyboards/noxary/x268/x268.h b/keyboards/noxary/x268/x268.h
new file mode 100644
index 000000000..9961b7dfd
--- /dev/null
+++ b/keyboards/noxary/x268/x268.h
@@ -0,0 +1,35 @@
+/* Copyright 2018 Rozakiin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 X268_H
+#define X268_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K114, K115, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, K315, \
+ K400, K401, K402, K406, K409, K410, K411, 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, K212, KC_NO, K214, K215 }, \
+ { K300, K301, 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, K411, K412, KC_NO, K414, K415 } \
+}
+
+#endif
diff --git a/keyboards/nyquist/eeprom-lefthand.eep b/keyboards/nyquist/eeprom-lefthand.eep
deleted file mode 100644
index b9666a74c..000000000
--- a/keyboards/nyquist/eeprom-lefthand.eep
+++ /dev/null
@@ -1,2 +0,0 @@
-:0B0000000000000000000000000001F4
-:00000001FF
diff --git a/keyboards/nyquist/eeprom-righthand.eep b/keyboards/nyquist/eeprom-righthand.eep
deleted file mode 100644
index 94cc5be7f..000000000
--- a/keyboards/nyquist/eeprom-righthand.eep
+++ /dev/null
@@ -1,2 +0,0 @@
-:0B0000000000000000000000000000F5
-:00000001FF
diff --git a/keyboards/nyquist/i2c.c b/keyboards/nyquist/i2c.c
deleted file mode 100644
index 084c890c4..000000000
--- a/keyboards/nyquist/i2c.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <util/twi.h>
-#include <avr/io.h>
-#include <stdlib.h>
-#include <avr/interrupt.h>
-#include <util/twi.h>
-#include <stdbool.h>
-#include "i2c.h"
-
-#ifdef USE_I2C
-
-// Limits the amount of we wait for any one i2c transaction.
-// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
-// 9 bits, a single transaction will take around 90μs to complete.
-//
-// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
-// poll loop takes at least 8 clock cycles to execute
-#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
-
-#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
-
-volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-static volatile uint8_t slave_buffer_pos;
-static volatile bool slave_has_register_set = false;
-
-// Wait for an i2c operation to finish
-inline static
-void i2c_delay(void) {
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-
- // easier way, but will wait slightly longer
- // _delay_us(100);
-}
-
-// Setup twi to run at 100kHz
-void i2c_master_init(void) {
- // no prescaler
- TWSR = 0;
- // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
- // Check datasheets for more info.
- TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
-}
-
-// Start a transaction with the given i2c slave address. The direction of the
-// transfer is set with I2C_READ and I2C_WRITE.
-// returns: 0 => success
-// 1 => error
-uint8_t i2c_master_start(uint8_t address) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
-
- i2c_delay();
-
- // check that we started successfully
- if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
- return 1;
-
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
- return 1; // slave did not acknowledge
- else
- return 0; // success
-}
-
-
-// Finish the i2c transaction.
-void i2c_master_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-}
-
-// Write one byte to the i2c slave.
-// returns 0 => slave ACK
-// 1 => slave NACK
-uint8_t i2c_master_write(uint8_t data) {
- TWDR = data;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- // check if the slave acknowledged us
- return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
-}
-
-// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
-// if ack=0 the acknowledge bit is not set.
-// returns: byte read from i2c device
-uint8_t i2c_master_read(int ack) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
-
- i2c_delay();
- return TWDR;
-}
-
-void i2c_reset_state(void) {
- TWCR = 0;
-}
-
-void i2c_slave_init(uint8_t address) {
- TWAR = address << 0; // slave i2c address
- // TWEN - twi enable
- // TWEA - enable address acknowledgement
- // TWINT - twi interrupt flag
- // TWIE - enable the twi interrupt
- TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
-}
-
-ISR(TWI_vect);
-
-ISR(TWI_vect) {
- uint8_t ack = 1;
- switch(TW_STATUS) {
- case TW_SR_SLA_ACK:
- // this device has been addressed as a slave receiver
- slave_has_register_set = false;
- break;
-
- case TW_SR_DATA_ACK:
- // this device has received data as a slave receiver
- // The first byte that we receive in this transaction sets the location
- // of the read/write location of the slaves memory that it exposes over
- // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
- // slave_buffer_pos after each write.
- if(!slave_has_register_set) {
- slave_buffer_pos = TWDR;
- // don't acknowledge the master if this memory loctaion is out of bounds
- if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
- ack = 0;
- slave_buffer_pos = 0;
- }
- slave_has_register_set = true;
- } else {
- i2c_slave_buffer[slave_buffer_pos] = TWDR;
- BUFFER_POS_INC();
- }
- break;
-
- case TW_ST_SLA_ACK:
- case TW_ST_DATA_ACK:
- // master has addressed this device as a slave transmitter and is
- // requesting data.
- TWDR = i2c_slave_buffer[slave_buffer_pos];
- BUFFER_POS_INC();
- break;
-
- case TW_BUS_ERROR: // something went wrong, reset twi state
- TWCR = 0;
- default:
- break;
- }
- // Reset everything, so we are ready for the next TWI interrupt
- TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
-}
-#endif
diff --git a/keyboards/nyquist/i2c.h b/keyboards/nyquist/i2c.h
deleted file mode 100644
index 43e596988..000000000
--- a/keyboards/nyquist/i2c.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef I2C_H
-#define I2C_H
-
-#include <stdint.h>
-
-#ifndef F_CPU
-#define F_CPU 16000000UL
-#endif
-
-#define I2C_READ 1
-#define I2C_WRITE 0
-
-#define I2C_ACK 1
-#define I2C_NACK 0
-
-#define SLAVE_BUFFER_SIZE 0x10
-
-// i2c SCL clock frequency
-#define SCL_CLOCK 100000L
-
-extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-void i2c_master_init(void);
-uint8_t i2c_master_start(uint8_t address);
-void i2c_master_stop(void);
-uint8_t i2c_master_write(uint8_t data);
-uint8_t i2c_master_read(int);
-void i2c_reset_state(void);
-void i2c_slave_init(uint8_t address);
-
-
-static inline unsigned char i2c_start_read(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_READ);
-}
-
-static inline unsigned char i2c_start_write(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_WRITE);
-}
-
-// from SSD1306 scrips
-extern unsigned char i2c_rep_start(unsigned char addr);
-extern void i2c_start_wait(unsigned char addr);
-extern unsigned char i2c_readAck(void);
-extern unsigned char i2c_readNak(void);
-extern unsigned char i2c_read(unsigned char ack);
-
-#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
-
-#endif
diff --git a/keyboards/nyquist/info.json b/keyboards/nyquist/info.json
index 0a038f6dd..295864cfc 100644
--- a/keyboards/nyquist/info.json
+++ b/keyboards/nyquist/info.json
@@ -7,6 +7,9 @@
"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":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}]
+ },
+ "LAYOUT_ortho_5x12": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}]
}
}
}
diff --git a/keyboards/nyquist/keymaps/DivergeJM/rules.mk b/keyboards/nyquist/keymaps/DivergeJM/rules.mk
index 654e82a10..2c26b47ea 100644
--- a/keyboards/nyquist/keymaps/DivergeJM/rules.mk
+++ b/keyboards/nyquist/keymaps/DivergeJM/rules.mk
@@ -29,6 +29,6 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no # Enable Tap Dance
diff --git a/keyboards/nyquist/keymaps/bramver/README.md b/keyboards/nyquist/keymaps/bramver/README.md
new file mode 100644
index 000000000..2768acdf7
--- /dev/null
+++ b/keyboards/nyquist/keymaps/bramver/README.md
@@ -0,0 +1,100 @@
+# Nyquist Layout - rev 02
+
+Standard qwerty layout.
+Limited emoji support and proper mouse settings.
+
+Mostly based off of my XD75 layout.
+
+## Keymap
+
+```
+
+/* Base
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | GEsc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | LOW | A | S | D | F | G | | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | Z | X | C | V | B | | N | M | , | . | / | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | EMO | Alt | GUI | SPCE |SP_LMS| |SP_RMS|SP_RMS| GUI | Alt | RAI | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+
+ /* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | GESC | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | \ | - | = | [ | ] | | [ | ] | - | = | \ | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | ^Z | ^X | ^C | ^V | | | Play | Vol+ | Vol- | Mute | Next | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+
+/* Raise
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | GESC | | | | | | | | = | / | * | - | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | F9 | F10 | F11 | F12 | | | | 7 | 8 | 9 | + | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F5 | F6 | F7 | F8 | | | | 4 | 5 | 6 | , | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | F1 | F2 | F3 | F4 | | | | 1 | 2 | 3 | . | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | Alt | GUI | | | | | 0 | GUI | Alt | | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+
+/* LMOUSE (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | GESC | | Home | End | PGUP | PGDN | | | | | | | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | WH_L | BTN1 | MS_U | BTN2 | WH_U | | | | | | | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | WH_R | MS_L | MS_D | MS_R | WH_D | | | | | | | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | LEFT | DOWN | UP |RIGHT | | | | | | | | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+
+/* RMOUSE (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | GESC | | | | | | | PGUP | PGDN | Home | End | | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | | | | | | | WH_U | BTN1 | MS_U | BTN2 | WH_L | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | WH_D | MS_L | MS_D | MS_R | WH_R | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | | | | | | | | LEFT | DOWN | UP |RIGHT | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+
+/* Emojis
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | GESC | | | | | | | RSET | | | | | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | CLAP | CUM | BNIS | BUTT | CAR | | FIRE | REDB | MONY | 100 | SOS | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | CELE | PRAY | NAIL | OK | THNK | | UNAM | HEYE | COOL | EYES | SMIR | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | TRIU | SCRM | VOMI | DTIV | EXPL | | HAIR | DANC | STRN | LEFT | RGHT | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+``` \ No newline at end of file
diff --git a/keyboards/nyquist/keymaps/bramver/config.h b/keyboards/nyquist/keymaps/bramver/config.h
new file mode 100644
index 000000000..c908386e2
--- /dev/null
+++ b/keyboards/nyquist/keymaps/bramver/config.h
@@ -0,0 +1,31 @@
+/* Copyright 2018 darm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define USE_SERIAL
+#define MASTER_LEFT
+
+#define TAPPING_TERM 200
+#define TAPPING_TOGGLE 2
+
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_INTERVAL 16
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_WHEEL_MAX_SPEED 8
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
+#define MOUSEKEY_WHEEL_DELAY 0
diff --git a/keyboards/nyquist/keymaps/bramver/keymap.c b/keyboards/nyquist/keymaps/bramver/keymap.c
new file mode 100644
index 000000000..c5eac853c
--- /dev/null
+++ b/keyboards/nyquist/keymaps/bramver/keymap.c
@@ -0,0 +1,281 @@
+/* Copyright 2018 darm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BASE 0
+#define _LOWER 1
+#define _RAISE 2
+#define _LMOUSE 3
+#define _RMOUSE 4
+#define _EMOJI 5
+
+enum emoji_map {
+ UNAM, // unamused 😒
+ HEYE, // smiling face with heart shaped eyes 😍
+ OK, // ok hand sign 👌
+ SMIR, // smirk 😏
+ PRAY, // pray 🙏
+ CELE, // celebration 🙌
+ COOL, // smile with sunglasses 😎
+ EYES, // eyes
+ THNK, // BIG THONK
+ NAIL, // Nailcare
+ SOS, // Vuile sos
+ REDB, // Red B
+ HNDR, // 100
+ MONY,
+ FIRE,
+ CAR,
+ BUTT,
+ BNIS,
+ CUM,
+ CLAP,
+ TRIU, // Fart from nose
+ SCRM,
+ VOMI,
+ DTIV, // Detective
+ EXPL, // Brainsplosion
+ HAIR, // Haircut
+ DANC, // Salsa dancer
+ STRN, // Stronk
+ LEFT, // Point Left
+ RGHT, // Point Right
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+ [UNAM] = 0x1F612,
+ [HEYE] = 0x1f60d,
+ [OK] = 0x1F44C,
+ [SMIR] = 0x1F60F,
+ [PRAY] = 0x1F64F,
+ [CELE] = 0x1F64C,
+ [COOL] = 0x1F60E,
+ [EYES] = 0x1F440,
+ [THNK] = 0x1F914,
+ [NAIL] = 0x1F485,
+ [SOS] = 0x1F198,
+ [REDB] = 0x1F171,
+ [HNDR] = 0x1F4AF,
+ [MONY] = 0x1F480,
+ [FIRE] = 0x1F525,
+ [CAR] = 0x1F697,
+ [BUTT] = 0x1F351,
+ [BNIS] = 0x1F346,
+ [CUM] = 0x1F4A6,
+ [CLAP] = 0x1F44F,
+ [TRIU] = 0x1F624,
+ [SCRM] = 0x1F631,
+ [VOMI] = 0x1F92E,
+ [DTIV] = 0x1F575,
+ [EXPL] = 0x1F92F,
+ [HAIR] = 0x2640,
+ [DANC] = 0x1F483,
+ [STRN] = 0x1F4AA,
+ [LEFT] = 0x1F448,
+ [RGHT] = 0x1F449,
+};
+
+enum custom_keycodes {
+ CTRL_Z = SAFE_RANGE,
+ CTRL_X,
+ CTRL_C,
+ CTRL_V
+};
+
+// Enable these functions using FUNC(n) macro.
+// const uint16_t PROGMEM fn_actions[] = { //ACTION_LAYER_TAP_TOGGLE requires that number of taps be defined in *config.h* - default set to 5
+// [0] = , //Hold for momentary LMouse layer, Tap for Space,
+// [1] = , //Hold for momentary RMouse layer, Tap for Space,
+// [2] = , //Hold for momentary Lower
+// [3] = , //Hold for momentary Raise
+// [4] = , //Hold for momentary Emoji
+// };
+
+#define SP_LMS LT(_LMOUSE, KC_SPC)
+#define SP_RMS LT(_RMOUSE, KC_SPC)
+#define LOW TT(_LOWER)
+#define RAI TT(_RAISE)
+#define EMO TT(_EMOJI)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Base
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | GEsc | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | LOW | A | S | D | F | G | | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | Z | X | C | V | B | | N | M | , | . | / | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | EMO | Alt | GUI | SPCE |SP_LMS| |SP_RMS|SP_RMS| GUI | Alt | RAI | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_BASE] = LAYOUT( \
+ KC_GESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , /**/ KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC , \
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , /**/ KC_Y , KC_U , KC_I , KC_O , KC_P , KC_ENT , \
+ LOW , 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 , EMO , KC_LALT , KC_LGUI , KC_SPC , SP_LMS , /**/ SP_RMS , KC_SPC , KC_RGUI , KC_RALT , RAI , KC_RCTL \
+ ),
+
+
+ /* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | GESC | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | ! | @ | # | $ | % | | ^ | & | * | ( | ) | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | \ | - | = | [ | ] | | [ | ] | - | = | \ | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | ^Z | ^X | ^C | ^V | | | Play | Vol+ | Vol- | Mute | Next | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_LOWER] = LAYOUT( \
+ TO(0) , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , /**/ KC_CIRC , KC_AMPR , KC_ASTR , KC_LPRN , KC_RPRN , _______ , \
+ _______ , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , /**/ KC_CIRC , KC_AMPR , KC_ASTR , KC_LPRN , KC_RPRN , _______ , \
+ _______ , KC_RCBR , KC_MINS , KC_EQL , KC_LBRC , KC_RBRC , /**/ KC_LBRC , KC_RBRC , KC_MINS , KC_EQL , KC_BSLS , KC_DEL , \
+ _______ , CTRL_Z , CTRL_X , CTRL_C , CTRL_V , XXXXXXX , /**/ KC_MPLY , KC_VOLU , KC_VOLD , KC_MUTE , KC_MNXT , _______ , \
+ _______ , XXXXXXX , _______ , _______ , _______ , XXXXXXX , /**/ XXXXXXX , _______ , _______ , _______ , XXXXXXX , _______ \
+ ),
+
+ /* Raise
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | GESC | | | | | | | | = | / | * | - | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | F9 | F10 | F11 | F12 | | | | 7 | 8 | 9 | + | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F5 | F6 | F7 | F8 | | | | 4 | 5 | 6 | , | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | F1 | F2 | F3 | F4 | | | | 1 | 2 | 3 | . | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | Alt | GUI | | | | | 0 | GUI | Alt | | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+ [_RAISE] = LAYOUT( \
+ TO(0) , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ XXXXXXX , KC_EQL , KC_SLSH , KC_ASTR , KC_MINS , _______ , \
+ _______ , KC_F9 , KC_F10 , KC_F11 , KC_F12 , XXXXXXX , /**/ XXXXXXX , KC_7 , KC_8 , KC_9 , KC_PLUS , _______ , \
+ XXXXXXX , KC_F5 , KC_F6 , KC_F7 , KC_F8 , XXXXXXX , /**/ XXXXXXX , KC_4 , KC_5 , KC_6 , KC_COMM , KC_DEL , \
+ _______ , KC_F1 , KC_F2 , KC_F3 , KC_F4 , XXXXXXX , /**/ XXXXXXX , KC_1 , KC_2 , KC_3 , KC_DOT , _______ , \
+ _______ , XXXXXXX , _______ , _______ , _______ , XXXXXXX , /**/ XXXXXXX , KC_0 , _______ , _______ , _______ , _______ \
+ ),
+
+ /* LMOUSE (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | GESC | | Home | End | PGUP | PGDN | | | | | | | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | WH_L | BTN1 | MS_U | BTN2 | WH_U | | | | | | | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | WH_R | MS_L | MS_D | MS_R | WH_D | | | | | | | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | LEFT | DOWN | UP |RIGHT | | | | | | | | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+ [_LMOUSE] = LAYOUT( \
+ TO(0) , XXXXXXX , KC_HOME , KC_END , KC_PGUP , KC_PGDN , /**/ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , _______ , \
+ _______ , KC_WH_L , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_U , /**/ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , _______ , \
+ XXXXXXX , KC_WH_R , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_D , /**/ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , KC_DEL , \
+ _______ , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , XXXXXXX , /**/ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , _______ , \
+ _______ , XXXXXXX , _______ , _______ , _______ , _______ , /**/ XXXXXXX , _______ , _______ , _______ , XXXXXXX , _______ \
+ ),
+
+ /* RMOUSE (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | GESC | | | | | | | PGUP | PGDN | Home | End | | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | | | | | | | WH_U | BTN1 | MS_U | BTN2 | WH_L | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | WH_D | MS_L | MS_D | MS_R | WH_R | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | | | | | | | | LEFT | DOWN | UP |RIGHT | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+ [_RMOUSE] = LAYOUT( \
+ TO(0) , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ KC_PGUP , KC_PGDN , KC_HOME , KC_END , XXXXXXX , _______ , \
+ _______ , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ KC_WH_U , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_L , _______ , \
+ XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ KC_WH_D , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_R , KC_DEL , \
+ _______ , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ XXXXXXX , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , _______ , \
+ _______ , XXXXXXX , _______ , _______ , _______ , XXXXXXX , /**/ _______ , _______ , _______ , _______ , XXXXXXX , _______ \
+ ),
+
+ /* Emojis
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | GESC | | | | | | | RSET | | | | | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | CLAP | CUM | BNIS | BUTT | CAR | | FIRE | REDB | MONY | 100 | SOS | Entr |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | CELE | PRAY | NAIL | OK | THNK | | UNAM | HEYE | COOL | EYES | SMIR | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shft | TRIU | SCRM | VOMI | DTIV | EXPL | | HAIR | DANC | STRN | LEFT | RGHT | Shft |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | | Alt | GUI | | | | | | GUI | Alt | | Ctrl |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+
+ [_EMOJI] = LAYOUT( \
+ TO(0) , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , /**/ RESET , XXXXXXX , XXXXXXX , XXXXXXX , XXXXXXX , _______ , \
+ _______ , X(CLAP) , X(CUM) , X(BNIS) , X(BUTT) , X(CAR) , /**/ X(FIRE) , X(REDB) , X(MONY) , X(HNDR) , X(SOS) , _______ , \
+ XXXXXXX , X(CELE) , X(PRAY) , X(NAIL) , X(OK) , X(THNK) , /**/ X(UNAM) , X(HEYE) , X(COOL) , X(EYES) , X(SMIR) , KC_DEL , \
+ _______ , X(TRIU) , X(SCRM) , X(VOMI) , X(DTIV) , X(EXPL) , /**/ X(HAIR) , X(DANC) , X(STRN) , X(LEFT) , X(RGHT) , _______ , \
+ _______ , _______ , _______ , _______ , _______ , XXXXXXX , /**/ XXXXXXX , _______ , _______ , _______ , XXXXXXX , _______ \
+ ),
+
+};
+
+void matrix_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ if (record->event.pressed) {
+ switch(keycode) {
+ case CTRL_Z:
+ SEND_STRING(SS_LCTRL("z"));
+ return false;
+ case CTRL_X:
+ SEND_STRING(SS_LCTRL("x"));
+ return false;
+ case CTRL_C:
+ SEND_STRING(SS_LCTRL("c"));
+ return false;
+ case CTRL_V:
+ SEND_STRING(SS_LCTRL("v"));
+ return false;
+ }
+ }
+
+ return true;
+}
diff --git a/keyboards/nyquist/keymaps/bramver/rules.mk b/keyboards/nyquist/keymaps/bramver/rules.mk
new file mode 100644
index 000000000..d211d7b4c
--- /dev/null
+++ b/keyboards/nyquist/keymaps/bramver/rules.mk
@@ -0,0 +1,6 @@
+# Build options
+MOUSEKEY_ENABLE = yes # Emulates mouse key using keypresses
+EXTRAKEY_ENABLE = yes # Use system and audio control key codes
+TAP_DANCE_ENABLE = no # Use multi-tap features
+UNICODEMAP_ENABLE = yes # Emojify me pls
+NKRO_ENABLE = yes
diff --git a/keyboards/nyquist/keymaps/danielhklein/rules.mk b/keyboards/nyquist/keymaps/danielhklein/rules.mk
index 0b540a471..12ad2fec5 100644
--- a/keyboards/nyquist/keymaps/danielhklein/rules.mk
+++ b/keyboards/nyquist/keymaps/danielhklein/rules.mk
@@ -29,6 +29,6 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
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 this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no # Enable Tap Dance
diff --git a/keyboards/nyquist/keymaps/default/config.h b/keyboards/nyquist/keymaps/default/config.h
index c4604af43..0fa606f29 100644
--- a/keyboards/nyquist/keymaps/default/config.h
+++ b/keyboards/nyquist/keymaps/default/config.h
@@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -37,5 +34,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-
-#endif
diff --git a/keyboards/nyquist/keymaps/default/rules.mk b/keyboards/nyquist/keymaps/default/rules.mk
index 1e5761278..1e3cebb14 100644
--- a/keyboards/nyquist/keymaps/default/rules.mk
+++ b/keyboards/nyquist/keymaps/default/rules.mk
@@ -1,5 +1 @@
RGBLIGHT_ENABLE = yes
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/nyquist/keymaps/hexwire/config.h b/keyboards/nyquist/keymaps/hexwire/config.h
index 8b9c3ea2b..4f1901b5d 100644
--- a/keyboards/nyquist/keymaps/hexwire/config.h
+++ b/keyboards/nyquist/keymaps/hexwire/config.h
@@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -39,5 +36,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-
-#endif
diff --git a/keyboards/nyquist/keymaps/hexwire/rules.mk b/keyboards/nyquist/keymaps/hexwire/rules.mk
index 1e5761278..a81250cdf 100644
--- a/keyboards/nyquist/keymaps/hexwire/rules.mk
+++ b/keyboards/nyquist/keymaps/hexwire/rules.mk
@@ -1,5 +1,2 @@
RGBLIGHT_ENABLE = yes
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/nyquist/keymaps/kim-kim/keymap.c b/keyboards/nyquist/keymaps/kim-kim/keymap.c
index c8b081b25..4051f296e 100644
--- a/keyboards/nyquist/keymaps/kim-kim/keymap.c
+++ b/keyboards/nyquist/keymaps/kim-kim/keymap.c
@@ -53,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LW] = LAYOUT( \
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, _______, _______, _______, \
_______, KC_MPRV, KC_MNXT, KC_VOLU, RGB_TOG, KC_F11, _______, _______, _______, _______, _______, _______, \
- _______, KC_MPLY, KC_MSTP, KC_VOLD, RGB_SMOD, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_MPLY, KC_MSTP, KC_VOLD, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
),
diff --git a/keyboards/nyquist/keymaps/losinggeneration/rules.mk b/keyboards/nyquist/keymaps/losinggeneration/rules.mk
index 1728afd85..ea2b7165d 100644
--- a/keyboards/nyquist/keymaps/losinggeneration/rules.mk
+++ b/keyboards/nyquist/keymaps/losinggeneration/rules.mk
@@ -10,7 +10,7 @@ COMMAND_ENABLE = no # Commands for debug and configuration
CONSOLE_ENABLE = no # Console for debug(+400)
MIDI_ENABLE = no # MIDI controls
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
ifndef QUANTUM_DIR
include ../../../../Makefile
diff --git a/keyboards/nyquist/keymaps/mtdjr/config.h b/keyboards/nyquist/keymaps/mtdjr/config.h
new file mode 100644
index 000000000..0fa606f29
--- /dev/null
+++ b/keyboards/nyquist/keymaps/mtdjr/config.h
@@ -0,0 +1,36 @@
+/*
+Copyright 2017 Danny Nguyen <danny@hexwire.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/nyquist/keymaps/mtdjr/keymap.c b/keyboards/nyquist/keymaps/mtdjr/keymap.c
new file mode 100644
index 000000000..668e7964b
--- /dev/null
+++ b/keyboards/nyquist/keymaps/mtdjr/keymap.c
@@ -0,0 +1,64 @@
+#include QMK_KEYBOARD_H
+#include "mtdjr.h"
+
+extern keymap_config_t keymap_config;
+
+
+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 ,QUOT,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ RASE, A , S , D , F , G , H , J , K , L ,SCLN, ENT,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ LSFT, Z , X , C , V , B , N , M ,COMM, DOT,SLSH,xxxx,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ LOWR,LCTL,LALT,LGUI, SPC, SPC, SPC, SPC,LEFT,DOWN, UP ,RGHT
+// '-----------------------------' '-----------------------------'
+),
+
+ [_LOWER] = LAYOUT_kc(
+// ,-----------------------------. .-----------------------------.
+ TILD,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,UNDS,PLUS, DEL,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,LBRC,RBRC,BSLS,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,xxxx,xxxx, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ xxxx,UNDO, CUT,XCPY,XINS,xxxx, xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , ,MNXT,VOLD,VOLU,MPLY
+// '-----------------------------' '-----------------------------'
+),
+
+ [_RAISE] = LAYOUT_kc(
+// ,-----------------------------. .-----------------------------.
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,MINS, EQL, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,LCBR,RCBR,PIPE,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,xxxx,xxxx, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ xxxx,xxxx,xxxx,xxxx,xxxx,xxxx, xxxx,xxxx,xxxx,xxxx,xxxx,xxxx,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ , , , , , , , ,MNXT,VOLD,VOLU,MPLY
+// '-----------------------------' '-----------------------------'
+),
+
+ [_ADJUST] = LAYOUT_kc(
+// ,-----------------------------. .-----------------------------.
+ xxxx,ROOT,PPLY,PSEF,xxxx,xxxx, F1 , F2 , F3 , F4 , F5 , F6 ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ xxxx,xxxx,xxxx,xxxx, RST,xxxx, F7 , F8 , F9 , F10, F11, F12,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ , RGB,RHUI,RSAI,RVAI, MOD, xxxx,xxxx,xxxx,xxxx,xxxx, ,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ xxxx,RBTH,RHUD,RSAD,RVAD,RMOD, xxxx,xxxx,xxxx,xxxx,xxxx, BLB,
+// |----+----+----+----+----+----| |----+----+----+----+----+----|
+ ,xxxx,xxxx,xxxx, , , , ,BLOF, BLD, BLI,BLON
+// '-----------------------------' '-----------------------------'
+)
+
+};
diff --git a/keyboards/nyquist/keymaps/mtdjr/rules.mk b/keyboards/nyquist/keymaps/mtdjr/rules.mk
new file mode 100644
index 000000000..d7463419b
--- /dev/null
+++ b/keyboards/nyquist/keymaps/mtdjr/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/nyquist/keymaps/yshrsmz/config.h b/keyboards/nyquist/keymaps/yshrsmz/config.h
new file mode 100644
index 000000000..5cbe3b701
--- /dev/null
+++ b/keyboards/nyquist/keymaps/yshrsmz/config.h
@@ -0,0 +1,39 @@
+/*
+Copyright 2017 Danny Nguyen <danny@hexwire.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* auto shift config */
+#define AUTO_SHIFT_TIMEOUT 140
+
+/* Select hand configuration */
+
+#define MASTER_LEFT
+// #define _MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/nyquist/keymaps/yshrsmz/keymap.c b/keyboards/nyquist/keymaps/yshrsmz/keymap.c
new file mode 100644
index 000000000..78070279d
--- /dev/null
+++ b/keyboards/nyquist/keymaps/yshrsmz/keymap.c
@@ -0,0 +1,195 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _LOWER 1
+#define _RAISE 2
+#define _FUNC 3
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ FUNC,
+ ADJUST,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | = |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | - |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | GUI |Shift |Adjust| Fn |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, \
+ KC_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 , \
+ FUNC, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_RGUI, KC_RSFT, ADJUST, FUNC \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* FUNC
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ` | F1 | F2 | F3 | F4 | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F5 | F6 | F7 | F8 | | LEFT | DOWN | UP |RIGHT | PGUP | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F9 | F10 | F11 | F12 | | HOME | END |Alt+← |Alt+→ | PGDN | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_FUNC] = LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, KC_F5, KC_F6, KC_F7, KC_F8, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PGUP, _______, \
+ _______, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_HOME, KC_END, LALT(KC_LEFT),LALT(KC_RGHT), KC_PGDN, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset|RGB Tg|RGB Md|Hue Up|Hue Dn|Sat Up|Sat Dn|Val Up|Val Dn| | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, RESET , RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+#endif
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case FUNC:
+ if (record->event.pressed) {
+ layer_on(_FUNC);
+ } else {
+ layer_off(_FUNC);
+ }
+ 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/nyquist/keymaps/yshrsmz/rules.mk b/keyboards/nyquist/keymaps/yshrsmz/rules.mk
new file mode 100644
index 000000000..c9383ab8d
--- /dev/null
+++ b/keyboards/nyquist/keymaps/yshrsmz/rules.mk
@@ -0,0 +1 @@
+AUTO_SHIFT_ENABLE = yes
diff --git a/keyboards/nyquist/matrix.c b/keyboards/nyquist/matrix.c
deleted file mode 100644
index 3cdad4adb..000000000
--- a/keyboards/nyquist/matrix.c
+++ /dev/null
@@ -1,497 +0,0 @@
-/*
-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/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "split_util.h"
-#include "pro_micro.h"
-#include "config.h"
-#include "timer.h"
-
-#ifdef BACKLIGHT_ENABLE
- #include "backlight.h"
- extern backlight_config_t backlight_config;
-#endif
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else // USE_SERIAL
-# include "serial.h"
-#endif
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-
-#if (DEBOUNCING_DELAY > 0)
- static uint16_t debouncing_time;
- static bool debouncing = false;
-#endif
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#else
-# error "Currently only supports 8 COLS"
-#endif
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-#define ERROR_DISCONNECT_COUNT 5
-
-#define SERIAL_LED_ADDR 0x00
-
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
-
-static uint8_t error_count = 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];
-
-#if (DIODE_DIRECTION == COL2ROW)
- static void init_cols(void);
- static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
- static void unselect_rows(void);
- static void select_row(uint8_t row);
- static void unselect_row(uint8_t row);
-#elif (DIODE_DIRECTION == ROW2COL)
- static void init_rows(void);
- static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
- static void unselect_cols(void);
- static void unselect_col(uint8_t col);
- static void select_col(uint8_t col);
-#endif
-
-__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)
-{
-#ifdef DISABLE_JTAG
- // JTAG disable for PORT F. write JTD bit twice within four cycles.
- MCUCR |= (1<<JTD);
- MCUCR |= (1<<JTD);
-#endif
-
- debug_enable = true;
- debug_matrix = true;
- debug_mouse = true;
- // initialize row and col
-#if (DIODE_DIRECTION == COL2ROW)
- unselect_rows();
- init_cols();
-#elif (DIODE_DIRECTION == ROW2COL)
- unselect_cols();
- init_rows();
-#endif
-
- TX_RX_LED_INIT;
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-
-}
-
-uint8_t _matrix_scan(void)
-{
- int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
-#if (DIODE_DIRECTION == COL2ROW)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
-
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-
-# else
- read_cols_on_row(matrix+offset, current_row);
-# endif
-
- }
-
-#elif (DIODE_DIRECTION == ROW2COL)
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_rows_on_col(matrix+offset, current_col);
-# endif
-
- }
-#endif
-
-# if (DEBOUNCING_DELAY > 0)
- if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- matrix[i+offset] = matrix_debouncing[i+offset];
- }
- debouncing = false;
- }
-# endif
-
- return 1;
-}
-
-#ifdef USE_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;
-
-#ifdef BACKLIGHT_ENABLE
- // Write backlight level for slave to read
- err = i2c_master_write(backlight_config.enable ? backlight_config.level : 0);
-#else
- // Write zero, so our byte index is the same
- err = i2c_master_write(0x00);
-#endif
- 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(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
-
- if (serial_update_buffers()) {
- return 1;
- }
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_slave_buffer[i];
- }
-
-#ifdef BACKLIGHT_ENABLE
- // Write backlight level for slave to read
- serial_master_buffer[SERIAL_LED_ADDR] = backlight_config.enable ? backlight_config.level : 0;
-#endif
- return 0;
-}
-#endif
-
-uint8_t matrix_scan(void)
-{
- uint8_t ret = _matrix_scan();
-
-#ifdef USE_I2C
- if( i2c_transaction() ) {
-#else // USE_SERIAL
- if( serial_transaction() ) {
-#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_I2C
-#ifdef BACKLIGHT_ENABLE
- // Read backlight level sent from master and update level on slave
- backlight_set(i2c_slave_buffer[0]);
-#endif
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- i2c_slave_buffer[i+1] = matrix[offset+i];
- }
-#else // USE_SERIAL
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_slave_buffer[i] = matrix[offset+i];
- }
-
-#ifdef BACKLIGHT_ENABLE
- // Read backlight level sent from master and update level on slave
- backlight_set(serial_master_buffer[SERIAL_LED_ADDR]);
-#endif
-#endif
-}
-
-bool matrix_is_modified(void)
-{
-#if (DEBOUNCING_DELAY > 0)
- if (debouncing) return false;
-#endif
- return true;
-}
-
-inline
-bool matrix_is_on(uint8_t row, uint8_t col)
-{
- return (matrix[row] & ((matrix_row_t)1<<col));
-}
-
-inline
-matrix_row_t matrix_get_row(uint8_t row)
-{
- return matrix[row];
-}
-
-void matrix_print(void)
-{
- print("\nr/c 0123456789ABCDEF\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- phex(row); print(": ");
- pbin_reverse16(matrix_get_row(row));
- print("\n");
- }
-}
-
-uint8_t matrix_key_count(void)
-{
- uint8_t count = 0;
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- count += bitpop16(matrix[i]);
- }
- return count;
-}
-
-#if (DIODE_DIRECTION == COL2ROW)
-
-static void init_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin = col_pins[col_index];
- uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-static void select_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#elif (DIODE_DIRECTION == ROW2COL)
-
-static void init_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
- {
-
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[row_index];
-
- // Check row pin state
- if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
- {
- // Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-static void select_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#endif
diff --git a/keyboards/nyquist/nyquist.h b/keyboards/nyquist/nyquist.h
index d401a45f7..9a3e99647 100644
--- a/keyboards/nyquist/nyquist.h
+++ b/keyboards/nyquist/nyquist.h
@@ -1,5 +1,4 @@
-#ifndef NYQUIST_H
-#define NYQUIST_H
+#pragma once
#ifdef KEYBOARD_nyquist_rev1
#include "rev1.h"
@@ -7,6 +6,9 @@
#ifdef KEYBOARD_nyquist_rev2
#include "rev2.h"
#endif
+#ifdef KEYBOARD_nyquist_rev3
+ #include "rev3.h"
+#endif
#include "quantum.h"
@@ -26,4 +28,4 @@
KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##L45, KC_##R40, KC_##R41, KC_##R42, KC_##R43, KC_##R44, KC_##R45 \
)
-#endif
+#define LAYOUT_kc_ortho_5x12 LAYOUT_kc
diff --git a/keyboards/nyquist/rev1/config.h b/keyboards/nyquist/rev1/config.h
index 61bcb80e2..892054b73 100644
--- a/keyboards/nyquist/rev1/config.h
+++ b/keyboards/nyquist/rev1/config.h
@@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef REV1_CONFIG_H
-#define REV1_CONFIG_H
-
-#include QMK_KEYBOARD_CONFIG_H
+#pragma once
/* USB Device descriptor parameter */
#define VENDOR_ID 0xCB10
@@ -49,6 +46,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -61,10 +61,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 16 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
@@ -83,5 +81,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/nyquist/rev1/rev1.h b/keyboards/nyquist/rev1/rev1.h
index 2d4c9f73e..6d3a23383 100644
--- a/keyboards/nyquist/rev1/rev1.h
+++ b/keyboards/nyquist/rev1/rev1.h
@@ -1,5 +1,4 @@
-#ifndef REV1_H
-#define REV1_H
+#pragma once
#include "nyquist.h"
@@ -64,5 +63,3 @@
#endif
#define LAYOUT_ortho_5x12 LAYOUT
-
-#endif
diff --git a/keyboards/nyquist/rev2/config.h b/keyboards/nyquist/rev2/config.h
index 75d2e9393..21aea0aad 100644
--- a/keyboards/nyquist/rev2/config.h
+++ b/keyboards/nyquist/rev2/config.h
@@ -15,10 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef REV2_CONFIG_H
-#define REV2_CONFIG_H
-
-#include QMK_KEYBOARD_CONFIG_H
+#pragma once
/* USB Device descriptor parameter */
#define VENDOR_ID 0xCB10
@@ -46,6 +43,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -58,7 +58,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 16 // Number of LEDs
/* Backlight LEDs */
@@ -82,5 +82,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/nyquist/rev2/rev2.h b/keyboards/nyquist/rev2/rev2.h
index 1eec5d2be..6d3a23383 100644
--- a/keyboards/nyquist/rev2/rev2.h
+++ b/keyboards/nyquist/rev2/rev2.h
@@ -1,5 +1,4 @@
-#ifndef REV2_H
-#define REV2_H
+#pragma once
#include "nyquist.h"
@@ -64,5 +63,3 @@
#endif
#define LAYOUT_ortho_5x12 LAYOUT
-
-#endif
diff --git a/keyboards/nyquist/rev3/config.h b/keyboards/nyquist/rev3/config.h
new file mode 100644
index 000000000..8054ba79c
--- /dev/null
+++ b/keyboards/nyquist/rev3/config.h
@@ -0,0 +1,84 @@
+/*
+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
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCB10
+#define PRODUCT_ID 0x1156
+#define DEVICE_VER 0x0300
+#define MANUFACTURER Keebio
+#define PRODUCT The Nyquist Keyboard
+#define DESCRIPTION Split 60 percent ortholinear keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { F0, F5, D7, F6, F7 }
+#define MATRIX_COL_PINS { F1, F4, B7, D2, D3, D4 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN B4
+#define RGBLIGHT_TIMER
+#define RGBLED_NUM 12
+
+/* Backlight LEDs */
+#define BACKLIGHT_PIN D5
+#define BACKLIGHT_LEVELS 7
+
+/*
+ * 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/nyquist/rev3/rev3.c b/keyboards/nyquist/rev3/rev3.c
new file mode 100644
index 000000000..34500fb10
--- /dev/null
+++ b/keyboards/nyquist/rev3/rev3.c
@@ -0,0 +1,21 @@
+#include "rev3.h"
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
diff --git a/keyboards/nyquist/rev3/rev3.h b/keyboards/nyquist/rev3/rev3.h
new file mode 100644
index 000000000..3a3141f6e
--- /dev/null
+++ b/keyboards/nyquist/rev3/rev3.h
@@ -0,0 +1,63 @@
+#pragma once
+
+#include "nyquist.h"
+#include "quantum.h"
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+#ifndef FLIP_HALF
+// Standard Keymap
+// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
+ L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { L40, L41, L42, L43, L44, L45 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { R35, R34, R33, R32, R31, R30 }, \
+ { R45, R44, R43, R42, R41, R40 } \
+ }
+#else
+// Keymap with right side flipped
+// (TRRS jack on both halves are to the right)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, \
+ L40, L41, L42, L43, L44, L45, R40, R41, R42, R43, R44, R45 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { L40, L41, L42, L43, L44, L45 }, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ { R40, R41, R42, R43, R44, R45 } \
+ }
+#endif
+
+#define LAYOUT_ortho_5x12 LAYOUT
+
diff --git a/keyboards/nyquist/rev3/rules.mk b/keyboards/nyquist/rev3/rules.mk
new file mode 100644
index 000000000..bd518d8f2
--- /dev/null
+++ b/keyboards/nyquist/rev3/rules.mk
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/nyquist/rules.mk b/keyboards/nyquist/rules.mk
index e8f184041..5313b8502 100644
--- a/keyboards/nyquist/rules.mk
+++ b/keyboards/nyquist/rules.mk
@@ -1,8 +1,3 @@
-SRC += matrix.c \
- i2c.c \
- split_util.c \
- serial.c
-
# MCU name
#MCU = at90usb1287
MCU = atmega32u4
@@ -41,9 +36,13 @@ F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
-# different sizes, comment this out, and the correct address will be loaded
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
-BOOTLOADER = caterina
+ifeq ($(strip $(KEYBOARD)), nyquist/rev3)
+ BOOTLOADER = dfu
+else
+ BOOTLOADER = caterina
+endif
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
@@ -63,13 +62,10 @@ 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
-USE_I2C = yes
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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
-CUSTOM_MATRIX = yes
-
+SPLIT_KEYBOARD = yes
LAYOUTS = ortho_5x12
-
DEFAULT_FOLDER = nyquist/rev2
diff --git a/keyboards/nyquist/serial.c b/keyboards/nyquist/serial.c
deleted file mode 100644
index 74bcbb6bf..000000000
--- a/keyboards/nyquist/serial.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * WARNING: be careful changing this code, it is very timing dependent
- */
-
-#ifndef F_CPU
-#define F_CPU 16000000
-#endif
-
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <stdbool.h>
-#include "serial.h"
-
-#ifndef USE_I2C
-
-// Serial pulse period in microseconds. Its probably a bad idea to lower this
-// value.
-#define SERIAL_DELAY 24
-
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
-
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
-
-inline static
-void serial_delay(void) {
- _delay_us(SERIAL_DELAY);
-}
-
-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(void) {
- SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-inline static
-uint8_t serial_read_pin(void) {
- return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
-}
-
-inline static
-void serial_low(void) {
- SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
-}
-
-inline static
-void serial_high(void) {
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-void serial_master_init(void) {
- serial_output();
- serial_high();
-}
-
-void serial_slave_init(void) {
- serial_input();
-
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
-}
-
-// Used by the master to synchronize timing with the slave.
-static
-void sync_recv(void) {
- serial_input();
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
- while (!serial_read_pin());
- serial_delay();
-}
-
-// Used by the slave to send a synchronization signal to the master.
-static
-void sync_send(void) {
- serial_output();
-
- serial_low();
- serial_delay();
-
- serial_high();
-}
-
-// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
- serial_input();
- for ( uint8_t i = 0; i < 8; ++i) {
- byte = (byte << 1) | serial_read_pin();
- serial_delay();
- _delay_us(1);
- }
-
- return byte;
-}
-
-// Sends a byte with MSB ordering
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 8;
- serial_output();
- while( b-- ) {
- if(data & (1 << b)) {
- serial_high();
- } else {
- serial_low();
- }
- serial_delay();
- }
-}
-
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- sync_send();
-
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_slave_buffer[i]);
- sync_send();
- checksum += serial_slave_buffer[i];
- }
- serial_write_byte(checksum);
- sync_send();
-
- // wait for the sync to finish sending
- serial_delay();
-
- // read the middle of pulses
- _delay_us(SERIAL_DELAY/2);
-
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_master_buffer[i] = serial_read_byte();
- sync_send();
- checksum_computed += serial_master_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_send();
-
- serial_input(); // end transaction
-
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
- } else {
- status &= ~SLAVE_DATA_CORRUPT;
- }
-}
-
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
-}
-
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
-//
-// Returns:
-// 0 => no error
-// 1 => slave did not respond
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
- cli();
-
- // signal to the slave that we want to start a transaction
- serial_output();
- serial_low();
- _delay_us(1);
-
- // wait for the slaves response
- serial_input();
- serial_high();
- _delay_us(SERIAL_DELAY);
-
- // check if the slave is present
- if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
- sei();
- return 1;
- }
-
- // if the slave is present syncronize with it
- sync_recv();
-
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_slave_buffer[i] = serial_read_byte();
- sync_recv();
- checksum_computed += serial_slave_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_recv();
-
- if (checksum_computed != checksum_received) {
- sei();
- return 1;
- }
-
- uint8_t checksum = 0;
- // send data to the slave
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_master_buffer[i]);
- sync_recv();
- checksum += serial_master_buffer[i];
- }
- serial_write_byte(checksum);
- sync_recv();
-
- // always, release the line when not in use
- serial_output();
- serial_high();
-
- sei();
- return 0;
-}
-
-#endif
diff --git a/keyboards/nyquist/serial.h b/keyboards/nyquist/serial.h
deleted file mode 100644
index 15fe4db7b..000000000
--- a/keyboards/nyquist/serial.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef MY_SERIAL_H
-#define MY_SERIAL_H
-
-#include "config.h"
-#include <stdbool.h>
-
-/* TODO: some defines for interrupt setup */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
-
-// Buffers for master - slave communication
-extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
-extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
-
-void serial_master_init(void);
-void serial_slave_init(void);
-int serial_update_buffers(void);
-bool serial_slave_data_corrupt(void);
-
-#endif
diff --git a/keyboards/nyquist/split_util.c b/keyboards/nyquist/split_util.c
deleted file mode 100644
index 346cbc908..000000000
--- a/keyboards/nyquist/split_util.c
+++ /dev/null
@@ -1,86 +0,0 @@
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/power.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/eeprom.h>
-#include "split_util.h"
-#include "matrix.h"
-#include "keyboard.h"
-#include "config.h"
-#include "timer.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else
-# include "serial.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_I2C
- i2c_master_init();
-#ifdef SSD1306OLED
- matrix_master_OLED_init ();
-#endif
-#else
- serial_master_init();
-#endif
-}
-
-static void keyboard_slave_setup(void) {
- timer_init();
-#ifdef USE_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();
-}
-
-void keyboard_slave_loop(void) {
- matrix_init();
-
- while (1) {
- matrix_slave_scan();
- }
-}
-
-// this code runs before the usb and keyboard is initialized
-void matrix_setup(void) {
- split_keyboard_setup();
-
- if (!has_usb()) {
- keyboard_slave_loop();
- }
-}
diff --git a/keyboards/nyquist/split_util.h b/keyboards/nyquist/split_util.h
deleted file mode 100644
index 595a0659e..000000000
--- a/keyboards/nyquist/split_util.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef SPLIT_KEYBOARD_UTIL_H
-#define SPLIT_KEYBOARD_UTIL_H
-
-#include <stdbool.h>
-#include "eeconfig.h"
-
-#define SLAVE_I2C_ADDRESS 0x32
-
-extern volatile bool isLeftHand;
-
-// slave version of matix scan, defined in matrix.c
-void matrix_slave_scan(void);
-
-void split_keyboard_setup(void);
-bool has_usb(void);
-void keyboard_slave_loop(void);
-
-void matrix_master_OLED_init (void);
-
-#endif
diff --git a/keyboards/octagon/octagon.c b/keyboards/octagon/octagon.c
deleted file mode 100644
index 6eb9e73b2..000000000
--- a/keyboards/octagon/octagon.c
+++ /dev/null
@@ -1 +0,0 @@
-#include "octagon.h"
diff --git a/keyboards/octagon/octagon.h b/keyboards/octagon/octagon.h
deleted file mode 100644
index d91da2eda..000000000
--- a/keyboards/octagon/octagon.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef OCTAGON_H
-#define OCTAGON_H
-
-#include "quantum.h"
-
-#ifdef KEYBOARD_octagon_v1
- #include "v1.h"
-#endif
-
-#ifdef KEYBOARD_octagon_v2
- #include "v2.h"
-#endif
-
-#endif
diff --git a/keyboards/octagon/readme.md b/keyboards/octagon/readme.md
deleted file mode 100644
index 5b3169424..000000000
--- a/keyboards/octagon/readme.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# Duck Octagon
-
-Non official firmware for custom Korean keyboard with 75% key layout made by Duck.
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-
-Newest version is the [Octagon V2](http://duck0113.tistory.com/127)
-
-Make example for this keyboard (after setting up your build environment):
-
- make octagon/v2:default
diff --git a/keyboards/octagon/rules.mk b/keyboards/octagon/rules.mk
deleted file mode 100644
index ce04362e6..000000000
--- a/keyboards/octagon/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-DEFAULT_FOLDER = octagon/v2 \ No newline at end of file
diff --git a/keyboards/octagon/v1/keymaps/default/keymap.c b/keyboards/octagon/v1/keymaps/default/keymap.c
deleted file mode 100644
index 2faf7a9fc..000000000
--- a/keyboards/octagon/v1/keymaps/default/keymap.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright 2017 MechMerlin <mechmerlin@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 "octagon.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* layer 0: qwerty */
- [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_PAUS,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, KC_PGDN,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_NO, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
-
- [1] = LAYOUT(\
- KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_NO, KC_TRNS,
- KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
- };
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-};
diff --git a/keyboards/octagon/v1/keymaps/default/readme.md b/keyboards/octagon/v1/keymaps/default/readme.md
deleted file mode 100644
index 3a3e3db57..000000000
--- a/keyboards/octagon/v1/keymaps/default/readme.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Default Octagon Layout
-
-This is the default implement layout for Duck Octagon V1.
-
-
-## Features
-
-* Default QWERTY layer
diff --git a/keyboards/octagon/v1/readme.md b/keyboards/octagon/v1/readme.md
deleted file mode 100644
index 72285b1ed..000000000
--- a/keyboards/octagon/v1/readme.md
+++ /dev/null
@@ -1,28 +0,0 @@
-# Duck Octagon V1
-
-Non official firmware for custom Korean keyboard with 75% key layout made by Duck.
-Group buy was run October 2014 via [geekhack](https://geekhack.org/index.php?topic=65036.0) 35 keyboards total.
-
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
-Hardware Supported: Duck Octagon PCB Ver 1.0, Atmega32u4
-Hardware Availability: Wait until GB of the next revision
-
-Make example for this keyboard (after setting up your build environment):
-
- make octagon/v1:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-
-## Hardware Notes
-
-The Duck Octagon V1 PCB consists of:
-
-### Microchips
-2 74HC237D 3-to-8 line decoders
-1 Atmega32u4 microcontroller
-2 WS2811 LED controller
-
-## Notes
-Thanks to Ralf Schmitt for previous implementations in his [TMK fork](https://github.com/xauser/tmk_keyboard/tree/xauser/) and few helping words.
-
-Based heavily on Rasmus Schults [Duck Lightsaver QMK Port](https://github.com/qmk/qmk_firmware/tree/master/keyboards/lightsaver)
diff --git a/keyboards/octagon/v1/v1.h b/keyboards/octagon/v1/v1.h
deleted file mode 100644
index 3a27a078b..000000000
--- a/keyboards/octagon/v1/v1.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef V1_H
-#define V1_H
-
-#include "../octagon.h"
-
-#define LAYOUT( \
- K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5P, \
- K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, K4P, \
- K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, K3P, \
- K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K5O, K2N, K2P, \
- K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, K1M, K1N, K1P, \
- K0A, K0B, K0C, K0G, K0J, K0K, K0L, K0M, K0N, K0P \
-) { \
- { K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5P }, \
- { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4N, KC_NO, K4P }, \
- { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3N, KC_NO, K3P }, \
- { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, KC_NO, K2N, KC_NO, K2P }, \
- { K1A, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1L, KC_NO, K1M, K1N, KC_NO, K1P }, \
- { K0A, K0B, K0C, KC_NO, KC_NO, K0G, KC_NO, KC_NO, K0J, K0K, K0L, KC_NO, K0M, K0N, KC_NO, K0P } \
-}
-#endif
diff --git a/keyboards/octagon/v2/info.json b/keyboards/octagon/v2/info.json
deleted file mode 100644
index 7bc0c6ef9..000000000
--- a/keyboards/octagon/v2/info.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "keyboard_name": "Octagon V2",
- "url": "",
- "maintainer": "qmk",
- "width": 16,
- "height": 6,
- "layouts": {
- "LAYOUT": {
- "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1, "y":0}, {"label":"F2", "x":2, "y":0}, {"label":"F3", "x":3, "y":0}, {"label":"F4", "x":4, "y":0}, {"label":"F5", "x":5, "y":0}, {"label":"F6", "x":6, "y":0}, {"label":"F7", "x":7, "y":0}, {"label":"F8", "x":8, "y":0}, {"label":"F9", "x":9, "y":0}, {"label":"F10", "x":10, "y":0}, {"label":"F11", "x":11, "y":0}, {"label":"F12", "x":12, "y":0}, {"label":"PrtSc", "x":13, "y":0}, {"label":"Pause", "x":14, "y":0}, {"label":"Delete", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Home", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"Page Up", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"x":12.75, "y":3}, {"label":"Enter", "x":13.75, "y":3, "w":1.25}, {"label":"Page Down", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":1.25}, {"x":1.25, "y":4}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"End", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.25}, {"label":"Win", "x":1.25, "y":5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5, "w":1.25}, {"x":3.75, "y":5, "w":6.25}, {"label":"Alt", "x":10, "y":5}, {"label":"Fn", "x":11, "y":5}, {"label":"Ctrl", "x":12, "y":5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}]
- }
- }
-}
diff --git a/keyboards/octagon/v2/keymaps/default/keymap.c b/keyboards/octagon/v2/keymaps/default/keymap.c
deleted file mode 100644
index 5f7d179ab..000000000
--- a/keyboards/octagon/v2/keymaps/default/keymap.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright 2017 MechMerlin <mechmerlin@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 "octagon.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* layer 0: qwerty */
- [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_PAUS, KC_DEL,
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NO, KC_ENT, KC_PGDN,
- KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
-
- [1] = LAYOUT(\
- KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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_NO, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
- };
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
- return MACRO_NONE;
-}; \ No newline at end of file
diff --git a/keyboards/octagon/v2/keymaps/default/readme.md b/keyboards/octagon/v2/keymaps/default/readme.md
deleted file mode 100644
index d52c00129..000000000
--- a/keyboards/octagon/v2/keymaps/default/readme.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Default Octagon Layout
-
-This is the default implement layout for Duck Octagon V2.
-
-
-## Features
-
-* Default QWERTY layer \ No newline at end of file
diff --git a/keyboards/octagon/v2/rules.mk b/keyboards/octagon/v2/rules.mk
deleted file mode 100644
index d95dbd960..000000000
--- a/keyboards/octagon/v2/rules.mk
+++ /dev/null
@@ -1,72 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-#OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= no # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE ?= yes # USB Nkey Rollover
-BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality on B7 by default
-MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config)
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE ?= no # Audio output on port C6
-FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches
-RGBLIGHT_ENABLE = yes
-
-CUSTOM_MATRIX = yes
-SRC += indicator_leds.c \
- matrix.c
diff --git a/keyboards/octagon/v2/v2.h b/keyboards/octagon/v2/v2.h
deleted file mode 100644
index d37db4a0c..000000000
--- a/keyboards/octagon/v2/v2.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* Copyright 2017 MechMerlin <mechmerlin@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#ifndef V2_H
-#define V2_H
-
-#include "../octagon.h"
-
-#define LAYOUT( \
- K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, K5Q, \
- K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, K4O, K4P, \
- K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, K3O, K3P, \
- K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, K2O, K2P, \
- K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, K1M, K1N, K1O, K1P, \
- K0A, K0B, K0C, K0J, K0K, K0L, K0M, K0N, K0O, K0P \
-) { \
- { K5A, K5B, K5C, K5D, K5E, K5F, K5G, K5H, K5I, K5J, K5K, K5L, K5M, K5N, K5O, KC_NO, K5Q }, \
- { K4A, K4B, K4C, K4D, K4E, K4F, K4G, K4H, K4I, K4J, K4K, K4L, K4M, KC_NO, K4O, K4P, KC_NO }, \
- { K3A, K3B, K3C, K3D, K3E, K3F, K3G, K3H, K3I, K3J, K3K, K3L, K3M, KC_NO, K3O, K3P, KC_NO }, \
- { K2A, K2B, K2C, K2D, K2E, K2F, K2G, K2H, K2I, K2J, K2K, K2L, K2M, KC_NO, K2O, K2P, KC_NO }, \
- { K1A, K1B, K1C, K1D, K1E, K1F, K1G, K1H, K1I, K1J, K1K, KC_NO, K1M, K1N, K1O, K1P, KC_NO }, \
- { K0A, K0B, K0C, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0J, KC_NO, K0K, K0L, K0M, K0N, K0O, K0P, KC_NO } \
-}
-#endif
diff --git a/keyboards/ok60/config.h b/keyboards/ok60/config.h
index 61c2fa0ed..db7b74e58 100644
--- a/keyboards/ok60/config.h
+++ b/keyboards/ok60/config.h
@@ -71,9 +71,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN F6
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 10
diff --git a/keyboards/ok60/info.json b/keyboards/ok60/info.json
index c233f6602..9c561c6b8 100644
--- a/keyboards/ok60/info.json
+++ b/keyboards/ok60/info.json
@@ -9,6 +9,10 @@
"key_count": 61,
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
},
+ "LAYOUT_60_ansi_split_bksp_rshift": {
+ "key_count": 63,
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
+ },
"LAYOUT_60_iso": {
"key_count": 62,
"layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2}, {"x":13.75, "y":1, "w":1.25, "h":2}, {"x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
diff --git a/keyboards/ok60/ok60.h b/keyboards/ok60/ok60.h
index 81e2d13e0..7c459d877 100644
--- a/keyboards/ok60/ok60.h
+++ b/keyboards/ok60/ok60.h
@@ -17,6 +17,20 @@
{ K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, KC_NO } \
}
+#define LAYOUT_60_ansi_split_bksp_rshift( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, K314, \
+ K400, K401, K402, K406, K410, K411, K412, K413 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, KC_NO }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, K213, KC_NO }, \
+ { K300, KC_NO, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO, K313, K314 }, \
+ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, KC_NO, K410, K411, K412, K413, KC_NO } \
+}
+
#define LAYOUT_60_iso( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, \
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, \
diff --git a/keyboards/ok60/rules.mk b/keyboards/ok60/rules.mk
index 3fcf165a9..03646c485 100644
--- a/keyboards/ok60/rules.mk
+++ b/keyboards/ok60/rules.mk
@@ -63,4 +63,4 @@ RGBLIGHT_ENABLE = yes # Enable the RGB backlight
# UNICODE_ENABLE = YES # Unicode
# BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID
-LAYOUTS = 60_ansi 60_iso 60_hhkb
+LAYOUTS = 60_ansi 60_ansi_split_bksp_rshift 60_iso 60_hhkb
diff --git a/keyboards/omnikey_blackheart/config.h b/keyboards/omnikey_blackheart/config.h
index 14b4a5f17..94412cfa6 100644
--- a/keyboards/omnikey_blackheart/config.h
+++ b/keyboards/omnikey_blackheart/config.h
@@ -45,10 +45,6 @@
/* force n-key rollover*/
#define FORCE_NKRO
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 0
@@ -57,4 +53,4 @@
#define RGBLIGHT_VAL_STEP 8
#endif
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/omnikey_blackheart/keymaps/default/keymap.c b/keyboards/omnikey_blackheart/keymaps/default/keymap.c
index 331621870..e4865adde 100644
--- a/keyboards/omnikey_blackheart/keymaps/default/keymap.c
+++ b/keyboards/omnikey_blackheart/keymaps/default/keymap.c
@@ -1,9 +1,5 @@
#include QMK_KEYBOARD_H
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(\
@@ -26,7 +22,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
};
-void led_set_kb(uint8_t usb_led) {
+void led_set_user(uint8_t usb_led) {
DDRB |= (1 << 4) | (1 << 5) | (1 << 6);
if (usb_led & (1 << USB_LED_NUM_LOCK)) {
@@ -46,4 +42,4 @@ void led_set_kb(uint8_t usb_led) {
} else {
PORTB &= ~(1 << 6);
}
-} \ No newline at end of file
+}
diff --git a/keyboards/orange75/config.h b/keyboards/orange75/config.h
new file mode 100644
index 000000000..7d1b497be
--- /dev/null
+++ b/keyboards/orange75/config.h
@@ -0,0 +1,35 @@
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEEB
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Fox-Lab
+#define PRODUCT Orange75
+#define DESCRIPTION Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 15
+#define MATRIX_COLS 6
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { E6,F0, F1, F4, F5, F6, F7, C7, C6, B6, B4, D7, D4, D5, D6 }
+#define MATRIX_COL_PINS { D3, D2, D1, D0, B7, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_LEVELS 3
+
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/orange75/info.json b/keyboards/orange75/info.json
new file mode 100644
index 000000000..e6a70c102
--- /dev/null
+++ b/keyboards/orange75/info.json
@@ -0,0 +1,96 @@
+{
+ "keyboard_name": "Orange75",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 82,
+ "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":"`", "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":7, "y":1.25},
+ {"label":"8", "x":8, "y":1.25},
+ {"label":"9", "x":9, "y":1.25},
+ {"label":"0", "x":10, "y":1.25},
+ {"label":"-", "x":11, "y":1.25},
+ {"label":"=", "x":12, "y":1.25},
+ {"label":"Delete", "x":13, "y":1.25},
+ {"label":"Back Space", "x":14, "y":1.25},
+ {"label":"Home", "x":15, "y":1.25},
+ {"label":"Tab", "x":0, "y":2.25, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.25},
+ {"label":"W", "x":2.5, "y":2.25},
+ {"label":"E", "x":3.5, "y":2.25},
+ {"label":"R", "x":4.5, "y":2.25},
+ {"label":"T", "x":5.5, "y":2.25},
+ {"label":"Y", "x":6.5, "y":2.25},
+ {"label":"U", "x":7.5, "y":2.25},
+ {"label":"I", "x":8.5, "y":2.25},
+ {"label":"O", "x":9.5, "y":2.25},
+ {"label":"P", "x":10.5, "y":2.25},
+ {"label":"[", "x":11.5, "y":2.25},
+ {"label":"]", "x":12.5, "y":2.25},
+ {"label":"\\", "x":13.5, "y":2.25, "w":1.5},
+ {"label":"End", "x":15, "y":2.25},
+ {"label":"Caps Lock", "x":0, "y":3.25, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.25},
+ {"label":"S", "x":2.75, "y":3.25},
+ {"label":"D", "x":3.75, "y":3.25},
+ {"label":"F", "x":4.75, "y":3.25},
+ {"label":"G", "x":5.75, "y":3.25},
+ {"label":"H", "x":6.75, "y":3.25},
+ {"label":"J", "x":7.75, "y":3.25},
+ {"label":"K", "x":8.75, "y":3.25},
+ {"label":"L", "x":9.75, "y":3.25},
+ {"label":";", "x":10.75, "y":3.25},
+ {"label":"'", "x":11.75, "y":3.25},
+ {"label":"Enter", "x":12.75, "y":3.25, "w":2.25},
+ {"label":"PgUp", "x":15, "y":3.25},
+ {"label":"Shift", "x":0, "y":4.25, "w":1.25},
+ {"label":"ISO\\", "x":1.25, "y":4.25},
+ {"label":"Z", "x":2.25, "y":4.25},
+ {"label":"X", "x":3.25, "y":4.25},
+ {"label":"C", "x":4.25, "y":4.25},
+ {"label":"V", "x":5.25, "y":4.25},
+ {"label":"B", "x":6.25, "y":4.25},
+ {"label":"N", "x":7.25, "y":4.25},
+ {"label":"M", "x":8.25, "y":4.25},
+ {"label":",", "x":9.25, "y":4.25},
+ {"label":".", "x":10.25, "y":4.25},
+ {"label":"/", "x":11.25, "y":4.25},
+ {"label":"Shift", "x":12.25, "y":4.25, "w":1.75},
+ {"label":"Up", "x":14, "y":4.25},
+ {"label":"PgDn", "x":15, "y":4.25},
+ {"label":"Ctrl", "x":0, "y":5.25, "w":1.25},
+ {"label":"GUI", "x":1.25, "y":5.25, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.25, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.25, "w":6.25},
+ {"label":"Alt", "x":10, "y":5.25, "w":1.25},
+ {"label":"Fn", "x":11.25, "y":5.25, "w":1.25},
+ {"label":"Left", "x":13, "y":5.25},
+ {"label":"Down", "x":14, "y":5.25},
+ {"label":"Right", "x":15, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/orange75/keymaps/default/keymap.c b/keyboards/orange75/keymaps/default/keymap.c
new file mode 100644
index 000000000..37e198f99
--- /dev/null
+++ b/keyboards/orange75/keymaps/default/keymap.c
@@ -0,0 +1,85 @@
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /*
+ * ,---------------------------------------------------------------.
+ * |Esc|▓▓▓|F1 |F2 |F3 |F4 |▓|F5 |F6 |F7 |F8 |▓|F9 |F10|F11|F12|▓▓▓|
+ * |---------------------------------------------------------------|
+ * |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Del|Bsp|Hm |
+ * |---------------------------------------------------------------|
+ * |Tab |Q |W |E |R |T |Y |U |I |O |P |[ |] |\ |End|
+ * |---------------------------------------------------------------|
+ * |Caps |A |S |D |F |G |H |J |K |L |; |' |Enter |PgU|
+ * |---------------------------------------------------------------|
+ * |Shft|\ |Z |X |C |V |B |N |M |, |. |/ |Shift |Up |PgD|
+ * |---------------------------------------------------------------|
+ * |Ctrl|GUI |Alt |Space |Alt |Fn |▓|Lt |Dn |Rt |
+ * `---------------------------------------------------------------'
+ */
+ 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_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_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, LT(1, KC_NO), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_LALT, LT(1, KC_NO), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /*
+ * ,---------------------------------------------------------------.
+ * |RST|▓▓▓| | | | |▓| | | | |▓| | | | |▓▓▓|
+ * |---------------------------------------------------------------|
+ * |` | | | | | | | | | | | | | | |Tog|
+ * |---------------------------------------------------------------|
+ * | | | | | | | | | | | | | | |Stp|
+ * |---------------------------------------------------------------|
+ * | | | | | | | | | | | | | |BL+|
+ * |---------------------------------------------------------------|
+ * | | | | | | | | | | | | | | |BL-|
+ * |---------------------------------------------------------------|
+ * | | | | | | |▓| | | |
+ * `---------------------------------------------------------------'
+ */
+ LAYOUT(
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_TOGG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_STEP,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_INC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+ DDRB |= (1 << 0); PORTB &= ~(1 << 0);
+ } else {
+ DDRB &= ~(1 << 0); PORTB &= ~(1 << 0);
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 1); PORTB &= ~(1 << 1);
+ } else {
+ DDRB &= ~(1 << 1); PORTB &= ~(1 << 1);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ DDRB |= (1 << 2); PORTB &= ~(1 << 2);
+ } else {
+ DDRB &= ~(1 << 2); PORTB &= ~(1 << 2);
+ }
+} \ No newline at end of file
diff --git a/keyboards/orange75/orange75.c b/keyboards/orange75/orange75.c
new file mode 100644
index 000000000..2d5f73048
--- /dev/null
+++ b/keyboards/orange75/orange75.c
@@ -0,0 +1 @@
+#include "orange75.h" \ No newline at end of file
diff --git a/keyboards/orange75/orange75.h b/keyboards/orange75/orange75.h
new file mode 100644
index 000000000..a7ddd5a06
--- /dev/null
+++ b/keyboards/orange75/orange75.h
@@ -0,0 +1,29 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K000, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K014, K113, K114, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K314, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K414, \
+ K500, K501, K502, K506, K510, K511, K512, K513, K514 \
+) { \
+ { K000, K100, K200, K300, K400, K500 }, \
+ { KC_NO, K101, K201, K301, K401, K501 }, \
+ { K002, K102, K202, K302, K402, K502 }, \
+ { K003, K103, K203, K303, K403, KC_NO}, \
+ { K004, K104, K204, K304, K404, KC_NO}, \
+ { K005, K105, K205, K305, K405, KC_NO}, \
+ { K006, K106, K206, K306, K406, K506 }, \
+ { K007, K107, K207, K307, K407, KC_NO}, \
+ { K008, K108, K208, K308, K408, KC_NO}, \
+ { K009, K109, K209, K309, K409, KC_NO}, \
+ { K010, K110, K210, K310, K410, K510 }, \
+ { K011, K111, K211, K311, K411, K511 }, \
+ { K012, K112, K212, K312, K412, K512 }, \
+ { K013, K113, K213, KC_NO,K413, K513 }, \
+ { K014, K114, K214, K314, K414, K514 } \
+}
+
diff --git a/keyboards/orange75/readme.md b/keyboards/orange75/readme.md
new file mode 100644
index 000000000..910674406
--- /dev/null
+++ b/keyboards/orange75/readme.md
@@ -0,0 +1,16 @@
+# Orange75
+
+![Orange75](https://i.imgur.com/eAfiwwM.jpg)
+
+A 75% made by Fox Lab.
+
+Keyboard Maintainer: [captsis](https://github.com/captsis), [fox-lab](https://github.com/fox-lab)
+Hardware Supported: Orange75 powered by the ATmega32U4
+Hardware Availability: [zFrontier](https://en.zfrontier.com/collections/keyboards/products/foxlab-orange75), [Geekhack GB](https://geekhack.org/index.php?topic=95080.0)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make orange75: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/orange75/rules.mk b/keyboards/orange75/rules.mk
new file mode 100644
index 000000000..0f9672a51
--- /dev/null
+++ b/keyboards/orange75/rules.mk
@@ -0,0 +1,73 @@
+# 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
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no \ No newline at end of file
diff --git a/keyboards/org60/rules.mk b/keyboards/org60/rules.mk
index c79e6e270..53e9a28fe 100644
--- a/keyboards/org60/rules.mk
+++ b/keyboards/org60/rules.mk
@@ -59,7 +59,7 @@ EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
MIDI_ENABLE = no # MIDI controls
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
UNICODE_ENABLE = no # Unicode
diff --git a/keyboards/orthodox/keymaps/drashna/config.h b/keyboards/orthodox/keymaps/drashna/config.h
index d8ff95fcb..09df12d9e 100644
--- a/keyboards/orthodox/keymaps/drashna/config.h
+++ b/keyboards/orthodox/keymaps/drashna/config.h
@@ -45,7 +45,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef RGBLIGHT_ENABLE
#define RGB_DI_PIN D3
#define RGBLED_NUM 16 // Number of LEDs
-#define RGBLIGHT_ANIMATIONS
+
#define RGBLIGHT_HUE_STEP 12
#define RGBLIGHT_SAT_STEP 12
#define RGBLIGHT_VAL_STEP 12
@@ -58,7 +58,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define C6_AUDIO
#ifdef RGBLIGHT_ENABLE
#define NO_MUSIC_MODE
-#endif //RGBLIGHT_ENABLE
+#endif
#endif //AUDIO_ENABLE
#undef PRODUCT
diff --git a/keyboards/orthodox/keymaps/drashna/keymap.c b/keyboards/orthodox/keymaps/drashna/keymap.c
index 67f732c12..9373d851d 100644
--- a/keyboards/orthodox/keymaps/drashna/keymap.c
+++ b/keyboards/orthodox/keymaps/drashna/keymap.c
@@ -30,41 +30,47 @@ uint8_t last_led;
uint8_t last_osm;
#endif
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
+#define LAYOUT_orthodox_base( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
+ ) \
+ LAYOUT_wrapper( \
+ KC_ESC, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, KC_BSPC, \
+ KC_TAB, K11, K12, K13, K14, K15, OS_LALT, OS_LGUI, OS_RALT, OS_RGUI, K16, K17, K18, K19, K1A, KC_QUOT, \
+ KC_MLSF, CTL_T(K21), K22, K23, K24, K25, LOWER, KC_SPACE,KC_BSPC, KC_DEL, KC_ENT, RAISE, K26, K27, K28, K29, CTL_T(K2A), KC_MRSF \
+ )
+#define LAYOUT_orthodox_base_wrapper(...) LAYOUT_orthodox_base(__VA_ARGS__)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_QWERTY] = LAYOUT_wrapper(\
- KC_ESC, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
- KC_TAB, _________________QWERTY_L2_________________, ___________ORTHODOX_THUMP_TOP_____________, _________________QWERTY_R2_________________, KC_QUOT,
- KC_MLSF, _________________QWERTY_L3_________________, ___________________ORTHODOX_THUMB_BOTTOM____________________, _________________QWERTY_R3_________________, KC_MRSF
+[_QWERTY] = LAYOUT_orthodox_base_wrapper(
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
),
-[_COLEMAK] = LAYOUT_wrapper(\
- KC_ESC, _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSPC,
- KC_TAB, _________________COLEMAK_L2________________, ___________ORTHODOX_THUMP_TOP_____________, _________________COLEMAK_R2________________, KC_QUOT,
- KC_MLSF, _________________COLEMAK_L3________________, ___________________ORTHODOX_THUMB_BOTTOM____________________, _________________COLEMAK_R3________________, KC_MRSF
+[_COLEMAK] = LAYOUT_orthodox_base_wrapper(
+ _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
+ _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
+ _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
),
-[_DVORAK] = LAYOUT_wrapper(\
- KC_ESC, _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSPC,
- KC_TAB, _________________DVORAK_L2_________________, ___________ORTHODOX_THUMP_TOP_____________, _________________DVORAK_R2_________________, KC_MINS,
- KC_MLSF, _________________DVORAK_L3_________________, ___________________ORTHODOX_THUMB_BOTTOM____________________, _________________DVORAK_R3_________________, KC_MRSF
+[_DVORAK] = LAYOUT_orthodox_base_wrapper(
+ _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
+ _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
+ _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
),
-[_WORKMAN] = LAYOUT_wrapper(\
- KC_ESC, _________________WORKMAN_L1________________, _________________WORKMAN_R1________________, KC_BSPC,
- KC_TAB, _________________WORKMAN_L2________________, ___________ORTHODOX_THUMP_TOP_____________, _________________WORKMAN_R2________________, KC_MINS,
- KC_MLSF, _________________WORKMAN_L3________________, ___________________ORTHODOX_THUMB_BOTTOM____________________, _________________WORKMAN_R3________________, KC_MRSF
+
+[_WORKMAN] = LAYOUT_orthodox_base_wrapper(
+ _________________WORKMAN_L1________________, _________________WORKMAN_R1________________,
+ _________________WORKMAN_L2________________, _________________WORKMAN_R2________________,
+ _________________WORKMAN_L3________________, _________________WORKMAN_R3________________
),
+
[_MODS] = LAYOUT_wrapper(\
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
@@ -85,15 +91,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJUST] = LAYOUT_wrapper(\
KC_MAKE, _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, KC_RESET,
- VRSN, _________________ADJUST_L2_________________, _______, _______, _______, KC_NUKE, _________________ADJUST_R2_________________, EPRM,
+ VRSN, _________________ADJUST_L2_________________, _______, _______, _______, KC_NUKE, _________________ADJUST_R2_________________, EEP_RST,
TG_MODS, _________________ADJUST_L3_________________, _______, _______, _______, _______, _______, _______, _________________ADJUST_R3_________________, KC_MPLY
)
};
void matrix_init_keymap(void) {
- DDRD &= ~(1<<5);
- PORTD &= ~(1<<5);
+ #ifndef CONVERT_TO_PROTON_C
+ setPinOutput(D5);
+ writePinHigh(D5);
- DDRB &= ~(1<<0);
- PORTB &= ~(1<<0);
+ setPinOutput(B0);
+ writePinHigh(B0);
+ #endif
}
diff --git a/keyboards/orthodox/readme.md b/keyboards/orthodox/readme.md
index 0c47dd9c4..8bf60a9bd 100644
--- a/keyboards/orthodox/readme.md
+++ b/keyboards/orthodox/readme.md
@@ -125,7 +125,7 @@ EEPROM for the left and right halves.
The EEPROM is used to store whether the
half is left handed or right handed. This makes it so that the same firmware
-file will run on both hands instead of having to flash [left](../lets_split/eeprom-lefthand.eep) and [right](../lets_split/eeprom-righthand.eep) handed
+file will run on both hands instead of having to flash [left](../../quantum/split_common/eeprom-lefthand.eep) and [right](../../quantum/split_common/eeprom-righthand.eep) handed
versions of the firmware to each half. To flash the EEPROM file for the left
half run:
```
diff --git a/keyboards/orthodox/rev1/config.h b/keyboards/orthodox/rev1/config.h
index 98c24c8c0..03936e737 100644
--- a/keyboards/orthodox/rev1/config.h
+++ b/keyboards/orthodox/rev1/config.h
@@ -70,10 +70,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
//#define RGB_DI_PIN D3
-//#define RGBLIGHT_TIMER
//#define RGBLED_NUM 16 // Number of LEDs
-//#define ws2812_PORTREG PORTD
-//#define ws2812_DDRREG DDRD
/*
* Feature disable options
diff --git a/keyboards/orthodox/rev3/config.h b/keyboards/orthodox/rev3/config.h
index 851499176..2e4018e91 100644
--- a/keyboards/orthodox/rev3/config.h
+++ b/keyboards/orthodox/rev3/config.h
@@ -75,10 +75,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
//#define RGB_DI_PIN D3
-//#define RGBLIGHT_TIMER
+
//#define RGBLED_NUM 16 // Number of LEDs
-//#define ws2812_PORTREG PORTD
-//#define ws2812_DDRREG DDRD
/*
* Feature disable options
diff --git a/keyboards/orthodox/rev3_teensy/config.h b/keyboards/orthodox/rev3_teensy/config.h
index daba627fa..e2e693079 100644
--- a/keyboards/orthodox/rev3_teensy/config.h
+++ b/keyboards/orthodox/rev3_teensy/config.h
@@ -67,10 +67,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
//#define RGB_DI_PIN D3
-//#define RGBLIGHT_TIMER
+
//#define RGBLED_NUM 16 // Number of LEDs
-//#define ws2812_PORTREG PORTD
-//#define ws2812_DDRREG DDRD
/*
* Feature disable options
diff --git a/keyboards/orthodox/rules.mk b/keyboards/orthodox/rules.mk
index 7132a915b..715f25c3a 100644
--- a/keyboards/orthodox/rules.mk
+++ b/keyboards/orthodox/rules.mk
@@ -61,7 +61,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = yes
USE_I2C = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/paladin64/config.h b/keyboards/paladin64/config.h
index 27f54bf16..a5280f4d4 100755
--- a/keyboards/paladin64/config.h
+++ b/keyboards/paladin64/config.h
@@ -110,8 +110,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
#define RGB_DI_PIN D0
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/panc60/config.h b/keyboards/panc60/config.h
new file mode 100644
index 000000000..703141beb
--- /dev/null
+++ b/keyboards/panc60/config.h
@@ -0,0 +1,46 @@
+/*
+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 Panc Interactive
+#define PRODUCT panc60
+
+#define RGBLED_NUM 12
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define MATRIX_ROW_PINS { 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 DIODE_DIRECTION COL2ROW
+#define DEBOUNCING_DELAY 5
+
+#define NO_BACKLIGHT_CLOCK
+#define BACKLIGHT_LEVELS 1
+#define RGBLIGHT_ANIMATIONS
+
+#define NO_UART 1
+
+/* key combination for command */
+#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
diff --git a/keyboards/panc60/i2c.c b/keyboards/panc60/i2c.c
new file mode 100644
index 000000000..e8c4455ad
--- /dev/null
+++ b/keyboards/panc60/i2c.c
@@ -0,0 +1,106 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Please do not modify this file
+
+#include <avr/io.h>
+#include <util/twi.h>
+
+#include "i2c.h"
+
+void i2c_set_bitrate(uint16_t bitrate_khz) {
+ uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
+ if (bitrate_div >= 16) {
+ bitrate_div = (bitrate_div - 16) / 2;
+ }
+ TWBR = bitrate_div;
+}
+
+void i2c_init(void) {
+ // set pull-up resistors on I2C bus pins
+ PORTC |= 0b11;
+
+ i2c_set_bitrate(400);
+
+ // enable TWI (two-wire interface)
+ TWCR |= (1 << TWEN);
+
+ // enable TWI interrupt and slave address ACK
+ TWCR |= (1 << TWIE);
+ TWCR |= (1 << TWEA);
+}
+
+uint8_t i2c_start(uint8_t address) {
+ // reset TWI control register
+ TWCR = 0;
+
+ // begin transmission and wait for it to end
+ TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ // check if the start condition was successfully transmitted
+ if ((TWSR & 0xF8) != TW_START) {
+ return 1;
+ }
+
+ // transmit address and wait
+ TWDR = address;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ // check if the device has acknowledged the READ / WRITE mode
+ uint8_t twst = TW_STATUS & 0xF8;
+ if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
+ return 1;
+ }
+
+ return 0;
+}
+
+void i2c_stop(void) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+}
+
+uint8_t i2c_write(uint8_t data) {
+ TWDR = data;
+
+ // transmit data and wait
+ TWCR = (1<<TWINT) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
+ return 1;
+ }
+
+ return 0;
+}
+
+uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
+ if (i2c_start(address)) {
+ return 1;
+ }
+
+ for (uint16_t i = 0; i < length; i++) {
+ if (i2c_write(data[i])) {
+ return 1;
+ }
+ }
+
+ i2c_stop();
+
+ return 0;
+}
diff --git a/keyboards/panc60/i2c.h b/keyboards/panc60/i2c.h
new file mode 100644
index 000000000..7ce50cdb5
--- /dev/null
+++ b/keyboards/panc60/i2c.h
@@ -0,0 +1,27 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Please do not modify this file
+
+#ifndef __I2C_H__
+#define __I2C_H__
+
+void i2c_init(void);
+void i2c_set_bitrate(uint16_t bitrate_khz);
+uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length);
+
+#endif
diff --git a/keyboards/panc60/info.json b/keyboards/panc60/info.json
new file mode 100644
index 000000000..fe919e8b9
--- /dev/null
+++ b/keyboards/panc60/info.json
@@ -0,0 +1,20 @@
+{
+ "keyboard_name": "panc60",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}]
+ },
+
+ "LAYOUT_60_ansi": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0, "w":2}, {"x":0, "y":1, "w":1.5}, {"x":1.5, "y":1}, {"x":2.5, "y":1}, {"x":3.5, "y":1}, {"x":4.5, "y":1}, {"x":5.5, "y":1}, {"x":6.5, "y":1}, {"x":7.5, "y":1}, {"x":8.5, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1, "w":1.5}, {"x":0, "y":2, "w":1.75}, {"x":1.75, "y":2}, {"x":2.75, "y":2}, {"x":3.75, "y":2}, {"x":4.75, "y":2}, {"x":5.75, "y":2}, {"x":6.75, "y":2}, {"x":7.75, "y":2}, {"x":8.75, "y":2}, {"x":9.75, "y":2}, {"x":10.75, "y":2}, {"x":11.75, "y":2}, {"x":12.75, "y":2, "w":2.25}, {"x":0, "y":3, "w":2.25}, {"x":2.25, "y":3}, {"x":3.25, "y":3}, {"x":4.25, "y":3}, {"x":5.25, "y":3}, {"x":6.25, "y":3}, {"x":7.25, "y":3}, {"x":8.25, "y":3}, {"x":9.25, "y":3}, {"x":10.25, "y":3}, {"x":11.25, "y":3}, {"x":12.25, "y":3, "w":2.75}, {"x":0, "y":4, "w":1.25}, {"x":1.25, "y":4, "w":1.25}, {"x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"x":10, "y":4, "w":1.25}, {"x":11.25, "y":4, "w":1.25}, {"x":12.5, "y":4, "w":1.25}, {"x":13.75, "y":4, "w":1.25}]
+ },
+
+ "LAYOUT_60_hhkb": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/panc60/keymaps/default/config.h b/keyboards/panc60/keymaps/default/config.h
new file mode 100644
index 000000000..a3ed4f762
--- /dev/null
+++ b/keyboards/panc60/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/panc60/keymaps/default/keymap.c b/keyboards/panc60/keymaps/default/keymap.c
new file mode 100644
index 000000000..2754d89ff
--- /dev/null
+++ b/keyboards/panc60/keymaps/default/keymap.c
@@ -0,0 +1,60 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+ QMKBEST = SAFE_RANGE,
+ QMKURL
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_60_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(1),
+ KC_RGUI, KC_LALT, KC_SPC, KC_LALT, KC_LGUI),
+
+ [1] = LAYOUT_60_hhkb(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_RIGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/panc60/keymaps/default/readme.md b/keyboards/panc60/keymaps/default/readme.md
new file mode 100644
index 000000000..3aa3cdb4c
--- /dev/null
+++ b/keyboards/panc60/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for panc60
diff --git a/keyboards/panc60/matrix.c b/keyboards/panc60/matrix.c
new file mode 100644
index 000000000..cf0f63837
--- /dev/null
+++ b/keyboards/panc60/matrix.c
@@ -0,0 +1,145 @@
+/*
+Copyright 2018 Jack Humbert <jack.humb@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <avr/io.h>
+#include <util/delay.h>
+#include <string.h>
+#include "matrix.h"
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
+
+__attribute__ ((weak))
+void matrix_scan_kb(void) {
+ matrix_scan_user();
+}
+
+__attribute__ ((weak))
+void matrix_init_user(void) { }
+
+__attribute__ ((weak))
+void matrix_scan_user(void) { }
+
+// #define MATRIX_ROW_PINS { B3, B4, B5, B6, B7 }
+// #define MATRIX_COL_PINS { A0, A1, A2, A3, A4, A5, A6, A7, C7, C6, C5, C4, C3, C2, D7 }
+
+static uint8_t debouncing = DEBOUNCE;
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+void matrix_init(void) {
+
+ // disables JTAG so we can use them as columns
+ MCUCSR = (1<<JTD);
+ MCUCSR = (1<<JTD);
+
+ // rows (output)
+ DDRB |= ((1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
+ PORTB |= ((1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
+
+ // cols (input)
+ DDRA &= ~((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
+ DDRC &= ~((1 << 7) | (1 << 6) | (1 << 5) | (1 << 4) | (1 << 3) | (1 << 2));
+ DDRD &= ~((1 << 7));
+
+ // pull-up cols
+ PORTA |= ((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7));
+ PORTC |= ((1 << 7) | (1 << 6) | (1 << 5) | (1 << 4) | (1 << 3) | (1 << 2));
+ PORTD |= ((1 << 7));
+
+ // initialize matrix state: all keys off
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix[row] = 0x00;
+ matrix_debouncing[row] = 0x00;
+ }
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void) {
+
+ // actual matrix scan
+ for (uint8_t c = 0; c < MATRIX_ROWS; c++) {
+ switch (c) {
+ case 0: PORTB &= ~(1 << 3); break;
+ case 1: PORTB &= ~(1 << 4); break;
+ case 2: PORTB &= ~(1 << 5); break;
+ case 3: PORTB &= ~(1 << 6); break;
+ case 4: PORTB &= ~(1 << 7); break;
+ }
+ _delay_us(5);
+
+ matrix_row_t current_row = (
+ (((PINA & (1 << 0)) ? 0 : 1 ) << 0) |
+ (((PINA & (1 << 1)) ? 0 : 1 ) << 1) |
+ (((PINA & (1 << 2)) ? 0 : 1 ) << 2) |
+ (((PINA & (1 << 3)) ? 0 : 1 ) << 3) |
+ (((PINA & (1 << 4)) ? 0 : 1 ) << 4) |
+ (((PINA & (1 << 5)) ? 0 : 1 ) << 5) |
+ (((PINA & (1 << 6)) ? 0 : 1 ) << 6) |
+ (((PINA & (1 << 7)) ? 0 : 1 ) << 7) |
+ (((PINC & (1 << 7)) ? 0 : 1 ) << 8) |
+ (((PINC & (1 << 6)) ? 0 : 1 ) << 9) |
+ (((PINC & (1 << 5)) ? 0 : 1 ) << 10) |
+ (((PINC & (1 << 4)) ? 0 : 1 ) << 11) |
+ (((PINC & (1 << 3)) ? 0 : 1 ) << 12) |
+ (((PINC & (1 << 2)) ? 0 : 1 ) << 13) |
+ (((PIND & (1 << 7)) ? 0 : 1 ) << 14)
+ );
+
+ switch (c) {
+ case 0: PORTB |= (1 << 3); break;
+ case 1: PORTB |= (1 << 4); break;
+ case 2: PORTB |= (1 << 5); break;
+ case 3: PORTB |= (1 << 6); break;
+ case 4: PORTB |= (1 << 7); break;
+ }
+
+ if (matrix_debouncing[c] != current_row) {
+ matrix_debouncing[c] = current_row;
+ debouncing = DEBOUNCE;
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+
+ matrix_scan_quantum();
+
+ return 1;
+}
+
+inline matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+}
diff --git a/keyboards/panc60/panc60.c b/keyboards/panc60/panc60.c
new file mode 100644
index 000000000..9ac087dbf
--- /dev/null
+++ b/keyboards/panc60/panc60.c
@@ -0,0 +1,64 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "panc60.h"
+#ifdef BACKLIGHT_ENABLE
+#include "backlight.h"
+#endif
+#ifdef RGBLIGHT_ENABLE
+#include "rgblight.h"
+#endif
+
+#include <avr/pgmspace.h>
+
+#include "action_layer.h"
+#include "i2c.h"
+#include "quantum.h"
+
+__attribute__ ((weak))
+void matrix_scan_user(void) {
+}
+
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+
+void rgblight_set(void) {
+ if (!rgblight_config.enable) {
+ for (uint8_t i = 0; i < RGBLED_NUM; i++) {
+ led[i].r = 0;
+ led[i].g = 0;
+ led[i].b = 0;
+ }
+ }
+
+ i2c_init();
+ i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+}
+#endif
+
+void backlight_init_ports(void) {
+ DDRD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
+ PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+}
+
+void backlight_set(uint8_t level) {
+ if (level == 0) {
+ // Turn out the lights
+ PORTD &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6);
+ } else {
+ // Turn on the lights
+ PORTD |= (1<<0 | 1<<1 | 1<<4 | 1<<6);
+ }
+}
diff --git a/keyboards/panc60/panc60.h b/keyboards/panc60/panc60.h
new file mode 100644
index 000000000..95dcb1f90
--- /dev/null
+++ b/keyboards/panc60/panc60.h
@@ -0,0 +1,71 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef PANC60_H
+#define PANC60_H
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT_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, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K47, K49, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, K4B, K4C, K4D, KC_NO } \
+}
+
+#define LAYOUT_60_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, 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, \
+ K40, K41, K42, K47, K49, K4A, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, KC_NO, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, 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, KC_NO, K3D, KC_NO }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, K49, K4A, KC_NO, K4C, K4D, KC_NO } \
+}
+
+#define LAYOUT_60_hhkb( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, \
+ K41, K42, K47, K4A, K4C \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO, K2D, KC_NO }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E }, \
+ { KC_NO, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, KC_NO, K4C, KC_NO, KC_NO } \
+}
+
+#endif
diff --git a/keyboards/panc60/readme.md b/keyboards/panc60/readme.md
new file mode 100644
index 000000000..05ac3d72b
--- /dev/null
+++ b/keyboards/panc60/readme.md
@@ -0,0 +1,46 @@
+# panc60
+
+![panc60](https://imgix.ttcdn.co/i/product/original/0/670893-eca4599c4aad489dbe62609ac2fed86e.jpeg?q=100&auto=format%2Ccompress&w=500)
+
+The panc60 is a 60% PCB with backlight and rgb underglow.
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Jack Humbert](https://github.com/jackhumbert)
+Hardware Supported: panc60 PCB
+Hardware Availability: [PANC Interactive](https://store.panc.co/product/panc60-60-pcb)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make panc60:default
+
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+To put the panc60 into reset, hold left control while plugging in.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/panc60/rules.mk b/keyboards/panc60/rules.mk
new file mode 100644
index 000000000..588562a95
--- /dev/null
+++ b/keyboards/panc60/rules.mk
@@ -0,0 +1,52 @@
+# 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 = yes
+MOUSEKEY_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = yes
+COMMAND_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+RGBLIGHT_CUSTOM_DRIVER = yes
+
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+# custom matrix setup
+CUSTOM_MATRIX = yes
+SRC = matrix.c i2c.c
+
+# programming options
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
+
+LAYOUTS = 60_ansi 60_hhkb
diff --git a/keyboards/panc60/usbconfig.h b/keyboards/panc60/usbconfig.h
new file mode 100644
index 000000000..d2d848fcd
--- /dev/null
+++ b/keyboards/panc60/usbconfig.h
@@ -0,0 +1,396 @@
+/* Name: usbconfig.h
+ * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
+ * Author: Christian Starkjohann
+ * Creation Date: 2005-04-01
+ * Tabsize: 4
+ * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
+ * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
+ * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
+ */
+
+#ifndef __usbconfig_h_included__
+#define __usbconfig_h_included__
+
+#include "config.h"
+
+/*
+General Description:
+This file is an example configuration (with inline documentation) for the USB
+driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
+also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
+wire the lines to any other port, as long as D+ is also wired to INT0 (or any
+other hardware interrupt, as long as it is the highest level interrupt, see
+section at the end of this file).
+*/
+
+/* ---------------------------- Hardware Config ---------------------------- */
+
+#define USB_CFG_IOPORTNAME D
+/* This is the port where the USB bus is connected. When you configure it to
+ * "B", the registers PORTB, PINB and DDRB will be used.
+ */
+#define USB_CFG_DMINUS_BIT 3
+/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
+ * This may be any bit in the port.
+ */
+#define USB_CFG_DPLUS_BIT 2
+/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
+ * This may be any bit in the port. Please note that D+ must also be connected
+ * to interrupt pin INT0! [You can also use other interrupts, see section
+ * "Optional MCU Description" below, or you can connect D- to the interrupt, as
+ * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
+ * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
+ * markers every millisecond.]
+ */
+#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
+/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
+ * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
+ * require no crystal, they tolerate +/- 1% deviation from the nominal
+ * frequency. All other rates require a precision of 2000 ppm and thus a
+ * crystal!
+ * Since F_CPU should be defined to your actual clock rate anyway, you should
+ * not need to modify this setting.
+ */
+#define USB_CFG_CHECK_CRC 0
+/* Define this to 1 if you want that the driver checks integrity of incoming
+ * data packets (CRC checks). CRC checks cost quite a bit of code size and are
+ * currently only available for 18 MHz crystal clock. You must choose
+ * USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
+ */
+
+/* ----------------------- Optional Hardware Config ------------------------ */
+
+/* #define USB_CFG_PULLUP_IOPORTNAME D */
+/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
+ * V+, you can connect and disconnect the device from firmware by calling
+ * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
+ * This constant defines the port on which the pullup resistor is connected.
+ */
+/* #define USB_CFG_PULLUP_BIT 4 */
+/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
+ * above) where the 1.5k pullup resistor is connected. See description
+ * above for details.
+ */
+
+/* --------------------------- Functional Range ---------------------------- */
+
+#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
+/* Define this to 1 if you want to compile a version with two endpoints: The
+ * default control endpoint 0 and an interrupt-in endpoint (any other endpoint
+ * number).
+ */
+#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1
+/* Define this to 1 if you want to compile a version with three endpoints: The
+ * default control endpoint 0, an interrupt-in endpoint 3 (or the number
+ * configured below) and a catch-all default interrupt-in endpoint as above.
+ * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
+ */
+#define USB_CFG_EP3_NUMBER 3
+/* If the so-called endpoint 3 is used, it can now be configured to any other
+ * endpoint number (except 0) with this macro. Default if undefined is 3.
+ */
+/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
+/* The above macro defines the startup condition for data toggling on the
+ * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
+ * Since the token is toggled BEFORE sending any data, the first packet is
+ * sent with the oposite value of this configuration!
+ */
+#define USB_CFG_IMPLEMENT_HALT 0
+/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
+ * for endpoint 1 (interrupt endpoint). Although you may not need this feature,
+ * it is required by the standard. We have made it a config option because it
+ * bloats the code considerably.
+ */
+#define USB_CFG_SUPPRESS_INTR_CODE 0
+/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
+ * want to send any data over them. If this macro is defined to 1, functions
+ * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
+ * you need the interrupt-in endpoints in order to comply to an interface
+ * (e.g. HID), but never want to send any data. This option saves a couple
+ * of bytes in flash memory and the transmit buffers in RAM.
+ */
+#define USB_CFG_INTR_POLL_INTERVAL 1
+/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
+ * interval. The value is in milliseconds and must not be less than 10 ms for
+ * low speed devices.
+ */
+#define USB_CFG_IS_SELF_POWERED 0
+/* Define this to 1 if the device has its own power supply. Set it to 0 if the
+ * device is powered from the USB bus.
+ */
+#define USB_CFG_MAX_BUS_POWER 500
+/* Set this variable to the maximum USB bus power consumption of your device.
+ * The value is in milliamperes. [It will be divided by two since USB
+ * communicates power requirements in units of 2 mA.]
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITE 1
+/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
+ * transfers. Set it to 0 if you don't need it and want to save a couple of
+ * bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_READ 0
+/* Set this to 1 if you need to send control replies which are generated
+ * "on the fly" when usbFunctionRead() is called. If you only want to send
+ * data from a static buffer, set it to 0 and return the data from
+ * usbFunctionSetup(). This saves a couple of bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
+/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
+ * You must implement the function usbFunctionWriteOut() which receives all
+ * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
+ * can be found in 'usbRxToken'.
+ */
+#define USB_CFG_HAVE_FLOWCONTROL 0
+/* Define this to 1 if you want flowcontrol over USB data. See the definition
+ * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
+ * usbdrv.h.
+ */
+#define USB_CFG_DRIVER_FLASH_PAGE 0
+/* If the device has more than 64 kBytes of flash, define this to the 64 k page
+ * where the driver's constants (descriptors) are located. Or in other words:
+ * Define this to 1 for boot loaders on the ATMega128.
+ */
+#define USB_CFG_LONG_TRANSFERS 0
+/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
+ * in a single control-in or control-out transfer. Note that the capability
+ * for long transfers increases the driver size.
+ */
+/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
+/* This macro is a hook if you want to do unconventional things. If it is
+ * defined, it's inserted at the beginning of received message processing.
+ * If you eat the received message and don't want default processing to
+ * proceed, do a return after doing your things. One possible application
+ * (besides debugging) is to flash a status LED on each packet.
+ */
+/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
+/* This macro is a hook if you need to know when an USB RESET occurs. It has
+ * one parameter which distinguishes between the start of RESET state and its
+ * end.
+ */
+/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
+/* This macro (if defined) is executed when a USB SET_ADDRESS request was
+ * received.
+ */
+#define USB_COUNT_SOF 1
+/* define this macro to 1 if you need the global variable "usbSofCount" which
+ * counts SOF packets. This feature requires that the hardware interrupt is
+ * connected to D- instead of D+.
+ */
+/* #ifdef __ASSEMBLER__
+ * macro myAssemblerMacro
+ * in YL, TCNT0
+ * sts timer0Snapshot, YL
+ * endm
+ * #endif
+ * #define USB_SOF_HOOK myAssemblerMacro
+ * This macro (if defined) is executed in the assembler module when a
+ * Start Of Frame condition is detected. It is recommended to define it to
+ * the name of an assembler macro which is defined here as well so that more
+ * than one assembler instruction can be used. The macro may use the register
+ * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
+ * immediately after an SOF pulse may be lost and must be retried by the host.
+ * What can you do with this hook? Since the SOF signal occurs exactly every
+ * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
+ * designs running on the internal RC oscillator.
+ * Please note that Start Of Frame detection works only if D- is wired to the
+ * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
+ */
+#define USB_CFG_CHECK_DATA_TOGGLING 0
+/* define this macro to 1 if you want to filter out duplicate data packets
+ * sent by the host. Duplicates occur only as a consequence of communication
+ * errors, when the host does not receive an ACK. Please note that you need to
+ * implement the filtering yourself in usbFunctionWriteOut() and
+ * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
+ * for each control- and out-endpoint to check for duplicate packets.
+ */
+#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
+/* define this macro to 1 if you want the function usbMeasureFrameLength()
+ * compiled in. This function can be used to calibrate the AVR's RC oscillator.
+ */
+#define USB_USE_FAST_CRC 0
+/* The assembler module has two implementations for the CRC algorithm. One is
+ * faster, the other is smaller. This CRC routine is only used for transmitted
+ * messages where timing is not critical. The faster routine needs 31 cycles
+ * per byte while the smaller one needs 61 to 69 cycles. The faster routine
+ * may be worth the 32 bytes bigger code size if you transmit lots of data and
+ * run the AVR close to its limit.
+ */
+
+/* -------------------------- Device Description --------------------------- */
+
+#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
+/* USB vendor ID for the device, low byte first. If you have registered your
+ * own Vendor ID, define it here. Otherwise you may use one of obdev's free
+ * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
+/* This is the ID of the product, low byte first. It is interpreted in the
+ * scope of the vendor ID. If you have registered your own VID with usb.org
+ * or if you have licensed a PID from somebody else, define it here. Otherwise
+ * you may use one of obdev's free shared VID/PID pairs. See the file
+ * USB-IDs-for-free.txt for details!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
+#define USB_CFG_VENDOR_NAME_LEN 13
+/* These two values define the vendor name returned by the USB device. The name
+ * must be given as a list of characters under single quotes. The characters
+ * are interpreted as Unicode (UTF-16) entities.
+ * If you don't want a vendor name string, undefine these macros.
+ * ALWAYS define a vendor name containing your Internet domain name if you use
+ * obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
+ * details.
+ */
+#define USB_CFG_DEVICE_NAME 'p', 's', '2', 'a', 'v', 'r', 'G', 'B'
+#define USB_CFG_DEVICE_NAME_LEN 8
+/* Same as above for the device name. If you don't want a device name, undefine
+ * the macros. See the file USB-IDs-for-free.txt before you assign a name if
+ * you use a shared VID/PID.
+ */
+/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
+/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
+/* Same as above for the serial number. If you don't want a serial number,
+ * undefine the macros.
+ * It may be useful to provide the serial number through other means than at
+ * compile time. See the section about descriptor properties below for how
+ * to fine tune control over USB descriptors such as the string descriptor
+ * for the serial number.
+ */
+#define USB_CFG_DEVICE_CLASS 0
+#define USB_CFG_DEVICE_SUBCLASS 0
+/* See USB specification if you want to conform to an existing device class.
+ * Class 0xff is "vendor specific".
+ */
+#define USB_CFG_INTERFACE_CLASS 3 /* HID */
+#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
+#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
+/* See USB specification if you want to conform to an existing device class or
+ * protocol. The following classes must be set at interface level:
+ * HID class is 3, no subclass and protocol required (but may be useful!)
+ * CDC class is 2, use subclass 2 and protocol 1 for ACM
+ */
+#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
+/* Define this to the length of the HID report descriptor, if you implement
+ * an HID device. Otherwise don't define it or define it to 0.
+ * If you use this define, you must add a PROGMEM character array named
+ * "usbHidReportDescriptor" to your code which contains the report descriptor.
+ * Don't forget to keep the array and this define in sync!
+ */
+
+/* #define USB_PUBLIC static */
+/* Use the define above if you #include usbdrv.c instead of linking against it.
+ * This technique saves a couple of bytes in flash memory.
+ */
+
+/* ------------------- Fine Control over USB Descriptors ------------------- */
+/* If you don't want to use the driver's default USB descriptors, you can
+ * provide our own. These can be provided as (1) fixed length static data in
+ * flash memory, (2) fixed length static data in RAM or (3) dynamically at
+ * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
+ * information about this function.
+ * Descriptor handling is configured through the descriptor's properties. If
+ * no properties are defined or if they are 0, the default descriptor is used.
+ * Possible properties are:
+ * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
+ * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
+ * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
+ * you want RAM pointers.
+ * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
+ * in static memory is in RAM, not in flash memory.
+ * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
+ * the driver must know the descriptor's length. The descriptor itself is
+ * found at the address of a well known identifier (see below).
+ * List of static descriptor names (must be declared PROGMEM if in flash):
+ * char usbDescriptorDevice[];
+ * char usbDescriptorConfiguration[];
+ * char usbDescriptorHidReport[];
+ * char usbDescriptorString0[];
+ * int usbDescriptorStringVendor[];
+ * int usbDescriptorStringDevice[];
+ * int usbDescriptorStringSerialNumber[];
+ * Other descriptors can't be provided statically, they must be provided
+ * dynamically at runtime.
+ *
+ * Descriptor properties are or-ed or added together, e.g.:
+ * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
+ *
+ * The following descriptors are defined:
+ * USB_CFG_DESCR_PROPS_DEVICE
+ * USB_CFG_DESCR_PROPS_CONFIGURATION
+ * USB_CFG_DESCR_PROPS_STRINGS
+ * USB_CFG_DESCR_PROPS_STRING_0
+ * USB_CFG_DESCR_PROPS_STRING_VENDOR
+ * USB_CFG_DESCR_PROPS_STRING_PRODUCT
+ * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
+ * USB_CFG_DESCR_PROPS_HID
+ * USB_CFG_DESCR_PROPS_HID_REPORT
+ * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
+ *
+ * Note about string descriptors: String descriptors are not just strings, they
+ * are Unicode strings prefixed with a 2 byte header. Example:
+ * int serialNumberDescriptor[] = {
+ * USB_STRING_DESCRIPTOR_HEADER(6),
+ * 'S', 'e', 'r', 'i', 'a', 'l'
+ * };
+ */
+
+#define USB_CFG_DESCR_PROPS_DEVICE 0
+#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_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/pearl/config.h b/keyboards/pearl/config.h
index 9f7a148f9..c0594bf91 100644
--- a/keyboards/pearl/config.h
+++ b/keyboards/pearl/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef PEARL_CONFIG_H
-#define PEARL_CONFIG_H
+#pragma once
#include "config_common.h"
@@ -46,4 +45,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* key combination for command */
#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
-#endif
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
diff --git a/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c b/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c
index b94fb673f..759c6fdc7 100644
--- a/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c
+++ b/keyboards/pearl/keymaps/jetpacktuxedo/keymap.c
@@ -10,7 +10,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[1] = LAYOUT_all(
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_QUOT, KC_TRNS,
- KC_TRNS, RGB_TOG, RGB_SMOD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BSLS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_all(
diff --git a/keyboards/pearl/pearl.h b/keyboards/pearl/pearl.h
index 900d4817a..6f5fbce5d 100644
--- a/keyboards/pearl/pearl.h
+++ b/keyboards/pearl/pearl.h
@@ -54,7 +54,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
{ 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, KC_NO}, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, KC_NO}, \
- { K30, K31, KC_NO, KC_NO, K34, K35, KC_NO, KC_NO, KC_NO, K39, K3A, KC_NO, KC_NO}, \
+ { K30, K31, KC_NO, KC_NO, KC_NO, K35, KC_NO, KC_NO, KC_NO, K39, K3A, KC_NO, KC_NO}, \
}
diff --git a/keyboards/pearl/rules.mk b/keyboards/pearl/rules.mk
index c5b61c6d3..fac85172e 100644
--- a/keyboards/pearl/rules.mk
+++ b/keyboards/pearl/rules.mk
@@ -26,13 +26,13 @@ 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
+# 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 = yes
-MOUSEKEY_ENABLE = yes
+BOOTMAGIC_ENABLE = full
+MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes
CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
@@ -47,4 +47,4 @@ CUSTOM_MATRIX = yes
SRC = matrix.c i2c.c
# programming options
-PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex \ No newline at end of file
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
diff --git a/keyboards/pegasushoof/README.md b/keyboards/pegasushoof/README.md
deleted file mode 100644
index b57191c0f..000000000
--- a/keyboards/pegasushoof/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-Pegasus Hoof Controller
-===
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: Pegasus Hoof
-Hardware Availability: https://1upkeyboards.com/filco-pegasus-hoof-controller.html
-
-Make example for this keyboard (after setting up your build environment):
-
- make pegasus_hoof:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/pegasushoof/keymaps/blowrak/keymap.c b/keyboards/pegasushoof/keymaps/blowrak/keymap.c
deleted file mode 100644
index 6faf4db6f..000000000
--- a/keyboards/pegasushoof/keymaps/blowrak/keymap.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-Copyright 2016 Daniel Svensson <dsvensson@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 "pegasushoof.h"
-
-#define _______ KC_TRNS
-
-/* Swedish keys */
-#define SE_HALF KC_GRV
-#define SE_PLUS KC_MINS
-#define SE_ACUT KC_EQL
-#define SE_AO KC_LBRC
-#define SE_CIRC KC_RBRC
-#define SE_QUOT KC_BSLS
-#define SE_OE KC_SCLN
-#define SE_AE KC_QUOT
-#define SE_MINS KC_SLSH
-#define SE_LTGT KC_NUBS
-#define SE_LCBR RALT(KC_7)
-#define SE_LBRC RALT(KC_8)
-#define SE_RBRC RALT(KC_9)
-#define SE_RCBR RALT(KC_0)
-#define SE_PIPE RALT(SE_LTGT)
-#define SE_BSLS RALT(SE_PLUS)
-
-#define KM_BLOWRAK 0
-#define KM_QWERTY 1
-#define KM_MEDIA 2
-#define KM_HAXHAX 3
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Layer 0: Blowrak ISO layer, a Swedish take on Dvorak */
- [KM_BLOWRAK] = KEYMAP( \
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
- SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
- KC_TAB, SE_AO, SE_AE, SE_OE, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_COMM,SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
- KC_LCTRL,KC_A, KC_O, KC_E, KC_U, KC_I, KC_H, KC_D, KC_T, KC_N, KC_S, SE_MINS, KC_ENT, \
- KC_LSFT, SE_LTGT,KC_DOT, KC_Q, KC_J, KC_K, KC_B, KC_X, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, KC_UP, \
- KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
- /* Layer 1: Standard ISO layer */
- [KM_QWERTY] = KEYMAP( \
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
- SE_HALF, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, SE_PLUS,SE_ACUT,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, SE_AO, SE_CIRC,SE_QUOT, KC_DEL, KC_END, KC_PGDN, \
- KC_LCTRL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SE_OE, SE_AE, KC_ENT, \
- KC_LSFT, SE_LTGT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, SE_MINS, KC_RSFT, KC_UP, \
- KC_FN0, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN1, KC_LEFT,KC_DOWN,KC_RGHT),
- /* Layer 2: Media layer */
- [KM_MEDIA] = KEYMAP( \
- _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_MUTE,_______,KC_VOLD, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_MPLY, \
- _______,_______,_______, _______, _______,_______,RESET ,_______, KC_MPRV,KC_MSTP,KC_MNXT),
- /* Layer 3: Programming layer */
- [KM_HAXHAX] = KEYMAP( \
- _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
- _______,SE_LCBR,SE_PIPE,SE_RCBR,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
- _______,SE_LBRC,SE_BSLS,SE_RBRC,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, \
- _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(KM_MEDIA),
- [1] = ACTION_LAYER_TOGGLE(KM_QWERTY)
-};
-
-void matrix_scan_user(void)
-{
- uint8_t layer = biton32(layer_state);
- switch (layer) {
- case KM_BLOWRAK:
- ph_caps_led_on();
- ph_sclk_led_off();
- break;
- case KM_QWERTY:
- ph_sclk_led_on();
- ph_caps_led_off();
- break;
- }
-}
-
-/* Mixes in KM_HAXHAX via RALT modifier without shadowing the RALT key combinations. */
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- uint8_t modifiers = get_mods();
- if (modifiers & MOD_BIT(KC_RALT) && record->event.pressed) {
- uint16_t kc = keymap_key_to_keycode(KM_HAXHAX, record->event.key);
- if (kc != KC_TRNS) {
- register_code(kc);
- unregister_code(kc);
- return false;
- }
- }
- return true;
-}
diff --git a/keyboards/pegasushoof/keymaps/blowrak/rules.mk b/keyboards/pegasushoof/keymaps/blowrak/rules.mk
deleted file mode 100644
index 168fb625b..000000000
--- a/keyboards/pegasushoof/keymaps/blowrak/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42
-NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/pegasushoof/keymaps/citadel/config.h b/keyboards/pegasushoof/keymaps/citadel/config.h
deleted file mode 100644
index e8eafe2e1..000000000
--- a/keyboards/pegasushoof/keymaps/citadel/config.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-/* overridden settings: */
-
-#undef PRODUCT
-#define PRODUCT Pegasus Hoof Citadel
-
-/* necessary option for this keymap, because CAPS is redefined in Layer 0 */
-#define PREVENT_STUCK_MODIFIERS
-
-#endif
diff --git a/keyboards/pegasushoof/keymaps/citadel/keymap.c b/keyboards/pegasushoof/keymaps/citadel/keymap.c
deleted file mode 100644
index 382854de9..000000000
--- a/keyboards/pegasushoof/keymaps/citadel/keymap.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* Copyright 2018 Daniel Rose <droseger@protonmail.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 "pegasushoof.h"
-
-/* Allow shortcuts for combos like RALT(KC_RBRC) that don't take up more than 7 characters: */
-#define G(kc) RALT(KC_##kc)
-#define A(kc) LALT(KC_##kc)
-#define C(kc) LCTL(KC_##kc)
-#undef S /* Original shortcut (quantum_keycodes.h) takes full-sized keycodes: too long! */
-#define S(kc) LSFT(KC_##kc)
-#define CTALDEL LCTL(LALT(KC_DEL))
-
-enum layers {
- DEF,
- FUN,
- RES,
-};
-
-enum tap_dance {
- AF4,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Layer 0: default layer (ISO-DE)
- * .----. .-------------------. .-------------------. .-------------------. .--------------.
- * |Esc | |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10 |F11 |F12 | |PrSc|SLck|2Tp:|
- * | | | | | | | | | | | | | | | | | |SyRq| |A+F4|
- * '----' '-------------------' '-------------------' '-------------------' '--------------'
- * .------------------------------------------------------------------------. .--------------.
- * |° |! |" |§ |$ |% |& |/ |( |) |= |? |` |Backspa| |Ins |Home|PgUp|
- * |^ |1 |2 ²|3 ³|4 |5 |6 |7 {|8 [|9 ]|0 }|ß \|´ | | | | | |
- * |------------------------------------------------------------------------| |--------------|
- * |Tab |Q |W |E |R |T |Z |U |I |O |P |Ü |* | E | |Del |End |PgDn|
- * | | | | €| | | | | | | | |+ ~| n | | | | |
- * |------------------------------------------------------------------\ t | '--------------'
- * |Fn: |A |S |D |F |G |H |J |K |L |Ö |Ä |' | e |
- * |Layer 2| | | | | | | | | | | |# | r |
- * |------------------------------------------------------------------------| .----.
- * |Shift|> |Y |X |C |V |B |N |M |; |: |_ |Shift | |Up |
- * | |< ¦| | | | | | | µ|, |. |- | | | |
- * |------------------------------------------------------------------------| .--------------.
- * |Ctrl |Super|Alt | |AltGr|Alt |Fn: |Ctrl | |Left|Down|Righ|
- * | | | | | | |Lay 2| | | | | |
- * '------------------------------------------------------------------------' '--------------'
- * NUHS = true position of KC_NUHS
- */
-[DEF] = KEYMAP( \
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,TD(AF4), \
- 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_NUHS, KC_DEL, KC_END, KC_PGDN, \
- MO(FUN),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT,/*NUHS*/KC_ENT, \
- KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_LALT,MO(FUN),KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT),
-
- /* Layer 1: function layer
- * .----. .-------------------. .-------------------. .-------------------. .--------------.
- * |Ctl+| |My |WWW:|Calc|Medi| |Mus:|Mus:|Mus:|Mus:| |Vol:|Vol:|Vol:|See:| | | |Paus|
- * |A+De| |Comp|Home| |Play| |Prev|Next|Paus|Stop| |Mute|Down|Up |[3] | | | |Brea|
- * '----' '-------------------' '-------------------' '-------------------' '--------------'
- * .------------------------------------------------------------------------. .--------------.
- * | | | | | | | | | | | | | | | | | |Mou:|
- * | | | | | | | |{ |[ |] |} |\ | | | | | |WhUp|
- * |------------------------------------------------------------------------| |--------------|
- * | | | | | | | | | | | | |~ | | | | |Mou:|
- * | | | | | | | | | | | | | | | | | |WhDn|
- * |------------------------------------------------------------------\ | '--------------'
- * |CapsLck|Mou:|Mou:| | | | | | | | | | | |
- * | |Fast|Slow| | | | | | | | | | | |
- * |------------------------------------------------------------------------| .----.
- * | | | | | | | | |µ | | | | | |Mou:|
- * | | | | | | | | | | | | | | |Up |
- * |------------------------------------------------------------------------| .--------------.
- * |Mous:|Mous:| | | |Super|App | | |Mou:|Mou:|Mou:|
- * |Bttn2|Bttn1| | | | | | | |Left|Down|Righ|
- * '------------------------------------------------------------------------' '--------------'
- *
- */
-[FUN] = KEYMAP( \
- CTALDEL, KC_MYCM,KC_WHOM,KC_CALC,KC_MSEL,KC_MPRV,KC_MNXT,KC_MPLY,KC_MSTP,KC_MUTE,KC_VOLD,KC_VOLU,MO(RES), _______,KC_SLCK,KC_PAUS, \
- _______,_______,_______,_______,_______,_______,_______,G(7), G(8), G(9), G(0), G(MINS),_______,_______, _______,_______,KC_WH_U, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,G(RBRC),_______, _______,_______,KC_WH_D, \
- KC_CAPS,KC_ACL2,KC_ACL0,_______,_______,_______,_______,_______,_______,_______,_______,_______,/*NUHS*/_______, \
- _______,_______,_______,_______,_______,_______,_______,_______,G(M), _______,_______,_______, _______, KC_MS_U, \
- KC_BTN2,KC_BTN1,_______, _______, _______,KC_RGUI,KC_APP ,_______, KC_MS_L,KC_MS_D,KC_MS_R),
-
-
-/* Layer 3: Reset layer (prevents accidental resets) */
-[RES] = KEYMAP( \
- _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
- _______,_______,_______,_______,RESET, _______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,_______, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,/*NUHS*/_______, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, _______, \
- _______,_______,_______, _______, _______,_______,_______,_______, _______,_______,_______),
-};
-
-qk_tap_dance_action_t tap_dance_actions[] = {
- /* Tap once: nothing. Tap twice: Alt+F4 */
- [AF4] = ACTION_TAP_DANCE_DOUBLE(XXXXXXX,A(F4)),
-};
-
-void led_set_user(uint8_t usb_led) {
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- ph_caps_led_on();
- } else {
- ph_caps_led_off();
- }
-
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- ph_sclk_led_on();
- } else {
- ph_sclk_led_off();
- }
-}
diff --git a/keyboards/pegasushoof/keymaps/citadel/rules.mk b/keyboards/pegasushoof/keymaps/citadel/rules.mk
deleted file mode 100644
index 0dd8a79f4..000000000
--- a/keyboards/pegasushoof/keymaps/citadel/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# Build Options
-# change to "no" to disable the options
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42
-NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-TAP_DANCE_ENABLE = yes # see https://docs.qmk.fm/#/feature_tap_dance (+1000)
-
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/pegasushoof/keymaps/default/keymap.c b/keyboards/pegasushoof/keymaps/default/keymap.c
deleted file mode 100644
index aa006b23a..000000000
--- a/keyboards/pegasushoof/keymaps/default/keymap.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-Copyright 2016 Daniel Svensson <dsvensson@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 "pegasushoof.h"
-
-#define _______ KC_TRNS
-
-#define KM_QWERTY 0
-#define KM_MEDIA 1
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Layer 0: Standard ISO layer */
- [KM_QWERTY] = KEYMAP( \
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR,KC_SLCK,KC_PAUS, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,KC_EQL, KC_BSPC, KC_INS, KC_HOME,KC_PGUP, \
- KC_TAB, KC_Q, KC_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_CLCK, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
- KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI,KC_MENU,KC_FN0, KC_LEFT,KC_DOWN,KC_RGHT),
- /* Layer 1: Function layer */
- [KM_MEDIA] = KEYMAP( \
- _______, _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, KC_WAKE,KC_PWR, KC_SLEP, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLU, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______,KC_VOLD, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, \
- _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______, _______, KC_MPLY, \
- _______,_______,_______, _______, _______,_______,RESET ,_______, KC_MPRV,KC_MSTP,KC_MNXT)
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [0] = ACTION_LAYER_MOMENTARY(KM_MEDIA)
-};
-
-void led_set_user(uint8_t usb_led) {
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- ph_caps_led_on();
- } else {
- ph_caps_led_off();
- }
-
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- ph_sclk_led_on();
- } else {
- ph_sclk_led_off();
- }
-}
diff --git a/keyboards/pegasushoof/keymaps/default/rules.mk b/keyboards/pegasushoof/keymaps/default/rules.mk
deleted file mode 100644
index 168fb625b..000000000
--- a/keyboards/pegasushoof/keymaps/default/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Custom matrix file for the Pegasus Hoof due to the 2x74HC42
-NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/pegasushoof/matrix.c b/keyboards/pegasushoof/matrix.c
deleted file mode 100644
index d2a74b8d7..000000000
--- a/keyboards/pegasushoof/matrix.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
-Copyright 2014 Ralf Schmitt <ralf@bunkertor.net>
-Copyright 2016 Daniel Svensson <dsvensson@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 <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-
-static uint8_t debouncing = DEBOUNCING_DELAY;
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-static matrix_row_t read_cols(void);
-static void select_row(uint8_t col);
-
-inline uint8_t matrix_rows(void)
-{
- return MATRIX_ROWS;
-}
-
-inline uint8_t matrix_cols(void)
-{
- return MATRIX_COLS;
-}
-
-void matrix_init(void)
-{
- /* Column output pins */
- DDRD |= 0b01111011;
- /* Row input pins */
- DDRC &= ~0b10000000;
- DDRB &= ~0b01111111;
- PORTC |= 0b10000000;
- PORTB |= 0b01111111;
-
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void)
-{
- for (uint8_t col = 0; col < MATRIX_COLS; col++) {
- select_row(col);
- wait_us(30);
- matrix_row_t rows = read_cols();
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
- bool curr_bit = rows & (1<<row);
- if (prev_bit != curr_bit) {
- matrix_debouncing[row] ^= (matrix_row_t) 1 << col;
- debouncing = DEBOUNCING_DELAY;
- }
- }
- }
-
- if (debouncing) {
- if (--debouncing) {
- wait_ms(1);
- } else {
- for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
- matrix[i] = matrix_debouncing[i];
- }
- }
- }
-
- matrix_scan_quantum();
-
- return 1;
-}
-
-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] & 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 matrix_row_t read_cols(void)
-{
- return
- (PINB & (1 << 5) ? 0 : 1 << 0) |
- (PINC & (1 << 7) ? 0 : 1 << 1) |
- (PINB & (1 << 4) ? 0 : 1 << 2) |
- (PINB & (1 << 6) ? 0 : 1 << 3) |
- (PINB & (1 << 1) ? 0 : 1 << 4) |
- (PINB & (1 << 0) ? 0 : 1 << 5) |
- (PINB & (1 << 3) ? 0 : 1 << 6) |
- (PINB & (1 << 2) ? 0 : 1 << 7);
-}
-
-static void select_row(uint8_t col)
-{
- switch (col) {
- case 0:
- PORTD = (PORTD & ~0b01111011) | 0b00110011;
- break;
- case 1:
- PORTD = (PORTD & ~0b01111011) | 0b01110000;
- break;
- case 2:
- PORTD = (PORTD & ~0b01111011) | 0b00010011;
- break;
- case 3:
- PORTD = (PORTD & ~0b01111011) | 0b01101000;
- break;
- case 4:
- PORTD = (PORTD & ~0b01111011) | 0b00001011;
- break;
- case 5:
- PORTD = (PORTD & ~0b01111011) | 0b00111011;
- break;
- case 6:
- PORTD = (PORTD & ~0b01111011) | 0b01111000;
- break;
- case 7:
- PORTD = (PORTD & ~0b01111011) | 0b01100001;
- break;
- case 8:
- PORTD = (PORTD & ~0b01111011) | 0b01101001;
- break;
- case 9:
- PORTD = (PORTD & ~0b01111011) | 0b01110001;
- break;
- case 10:
- PORTD = (PORTD & ~0b01111011) | 0b01101010;
- break;
- case 11:
- PORTD = (PORTD & ~0b01111011) | 0b01100010;
- break;
- case 12:
- PORTD = (PORTD & ~0b01111011) | 0b01111001;
- break;
- case 13:
- PORTD = (PORTD & ~0b01111011) | 0b01100000;
- break;
- case 14:
- PORTD = (PORTD & ~0b01111011) | 0b01000011;
- break;
- case 15:
- PORTD = (PORTD & ~0b01111011) | 0b00011011;
- break;
- case 16:
- PORTD = (PORTD & ~0b01111011) | 0b00100011;
- break;
- case 17:
- PORTD = (PORTD & ~0b01111011) | 0b00101011;
- break;
- }
-}
diff --git a/keyboards/pegasushoof/pegasushoof.h b/keyboards/pegasushoof/pegasushoof.h
deleted file mode 100644
index d031e3ed2..000000000
--- a/keyboards/pegasushoof/pegasushoof.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-Copyright 2016 Daniel Svensson <dsvensson@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef PEGASUSHOOF_H
-#define PEGASUSHOOF_H
-
-#include "matrix.h"
-#include "quantum.h"
-
-#define ___ KC_NO
-
-#define KEYMAP( \
- KG6, KH4, KI4, KI2, KI6, KP5, KL6, KM2, KM4, KO4, KO5, KO6, KO0, KN5, KN7, KP7, \
- KG4, KG5, KH5, KI5, KJ5, KJ4, KK4, KK5, KL5, KM5, KF5, KF4, KL4, KO2, KR4, KC4, KE4, \
- KG2, KG7, KH7, KI7, KJ7, KJ2, KK2, KK7, KL7, KM7, KF7, KF2, KL2, KO3, KQ4, KC5, KE5, \
- KH2, KG3, KH3, KI3, KJ3, KJ6, KK6, KK3, KL3, KM3, KF3, KF6, KO1, \
- KB2, KH6, KG1, KH1, KI1, KJ1, KJ0, KK0, KK1, KL1, KM1, KF0, KB3, KC6, \
- KP4, KD2, KN6, KQ6, KN0, KA3, KM0, KP1, KC0, KQ0, KR0 \
- ) { /* 00-A 01-B 02-C 03-D 04-E 05-F 06-G 07-H 08-I 09-J 10-K 11-L 12-M 13-N 14-O 15-P 16-Q 17-R */ \
- /* 0 */ { ___ , ___ , KC0 , ___ , ___ , KF0 , ___ , ___ , ___ , KJ0 , KK0 , ___ , KM0 , KN0 , KO0 , ___ , KQ0 , KR0 }, \
- /* 1 */ { ___ , ___ , ___ , ___ , ___ , ___ , KG1 , KH1 , KI1 , KJ1 , KK1 , KL1 , KM1 , ___ , KO1 , KP1 , ___ , ___ }, \
- /* 2 */ { ___ , KB2 , ___ , KD2 , ___ , KF2 , KG2 , KH2 , KI2 , KJ2 , KK2 , KL2 , KM2 , ___ , KO2 , ___ , ___ , ___ }, \
- /* 3 */ { KA3 , KB3 , ___ , ___ , ___ , KF3 , KG3 , KH3 , KI3 , KJ3 , KK3 , KL3 , KM3 , ___ , KO3 , ___ , ___ , ___ }, \
- /* 4 */ { ___ , ___ , KC4 , ___ , KE4 , KF4 , KG4 , KH4 , KI4 , KJ4 , KK4 , KL4 , KM4 , ___ , KO4 , KP4 , KQ4 , KR4 }, \
- /* 5 */ { ___ , ___ , KC5 , ___ , KE5 , KF5 , KG5 , KH5 , KI5 , KJ5 , KK5 , KL5 , KM5 , KN5 , KO5 , KP5 , ___ , ___ }, \
- /* 6 */ { ___ , ___ , KC6 , ___ , ___ , KF6 , KG6 , KH6 , KI6 , KJ6 , KK6 , KL6 , ___ , KN6 , KO6 , ___ , KQ6 , ___ }, \
- /* 7 */ { ___ , ___ , ___ , ___ , ___ , KF7 , KG7 , KH7 , KI7 , KJ7 , KK7 , KL7 , KM7 , KN7 , ___ , KP7 , ___ , ___ }, \
- }
-
-inline void ph_caps_led_on(void) { DDRC |= (1<<6); PORTC &= ~(1<<6); }
-inline void ph_caps_led_off(void) { DDRC &= ~(1<<6); PORTC &= ~(1<<6); }
-
-inline void ph_sclk_led_on(void) { DDRC |= (1<<5); PORTC &= ~(1<<5); }
-inline void ph_sclk_led_off(void) { DDRC &= ~(1<<5); PORTC &= ~(1<<5); }
-
-
-#endif
diff --git a/keyboards/pegasushoof/rules.mk b/keyboards/pegasushoof/rules.mk
deleted file mode 100644
index c5a35428c..000000000
--- a/keyboards/pegasushoof/rules.mk
+++ /dev/null
@@ -1,67 +0,0 @@
-# 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
-
-
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-
-
-CUSTOM_MATRIX = yes
-SRC = matrix.c
diff --git a/keyboards/phantom/info.json b/keyboards/phantom/info.json
index cf7b16180..6a1e4f72f 100644
--- a/keyboards/phantom/info.json
+++ b/keyboards/phantom/info.json
@@ -459,6 +459,480 @@
}
]
},
+ "LAYOUT_tkl_ansi_plus_five": {
+ "key_count": 92,
+ "layout": [
+ {
+ "label": "Esc",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "F1",
+ "x": 2,
+ "y": 0
+ },
+ {
+ "label": "F2",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "F3",
+ "x": 4,
+ "y": 0
+ },
+ {
+ "label": "F4",
+ "x": 5,
+ "y": 0
+ },
+ {
+ "label": "F5",
+ "x": 6.5,
+ "y": 0
+ },
+ {
+ "label": "F6",
+ "x": 7.5,
+ "y": 0
+ },
+ {
+ "label": "F7",
+ "x": 8.5,
+ "y": 0
+ },
+ {
+ "label": "F8",
+ "x": 9.5,
+ "y": 0
+ },
+ {
+ "label": "F9",
+ "x": 11,
+ "y": 0
+ },
+ {
+ "label": "F10",
+ "x": 12,
+ "y": 0
+ },
+ {
+ "label": "F11",
+ "x": 13,
+ "y": 0
+ },
+ {
+ "label": "F12",
+ "x": 14,
+ "y": 0
+ },
+ {
+ "label": "PrtSc",
+ "x": 15.25,
+ "y": 0
+ },
+ {
+ "label": "Scroll Lock",
+ "x": 16.25,
+ "y": 0
+ },
+ {
+ "label": "Pause",
+ "x": 17.25,
+ "y": 0
+ },
+ {
+ "label": "~",
+ "x": 0,
+ "y": 1.5
+ },
+ {
+ "label": "!",
+ "x": 1,
+ "y": 1.5
+ },
+ {
+ "label": "@",
+ "x": 2,
+ "y": 1.5
+ },
+ {
+ "label": "#",
+ "x": 3,
+ "y": 1.5
+ },
+ {
+ "label": "$",
+ "x": 4,
+ "y": 1.5
+ },
+ {
+ "label": "%",
+ "x": 5,
+ "y": 1.5
+ },
+ {
+ "label": "^",
+ "x": 6,
+ "y": 1.5
+ },
+ {
+ "label": "&",
+ "x": 7,
+ "y": 1.5
+ },
+ {
+ "label": "*",
+ "x": 8,
+ "y": 1.5
+ },
+ {
+ "label": "(",
+ "x": 9,
+ "y": 1.5
+ },
+ {
+ "label": ")",
+ "x": 10,
+ "y": 1.5
+ },
+ {
+ "label": "_",
+ "x": 11,
+ "y": 1.5
+ },
+ {
+ "label": "+",
+ "x": 12,
+ "y": 1.5
+ },
+ {
+ "label": "Backspace",
+ "x": 13,
+ "y": 1.5,
+ "w": 2
+ },
+ {
+ "label": "Insert",
+ "x": 15.25,
+ "y": 1.5
+ },
+ {
+ "label": "Home",
+ "x": 16.25,
+ "y": 1.5
+ },
+ {
+ "label": "PgUp",
+ "x": 17.25,
+ "y": 1.5
+ },
+ {
+ "label": "Tab",
+ "x": 0,
+ "y": 2.5,
+ "w": 1.5
+ },
+ {
+ "label": "Q",
+ "x": 1.5,
+ "y": 2.5
+ },
+ {
+ "label": "W",
+ "x": 2.5,
+ "y": 2.5
+ },
+ {
+ "label": "E",
+ "x": 3.5,
+ "y": 2.5
+ },
+ {
+ "label": "R",
+ "x": 4.5,
+ "y": 2.5
+ },
+ {
+ "label": "T",
+ "x": 5.5,
+ "y": 2.5
+ },
+ {
+ "label": "Y",
+ "x": 6.5,
+ "y": 2.5
+ },
+ {
+ "label": "U",
+ "x": 7.5,
+ "y": 2.5
+ },
+ {
+ "label": "I",
+ "x": 8.5,
+ "y": 2.5
+ },
+ {
+ "label": "O",
+ "x": 9.5,
+ "y": 2.5
+ },
+ {
+ "label": "P",
+ "x": 10.5,
+ "y": 2.5
+ },
+ {
+ "label": "{",
+ "x": 11.5,
+ "y": 2.5
+ },
+ {
+ "label": "}",
+ "x": 12.5,
+ "y": 2.5
+ },
+ {
+ "label": "|",
+ "x": 13.5,
+ "y": 2.5,
+ "w": 1.5
+ },
+ {
+ "label": "Delete",
+ "x": 15.25,
+ "y": 2.5
+ },
+ {
+ "label": "End",
+ "x": 16.25,
+ "y": 2.5
+ },
+ {
+ "label": "PgDn",
+ "x": 17.25,
+ "y": 2.5
+ },
+ {
+ "label": "Caps Lock",
+ "x": 0,
+ "y": 3.5,
+ "w": 1.75
+ },
+ {
+ "label": "A",
+ "x": 1.75,
+ "y": 3.5
+ },
+ {
+ "label": "S",
+ "x": 2.75,
+ "y": 3.5
+ },
+ {
+ "label": "D",
+ "x": 3.75,
+ "y": 3.5
+ },
+ {
+ "label": "F",
+ "x": 4.75,
+ "y": 3.5
+ },
+ {
+ "label": "G",
+ "x": 5.75,
+ "y": 3.5
+ },
+ {
+ "label": "H",
+ "x": 6.75,
+ "y": 3.5
+ },
+ {
+ "label": "J",
+ "x": 7.75,
+ "y": 3.5
+ },
+ {
+ "label": "K",
+ "x": 8.75,
+ "y": 3.5
+ },
+ {
+ "label": "L",
+ "x": 9.75,
+ "y": 3.5
+ },
+ {
+ "label": ":",
+ "x": 10.75,
+ "y": 3.5
+ },
+ {
+ "label": "\"",
+ "x": 11.75,
+ "y": 3.5
+ },
+ {
+ "label": "Enter",
+ "x": 12.75,
+ "y": 3.5,
+ "w": 2.25
+ },
+ {
+ "x": 15.25,
+ "y": 3.5
+ },
+ {
+ "x": 16.25,
+ "y": 3.5
+ },
+ {
+ "x": 17.25,
+ "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
+ },
+ {
+ "x": 15.25,
+ "y": 4.5
+ },
+ {
+ "label": "\\u2191",
+ "x": 16.25,
+ "y": 4.5
+ },
+ {
+ "x": 17.25,
+ "y": 4.5
+ },
+ {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 5.5,
+ "w": 1.25
+ },
+ {
+ "label": "Win",
+ "x": 1.25,
+ "y": 5.5,
+ "w": 1.25
+ },
+ {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 5.5,
+ "w": 1.25
+ },
+ {
+ "x": 3.75,
+ "y": 5.5,
+ "w": 6.25
+ },
+ {
+ "label": "Alt",
+ "x": 10,
+ "y": 5.5,
+ "w": 1.25
+ },
+ {
+ "label": "Win",
+ "x": 11.25,
+ "y": 5.5,
+ "w": 1.25
+ },
+ {
+ "label": "FN",
+ "x": 12.5,
+ "y": 5.5,
+ "w": 1.25
+ },
+ {
+ "label": "Ctrl",
+ "x": 13.75,
+ "y": 5.5,
+ "w": 1.25
+ },
+ {
+ "label": "\\u2190",
+ "x": 15.25,
+ "y": 5.5
+ },
+ {
+ "label": "\\u2193",
+ "x": 16.25,
+ "y": 5.5
+ },
+ {
+ "label": "\\u2192",
+ "x": 17.25,
+ "y": 5.5
+ }
+ ]
+ },
"LAYOUT_tkl_ansi_wkl": {
"key_count": 86,
"layout": [
diff --git a/keyboards/phantom/phantom.h b/keyboards/phantom/phantom.h
index bed840f19..fa77634d3 100644
--- a/keyboards/phantom/phantom.h
+++ b/keyboards/phantom/phantom.h
@@ -54,6 +54,24 @@
K50, K51, K52, KC_NO, KC_NO, K57, KC_NO, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
)
+// Keymap for a standard ANSI layout plus the five extra keys
+// above the arrow block.
+#define LAYOUT_tkl_ansi_plus_five( \
+ K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
+ K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1D, K1E, K1F, K1G, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, K3E, K3F, K3G, \
+ K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4E, K4F, K4G, \
+ K50, K51, K52, K57, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
+) LAYOUT_7bit( \
+ K00, KC_NO, K02, K03, K04, K05, KC_NO, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
+ K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, KC_NO, K1D, K1E, K1F, K1G, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, K3E, K3F, K3G, \
+ K40, KC_NO, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, KC_NO, K4D, K4E, K4F, K4G, \
+ K50, K51, K52, KC_NO, KC_NO, K57, KC_NO, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
+)
+
#define LAYOUT_tkl_ansi_wkl( \
K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1D, K1E, K1F, K1G, \
diff --git a/keyboards/phantom/readme.md b/keyboards/phantom/readme.md
index 1ac136327..c0cb3bc20 100644
--- a/keyboards/phantom/readme.md
+++ b/keyboards/phantom/readme.md
@@ -5,8 +5,8 @@ A community-developed keyboard PCB designed to fit inside the case of a Filco Ma
See the [Deskthority wiki](https://deskthority.net/wiki/Phantom) for more information.
-Keyboard Maintainer: QMK Community
-Hardware Supported: Phantom PCB
+Keyboard Maintainer: QMK Community
+Hardware Supported: Phantom PCB
Hardware Availability: https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=536
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/planck/keymaps/ab/rules.mk b/keyboards/planck/keymaps/ab/rules.mk
index 44a030ba3..0b025a231 100644
--- a/keyboards/planck/keymaps/ab/rules.mk
+++ b/keyboards/planck/keymaps/ab/rules.mk
@@ -53,7 +53,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. Do not enable this with audio at the same time.
+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/planck/keymaps/ajp10304/config.h b/keyboards/planck/keymaps/ajp10304/config.h
deleted file mode 100644
index 11cafbefc..000000000
--- a/keyboards/planck/keymaps/ajp10304/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define PREVENT_STUCK_MODIFIERS
-
-#endif
diff --git a/keyboards/planck/keymaps/ajp10304/keymap.c b/keyboards/planck/keymaps/ajp10304/keymap.c
index ebc4e0b97..49346f7b9 100644
--- a/keyboards/planck/keymaps/ajp10304/keymap.c
+++ b/keyboards/planck/keymaps/ajp10304/keymap.c
@@ -1,4 +1,3 @@
-#pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
#include "planck.h"
#include "action_layer.h"
#include "eeconfig.h"
@@ -38,10 +37,6 @@ enum planck_keycodes {
#include "dynamic_macro.h"
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
@@ -55,12 +50,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Raise | Shift| MENU | Ctrl | Fn2 |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = {
- {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
- {MT(MOD_LSFT, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT) },
- {KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT },
- {MO(_FUNC), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LSHIFT, KC_BTN2, KC_RCTL, MO(_FUNC2) }
-},
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ MT(MOD_LSFT, KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MT(MOD_RSFT, KC_ENT),
+ KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSHIFT,
+ MO(_FUNC), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LSHIFT, KC_BTN2, KC_RCTL, MO(_FUNC2)
+),
/* Function
* ,-----------------------------------------------------------------------------------.
@@ -73,12 +68,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Fn | Ctrl | Alt | GUI |Lower | Bksp |Space |Mouse | MENU | Alt | Ctrl | Fn |
* `-----------------------------------------------------------------------------------'
*/
-[_FUNC] = {
- {KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 },
- {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, UK_TILD, KC_INSERT },
- {KC_LSHIFT, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_PAST, KC_MINS, KC_EQL, KC_BSLASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) },
- {_______, _______, _______, _______, _______, _______, _______, MO(_MOUSE), _______, _______, _______, _______ }
-},
+[_FUNC] = LAYOUT_planck_grid(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, UK_TILD, KC_INSERT,
+ KC_LSHIFT, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_PAST, KC_MINS, KC_EQL, KC_BSLASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT),
+ _______, _______, _______, _______, _______, _______, _______, MO(_MOUSE), _______, _______, _______, _______
+),
/* Lower
* ,-----------------------------------------------------------------------------------.
@@ -91,12 +86,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | |Lower | Del |Space | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = {
- {KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_BSPC },
- {LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), LCTL(KC_DEL), LCTL(KC_BSPC) },
- {KC_LSPO, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_QUOT, KC_MINS, KC_EQL, KC_NONUS_HASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT) },
- {_______, _______, _______, _______, _______, KC_DEL, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY }
-},
+[_LOWER] = LAYOUT_planck_grid(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, KC_BSPC,
+ LSFT(KC_1), LSFT(KC_2), LSFT(KC_3), LSFT(KC_4), LSFT(KC_5), LSFT(KC_6), LSFT(KC_7), LSFT(KC_8), LSFT(KC_9), LSFT(KC_0), LCTL(KC_DEL), LCTL(KC_BSPC),
+ KC_LSPO, KC_NONUS_BSLASH, KC_GRAVE, KC_NONUS_HASH, KC_QUOT, KC_MINS, KC_EQL, KC_NONUS_HASH, KC_LBRC, KC_RBRC, KC_QUOT, MT(MOD_RSFT, KC_ENT),
+ _______, _______, _______, _______, _______, KC_DEL, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
/* Raise
* ,-----------------------------------------------------------------------------------.
@@ -109,12 +104,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Mouse| | | | | Alt | Enter|Raise | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = {
- {KC_GRV, XXXXXXX, M(1), KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_PGDOWN, XXXXXXX, KC_PSCREEN },
- {KC_GRV, XXXXXXX, XXXXXXX, LSFT(KC_9), LSFT(KC_0), XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, LCTL(LSFT(KC_EQL)) },
- {_______, XXXXXXX, XXXXXXX, LSFT(KC_LBRC), LSFT(KC_RBRC), XXXXXXX, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), LCTL(KC_MINS) },
- {MO(_MOUSE), _______, _______, _______, _______, KC_LALT, KC_ENT, _______, XXXXXXX, _______, _______, _______ }
-},
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, XXXXXXX, M(1), KC_LBRC, KC_RBRC, XXXXXXX, XXXXXXX, KC_PGUP, KC_HOME, KC_PGDOWN, XXXXXXX, KC_PSCREEN,
+ KC_GRV, XXXXXXX, XXXXXXX, LSFT(KC_9), LSFT(KC_0), XXXXXXX, XXXXXXX, KC_HOME, KC_UP, KC_END, XXXXXXX, LCTL(LSFT(KC_EQL)),
+ _______, XXXXXXX, XXXXXXX, LSFT(KC_LBRC), LSFT(KC_RBRC), XXXXXXX, LCTL(KC_LEFT), KC_LEFT, KC_DOWN, KC_RIGHT, LCTL(KC_RIGHT), LCTL(KC_MINS),
+ MO(_MOUSE), _______, _______, _______, _______, KC_LALT, KC_ENT, _______, XXXXXXX, _______, _______, _______
+),
/* Adjust (Lower + Raise)
* ,-----------------------------------------------------------------------------------.
@@ -127,12 +122,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_ADJUST] = {
- {M(0), RESET, QWERTY, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, KC_DEL },
- {KC_CAPS, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, _______, _______ },
- {TG(_MAC), _______, _______, _______, _______, DYN_REC_STOP, DYN_REC_STOP, KC_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_MEDIA_NEXT_TRACK, _______, _______ },
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
-},
+[_ADJUST] = LAYOUT_planck_grid(
+ M(0), RESET, QWERTY, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, _______, _______, _______, KC_DEL,
+ KC_CAPS, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2, KC_AUDIO_MUTE, KC_AUDIO_VOL_UP, KC_MEDIA_PLAY_PAUSE, _______, _______,
+ TG(_MAC), _______, _______, _______, _______, DYN_REC_STOP, DYN_REC_STOP, KC_MEDIA_PREV_TRACK, KC_AUDIO_VOL_DOWN, KC_MEDIA_NEXT_TRACK, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
/* Mouse
* ,-----------------------------------------------------------------------------------.
@@ -145,12 +140,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_MOUSE] = {
- {KC_ESC , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- {KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, _______, _______ },
- {KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______, _______ },
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
-},
+[_MOUSE] = LAYOUT_planck_grid(
+ KC_ESC , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_BTN1, KC_MS_UP, KC_MS_BTN2, _______, _______,
+ KC_MS_ACCEL0, KC_MS_ACCEL1, KC_MS_ACCEL2, _______, _______, _______, _______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
/* Function 2 (Right hand side)
* ,-----------------------------------------------------------------------------------.
@@ -163,47 +158,47 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_FUNC2] = {
- {_______, _______, M(1), _______, _______, _______, M(5), _______, _______, _______, _______, _______},
- {_______, _______, M(3), M(7), _______, _______, _______, M(10), _______, _______, _______, _______},
- {_______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, _______, _______, _______, _______, M(98) },
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
-
-[_MAC] = {
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {MFNC, _______, _______, _______, MLWR, _______, _______, MRSE, _______, _______, _______, MFNC2 }
-},
-
-[_MLWR] = {
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
-
-[_MRSE] = {
- {_______, _______, M(2), _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- {_______, _______, _______, _______, _______, _______, _______, LCTL(KC_A), _______, LCTL(KC_E), _______, LGUI(KC_EQL) },
- {_______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS) },
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
-},
-
-[_MFNC]= {
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_PENT) },
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
-},
-
-[_MFNC2] = {
- {_______, _______, M(2), _______, _______, _______, M(6), _______, _______, _______, _______, _______},
- {_______, _______, M(4), M(8), _______, _______, _______, M(10), _______, _______, _______, _______},
- {_______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), _______, _______, _______, _______, _______, _______, M(99) },
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
-},
+[_FUNC2] = LAYOUT_planck_grid(
+ _______, _______, M(1), _______, _______, _______, M(5), _______, _______, _______, _______, _______,
+ _______, _______, M(3), M(7), _______, _______, _______, M(10), _______, _______, _______, _______,
+ _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), _______, _______, _______, _______, _______, _______, M(98) ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_MAC] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ MFNC, _______, _______, _______, MLWR, _______, _______, MRSE, _______, _______, _______, MFNC2
+),
+
+[_MLWR] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_MRSE] = LAYOUT_planck_grid(
+ _______, _______, M(2), _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, LCTL(KC_A), _______, LCTL(KC_E), _______, LGUI(KC_EQL),
+ _______, _______, _______, _______, _______, _______, LALT(KC_LEFT), _______, _______, _______, LALT(KC_RIGHT), LGUI(KC_MINS),
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_MFNC]= LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, LGUI(KC_PENT),
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_MFNC2] = LAYOUT_planck_grid(
+ _______, _______, M(2), _______, _______, _______, M(6), _______, _______, _______, _______, _______,
+ _______, _______, M(4), M(8), _______, _______, _______, M(10), _______, _______, _______, _______,
+ _______, LGUI(KC_Z), LGUI(KC_X), LGUI(KC_C), LGUI(KC_V), _______, _______, _______, _______, _______, _______, M(99) ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
};
diff --git a/keyboards/planck/keymaps/ajp10304/readme.md b/keyboards/planck/keymaps/ajp10304/readme.md
index 978f5a19e..6573266db 100644
--- a/keyboards/planck/keymaps/ajp10304/readme.md
+++ b/keyboards/planck/keymaps/ajp10304/readme.md
@@ -6,6 +6,10 @@ the second is the output when shift is applied.
**Note:** The below tables assume a UK layout.
+####Flashing
+Rev <=5: sudo make planck:ajp10304:dfu
+Rev 6: sudo make planck/rev6:ajp10304:dfu-util
+
##### Main Qwerty Layer
* Tab: when held, operates as shift.
diff --git a/keyboards/planck/keymaps/alexey/rules.mk b/keyboards/planck/keymaps/alexey/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/alexey/rules.mk
+++ b/keyboards/planck/keymaps/alexey/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/altgr/config.h b/keyboards/planck/keymaps/altgr/config.h
index d55258c02..e517a8b24 100644
--- a/keyboards/planck/keymaps/altgr/config.h
+++ b/keyboards/planck/keymaps/altgr/config.h
@@ -3,9 +3,6 @@
#include "../../config.h"
-// required because lower/raise modifiers are redefined by colemak-dh
-#define PREVENT_STUCK_MODIFIERS
-
// tap dance key press termination interval
#define TAPPING_TERM 250
diff --git a/keyboards/planck/keymaps/am/config.h b/keyboards/planck/keymaps/am/config.h
new file mode 100644
index 000000000..1ae457e3b
--- /dev/null
+++ b/keyboards/planck/keymaps/am/config.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND) \
+ }
+#endif
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
diff --git a/keyboards/planck/keymaps/am/keymap.c b/keyboards/planck/keymaps/am/keymap.c
new file mode 100644
index 000000000..c1fa3925f
--- /dev/null
+++ b/keyboards/planck/keymaps/am/keymap.c
@@ -0,0 +1,204 @@
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+// this is the style you want to emulate.
+
+#include QMK_KEYBOARD_H
+
+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 planck_layers {
+ _QWERTY,
+ _COLEMAK,
+ _LOWER,
+ _RAISE,
+ _TOUCHCURSOR,
+ _MOUSE,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ LOWER,
+ RAISE,
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+// Taps
+#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctr
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor
+#define LT_ML LT(_MOUSE, KC_A) // L-ayer T-ap M-ouse C-ursor (on A)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,--------------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |--------+------+------+------+------+-------------+------+------+------+------+-------|
+ * |Ctrl/Esc| ML/A | S | D | F | G | H | J | K | L | ; | " |
+ * |--------+------+------+------+------+------|------+------+------+------+------+-------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent|
+ * |--------+------+------+------+------+------+------+------+------+------+------+-------|
+ * | Power | ~ | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play |
+ * `--------------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ CTL_ESC, LT_ML, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT,
+ KC_CAPS, KC_TILD, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Colemak
+ * ,-------------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |--------+------+------+------+------+-------------+------+------+------+------+------|
+ * |Ctrl/Esc| ML/A | R | S | T | D | H | N | E | I | O | " |
+ * |--------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift | Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |--------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Power | ~ | Alt | GUI |Lower | TC/Space |Raise | Next | Vol- | Vol+ | Play |
+ * `-------------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ CTL_ESC, LT_ML, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ KC_CAPS, KC_TILD, KC_LALT, KC_LGUI, LOWER, LT_TC, LT_TC, RAISE, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | { | } | ` |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | \ | F7 | F8 | F9 | F10 | F11 | F12 | _ | = | [ | ] | / |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Sleep | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_PIPE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, KC_GRV,
+ KC_BSLS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_SLSH,
+ KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ^ | 4 | 5 | 6 | . | + | * | 4 | 5 | 6 | - | $ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | = | 7 | 8 | 9 | 0 | - | / | 1 | 2 | 3 | . |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Sleep | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_0, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_CIRC, KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_ASTR, KC_4, KC_5, KC_6, KC_MINS, KC_DLR,
+ KC_EQL, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_SLSH, KC_1, KC_2, KC_3, KC_DOT, KC_ENT,
+ KC_SLEP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
+ * ,-----------------------------------------------------------------------------------.
+ * | | | |Shift | GUI | ~ |Insert| Home | Up | End | Bksp | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Alt |Space | | Find |Again | PgUp | Left | Down |Right | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | Undo | Cut | Copy |Paste | ` | PgDn | Del | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ *
+ * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
+ * seem to work on Mac. Presumably they'll work under Windows.
+ */
+
+[_TOUCHCURSOR] = LAYOUT_planck_grid(
+ _______, _______, _______, KC_LSFT, KC_LGUI, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______,
+ _______, KC_LALT, KC_SPC, _______, KC_FIND,KC_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
+ _______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE,KC_GRV, KC_PGDN, KC_DEL, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Mouse Layer
+ * ,-----------------------------------------------------------------------------------.
+ * | | |ACCL0 |ACCL1 |ACCL2 |ACCL2 | |WHL_L | Up |WHL_R | BTN2 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | BTN3 | BTN1 | BTN4 |WHL_Up| Left | Down |Right | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | BTN2 | BTN5 |WHL_Dn| BTN1 | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_MOUSE] = LAYOUT_planck_grid(
+ _______, _______, KC_ACL0, KC_ACL1, KC_ACL2, KC_ACL2, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______,
+ _______, _______, _______, KC_BTN3, KC_BTN1, KC_BTN4, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______,
+ _______, _______, _______, _______, KC_BTN2, KC_BTN5, KC_WH_D, KC_BTN1, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk| | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL,
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, _______, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/am/readme.md b/keyboards/planck/keymaps/am/readme.md
new file mode 100644
index 000000000..6e0601bf2
--- /dev/null
+++ b/keyboards/planck/keymaps/am/readme.md
@@ -0,0 +1,17 @@
+# The Am Planck Layout
+
+Heavily inspired by other layouts out there, and fine tuned to work well on emacs (most recently spacemacs with vim bindings).
+
+It features:
+
+- Media keys (bottom right)
+- Focused on Qwerty and Colemak
+- Number pads (normal and reversed)
+- TouchCursor layer
+- Mouse layer
+
+## Build
+
+Making planck/rev4 with keymap am and target dfu
+
+ make planck/rev4:am:dfu
diff --git a/keyboards/planck/keymaps/am/rules.mk b/keyboards/planck/keymaps/am/rules.mk
new file mode 100644
index 000000000..696abda39
--- /dev/null
+++ b/keyboards/planck/keymaps/am/rules.mk
@@ -0,0 +1,10 @@
+# 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
+#
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+AUDIO_ENABLE = yes # Audio output on port C6
diff --git a/keyboards/planck/keymaps/andylikescandy/config.h b/keyboards/planck/keymaps/andylikescandy/config.h
index 0de5f3db0..01169db2a 100644
--- a/keyboards/planck/keymaps/andylikescandy/config.h
+++ b/keyboards/planck/keymaps/andylikescandy/config.h
@@ -17,9 +17,6 @@
#define PERMISSIVE_HOLD
-#define PREVENT_STUCK_MODIFIERS
-
-
/*
* MIDI options
*/
diff --git a/keyboards/planck/keymaps/angerthosenear/rules.mk b/keyboards/planck/keymaps/angerthosenear/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/angerthosenear/rules.mk
+++ b/keyboards/planck/keymaps/angerthosenear/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/austin/rules.mk b/keyboards/planck/keymaps/austin/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/austin/rules.mk
+++ b/keyboards/planck/keymaps/austin/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/basic/rules.mk b/keyboards/planck/keymaps/basic/rules.mk
index 0c0632da0..6f88a28d5 100644
--- a/keyboards/planck/keymaps/basic/rules.mk
+++ b/keyboards/planck/keymaps/basic/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+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/planck/keymaps/bone2planck/config.h b/keyboards/planck/keymaps/bone2planck/config.h
deleted file mode 100644
index 3e9e692d3..000000000
--- a/keyboards/planck/keymaps/bone2planck/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define PREVENT_STUCK_MODIFIERS
-
-#endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/bone2planck/rules.mk b/keyboards/planck/keymaps/bone2planck/rules.mk
index 39635192e..699726948 100644
--- a/keyboards/planck/keymaps/bone2planck/rules.mk
+++ b/keyboards/planck/keymaps/bone2planck/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+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/planck/keymaps/callum/keymap.c b/keyboards/planck/keymaps/callum/keymap.c
index 2a816bf67..1cffe15d4 100644
--- a/keyboards/planck/keymaps/callum/keymap.c
+++ b/keyboards/planck/keymaps/callum/keymap.c
@@ -172,7 +172,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* |Power| F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 |VolDn|
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
- * | | F21 | F22 | F23 | F24 | | | | |Clmak|Qwrty| |
+ * | | | |TabL |TabR | | | | |Clmak|Qwrty| |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | | | | |Prev |Mute |Play |Next | | | | |
* `-----------------------------------------------------------------------'
@@ -189,8 +189,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_F18, KC_F19, KC_F20, KC_VOLD
},
{
- _______, KC_F21, KC_F22, KC_F23,
- KC_F24, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, XXXXXXX, SC(KC_TAB),
+ C(KC_TAB), XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, COLEMAK, QWERTY, _______
},
{
@@ -229,13 +229,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
set_colemak();
}
return false;
- break;
case QWERTY:
if (record->event.pressed) {
set_qwerty();
}
return false;
- break;
case SYMB:
if (record->event.pressed) {
layer_on(_SYMB);
@@ -243,7 +241,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
layer_off(_SYMB);
}
return false;
- break;
case MOVE:
if (record->event.pressed) {
layer_on(_MOVE);
@@ -251,7 +248,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
layer_off(_MOVE);
}
return false;
- break;
case FUNC:
if (record->event.pressed) {
layer_on(_FUNC);
@@ -259,7 +255,69 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
layer_off(_FUNC);
}
return false;
- break;
+
+ // Override the defualt auto shifted symbols to use SEND_STRING
+ // See https://github.com/qmk/qmk_firmware/issues/4072
+ case KC_EXLM:
+ if (record->event.pressed) { SEND_STRING("!"); }
+ return false;
+ case KC_AT:
+ if (record->event.pressed) { SEND_STRING("@"); }
+ return false;
+ case KC_HASH:
+ if (record->event.pressed) { SEND_STRING("#"); }
+ return false;
+ case KC_DLR:
+ if (record->event.pressed) { SEND_STRING("$"); }
+ return false;
+ case KC_PERC:
+ if (record->event.pressed) { SEND_STRING("%"); }
+ return false;
+ case KC_CIRC:
+ if (record->event.pressed) { SEND_STRING("^"); }
+ return false;
+ case KC_AMPR:
+ if (record->event.pressed) { SEND_STRING("&"); }
+ return false;
+ case KC_ASTR:
+ if (record->event.pressed) { SEND_STRING("*"); }
+ return false;
+ case KC_LPRN:
+ if (record->event.pressed) { SEND_STRING("("); }
+ return false;
+ case KC_RPRN:
+ if (record->event.pressed) { SEND_STRING(")"); }
+ return false;
+ case KC_TILD:
+ if (record->event.pressed) { SEND_STRING("~"); }
+ return false;
+ case KC_GRV:
+ if (record->event.pressed) { SEND_STRING("`"); }
+ return false;
+ case KC_PLUS:
+ if (record->event.pressed) { SEND_STRING("+"); }
+ return false;
+ case KC_EQL:
+ if (record->event.pressed) { SEND_STRING("="); }
+ return false;
+ case KC_PIPE:
+ if (record->event.pressed) { SEND_STRING("|"); }
+ return false;
+ case KC_BSLS:
+ if (record->event.pressed) { SEND_STRING("\\"); }
+ return false;
+ case KC_LBRC:
+ if (record->event.pressed) { SEND_STRING("["); }
+ return false;
+ case KC_RBRC:
+ if (record->event.pressed) { SEND_STRING("]"); }
+ return false;
+ case KC_LCBR:
+ if (record->event.pressed) { SEND_STRING("{"); }
+ return false;
+ case KC_RCBR:
+ if (record->event.pressed) { SEND_STRING("}"); }
+ return false;
}
return true;
}
diff --git a/keyboards/planck/keymaps/callum/rules.mk b/keyboards/planck/keymaps/callum/rules.mk
index 8ee9a45ab..67fe8d284 100644
--- a/keyboards/planck/keymaps/callum/rules.mk
+++ b/keyboards/planck/keymaps/callum/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/cbbrowne/rules.mk b/keyboards/planck/keymaps/cbbrowne/rules.mk
index d5026e2d9..c7cef55a9 100644
--- a/keyboards/planck/keymaps/cbbrowne/rules.mk
+++ b/keyboards/planck/keymaps/cbbrowne/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
API_SYSEX_ENABLE = no # Enable SYSEX API (+5390)
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/planck/keymaps/chance/rules.mk b/keyboards/planck/keymaps/chance/rules.mk
index 00d09e974..5c9798a57 100644
--- a/keyboards/planck/keymaps/chance/rules.mk
+++ b/keyboards/planck/keymaps/chance/rules.mk
@@ -1,4 +1,4 @@
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
AUDIO_ENABLE = no
ifndef QUANTUM_DIR
diff --git a/keyboards/planck/keymaps/charlie/rules.mk b/keyboards/planck/keymaps/charlie/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/charlie/rules.mk
+++ b/keyboards/planck/keymaps/charlie/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/circuit/rules.mk b/keyboards/planck/keymaps/circuit/rules.mk
index 1ed0ff956..e9a02e31e 100644
--- a/keyboards/planck/keymaps/circuit/rules.mk
+++ b/keyboards/planck/keymaps/circuit/rules.mk
@@ -14,7 +14,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
TAP_DANCE_ENABLE = yes # Enables the double-tap functionality of keys
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/planck/keymaps/daniel/rules.mk b/keyboards/planck/keymaps/daniel/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/daniel/rules.mk
+++ b/keyboards/planck/keymaps/daniel/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/danielhklein/rules.mk b/keyboards/planck/keymaps/danielhklein/rules.mk
index a73d85183..72386fae7 100644
--- a/keyboards/planck/keymaps/danielhklein/rules.mk
+++ b/keyboards/planck/keymaps/danielhklein/rules.mk
@@ -9,6 +9,6 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no # Enable Tap Dance \ No newline at end of file
diff --git a/keyboards/planck/keymaps/david/rules.mk b/keyboards/planck/keymaps/david/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/david/rules.mk
+++ b/keyboards/planck/keymaps/david/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/davidrambo/config.h b/keyboards/planck/keymaps/davidrambo/config.h
index c3bebf579..2decb3dc8 100644
--- a/keyboards/planck/keymaps/davidrambo/config.h
+++ b/keyboards/planck/keymaps/davidrambo/config.h
@@ -3,7 +3,6 @@
#define CONFIG_USER_H
#define TAPPING_TERM 200
#include "../../config.h"
-#define PERMISSIVE_HOLD
-#define PREVENT_STUCK_MODIFIERS
+#define PERMISSIVE_HOLD
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/planck/keymaps/dc/rules.mk b/keyboards/planck/keymaps/dc/rules.mk
index 6106b40e1..ea4341b4f 100644
--- a/keyboards/planck/keymaps/dc/rules.mk
+++ b/keyboards/planck/keymaps/dc/rules.mk
@@ -17,7 +17,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
TAP_DANCE_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/planck/keymaps/default/config.h b/keyboards/planck/keymaps/default/config.h
index fbd2fdb27..6fa31cc8a 100644
--- a/keyboards/planck/keymaps/default/config.h
+++ b/keyboards/planck/keymaps/default/config.h
@@ -1,7 +1,4 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
#ifdef AUDIO_ENABLE
#define STARTUP_SONG SONG(PLANCK_SOUND)
@@ -40,4 +37,3 @@
// Most tactile encoders have detents every 4 stages
#define ENCODER_RESOLUTION 4
-#endif
diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c
index cffa5a5df..03cc0049e 100644
--- a/keyboards/planck/keymaps/default/keymap.c
+++ b/keyboards/planck/keymaps/default/keymap.c
@@ -14,8 +14,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "planck.h"
-#include "action_layer.h"
+#include QMK_KEYBOARD_H
#include "muse.h"
extern keymap_config_t keymap_config;
@@ -145,7 +144,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Exit | | | A | O | | E | U | | | |
* `-----------------------------------------------------------------------------------'
*/
-
[_PLOVER] = LAYOUT_planck_grid(
KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
@@ -165,13 +163,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_ADJUST] = LAYOUT_planck_grid(
- _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
- _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
+ _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
-
};
#ifdef AUDIO_ENABLE
@@ -276,11 +273,21 @@ void encoder_update(bool clockwise) {
}
} else {
if (clockwise) {
- register_code(KC_PGDN);
- unregister_code(KC_PGDN);
+ #ifdef MOUSEKEY_ENABLE
+ register_code(KC_MS_WH_DOWN);
+ unregister_code(KC_MS_WH_DOWN);
+ #else
+ register_code(KC_PGDN);
+ unregister_code(KC_PGDN);
+ #endif
} else {
- register_code(KC_PGUP);
- unregister_code(KC_PGUP);
+ #ifdef MOUSEKEY_ENABLE
+ register_code(KC_MS_WH_UP);
+ unregister_code(KC_MS_WH_UP);
+ #else
+ register_code(KC_PGUP);
+ unregister_code(KC_PGUP);
+ #endif
}
}
}
diff --git a/keyboards/planck/keymaps/dlaroe/rules.mk b/keyboards/planck/keymaps/dlaroe/rules.mk
index 22a08c668..0064f622b 100644
--- a/keyboards/planck/keymaps/dlaroe/rules.mk
+++ b/keyboards/planck/keymaps/dlaroe/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/dr_notsokind/Readme.md b/keyboards/planck/keymaps/dr_notsokind/Readme.md
index e7e29cb7d..a336de2f3 100644
--- a/keyboards/planck/keymaps/dr_notsokind/Readme.md
+++ b/keyboards/planck/keymaps/dr_notsokind/Readme.md
@@ -70,7 +70,7 @@ When you are done, press `Media` and `Enter`. You will finally hear a tune confi
Press `Media` and the key where you stored your Macro, either `;` or `'`. The Macro will play.
-![Imgur](https://i.imgur.com/ri4lEcl.png)
+![Imgur](https://i.imgur.com/TcVyNag.png)
http://www.keyboard-layout-editor.com/#/gists/4cfb26f84bbb4fabe5e6c7cc22c85e24
diff --git a/keyboards/planck/keymaps/dr_notsokind/keymap.c b/keyboards/planck/keymaps/dr_notsokind/keymap.c
index f43fc37bc..64650aaa8 100644
--- a/keyboards/planck/keymaps/dr_notsokind/keymap.c
+++ b/keyboards/planck/keymaps/dr_notsokind/keymap.c
@@ -1,8 +1,6 @@
// Layout picture at http://www.keyboard-layout-editor.com/#/gists/125febfad6960add078e6f14256539b6
-#pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
-#include "planck.h"
-#include "action_layer.h"
+#include QMK_KEYBOARD_H
#ifdef AUDIO_ENABLE
#include "audio.h"
#endif
@@ -79,12 +77,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | GUI | Alt | Mute | Lower| Space | Raise| / | Left | Down | Right|
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = {
- {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
- {KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
- {SFT_CAP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, SFT_ENT},
- {KC_LCTL, KC_LGUI, KC_LALT, MEDIA, LOWER, KC_SPC, KC_SPC, RAISE, KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT}
-},
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ SFT_CAP, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, SFT_ENT,
+ KC_LCTL, KC_LGUI, KC_LALT, MEDIA, LOWER, KC_SPC, KC_SPC, RAISE, KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT
+),
/* NUMPAD
* ,-----------------------------------------------------------------------------------.
@@ -97,12 +95,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | 0 | . | , | = |
* `-----------------------------------------------------------------------------------'
*/
-[_NUMPAD] = {
- {QWERTY, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS},
- {_______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS},
- {_______, KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, KC_P1, KC_P2, KC_P3, KC_PENT},
- {_______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PCMM, KC_PEQL}
-},
+[_NUMPAD] = LAYOUT_planck_grid(
+ QWERTY, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PSLS, KC_P7, KC_P8, KC_P9, KC_PMNS,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, KC_PAST, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ _______, KC_NLCK, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSPC, KC_P1, KC_P2, KC_P3, KC_PENT,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, KC_PCMM, KC_PEQL
+),
/* LOCK
* ,-----------------------------------------------------------------------------------.
@@ -115,30 +113,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | NULL | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_LOCKED] = {
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT},
- {_______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
+[_LOCKED] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT,
+ _______, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
/* RAISE
* ,-----------------------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | | - | = | [ | ] | \ |
+ * | Del | F11 | F12 | F13 | F14 | F15 | | - | = | [ | ] | \ |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * |LShift| F6 | F7 | F8 | F9 | F10 | |ISO # |ISO / | NULL | PgUp | Enter|
+ * |LShift| F16 | F17 | F18 | F19 | F20 | |ISO # |ISO / | NULL | PgUp | Enter|
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | | F11 | | F12 | | | Home | PgDn | End |
+ * | | | | | | | | | Home | PgDn | End |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = {
- {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_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {KC_LSFT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, KC_NUHS, KC_NUBS, XXXXXXX, KC_PGUP, KC_ENT },
- {_______, _______, _______, KC_F11, _______, KC_F12, KC_F12, _______, _______, KC_HOME, KC_PGDN, KC_END }
-},
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_DEL , KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_LSFT, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______, KC_NUHS, KC_NUBS, XXXXXXX, KC_PGUP, KC_ENT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+),
/* LOWER
* ,-----------------------------------------------------------------------------------.
@@ -148,15 +146,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------+------+------+------+------+------+------|
* |LShift| F6 | F7 | F8 | F9 | F10 | |ISO ~ |ISO | | NULL | PgUp | Enter|
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | | F11 | | F12 | | | Home | PgDn | End |
+ * | | | | | | | | | Home | PgDn | End |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = {
- {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_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {KC_LSFT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, S(KC_NUHS), S(KC_NUBS), XXXXXXX, KC_PGUP, KC_ENT },
- {_______, _______, _______, KC_F11, _______, KC_F12, KC_F12, _______, _______, KC_HOME, KC_PGDN, KC_END }
-},
+[_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL ,
+ KC_DEL , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_LSFT, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______, S(KC_NUHS), S(KC_NUBS), XXXXXXX, KC_PGUP, KC_ENT ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
+),
/* MEDIA AND COMMANDS
* ,-----------------------------------------------------------------------------------.
@@ -169,12 +167,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |ONESHT| NULL | NULL | | Vol- | Mute | Vol+ |Zoom 0| Stop | Next | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_MEDIA] = {
- {XXXXXXX, XXXXXXX, KC_WHOM, XXXXXXX, XXXXXXX, XXXXXXX, KC_AGAIN, XXXXXXX, KC_INS, XXXXXXX, KC_PSCR, XXXXXXX},
- {XXXXXXX, XXXXXXX, KC_WSCH, XXXXXXX, KC_FIND, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2 },
- {KC_LSFT, XXXXXXX, XXXXXXX, KC_CALC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ZOOM_OUT, ZOOM_IN, KC_MPRV, DYN_REC_STOP },
- {ONESHOT, XXXXXXX, XXXXXXX, _______, KC_VOLD, KC_MUTE, KC_MUTE, KC_VOLU, ZOOM_NML, KC_MSTP, KC_MNXT, KC_MPLY }
-},
+[_MEDIA] = LAYOUT_planck_grid(
+ XXXXXXX, XXXXXXX, KC_WHOM, XXXXXXX, XXXXXXX, XXXXXXX, KC_AGAIN, XXXXXXX, KC_INS, XXXXXXX, KC_PSCR, XXXXXXX,
+ XXXXXXX, XXXXXXX, KC_WSCH, XXXXXXX, KC_FIND, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2,
+ KC_LSFT, XXXXXXX, XXXXXXX, KC_CALC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, ZOOM_OUT, ZOOM_IN, KC_MPRV, DYN_REC_STOP,
+ ONESHOT, XXXXXXX, XXXXXXX, _______, KC_VOLD, KC_MUTE, KC_MUTE, KC_VOLU, ZOOM_NML, KC_MSTP, KC_MNXT, KC_MPLY
+),
/* ONESHOT
* ,-----------------------------------------------------------------------------------.
@@ -187,12 +185,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_ONESHOT] = {
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
+[_ONESHOT] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, DYN_REC_START1, DYN_REC_START2,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
/* FUNCTIONS
* ,-----------------------------------------------------------------------------------.
@@ -205,12 +203,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Reset| NULL | LOCK | NULL | | NULL | | NULL |AGNorm|Voice-|AGSwap|
* `-----------------------------------------------------------------------------------'
*/
-[_FUNCTN] = {
- {KC_SLEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PWR },
- {KC_WAKE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX },
- {XXXXXXX, XXXXXXX, XXXXXXX, AU_OFF, MU_OFF, QWERTY, NUMPAD, MU_ON, AU_ON, XXXXXXX, MUV_IN, KC_SYSREQ},
- {RESET, XXXXXXX, LOCK, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, AG_NORM, MUV_DE, AG_SWAP}
-}
+[_FUNCTN] = LAYOUT_planck_grid(
+ KC_SLEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PWR,
+ KC_WAKE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, AU_OFF, MU_OFF, QWERTY, NUMPAD, MU_ON, AU_ON, XXXXXXX, MUV_IN, KC_SYSREQ,
+ RESET, XXXXXXX, LOCK, XXXXXXX, _______, XXXXXXX, XXXXXXX, _______, XXXXXXX, AG_NORM, MUV_DE, AG_SWAP
+)
};
diff --git a/keyboards/planck/keymaps/dr_notsokind/rules.mk b/keyboards/planck/keymaps/dr_notsokind/rules.mk
index 7f691ebe4..eea90f8e6 100644
--- a/keyboards/planck/keymaps/dr_notsokind/rules.mk
+++ b/keyboards/planck/keymaps/dr_notsokind/rules.mk
@@ -14,7 +14,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
TAP_DANCE_ENABLE = yes # Enables the double-tap functionality of keys
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/planck/keymaps/dshields/config.h b/keyboards/planck/keymaps/dshields/config.h
index 480ba453a..7f9cf7467 100644
--- a/keyboards/planck/keymaps/dshields/config.h
+++ b/keyboards/planck/keymaps/dshields/config.h
@@ -1,20 +1,11 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define QMK_ESC_OUTPUT F1
-#define QMK_ESC_INPUT D5
-#define QMK_LED E6
-#define QMK_SPEAKER C6
-
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-#define PREVENT_STUCK_MODIFIERS
+#pragma once
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_DIGITAL_RAIN_DROPS 24
#define USB_MAX_POWER_CONSUMPTION 100
#define ONESHOT_TAP_TOGGLE 2
#define ONESHOT_TIMEOUT 3000
+#define RETRO_TAPPING
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_DELAY 0
@@ -40,5 +31,3 @@
// mod-tap keys
#define MT_SPC SFT_T(KC_SPC)
-#endif
-
diff --git a/keyboards/planck/keymaps/dshields/keymap.c b/keyboards/planck/keymaps/dshields/keymap.c
index 86443d671..11abaa6b0 100644
--- a/keyboards/planck/keymaps/dshields/keymap.c
+++ b/keyboards/planck/keymaps/dshields/keymap.c
@@ -8,73 +8,37 @@ enum planck_keycodes { DYNAMIC_MACRO_RANGE = SAFE_RANGE };
#include "dynamic_macro.h"
+#ifdef KEYBOARD_planck_light
+ #define LGT_TOG RGB_TOG
+ #define LGT_MOD RGB_MOD
+#else
+ #define LGT_TOG BL_TOGG
+ #define LGT_MOD BL_STEP
+#endif
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Default
- * ,-----------------------------------------------------------------------------------.
- * | Q | W | E | R | T | Esc | Bksp | Y | U | I | O | P |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | A | S | D | F | G | Tab | Enter| H | J | K | L | ; |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Z | X | C | V | B | Shift|DmPlay| N | M | , | . | / |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Ctrl | Super| Alt | Fun | Lower| Space | Raise| Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
- */
[DEF] = LAYOUT_planck_grid(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_ESC, KC_BSPC, KC_Y, KC_U, KC_I, KC_O, KC_P ,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_TAB, KC_ENT, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
KC_Z, KC_X, KC_C, KC_V, KC_B, OSM_SFT, DM_PLAY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
OSM_CTL, KC_LGUI, OSM_ALT, OSL_FUN, OSL_LWR, MT_SPC, MT_SPC, OSL_RSE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
- /* Lower
- * ,-----------------------------------------------------------------------------------.
- * | ! | @ | # | $ | % | | | ^ | & | * | ( | ) |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | ~ | | | | | | | _ | + | | { | } |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | | | | " | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Home | PgDn | PgUp | End |
- * `-----------------------------------------------------------------------------------'
- */
[LWR] = LAYOUT_planck_grid(
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN,
KC_TILD, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, _______, KC_LCBR, KC_RCBR,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DQUO, KC_PIPE,
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
),
- /* Raise
- * ,-----------------------------------------------------------------------------------.
- * | 1 | 2 | 3 | 4 | 5 | | | 6 | 7 | 8 | 9 | 0 |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | ` | | | | | | | - | = | | [ | ] |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | | | | ' | \ |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Home | PgDn | PgUp | End |
- * `-----------------------------------------------------------------------------------'
- */
[RSE] = LAYOUT_planck_grid(
KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0 ,
KC_GRV, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, _______, KC_LBRC, KC_RBRC,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_BSLS,
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
),
- /* Function
- * ,-----------------------------------------------------------------------------------.
- * | F1 | F2 | F3 | F4 | F5 | Reset|Delete| F6 | F7 | F8 | F9 | F10 |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | F11 | F12 | F13 | F14 | F15 | | | |MsWhLt|MsWhDn|MsWhUp|MsWhRt|
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |BlTggl|BlStep| | | |DmStrt|DmStop| | |MsBtn1|MsBtn2|MsBtn3|
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | |MsLeft|MsDown| MsUp |MsRght|
- * `-----------------------------------------------------------------------------------'
- */
[FUN] = LAYOUT_planck_grid(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, RESET, KC_DEL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 ,
KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_U, KC_WH_R,
- BL_TOGG, BL_STEP, _______, _______, _______, DM_STRT, DM_STOP, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3,
+ LGT_TOG, LGT_MOD, _______, _______, _______, DM_STRT, DM_STOP, _______, _______, KC_BTN1, KC_BTN2, KC_BTN3,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
)
};
diff --git a/keyboards/planck/keymaps/dshields/rules.mk b/keyboards/planck/keymaps/dshields/rules.mk
index a084c67de..a526c5a31 100644
--- a/keyboards/planck/keymaps/dshields/rules.mk
+++ b/keyboards/planck/keymaps/dshields/rules.mk
@@ -3,11 +3,26 @@ ifndef QUANTUM_DIR
endif
MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-COMMAND_ENABLE = yes # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
CONSOLE_ENABLE = no # Console for debug(+400)
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+EXTRAKEY_ENABLE = no
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-AUDIO_ENABLE = no
API_SYSEX_ENABLE = no
-BOOTLOADER = qmk-dfu
+
+ifeq ($(strip $(KEYBOARD)), planck/rev3)
+ AUDIO_ENABLE = no
+ BACKLIGHT_ENABLE = yes
+ RGB_MATRIX_ENABLE = no
+endif
+ifeq ($(strip $(KEYBOARD)), planck/rev6)
+ EXTRALDFLAGS = -Wl,--build-id=none
+ AUDIO_ENABLE = no
+ BACKLIGHT_ENABLE = no
+ RGB_MATRIX_ENABLE = no
+endif
+ifeq ($(strip $(KEYBOARD)), planck/light)
+ AUDIO_ENABLE = yes
+ BACKLIGHT_ENABLE = no
+ RGB_MATRIX_ENABLE = yes
+endif
+
diff --git a/keyboards/planck/keymaps/dzobert/rules.mk b/keyboards/planck/keymaps/dzobert/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/dzobert/rules.mk
+++ b/keyboards/planck/keymaps/dzobert/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/espynn/keymap.c b/keyboards/planck/keymaps/espynn/keymap.c
index 9cf508af6..5615a78bf 100644
--- a/keyboards/planck/keymaps/espynn/keymap.c
+++ b/keyboards/planck/keymaps/espynn/keymap.c
@@ -5,7 +5,6 @@
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
-#define PREVENT_STUCK_MODIFIERS
extern keymap_config_t keymap_config;
// Symbolic names for macro IDs.
diff --git a/keyboards/planck/keymaps/espynn/rules.mk b/keyboards/planck/keymaps/espynn/rules.mk
index 44a030ba3..0b025a231 100644
--- a/keyboards/planck/keymaps/espynn/rules.mk
+++ b/keyboards/planck/keymaps/espynn/rules.mk
@@ -53,7 +53,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. Do not enable this with audio at the same time.
+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/planck/keymaps/experimental/config.h b/keyboards/planck/keymaps/experimental/config.h
index 0864b5fbc..86cc4760b 100644
--- a/keyboards/planck/keymaps/experimental/config.h
+++ b/keyboards/planck/keymaps/experimental/config.h
@@ -5,8 +5,6 @@
#define LEADER_TIMEOUT 300
#define BACKLIGHT_BREATHING
-#define PREVENT_STUCK_MODIFIERS
-
/* ws2812 RGB LED */
#define RGB_DI_PIN B1
diff --git a/keyboards/planck/keymaps/experimental/rules.mk b/keyboards/planck/keymaps/experimental/rules.mk
index b135dfca0..721e887b9 100644
--- a/keyboards/planck/keymaps/experimental/rules.mk
+++ b/keyboards/planck/keymaps/experimental/rules.mk
@@ -15,13 +15,14 @@ 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 this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SWAP_HANDS_ENABLE = yes # Enable one-hand typing
STENO_ENABLE = yes # Enable TX Bolt protocol for Stenography, requires VIRTSER and may not work with mouse keys
+LEADER_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
include ../../../../Makefile
-endif \ No newline at end of file
+endif
diff --git a/keyboards/planck/keymaps/gabriel/rules.mk b/keyboards/planck/keymaps/gabriel/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/gabriel/rules.mk
+++ b/keyboards/planck/keymaps/gabriel/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/grahampheath/config.h b/keyboards/planck/keymaps/grahampheath/config.h
index 1c842420b..db24d273a 100644
--- a/keyboards/planck/keymaps/grahampheath/config.h
+++ b/keyboards/planck/keymaps/grahampheath/config.h
@@ -1,7 +1,4 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
#ifdef AUDIO_ENABLE
#define STARTUP_SONG SONG(PLANCK_SOUND)
@@ -39,8 +36,6 @@
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 2
-#endif
-
#define TAPPING_TERM 200
#undef BACKLIGHT_LEVELS
diff --git a/keyboards/planck/keymaps/grahampheath/readme.md b/keyboards/planck/keymaps/grahampheath/readme.md
index 507120c6f..ec8020f18 100644
--- a/keyboards/planck/keymaps/grahampheath/readme.md
+++ b/keyboards/planck/keymaps/grahampheath/readme.md
@@ -1,4 +1,4 @@
# Graham's Planck
## Sounds
-I've added a [8ohm 0.5W speaker](http://a.co/6MIKZSy), its a bit large, but it fits in approximately the same space as the ProMicro. I soldered to the pcb hole labeled PC6 on my Rev 3 Planck PCB, and GND on the near by chip. [Pic of an identical mod](https://i1.sndcdn.com/artworks-000128070066-myh0ls-t500x500.jpg) (not mine).
+I've added a [8ohm 0.5W speaker](http://a.co/6MIKZSy), its a bit large, but it fits in approximately the same space as the ProMicro. I soldered to the pcb hole labeled PC6 on my Rev 3 Planck PCB, and GND on the near by chip. [Pic of an identical mod][https://i1.sndcdn.com/artworks-000128070066-myh0ls-t500x500.jpg] (not mine).
diff --git a/keyboards/planck/keymaps/guidoism/config.h b/keyboards/planck/keymaps/guidoism/config.h
deleted file mode 100644
index a1635f2ba..000000000
--- a/keyboards/planck/keymaps/guidoism/config.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
-
-#ifdef AUDIO_ENABLE
- #define STARTUP_SONG SONG(PLANCK_SOUND)
- // #define STARTUP_SONG SONG(NO_SOUND)
-
- #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
- SONG(COLEMAK_SOUND), \
- SONG(DVORAK_SOUND) \
- }
-#endif
-
-#define MUSIC_MASK (keycode != KC_NO)
-
-/*
- * MIDI options
- */
-
-/* Prevent use of disabled MIDI features in the keymap */
-//#define MIDI_ENABLE_STRICT 1
-
-/* enable basic MIDI features:
- - MIDI notes can be sent when in Music mode is on
-*/
-
-#define MIDI_BASIC
-
-/* enable advanced MIDI features:
- - MIDI notes can be added to the keymap
- - Octave shift and transpose
- - Virtual sustain, portamento, and modulation wheel
- - etc.
-*/
-//#define MIDI_ADVANCED
-
-/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
-//#define MIDI_TONE_KEYCODE_OCTAVES 2
-
-#endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/guidoism/keymap.c b/keyboards/planck/keymaps/guidoism/keymap.c
deleted file mode 100644
index d644ac970..000000000
--- a/keyboards/planck/keymaps/guidoism/keymap.c
+++ /dev/null
@@ -1,253 +0,0 @@
-/* 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/>.
- */
-
-#pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
-#include "planck.h"
-#include "action_layer.h"
-
-extern keymap_config_t keymap_config;
-
-enum planck_layers {
- _QWERTY,
- _LOWER,
- _RAISE,
- _MOVEMENT,
- _NUMPAD,
- _CODE,
- _ADJUST
-};
-
-enum planck_keycodes {
- QWERTY = SAFE_RANGE,
- LOWER,
- RAISE,
- MOVEMENT,
- NUMPAD,
- CODE,
- BACKLIT
-};
-
-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 |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Move |Numpad| Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[_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},
- // {KC_ESC, LT(MOVEMENT, KC_A), KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT},
- // {KC_ESC, MEH_T(KC_A), KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, 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_ENT},
- {LSFT_T(KC_CAPS), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_QUOT},
- {MOVEMENT, NUMPAD, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR}
-},
-
-/* Lower
- * ,-----------------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_LOWER] = {
- {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC},
- {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
-},
-
-/* Raise
- * ,-----------------------------------------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_RAISE] = {
- {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
-},
-
-/* Movement
- * ,-----------------------------------------------------------------------------------.
- * | | | | | | | Home | PgUp | Up | PgDn | End | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | | | | | | Left | Down | Right| | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_MOVEMENT] = {
- {_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_UP, KC_PGDN, KC_END, _______},
- {_______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
-
-/* Numpad
- * ,-----------------------------------------------------------------------------------.
- * | | | | | | | | | 7 | 8 | 9 | / |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | | | | | | | 4 | 5 | 6 | * |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | | 1 | 2 | 3 | - |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | 0 | = | + |
- * `-----------------------------------------------------------------------------------'
-[_NUMPAD] = {
- {_______, _______, _______, _______, _______, _______, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, 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_KP_0, KC_KP_EQUAL, KC_KP_PLUS}
-},
- */
-
-/* Numpad
- */
-[_NUMPAD] = {
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_7, KC_KP_8, KC_KP_9},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_DOT}
-},
-
-/* Code
- * ,-----------------------------------------------------------------------------------.
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_CODE] = {
- {_______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, KC_LPRN, KC_RPRN, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
-
-/* Adjust (Lower + Raise)
- * ,-----------------------------------------------------------------------------------.
- * | | Reset| | | | | | | | | | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | | | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_ADJUST] = {
- {_______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL },
- {_______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______},
- {_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, }
-
-}
-
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- print("mode just switched to qwerty and this is a huge string\n");
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- break;
- case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case MOVEMENT:
- if (record->event.pressed) {
- layer_on(_MOVEMENT);
- } else {
- layer_off(_MOVEMENT);
- }
- return false;
- break;
- case NUMPAD:
- if (record->event.pressed) {
- layer_on(_NUMPAD);
- } else {
- layer_off(_NUMPAD);
- }
- return false;
- break;
- case CODE:
- if (record->event.pressed) {
- layer_on(_CODE);
- } else {
- layer_off(_CODE);
- }
- return false;
- break;
- case BACKLIT:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- PORTE &= ~(1<<6);
- } else {
- unregister_code(KC_RSFT);
- PORTE |= (1<<6);
- }
- return false;
- break;
- }
- return true;
-}
diff --git a/keyboards/planck/keymaps/gunp/rules.mk b/keyboards/planck/keymaps/gunp/rules.mk
index 1ad30423b..7d03482ab 100644
--- a/keyboards/planck/keymaps/gunp/rules.mk
+++ b/keyboards/planck/keymaps/gunp/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/hiea/config.h b/keyboards/planck/keymaps/hiea/config.h
index 9bb5e0873..655cdf5db 100644
--- a/keyboards/planck/keymaps/hiea/config.h
+++ b/keyboards/planck/keymaps/hiea/config.h
@@ -3,9 +3,6 @@
#include "../../config.h"
-// required because lower/raise modifiers are redefined by colemak-dh
-#define PREVENT_STUCK_MODIFIERS
-
// tap dance key press termination interval
#define TAPPING_TERM 250
diff --git a/keyboards/planck/keymaps/hieax/config.h b/keyboards/planck/keymaps/hieax/config.h
index 9bb5e0873..655cdf5db 100644
--- a/keyboards/planck/keymaps/hieax/config.h
+++ b/keyboards/planck/keymaps/hieax/config.h
@@ -3,9 +3,6 @@
#include "../../config.h"
-// required because lower/raise modifiers are redefined by colemak-dh
-#define PREVENT_STUCK_MODIFIERS
-
// tap dance key press termination interval
#define TAPPING_TERM 250
diff --git a/keyboards/planck/keymaps/impossible/rules.mk b/keyboards/planck/keymaps/impossible/rules.mk
index 247a1fd2a..1e877943d 100644
--- a/keyboards/planck/keymaps/impossible/rules.mk
+++ b/keyboards/planck/keymaps/impossible/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/planck/keymaps/ishtob/config.h b/keyboards/planck/keymaps/ishtob/config.h
index 730b4eaed..688607634 100755
--- a/keyboards/planck/keymaps/ishtob/config.h
+++ b/keyboards/planck/keymaps/ishtob/config.h
@@ -1,60 +1,34 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-#include "../../config.h"
+#ifndef USERSPACE_CONFIG_H
+#define USERSPACE_CONFIG_H
-#define LEADER_TIMEOUT 300
-//#define BACKLIGHT_BREATHING
-#define PREVENT_STUCK_MODIFIERS
+#ifdef AUDIO_ENABLE
+// #define STARTUP_SONG SONG(E1M1_DOOM)
+// #define GOODBYE_SONG SONG(SONIC_RING)
+/* #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND), \
+ }
+*/
//audio clicky
#define AUDIO_CLICKY
// to enable clicky on startup
//#define AUDIO_CLICKY_ON
#define AUDIO_CLICKY_FREQ_RANDOMNESS 1.0f
-/* ws2812 RGB LED
-#define RGB_DI_PIN B5
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 8 // Number of LEDs
-#define RGBLIGHT_HUE_STEP 10
-#define RGBLIGHT_SAT_STEP 17
-*/
-#undef PLANCK_MIT_LAYOUT
+
+#endif
+
+#define FORCE_NKRO
+
+#define LEADER_TIMEOUT 300
#undef DEBOUNCE
#define DEBOUNCE 0
-//rgb-reactive
-#define RGB_MATRIX_KEYPRESSES
-#define EECONFIG_RGB_MATRIX (uint32_t *)16
-
//skip usb startup check
//#define NO_USB_STARTUP_CHECK
-/*
- * 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
-
-
#endif
diff --git a/keyboards/planck/keymaps/ishtob/keymap.c b/keyboards/planck/keymaps/ishtob/keymap.c
index be74a0d51..e036d8a5a 100644
--- a/keyboards/planck/keymaps/ishtob/keymap.c
+++ b/keyboards/planck/keymaps/ishtob/keymap.c
@@ -1,7 +1,6 @@
// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
// this is the style you want to emulate.
-#pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
#include "planck.h"
#include "action_layer.h"
// #include "dynamic_macro.h"
@@ -9,65 +8,10 @@
#include "audio.h"
#endif
#include "eeconfig.h"
-
-//Macro definition
-#if (__has_include("macros_private.h") && !defined(SECRETS))
-#include "macros_private.h"
-#else
-#include "macros_public.h"
-#endif
+#include "ishtob.h"
extern keymap_config_t keymap_config;
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QWERTY 0
-#define _COLEMAK 1
-#define _DVORAK 2
-#define _LOWER 3
-#define _RAISE 4
-#define _PLOVER 5
-#define _FNLAYER 6
-#define _NUMLAY 7
-#define _MOUSECURSOR 8
-#define _ADJUST 16
-
-enum planck_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- PLOVER,
- LOWER,
- RAISE,
- BACKLIT,
- EXT_PLV,
- DFU,
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-// Custom macros
-#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
-#define CTL_TTAB CTL_T(KC_TAB) // Tap for Esc, hold for Ctrl
-#define CTL_ENT CTL_T(KC_ENT) // Tap for Enter, hold for Ctrl
-#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
-// Requires KC_TRNS/_______ for the trigger key in the destination layer
-#define LT_FN(kc) LT(_FNLAYER, kc) // L-ayer T-ap Function 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 TG_NUMLAY TG(_NUMLAY) //Toggle for layer _NUMLAY
-#define P_CITRIX M(KC_CITRIX) // My login macros
-#define P_MPASS M(KC_MPASS)
-#define P_META M(KC_META)
-#define O_DAYRN M(KC_DAYRN) // My work macros
-#define O_AUTODC M(KC_AUTODC)
-#define O_RTQ6H M(KC_RTQ6H)
-#define M_EMAIL M(KC_EMAIL) // My personal email
-#define M_EMAIL2 M(KC_EMAIL2) // My work email
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
,-----------------------------------------------------------------------------------.
@@ -80,13 +24,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Esc | Caps | Alt | GUI |Lower | Space |Raise |NumLay| RAlt | Men | Del |
* `-----------------------------------------------------------------------------------'
*/
-[_QWERTY] = LAYOUT_planck_grid(
- LT_FN(KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, LT_MC(KC_SCLN), CTL_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, LT_RAI(KC_MINS),
+[_QWERTY] = LAYOUT_ortho_4x12_wrapper(
+ LT_FN(KC_TAB), _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSPC,
+ KC_LCTL, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, CTL_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, LT_RAI(KC_MINS),
KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL
),
-
+
/* Colemak
* ,-----------------------------------------------------------------------------------.
* | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
@@ -98,13 +42,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_COLEMAK] = LAYOUT_planck_grid(
- LT_FN(KC_TAB), KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
- KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, LT_MC(KC_O), KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, LT_RAI(KC_MINS),
- KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL
+[_COLEMAK] = LAYOUT_ortho_4x12_wrapper(
+ LT_FN(KC_TAB), _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_BSPC,
+ KC_LCTL, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_ENT,
+ KC_LSFT, _________________COLEMAK_L3________________, _________________COLEMAK_R3________________, LT_RAI(KC_MINS),
+ KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL
),
-
+
/* Dvorak
* ,-----------------------------------------------------------------------------------.
* | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
@@ -116,13 +60,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
* `-----------------------------------------------------------------------------------'
*/
-[_DVORAK] = LAYOUT_planck_grid(
- LT_FN(KC_TAB), KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
- KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, LT_MC(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, LT_RAI(KC_MINS),
- KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL
+[_DVORAK] = LAYOUT_ortho_4x12_wrapper(
+ LT_FN(KC_TAB), _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, KC_BSPC,
+ KC_LCTL, _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, KC_ENT,
+ KC_LSFT, _________________DVORAK_L3_________________, _________________DVORAK_R3_________________, LT_RAI(KC_MINS),
+ KC_ESC, KC_CAPS, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_RALT, TG_NUMLAY, KC_APP, KC_DEL
),
-
+
/* Lower
* ,-----------------------------------------------------------------------------------.
* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | ~ | \ |
@@ -134,13 +78,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = LAYOUT_planck_grid(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, KC_BSLS,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______,
+[_LOWER] = LAYOUT_ortho_4x12_wrapper(
+ ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_GRV, KC_BSLS,
+ _______, __________________LONG_FUNC_LEFT___________________, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_PIPE,
+ _______, __________________LONG_FUNC_RIGHT__________________,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
-
+
/* Raise
* ,-----------------------------------------------------------------------------------.
* | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | * | \ |
@@ -152,13 +96,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | 0 | | Left | Down | Right| NumLk|
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = LAYOUT_planck_grid(
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PLUS, KC_BSLS,
+[_RAISE] = LAYOUT_ortho_4x12_wrapper(
+ ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, KC_PLUS, KC_BSLS,
_______, KC_A, KC_UP, KC_D, KC_PSCR, KC_VOLU, KC_4, KC_5, KC_6, KC_PAST, KC_COLN, KC_QUOT,
_______, KC_LEFT, KC_DOWN, KC_RIGHT,KC__MUTE, KC_VOLD, KC_1, KC_2, KC_3, KC_UP, KC_SLSH, _______,
_______, _______, _______, _______, _______, KC_SPC, KC_0, _______, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NLCK
),
-
+
/* Plover layer (http://opensteno.org)
* ,-----------------------------------------------------------------------------------.
* | # | # | # | # | # | # | # | # | # | # | # | # |
@@ -170,14 +114,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Exit | | | A | O | | E | U | | | |
* `-----------------------------------------------------------------------------------'
*/
-
-[_PLOVER] = LAYOUT_planck_grid(
+
+[_PLOVER] = LAYOUT_ortho_4x12_wrapper(
KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
),
-
+
/* FN layer on Esc key
* ,-----------------------------------------------------------------------------------.
* | | ! | @ | # | $ | % | ^ | & | * | ( | ) | + |
@@ -189,13 +133,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | Next | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_FNLAYER] = LAYOUT_planck_grid(
+[_FNLAYER] = LAYOUT_ortho_4x12_wrapper(
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PLUS,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______,
+ _______, __________________LONG_FUNC_LEFT___________________, KC_UNDS, KC_EQL, KC_LBRC, KC_RBRC, KC_QUOT,
+ _______, __________________LONG_FUNC_RIGHT__________________,S(KC_NUHS),S(KC_NUBS),KC_LCBR, KC_RCBR, _______,
_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
),
-
+
/* Num Layer
* ,-----------------------------------------------------------------------------------.
* | | Q | Up | 4 | | | 7 | 8 | 9 | - | + | Bksp |
@@ -207,13 +151,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | 0 | . | Exit | Vol- | Vol+ | Play |
* `-----------------------------------------------------------------------------------'
*/
-[_NUMLAY] = LAYOUT_planck_grid(
+[_NUMLAY] = LAYOUT_ortho_4x12_wrapper(
_______, KC_Q, KC_UP, KC_H, XXXXXXX, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_MINS, KC_PLUS, KC_BSPC,
_______, KC_LEFT, KC_DOWN, KC_RIGHT, XXXXXXX, XXXXXXX, KC_P4, KC_P5, KC_P6, KC_PAST, KC_COLN, KC_ENT,
_______, KC_Z, KC_X, KC_C, KC_V, XXXXXXX, KC_P1, KC_P2, KC_P3, KC_PDOT, KC_PSLS, _______,
_______, _______, _______, _______, _______, _______, KC_P0, KC_PDOT, _______, _______, KC_NLCK, KC_MPLY
),
-
+
/* Mouse Layer (semi-col)
* ,-----------------------------------------------------------------------------------.
* | ACCL0| ACCL1| ACCL2|Email |Email2| Home | Wh_Up| WHL_L| M_Up | WHL_R|PASS| Meta |
@@ -225,14 +169,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | BTN1 | | | | Citx | |
* `-----------------------------------------------------------------------------------'
*/
-
-[_MOUSECURSOR] = LAYOUT_planck_grid(
+
+[_MOUSECURSOR] = LAYOUT_ortho_4x12_wrapper(
KC_ACL0, KC_ACL1, KC_ACL2, M_EMAIL,M_EMAIL2, KC_HOME, KC_PGUP, KC_WH_L, KC_MS_U, KC_WH_R, P_MPASS, P_META,
_______, XXXXXXX, XXXXXXX, XXXXXXX, O_RTQ6H, KC_END , KC_PGDN, KC_MS_L, KC_MS_D, KC_MS_R, _______, O_DAYRN,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_BTN2, KC_BTN3, KC_BTN4, KC_BTN5, _______, _______,
_______, _______, _______, _______, _______, KC_BTN1, KC_BTN1, _______, _______, _______, P_CITRIX, O_AUTODC
),
-
+
/* Adjust (Lower + Raise)
* ,-----------------------------------------------------------------------------------.
* | Reset|RGB TG|RGB ST|RGBH -|RGBH +|RGBS -|RGBS +|RGBV -|RGBV +| | | Del |
@@ -244,13 +188,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | |
* `-----------------------------------------------------------------------------------'
*/
-[_ADJUST] = LAYOUT_planck_grid(
+[_ADJUST] = LAYOUT_ortho_4x12_wrapper(
DFU, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, KC_DEL,
_______, MAGIC_TOGGLE_NKRO, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, BL_DEC, BL_INC, BL_STEP, BL_TOGG,
_______, _______, _______, _______, _______, _______, _______, _______, CK_RST, CK_DOWN, CK_UP, CK_TOGG
)
-
+
};
@@ -281,7 +225,7 @@ void persistant_default_layer_set(uint16_t default_layer) {
void tap(uint16_t keycode){ register_code(keycode); unregister_code(keycode); };
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
@@ -369,36 +313,11 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return false;
break;
- case DFU:
- if (record->event.pressed) {
- clear_keyboard();
- #if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
- process_midi_all_notes_off();
- #endif
- #if defined(AUDIO_ENABLE) && !defined(NO_MUSIC_MODE)
- music_all_notes_off();
- uint16_t timer_start = timer_read();
- PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
- shutdown_user();
- while(timer_elapsed(timer_start) < 250)
- wait_ms(1);
- stop_all_notes();
- #else
- wait_ms(250);
- #endif
- // this is also done later in bootloader.c - not sure if it's neccesary here
- #ifdef BOOTLOADER_CATERINA
- *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific
- #endif
- bootloader_jump();
- }
- return false;
- break;
}
return true;
}
-void matrix_init_user(void) {
+void matrix_init_keymap(void) {
#ifdef AUDIO_ENABLE
startup_user();
#endif
@@ -408,7 +327,9 @@ void matrix_init_user(void) {
void startup_user()
{
+ #ifdef RGB_MATRIX_ENABLE
rgblight_mode(RGB_MATRIX_CYCLE_ALL);
+ #endif //RGB_matrix
wait_ms(20); // gets rid of tick
PLAY_NOTE_ARRAY(tone_startup, false, 0);
}
@@ -432,4 +353,3 @@ void music_scale_user(void)
#endif
-
diff --git a/keyboards/planck/keymaps/ishtob/macros_public.h b/keyboards/planck/keymaps/ishtob/macros_public.h
deleted file mode 100644
index 27d6f7564..000000000
--- a/keyboards/planck/keymaps/ishtob/macros_public.h
+++ /dev/null
@@ -1,57 +0,0 @@
-enum macro_keycodes {
- KC_CITRIX,
- KC_MPASS,
- KC_META,
- KC_RTQ6H,
- KC_DAYRN,
- KC_3DRN,
- KC_AUTODC,
- KC_EMAIL,
- KC_EMAIL2
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
-
- switch (id) {
- //my login macros
- case KC_CITRIX:
- if (record->event.pressed){
- return MACRO (I(1), T(1), END);
- }
- case KC_MPASS:
- if (record->event.pressed){
- return MACRO (I(1), T(1), END);
- }
- case KC_META:
- if (record->event.pressed){
- return MACRO (I(1), T(1), END);
- }
- //my work macros
- case KC_RTQ6H:
- if (record->event.pressed){
- return MACRO (I(1), T(TAB), T(0), T (3), T(0), T(0), T(TAB), T(DOWN), T(TAB), T(0), T (9), T(0), T(0), T(TAB), T(DOWN), T(TAB), T(1), T (5), T(0), T(0), T(TAB), T(DOWN), T(TAB), T(2), T (1), T(0), T(0), T(TAB), D(LALT), T(O), U(LALT), END);
- }
- case KC_AUTODC:
- if (record->event.pressed){
- return MACRO (I(1), D(LALT), T(V), U(LALT), T(TAB), T(TAB), T(TAB), T(TAB), T(TAB), T(TAB), T(TAB), T(TAB), T(TAB), T(T), T(TAB),T(N), D(LALT), T(S), U(LALT), END);
- }
- case KC_DAYRN:
- if (record->event.pressed){
- return MACRO (I(1), T(TAB), T(TAB), T(TAB), T(TAB), T(TAB), T(1), D(LALT), T(S), U(LALT), END);
- }
- //Ops macros
- case KC_EMAIL:
- if (record->event.pressed){
- return MACRO (I(1), T(1), END); }
- case KC_EMAIL2:
- if (record->event.pressed){
- return MACRO (I(1), T(1), END);
- }
- }
-
- return MACRO_NONE;
-} \ No newline at end of file
diff --git a/keyboards/planck/keymaps/ishtob/readme.md b/keyboards/planck/keymaps/ishtob/readme.md
index 22873141f..108b9ee0c 100644
--- a/keyboards/planck/keymaps/ishtob/readme.md
+++ b/keyboards/planck/keymaps/ishtob/readme.md
@@ -2,7 +2,7 @@
#Ishtob's personal planck layout
-THis is the default layout used with my planck light, though the rest of the keymap could also be used for the full sized planck or let's split.
+This is the default layout used with my planck light, though the rest of the keymap could also be used for the full sized planck or let's split.
Main difference with the default layout:
@@ -14,8 +14,3 @@ Main difference with the default layout:
* Capslock is on the base layer as it is used quite often with my work's software
* Numbers layer on lower is positioned to resemble a numpad with 5 taking the location of J for the homing bump and easier entry
-
-
-# Secret Macros
-
-`macros_public.h` contains a list of macros that can be replaced with passwords or other sensative private macros. `macros_private.h` will be used if it exsists in the folder during compiling and will ignore `macros_public.h` The private macros can be excluded from git commits by adding it to the exclusion list.
diff --git a/keyboards/planck/keymaps/ishtob/rule.mk b/keyboards/planck/keymaps/ishtob/rule.mk
index 923c3a5dc..c0d38aaa1 100755
--- a/keyboards/planck/keymaps/ishtob/rule.mk
+++ b/keyboards/planck/keymaps/ishtob/rule.mk
@@ -1,7 +1,3 @@
-ifeq ($(strip $(SECRETS)),yes)
- OPT_DEF += -DSECRETS
-endif
-
# Build Options
# comment out to disable the options.
#
@@ -16,7 +12,6 @@ COMMAND_ENABLE = yes # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
CUSTOM_MATRIX = yes # Custom matrix file
AUDIO_ENABLE = yes
-RGB_MATRIX_ENABLE = yes
ENCODER_ENABLE = yes
# SERIAL_LINK_ENABLE = yes
diff --git a/keyboards/planck/keymaps/jacob/rules.mk b/keyboards/planck/keymaps/jacob/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/jacob/rules.mk
+++ b/keyboards/planck/keymaps/jacob/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/jarred/config.h b/keyboards/planck/keymaps/jarred/config.h
deleted file mode 100644
index f98b8935e..000000000
--- a/keyboards/planck/keymaps/jarred/config.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Copyright 2018 Jarred Steenvoorden
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * 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_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
-
-#define PREVENT_STUCK_MODIFIERS
-
-#ifdef AUDIO_ENABLE
- #define STARTUP_SONG SONG(PLANCK_SOUND)
-#endif
-
-#define TAPPING_TERM 200
-
-#define MOUSEKEY_DELAY 0
-#define MOUSEKEY_INTERVAL 16
-#define MOUSEKEY_TIME_TO_MAX 40
-#define MOUSEKEY_MAX_SPEED 5
-
-#define MOUSEKEY_WHEEL_DELAY 0
-#define MOUSEKEY_WHEEL_MAX_SPEED 4
-#define MOUSEKEY_WHEEL_TIME_TO_MAX 255
-
-#endif
diff --git a/keyboards/planck/keymaps/jarred/rules.mk b/keyboards/planck/keymaps/jarred/rules.mk
deleted file mode 100644
index cd14c41e1..000000000
--- a/keyboards/planck/keymaps/jarred/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-# Build options
-
-BACKLIGHT_ENABLE = no # Switch LEDs
-MOUSEKEY_ENABLE = no # Emulates mouse key using keypresses
diff --git a/keyboards/planck/keymaps/jasperla/config.h b/keyboards/planck/keymaps/jasperla/config.h
new file mode 100644
index 000000000..dc2a7369b
--- /dev/null
+++ b/keyboards/planck/keymaps/jasperla/config.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+#endif
+
+/*
+ * MIDI options
+ */
+#define MIDI_BASIC
diff --git a/keyboards/planck/keymaps/jasperla/keymap.c b/keyboards/planck/keymaps/jasperla/keymap.c
new file mode 100644
index 000000000..b9eb72b07
--- /dev/null
+++ b/keyboards/planck/keymaps/jasperla/keymap.c
@@ -0,0 +1,136 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _POINTER,
+ _ADJUST
+};
+
+#define QWERTY 0
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define PT MO(_POINTER)
+
+/* ALT+F12 is mapped (in software) to lock the user's display */
+#define LOCK LALT(KC_F12)
+
+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 | | LGUI | Alt |Lower | SPC | Enter|Raise |Point.| | LOCK | Ctrl |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ 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_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, PT, _______, LOCK, KC_RCTL
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | INS |ISO / |Pg Up |Pg Dn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Pointers
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | Up | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | Left | Down | Right| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_POINTER] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, PT, _______, _______, _______
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, _______, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
diff --git a/keyboards/planck/keymaps/jasperla/readme.md b/keyboards/planck/keymaps/jasperla/readme.md
new file mode 100644
index 000000000..381667c73
--- /dev/null
+++ b/keyboards/planck/keymaps/jasperla/readme.md
@@ -0,0 +1,7 @@
+# jasperla's keymap for Planck
+
+Slightly adjusted from the default keymap:
+- map the arrow keys to IJKL on a separate "pointers" layer
+- return key is next to the space key, and an RSHIFT is mapped
+ to where return used to be
+- removed the dvorak, colemak and plover layers
diff --git a/keyboards/planck/keymaps/jasperla/rules.mk b/keyboards/planck/keymaps/jasperla/rules.mk
new file mode 100644
index 000000000..dcf16bef3
--- /dev/null
+++ b/keyboards/planck/keymaps/jasperla/rules.mk
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/jcorrado/keymap.c b/keyboards/planck/keymaps/jcorrado/keymap.c
new file mode 100644
index 000000000..35ca76d51
--- /dev/null
+++ b/keyboards/planck/keymaps/jcorrado/keymap.c
@@ -0,0 +1,115 @@
+/* Copyright 2015-2017 Jack Humbert
+ * Copyright 2018 Jereme Corrado
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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 {
+ _QWERTY = 0,
+ _NUM,
+ _SYM_L,
+ _SYM_R
+};
+
+#define LMOD_0 LT(_SYM_L, KC_TAB) /* Tab, hold: Sym layer */
+#define LMOD_1 LT(_NUM, KC_ESC) /* Esc, hold: Num layer */
+#define LMOD_2 LSFT_T(KC_CAPS) /* Caps Lock, hold: Left Shift */
+
+#define RMOD_0 LT(_SYM_R, KC_BSPC) /* Backspace, hold: Sym layer */
+#define RMOD_1 LT(_NUM, KC_QUOT) /* Quote, hold: Nu layer */
+#define RMOD_2 RSFT_T(KC_ENT) /* Enter, hold: Right Shift */
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/*
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | Tab/ | Q | W | E | R | T | Y | U | I | O | P | BacSp/ |
+ * | Sym | | | | | | | | | | | Sym |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | Esc/ | A | S | D | F | G | H | J | K | L | : | " |
+ * | Num | | | | | | | | | | ; | '/Num |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | CapLk/ | Z | X | C | V | B | N | M | < | > | ? | Shift/ |
+ * | Shift | | | | | | | | , | . | / | Enter |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | Toggle | ~ | {pipe} | Alt | Ctrl | Space | Space | Ctrl | Alt | { | } | |
+ * | Num | ` | \ | | | | | | | [ | ] | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ */
+
+[_QWERTY] = LAYOUT_planck_grid(
+ LMOD_0, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, RMOD_0,
+ LMOD_1, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RMOD_1,
+ LMOD_2, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RMOD_2,
+ _______, KC_GRV, KC_BSLS, KC_LALT, KC_LCTL, KC_SPC, KC_SPC, KC_RCTL, KC_RALT, KC_LBRC, KC_RBRC, _______
+),
+
+
+/*
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | = | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | Left | Down | Up | Right | | |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | Home | PgDown | PgUp | End | | |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | | | | | |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ */
+
+[_NUM] = LAYOUT_planck_grid(
+ KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+
+/*
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | + | ! | @ | # | $ | % | ^ | & | * | ( | ) | _ |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | | | | | |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | | | | | | |
+ * | | | | | | | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ */
+
+[_SYM_L] = LAYOUT_planck_grid(
+ _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_SYM_R] = LAYOUT_planck_grid(
+ KC_PLUS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, _______, _______,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
diff --git a/keyboards/planck/keymaps/jcorrado/readme.md b/keyboards/planck/keymaps/jcorrado/readme.md
new file mode 100644
index 000000000..3a600dea1
--- /dev/null
+++ b/keyboards/planck/keymaps/jcorrado/readme.md
@@ -0,0 +1,9 @@
+# jcorrado Planck keymap
+
+A keymap for the Planck modeled after the way I remap my Kinesis
+Advantage keyboards.
+
+The layout is designed to minimize awkward contortions: all modifier and
+layer-activation combinations can be performed with either hand's thumb
+and pinky. This leaves the other hand free to complete commands
+comfortably.
diff --git a/keyboards/planck/keymaps/jeebak/rules.mk b/keyboards/planck/keymaps/jeebak/rules.mk
index 247a1fd2a..1e877943d 100644
--- a/keyboards/planck/keymaps/jeebak/rules.mk
+++ b/keyboards/planck/keymaps/jeebak/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/planck/keymaps/jeremy-dev/keymap.c b/keyboards/planck/keymaps/jeremy-dev/keymap.c
index 5aea44329..89b7e6b84 100644
--- a/keyboards/planck/keymaps/jeremy-dev/keymap.c
+++ b/keyboards/planck/keymaps/jeremy-dev/keymap.c
@@ -1,7 +1,6 @@
// This is the personal keymap of Jeremy Cowgar (@jcowgar). It is written for the programmer.
// Configuration options
-#define PREVENT_STUCK_MODIFIERS
#pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
#include "planck.h"
diff --git a/keyboards/planck/keymaps/jetpacktuxedo/config.h b/keyboards/planck/keymaps/jetpacktuxedo/config.h
new file mode 100644
index 000000000..7efe97a57
--- /dev/null
+++ b/keyboards/planck/keymaps/jetpacktuxedo/config.h
@@ -0,0 +1,34 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+ #define AUDIO_CLICKY
+#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/jetpacktuxedo/keymap.c b/keyboards/planck/keymaps/jetpacktuxedo/keymap.c
new file mode 100644
index 000000000..b344bd076
--- /dev/null
+++ b/keyboards/planck/keymaps/jetpacktuxedo/keymap.c
@@ -0,0 +1,301 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _PLOVER,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ PLOVER,
+ EXT_PLV
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Tab | A | S | D | F | G | H | J | K | L | ; |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | Up |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Brite | Ctrl | Alt | GUI |Lower | Space |Raise | / | Left | Down |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_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_RSFT,
+ RGB_TOG, KC_LCTL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | _ | + | " | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | { | } | PgUp | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | Home | PgDn | End |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_DQUO, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE, KC_HOME, KC_PGDN, KC_END
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | - | = | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | [ | ] | PgUp | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | \ | Home | PgDn | End |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_QUOT, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_PGUP, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_BSLS, KC_HOME, KC_PGDN, KC_END
+),
+
+/* Plover layer (http://opensteno.org)
+ * ,-----------------------------------------------------------------------------------.
+ * | Exit | # | # | # | # | # | # | # | # | # | # | # |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | S | K | W | R | * | * | R | B | G | S | Z |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | A | O | | E | U | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_PLOVER] = LAYOUT_planck_grid(
+ EXT_PLV, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1,
+ XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC,
+ XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | |Plover| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, PLOVER, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(plover_song);
+ #endif
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_PLOVER);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 20;
+
+extern float clicky_rand;
+
+void encoder_update(bool clockwise) {
+ if (is_clicky_on()) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ clicky_rand += 0.5f;
+ } else {
+ clicky_rand -= 0.5f;
+ }
+ } else {
+ if (clockwise) {
+ clicky_freq_up();
+ } else {
+ clicky_freq_down();
+ }
+ }
+ } else if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ register_code(KC_RGHT);
+ unregister_code(KC_RGHT);
+ } else {
+ register_code(KC_LEFT);
+ unregister_code(KC_LEFT);
+ }
+ } else {
+ if (clockwise) {
+ register_code(KC_DOWN);
+ unregister_code(KC_DOWN);
+ } else {
+ register_code(KC_UP);
+ unregister_code(KC_UP);
+ }
+ }
+ }
+}
+
+void dip_update(uint8_t index, bool active) {
+ switch (index) {
+ case 0:
+ if (active) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_song);
+ #endif
+ layer_on(_ADJUST);
+ } else {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ #endif
+ }
+ break;
+ case 3:
+ if (active) {
+ clicky_on();
+ } else {
+ clicky_off();
+ }
+ }
+}
+
+void matrix_scan_user(void) {
+ #ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ }
+ #endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/jetpacktuxedo/rules.mk b/keyboards/planck/keymaps/jetpacktuxedo/rules.mk
new file mode 100644
index 000000000..dcf16bef3
--- /dev/null
+++ b/keyboards/planck/keymaps/jetpacktuxedo/rules.mk
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/jhenahan/rules.mk b/keyboards/planck/keymaps/jhenahan/rules.mk
index bb12dd865..f8d1f0d8f 100644
--- a/keyboards/planck/keymaps/jhenahan/rules.mk
+++ b/keyboards/planck/keymaps/jhenahan/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/planck/keymaps/joe/rules.mk b/keyboards/planck/keymaps/joe/rules.mk
index 247a1fd2a..1e877943d 100644
--- a/keyboards/planck/keymaps/joe/rules.mk
+++ b/keyboards/planck/keymaps/joe/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/planck/keymaps/johannes/rules.mk b/keyboards/planck/keymaps/johannes/rules.mk
index 0c0632da0..6f88a28d5 100644
--- a/keyboards/planck/keymaps/johannes/rules.mk
+++ b/keyboards/planck/keymaps/johannes/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+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/planck/keymaps/kmontag42/rules.mk b/keyboards/planck/keymaps/kmontag42/rules.mk
index b9f73934a..0c100076b 100644
--- a/keyboards/planck/keymaps/kmontag42/rules.mk
+++ b/keyboards/planck/keymaps/kmontag42/rules.mk
@@ -1,4 +1,5 @@
UNICODE_ENABLE = yes
+LEADER_ENABLE = yes
ifndef QUANTUM_DIR
include ../../../../Makefile
diff --git a/keyboards/planck/keymaps/kyle/rules.mk b/keyboards/planck/keymaps/kyle/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/kyle/rules.mk
+++ b/keyboards/planck/keymaps/kyle/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/lae3/config.h b/keyboards/planck/keymaps/lae3/config.h
deleted file mode 100644
index a28634e69..000000000
--- a/keyboards/planck/keymaps/lae3/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef LAE3_KEYMAP_H
-#define LAE3_KEYMAP_H
-
-#include "../../config.h"
-
-#define PREVENT_STUCK_MODIFIERS
-
-#endif
diff --git a/keyboards/planck/keymaps/lae3/rules.mk b/keyboards/planck/keymaps/lae3/rules.mk
index 595803e32..89b147f81 100644
--- a/keyboards/planck/keymaps/lae3/rules.mk
+++ b/keyboards/planck/keymaps/lae3/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/leo/rules.mk b/keyboards/planck/keymaps/leo/rules.mk
index 247a1fd2a..1e877943d 100644
--- a/keyboards/planck/keymaps/leo/rules.mk
+++ b/keyboards/planck/keymaps/leo/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/planck/keymaps/lucas/rules.mk b/keyboards/planck/keymaps/lucas/rules.mk
index 247a1fd2a..1e877943d 100644
--- a/keyboards/planck/keymaps/lucas/rules.mk
+++ b/keyboards/planck/keymaps/lucas/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/planck/keymaps/lukas/rules.mk b/keyboards/planck/keymaps/lukas/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/lukas/rules.mk
+++ b/keyboards/planck/keymaps/lukas/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/luke/rules.mk b/keyboards/planck/keymaps/luke/rules.mk
index 847686873..76ed281c1 100644
--- a/keyboards/planck/keymaps/luke/rules.mk
+++ b/keyboards/planck/keymaps/luke/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/mattly/config.h b/keyboards/planck/keymaps/mattly/config.h
new file mode 100644
index 000000000..52e39ec7f
--- /dev/null
+++ b/keyboards/planck/keymaps/mattly/config.h
@@ -0,0 +1,43 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
+
+#define IGNORE_MOD_TAP_INTERRUPT
+#define PERMISSIVE_HOLD
+#define TAPPING_TOGGLE 2
+#define TAPPING_TERM 200
diff --git a/keyboards/planck/keymaps/mattly/keymap.c b/keyboards/planck/keymaps/mattly/keymap.c
new file mode 100644
index 000000000..baa7d9fbf
--- /dev/null
+++ b/keyboards/planck/keymaps/mattly/keymap.c
@@ -0,0 +1,166 @@
+/* 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)
+
+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
+ ),
+
+/* 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,
+ _______, 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, _______
+),
+/* 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,
+ 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
new file mode 100644
index 000000000..58f2b979c
--- /dev/null
+++ b/keyboards/planck/keymaps/mattly/readme.md
@@ -0,0 +1,28 @@
+# 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)
diff --git a/keyboards/planck/keymaps/mattly/rules.mk b/keyboards/planck/keymaps/mattly/rules.mk
new file mode 100644
index 000000000..7210cf34f
--- /dev/null
+++ b/keyboards/planck/keymaps/mattly/rules.mk
@@ -0,0 +1,2 @@
+AUDIO_ENABLE = yes
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/max/rules.mk b/keyboards/planck/keymaps/max/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/max/rules.mk
+++ b/keyboards/planck/keymaps/max/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/mitch/config.h b/keyboards/planck/keymaps/mitch/config.h
index 10591b3c8..bb7989d90 100644
--- a/keyboards/planck/keymaps/mitch/config.h
+++ b/keyboards/planck/keymaps/mitch/config.h
@@ -1,6 +1,5 @@
#include "../../config.h"
-#define PREVENT_STUCK_MODIFIERS
// for the broken board
#undef MATRIX_COL_PINS
-#define MATRIX_COL_PINS { F1, F0, B0, B2, F4, F5, F6, F7, D4, D6, B4, D7 } \ No newline at end of file
+#define MATRIX_COL_PINS { F1, F0, B0, B2, F4, F5, F6, F7, D4, D6, B4, D7 }
diff --git a/keyboards/planck/keymaps/mitch/readme.md b/keyboards/planck/keymaps/mitch/readme.md
index 3869304f4..9ed1133ef 100644
--- a/keyboards/planck/keymaps/mitch/readme.md
+++ b/keyboards/planck/keymaps/mitch/readme.md
@@ -20,7 +20,3 @@ rest of the symbols, mostly mapped with the ten key numbers.
The normal right shift key uses the `MT` macro to trigger Enter on tap and right
shift when held.
-
-This keymap sets the `PREVENT_STUCK_MODIFIERS` flag to avoid the occasional WTF
-moments when using a modifier keys and accidentally releasing them after moving
-to a new layer.
diff --git a/keyboards/planck/keymaps/mollat/rules.mk b/keyboards/planck/keymaps/mollat/rules.mk
index be3f69280..249f422a5 100644
--- a/keyboards/planck/keymaps/mollat/rules.mk
+++ b/keyboards/planck/keymaps/mollat/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/mwpeterson/config.h b/keyboards/planck/keymaps/mwpeterson/config.h
new file mode 100644
index 000000000..d66557b29
--- /dev/null
+++ b/keyboards/planck/keymaps/mwpeterson/config.h
@@ -0,0 +1,40 @@
+#pragma once
+
+#define PERMISSIVE_HOLD
+#define IGNORE_MOD_TAP_INTERRUPT
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(ONE_UP_SOUND)
+ // #define STARTUP_SONG SONG(PLANCK_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+ #define GOODBYE_SONG SONG(COIN_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_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/mwpeterson/keymap.c b/keyboards/planck/keymaps/mwpeterson/keymap.c
new file mode 100644
index 000000000..961b8394b
--- /dev/null
+++ b/keyboards/planck/keymaps/mwpeterson/keymap.c
@@ -0,0 +1,312 @@
+// from <https://github.com/noahfrederick/dots/tree/master/planck
+
+#include QMK_KEYBOARD_H
+#include "keymap_plover.h"
+#include "version.h"
+
+extern keymap_config_t keymap_config;
+
+// Keymap layers
+enum planck_layers {
+ QWERTY_LAYER,
+ LOWER_LAYER,
+ RAISE_LAYER,
+ NAV_LAYER,
+ GUI_LAYER,
+ STENO_LAYER,
+ ADJUST_LAYER
+};
+
+// Dashes (macOS)
+#define KC_NDSH LALT(KC_MINS)
+#define KC_MDSH S(LALT(KC_MINS))
+
+// Window manager keys
+#define WM_FULL LALT(LGUI(KC_F))
+#define WM_NEXT LCTL(LALT(LGUI(KC_RGHT)))
+#define WM_PREV LCTL(LALT(LGUI(KC_LEFT)))
+#define WM_NW LCTL(LGUI(KC_LEFT))
+#define WM_N LALT(LGUI(KC_UP))
+#define WM_NE LCTL(LGUI(KC_RGHT))
+#define WM_E LALT(LGUI(KC_RGHT))
+#define WM_SE S(LCTL(LGUI(KC_RGHT)))
+#define WM_S LALT(LGUI(KC_DOWN))
+#define WM_SW S(LCTL(LGUI(KC_LEFT)))
+#define WM_W LALT(LGUI(KC_LEFT))
+#define WM_CNTR LALT(LGUI(KC_C))
+
+#define SFT_INS LSFT(KC_INS)
+
+// Unicode
+#ifdef UNICODEMAP_ENABLE
+enum unicode_name {
+ IBANG // ‽
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+ [IBANG] = 0x0203D // ‽
+};
+#endif // UNICODEMAP_ENABLE
+
+// Custom key codes
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ STENO,
+ PV_EXIT,
+ PV_LOOK,
+ SEND_VERSION,
+ SEND_MAKE
+};
+
+#define LOWER MO(LOWER_LAYER)
+#define RAISE MO(RAISE_LAYER)
+
+#define GUI_L LT(GUI_LAYER, KC_LBRC)
+#define GUI_R LT(GUI_LAYER, KC_RBRC)
+
+#define NAV_SCLN LT(NAV_LAYER, KC_SCLN)
+#define NAV_O LT(NAV_LAYER, KC_O)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base layer (Qwerty)
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ ⇥ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ' │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * Tap for Esc -- │ ⌃ │ A │ S │ D │ F │ G │ H │ J │ K │ L │; Nav│ ⌃ │ -- Tap for Enter
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * Tap for ( -- │ ⇧ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ ⇧ │ -- Tap for )
+ * ├─────┼─────┼─────┼─────┼─────┼─────┴─────┼─────┼─────┼─────┼─────┼─────┤
+ * Tap for [ -- │ GUI │Hyper│ ⌥ │ ⌘ │ ↓ │ Space │ ↑ │ ⌘ │ ⌥ │Hyper│ GUI │ -- Tap for ]
+ * └─────┴─────┴─────┴─────┴─────┴───────────┴─────┴─────┴─────┴─────┴─────┘
+ * / /
+ * Tap for ] [ --------'-----------------------------------------------------'
+ */
+ [QWERTY_LAYER] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NAV_SCLN, CTL_T(KC_ENT),
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ GUI_L, ALL_T(KC_RBRC), KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_RGUI, KC_RALT, ALL_T(KC_LBRC), GUI_R
+ ),
+
+ /* Numeric layer
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * Application -- │ ` │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ # │
+ * window ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * switcher │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ - │ + │ ` │SFTIN│ : │ | │ ‽ │ , │ . │ \ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┴─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ Backspace │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴───────────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [LOWER_LAYER] = LAYOUT_planck_grid(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, S(KC_3),
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ _______, KC_MINS, KC_PLUS, KC_GRV, SFT_INS, KC_COLN, KC_PIPE, X(IBANG), KC_COMM, KC_DOT, KC_BSLS, _______,
+ _______, _______, _______, _______, _______, KC_BSPC, KC_BSPC, _______, _______, _______, _______, _______
+ ),
+
+ /* Symbol layer
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ ~ │ F11 │ F12 │ F13 │ F14 │ F15 │ F16 │ F17 │ F18 │ F19 │ F20 │ # │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ' │ " │ │ \
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤ |-- Mostly shifted version
+ * │ │ _ │ = │ ~ │SFTIN│ : │ | │ │ , │ . │ / │ │ / of lower layer
+ * ├─────┼─────┼─────┼─────┼─────┼─────┴─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ Delete │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴───────────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [RAISE_LAYER] = LAYOUT_planck_grid(
+ S(KC_GRV), KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, S(KC_3),
+ _______, S(KC_1), S(KC_2), S(KC_3), S(KC_4), S(KC_5), S(KC_6), S(KC_7), S(KC_8), KC_QUOT, S(KC_QUOT), _______,
+ _______, KC_UNDS, KC_EQL, KC_TILD, SFT_INS, KC_COLN, KC_PIPE, XXXXXXX, KC_COMM, KC_DOT, KC_SLSH, _______,
+ _______, _______, _______, _______, _______, KC_DEL, KC_DEL, _______, _______, _______, _______, _______
+ ),
+
+ /* Directional navigation layer
+ *
+ * Large movements -----/```````````````````\ /```````````````````\----- Vim-style arrow keys
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │Home │PgUp │PgDn │ End │ ← │ ↓ │ ↑ │ → │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┴─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴───────────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [NAV_LAYER] = LAYOUT_planck_grid(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, XXXXXXX, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, NAV_SCLN, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______
+ ),
+
+ /* GUI (window management/mouse/media controls) layer
+ *
+ * Mouse keys -----/```````````````````\ /```````````````````\----- Window manager
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ │Ms B2│Ms Up│Ms B1│Ms WD│ │ │Prev │ NW │ N │ NE │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │Ms L │Ms Dn│Ms R │Ms WU│ │ │Full │ W │Centr│ E │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │Undo │ Cut │Copy │Paste│ │ │Next │ SW │ S │ SE │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┴─────┼─────┼─────┼─────┼─────┼─────┤
+ * │ │Prev │Play │Next │ │ Sleep │ │Mute │Vol- │Vol+ │ │
+ * └─────┴─────┴─────┴─────┴─────┴───────────┴─────┴─────┴─────┴─────┴─────┘
+ * \___ Media ___/ \___ Screen/sleep __/ \___ Volume __/
+ */
+ [GUI_LAYER] = LAYOUT_planck_grid(
+ _______, KC_BTN2, KC_MS_U, KC_BTN1, KC_WH_D, XXXXXXX, XXXXXXX, WM_PREV, WM_NW, WM_N, WM_NE, _______,
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, XXXXXXX, XXXXXXX, WM_FULL, WM_W, WM_CNTR, WM_E, _______,
+ _______, KC_UNDO, KC_CUT, KC_COPY, KC_PSTE, XXXXXXX, XXXXXXX, WM_NEXT, WM_SW, WM_S, WM_SE, _______,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, KC_SLEP, KC_WAKE, XXXXXXX, KC_MUTE, KC_VOLD, KC_VOLU, _______
+ ),
+
+ /* Base layer (Qwerty-Steno)
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * │ # │ # │ # │ # │ # │ # │ # │ # │ # │ # │ # │ # │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┴─────┼─────┼─────┼─────┼─────┼─────┤
+ * │Look │ │ T │ P │ H │ │ F │ P │ L │ T │ D │
+ * │ -up │ S ├─────┼─────┼─────┤ * ├─────┼─────┼─────┼─────┼─────┤
+ * │ │ │ K │ W │ R │ │ R │ B │ G │ S │ Z │
+ * ├─────┼─────┼─────┼─────┼─────┼───────────┼─────┼─────┼─────┼─────┼─────┤
+ * │Exit │ │ │ A │ O │ │ E │ U │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴───────────┴─────┴─────┴─────┴─────┴─────┘
+ */
+ [STENO_LAYER] = LAYOUT_planck_grid(
+ PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM, PV_NUM,
+ PV_LOOK, PV_LS, PV_LT, PV_LP, PV_LH, PV_STAR, PV_STAR, PV_RF, PV_RP, PV_RL, PV_RT, PV_RD,
+ PV_LOOK, PV_LS, PV_LK, PV_LW, PV_LR, PV_STAR, PV_STAR, PV_RR, PV_RB, PV_RG, PV_RS, PV_RZ,
+ PV_EXIT, XXXXXXX, XXXXXXX, PV_A, PV_O, KC_SPC, KC_BSPC, PV_E, PV_U, XXXXXXX, XXXXXXX, XXXXXXX
+ ),
+
+ /* Keyboard settings layer
+ * ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+ * Firmware -- │ │Reset│Make │ │ │ │ │ │ │ │Vers │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * -- │Qwert│ │ │ │ │ │ │ │ │ │ │ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+ * Audio -- │ │Voic-│Voic+│Mus +│Mus -│MIDI+│MIDI-│ │ │Aud +│Aud -│ │
+ * ├─────┼─────┼─────┼─────┼─────┼─────┴─────┼─────┼─────┼─────┼─────┼─────┤
+ * │Steno│ │Swap │Norm │ │ │ │ │ │ │ │
+ * └─────┴─────┴─────┴─────┴─────┴───────────┴─────┴─────┴─────┴─────┴─────┘
+ * Swap GUI/Alt _/________/ \_____________\_ _/
+ */
+ [ADJUST_LAYER] = LAYOUT_planck_grid(
+ XXXXXXX, RESET, SEND_MAKE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, SEND_VERSION, XXXXXXX,
+ QWERTY, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, XXXXXXX, XXXXXXX, AU_ON, AU_OFF, XXXXXXX,
+ STENO, XXXXXXX, AG_SWAP, AG_NORM, LOWER, XXXXXXX, XXXXXXX, RAISE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ )
+};
+
+#ifdef AUDIO_ENABLE
+float plover_song[][2] = SONG(PLOVER_SOUND);
+float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+// Send PHROPB ({PLOVER:RESUME}).
+void plover_resume(void) {
+ register_code(PV_LP);
+ register_code(PV_LH);
+ register_code(PV_LR);
+ register_code(PV_O);
+ register_code(PV_RP);
+ register_code(PV_RB);
+ unregister_code(PV_LP);
+ unregister_code(PV_LH);
+ unregister_code(PV_LR);
+ unregister_code(PV_O);
+ unregister_code(PV_RP);
+ unregister_code(PV_RB);
+}
+
+// Send PHROF ({PLOVER:SUSPEND}).
+void plover_suspend(void) {
+ register_code(PV_LP);
+ register_code(PV_LH);
+ register_code(PV_LR);
+ register_code(PV_O);
+ register_code(PV_RF);
+ unregister_code(PV_LP);
+ unregister_code(PV_LH);
+ unregister_code(PV_LR);
+ unregister_code(PV_O);
+ unregister_code(PV_RF);
+}
+
+// Send PHROBG ({PLOVER:LOOKUP}).
+void plover_lookup(void) {
+ register_code(PV_LP);
+ register_code(PV_LH);
+ register_code(PV_LR);
+ register_code(PV_O);
+ register_code(PV_RB);
+ register_code(PV_RG);
+ unregister_code(PV_LP);
+ unregister_code(PV_LH);
+ unregister_code(PV_LR);
+ unregister_code(PV_O);
+ unregister_code(PV_RB);
+ unregister_code(PV_RG);
+}
+
+void matrix_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, LOWER_LAYER, RAISE_LAYER, ADJUST_LAYER);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case STENO:
+ if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_SONG(plover_song);
+#endif
+ layer_off(RAISE_LAYER);
+ layer_off(LOWER_LAYER);
+ layer_off(ADJUST_LAYER);
+ layer_on(STENO_LAYER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ plover_resume();
+ }
+ return false;
+ case PV_EXIT:
+ if (record->event.pressed) {
+#ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+#endif
+ plover_suspend();
+ layer_off(STENO_LAYER);
+ }
+ return false;
+ case PV_LOOK:
+ if (record->event.pressed) {
+ plover_lookup();
+ }
+ return false;
+ case SEND_VERSION:
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP "@" QMK_VERSION " (" QMK_BUILDDATE ")");
+ }
+ return false;
+ case SEND_MAKE:
+ if (record->event.pressed) {
+ SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP ":dfu\n");
+ }
+ return false;
+ }
+ return true;
+}
diff --git a/keyboards/planck/keymaps/mwpeterson/rules.mk b/keyboards/planck/keymaps/mwpeterson/rules.mk
new file mode 100644
index 000000000..e82617028
--- /dev/null
+++ b/keyboards/planck/keymaps/mwpeterson/rules.mk
@@ -0,0 +1,7 @@
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Disable shift combination, which conflicts with shift-parens
+MOUSEKEY_ENABLE = yes # Mouse keys (disabled to save space)
+NKRO_ENABLE = no # N-key rollover required for use as a steno board
+AUDIO_ENABLE = yes # Audio output on port C6
+UNICODEMAP_ENABLE = yes # Enable extended unicode
diff --git a/keyboards/planck/keymaps/myoung34/rules.mk b/keyboards/planck/keymaps/myoung34/rules.mk
index c47418104..b1aaafd3a 100644
--- a/keyboards/planck/keymaps/myoung34/rules.mk
+++ b/keyboards/planck/keymaps/myoung34/rules.mk
@@ -7,5 +7,5 @@ CONSOLE_ENABLE = no # Console for debug(+400)
MIDI_ENABLE = no # MIDI controls
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
BACKLIGHT_ENABLE = yes
diff --git a/keyboards/planck/keymaps/narze/config.h b/keyboards/planck/keymaps/narze/config.h
index e081a93b5..19d784b2b 100644
--- a/keyboards/planck/keymaps/narze/config.h
+++ b/keyboards/planck/keymaps/narze/config.h
@@ -33,10 +33,9 @@
#define IGNORE_MOD_TAP_INTERRUPT
#define PERMISSIVE_HOLD
-#define PREVENT_STUCK_MODIFIERS
#define SUPER_DUPER_SOUND S__NOTE(_B1)
#define MOUSEKEY_DELAY 100
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/planck/keymaps/narze/rules.mk b/keyboards/planck/keymaps/narze/rules.mk
index 05c2ce455..286a2ffdc 100644
--- a/keyboards/planck/keymaps/narze/rules.mk
+++ b/keyboards/planck/keymaps/narze/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+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/planck/keymaps/navi/config.h b/keyboards/planck/keymaps/navi/config.h
index 694053c6a..087ebb54e 100644
--- a/keyboards/planck/keymaps/navi/config.h
+++ b/keyboards/planck/keymaps/navi/config.h
@@ -1,7 +1,14 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
+#pragma once
-#include "config_common.h"
+#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
@@ -13,7 +20,7 @@
/* enable basic MIDI features:
- MIDI notes can be sent when in Music mode is on
*/
-
+
#define MIDI_BASIC
/* enable advanced MIDI features:
@@ -27,4 +34,18 @@
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 2
-#endif \ No newline at end of file
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
+
+#define MOUSEKEY_INTERVAL 16
+
+#define MOUSEKEY_DELAY 0
+
+#define MOUSEKEY_TIME_TO_MAX 60
+
+#define MOUSEKEY_MAX_SPEED 7
+
+#define MOUSEKEY_WHEEL_DELAY 0
+
+#define TAPPING_TERM 80
+#define TAPPING_TOGGLE 2
diff --git a/keyboards/planck/keymaps/navi/keymap.c b/keyboards/planck/keymaps/navi/keymap.c
index 0f0e48ad8..bbf7d510f 100644
--- a/keyboards/planck/keymaps/navi/keymap.c
+++ b/keyboards/planck/keymaps/navi/keymap.c
@@ -9,42 +9,35 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- * cd /c/qmk_firmware
- * make planck/rev4:navi
+ * cd /c/qmk_firmware-master... make planck/rev6:navi
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
-#include "planck.h"
-#include "action_layer.h"
-#ifdef AUDIO_ENABLE
- #include "audio.h"
- #include "song_list.h"
-#endif
+#include QMK_KEYBOARD_H
+
extern keymap_config_t keymap_config;
enum planck_layers {
_QWERTY,
- _COLEMAK,
- _PLOVER,
_LOWER,
_RAISE,
- _ADJUST,
- _FUNCTION
+ _FUNCTION,
+ _ADJUST
+
};
enum planck_keycodes {
QWERTY = SAFE_RANGE,
- COLEMAK,
- PLOVER,
LOWER,
RAISE,
- EXT_PLV,
FUNCTION
};
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
@@ -59,51 +52,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
* CtlSE = Control+shift+esc/
* CtlE = Control when held, esc when tapped
- */
-[_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},
- {LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {FUNCTION, C_S_T(KC_ESC), KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
-},
-
-/* Colemak
- * ,-----------------------------------------------------------------------------------.
- * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | CtlE | A | R | S | T | D | H | N | E | I | O | " |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | FN |CtlSE | GUI | Alt |Lower | Space | Raise| Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[_COLEMAK] = {
- {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
- {LCTL_T(KC_ESC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT },
- {FUNCTION, C_S_T(KC_ESC), KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
-},
-
-/* 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 | | | |
- * `-----------------------------------------------------------------------------------'
+ * FN takes two taps to have it stay as FN
*/
-
-[_PLOVER] = {
- {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
- {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
- {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
- {EXT_PLV, XXXXXXX, XXXXXXX, KC_C, KC_V, XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
-},
-
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
+ LCTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
+ TT(_FUNCTION), LCTL(LALT(KC_DEL)), KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_BSPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
/* Lower
* ,-----------------------------------------------------------------------------------.
@@ -116,12 +72,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | |Pg DN | Pg UP| |
* `-----------------------------------------------------------------------------------'
*/
-[_LOWER] = {
- {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_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {KC_LSHIFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_END, KC_HOME, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN , KC_PGUP, _______}
-},
+[_LOWER] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_LSHIFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_END, KC_HOME, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN , KC_PGUP, _______
+),
/* Raise
* ,-----------------------------------------------------------------------------------.
@@ -129,89 +85,54 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * |Shift | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | End | Home | |
+ * |Shift | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | End | Home | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | | | |Pg DN |Pg UP | |
* `-----------------------------------------------------------------------------------'
*/
-[_RAISE] = {
- {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_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
- {KC_LSHIFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_END, KC_HOME, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN , KC_PGUP, _______}
-},
+[_RAISE] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_LSHIFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_END, KC_HOME, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN , KC_PGUP, _______
+),
-/* Adjust (Lower + Raise)
- * ,-----------------------------------------------------------------------------------.
- * | | Reset| | | | | | | | | | Del |
- * |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | |MU_MOD|Aud on|Audoff| | |Qwerty|Colemk|Plover| | |
- * |------+------+------+------+------+------|------+------+------+------+------+------|
- * |Caps |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | Caps |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_ADJUST] = {
- {_______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL },
- {_______, _______, MU_MOD, AU_ON, AU_OFF, _______, _______, QWERTY, COLEMAK, PLOVER,_______, _______},
- {KC_CAPS, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, KC_CAPS},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
/* Function
* ,-----------------------------------------------------------------------------------.
- * | Esc | | Prev | Play | Next | | | | 7 | 8 | 9 | Bksp |
+ * | Vol- | Mute | Vol+ | | | | | # | 7 | 8 | 9 | Bksp |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | | Vol- | Mute | Vol+ | | | + | 4 | 5 | 6 | - |
+ * | Prev | Play | Next | | | | | + | 4 | 5 | 6 | - |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | CALC | | | | | | | $ | 1 | 2 | 3 | Enter|
+ * | CALC | MWU | M1 |MouseU| M2 | | | $ | 1 | 2 | 3 | Enter|
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | |Prntsc| | | | * | 0 | . |Numlck| / |
+ * | | MWD |MouseL|MouseD|MouseR| | * | 0 | . |Numlck| / |
* `-----------------------------------------------------------------------------------'
*/
-[_FUNCTION] = {
- {KC_ESC , _______, KC_MPRV, KC_MPLY, KC_MNXT, _______,_______,_______, KC_KP_7, KC_KP_8, KC_KP_9,KC_BSPC},
- {_______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, KC_PPLS, KC_KP_4, KC_KP_5, KC_KP_6, KC_PMNS},
- {KC_CALC, _______, _______, _______, _______, _______, _______, KC_DLR, KC_KP_1, KC_KP_2, KC_KP_3, KC_ENT},
- {_______, _______, KC_PSCR, _______, _______ , _______, _______, KC_PAST, KC_KP_0, KC_KP_DOT,KC_NUMLOCK, KC_PSLS}
-}
+[_FUNCTION] = LAYOUT_planck_grid(
+ KC_VOLD, KC_MUTE, KC_VOLU, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_HASH, KC_KP_7, KC_KP_8, KC_KP_9, KC_BSPC,
+ KC_MPRV, KC_MPLY, KC_MNXT, AU_ON, AU_OFF, MU_ON, MU_OFF, KC_PPLS, KC_KP_4, KC_KP_5, KC_KP_6, KC_PMNS,
+ KC_CALC, KC_WH_U, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_DLR, KC_KP_1, KC_KP_2, KC_KP_3, KC_ENTER,
+ KC_TRNS, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_PAST, KC_KP_0, KC_KP_DOT,KC_NUMLOCK, KC_PSLS
+)
};
-#ifdef AUDIO_ENABLE
-float tone_startup[][2] = SONG(ZELDA_PUZZLE);
-float tone_qwerty[][2] = SONG(ZELDA_TREASURE);
-float plover_song[][2] = SONG(PLOVER_SOUND);
-float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
-float tone_colemak[][2] = SONG(VIOLIN_SOUND);
-float tone_music_on[][2] = SONG(ONE_UP_SOUND);
-float tone_music_off[][2] = SONG(ROCK_A_BYE_BABY);
-#endif /* AUDIO_ENABLE */
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
- print("mode just switched to qwerty and this is a huge string\n");
- set_single_persistent_default_layer(_QWERTY);
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_qwerty);
- #endif
- }
- return false;
- break;
- case COLEMAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_COLEMAK);
- #ifdef AUDIO_ENABLE
- PLAY_SONG(tone_colemak);
- #endif
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
}
return false;
break;
- case LOWER:
+ case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
@@ -238,62 +159,59 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
layer_off(_FUNCTION);
}
return false;
- break;
- case PLOVER:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- stop_all_notes();
- PLAY_SONG(plover_song);
- #endif
- layer_off(_RAISE);
- layer_off(_LOWER);
- layer_off(_ADJUST);
- layer_on(_PLOVER);
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
- keymap_config.raw = eeconfig_read_keymap();
- keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
- }
- return false;
- break;
- case EXT_PLV:
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_SONG(plover_gb_song);
- #endif
- layer_off(_PLOVER);
- }
- return false;
- break;
+ break;
}
return true;
}
-void matrix_init_user(void) {
- #ifdef AUDIO_ENABLE
- startup_user();
- #endif
-}
-
-#ifdef AUDIO_ENABLE
-
-void startup_user()
-{
- _delay_ms(20); // gets rid of tick
- PLAY_SONG(tone_startup);
-}
-
-void music_on_user(void)
-{
- PLAY_SONG(tone_music_on);
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ #ifdef MOUSEKEY_ENABLE
+ register_code(KC_MS_WH_DOWN);
+ unregister_code(KC_MS_WH_DOWN);
+ #else
+ register_code(KC_PGDN);
+ unregister_code(KC_PGDN);
+ #endif
+ } else {
+ #ifdef MOUSEKEY_ENABLE
+ register_code(KC_MS_WH_UP);
+ unregister_code(KC_MS_WH_UP);
+ #else
+ register_code(KC_PGUP);
+ unregister_code(KC_PGUP);
+ #endif
+ }
+ }
}
-void music_off_user(void)
-{
- PLAY_SONG(tone_music_off);
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
}
-#endif
-
-
diff --git a/keyboards/planck/keymaps/navi/rules.mk b/keyboards/planck/keymaps/navi/rules.mk
index 628167ff6..4852442b3 100644
--- a/keyboards/planck/keymaps/navi/rules.mk
+++ b/keyboards/planck/keymaps/navi/rules.mk
@@ -1 +1,4 @@
-AUDIO_ENABLE = yes \ No newline at end of file
+AUDIO_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave \ No newline at end of file
diff --git a/keyboards/planck/keymaps/neo2planck/config.h b/keyboards/planck/keymaps/neo2planck/config.h
deleted file mode 100644
index 3e9e692d3..000000000
--- a/keyboards/planck/keymaps/neo2planck/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define PREVENT_STUCK_MODIFIERS
-
-#endif \ No newline at end of file
diff --git a/keyboards/planck/keymaps/neo2planck/rules.mk b/keyboards/planck/keymaps/neo2planck/rules.mk
index 2122dd349..cedf3095e 100644
--- a/keyboards/planck/keymaps/neo2planck/rules.mk
+++ b/keyboards/planck/keymaps/neo2planck/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+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/planck/keymaps/nico/rules.mk b/keyboards/planck/keymaps/nico/rules.mk
index 247a1fd2a..1e877943d 100644
--- a/keyboards/planck/keymaps/nico/rules.mk
+++ b/keyboards/planck/keymaps/nico/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/planck/keymaps/not-quite-neo/rules.mk b/keyboards/planck/keymaps/not-quite-neo/rules.mk
index 316a3ea7b..90e6353f6 100644
--- a/keyboards/planck/keymaps/not-quite-neo/rules.mk
+++ b/keyboards/planck/keymaps/not-quite-neo/rules.mk
@@ -20,7 +20,7 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode (can't be used with unicodemap)
UNICODEMAP_ENABLE = no # Enable extended unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/pascamel/config.h b/keyboards/planck/keymaps/pascamel/config.h
new file mode 100644
index 000000000..679d106ca
--- /dev/null
+++ b/keyboards/planck/keymaps/pascamel/config.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+/*
+ * 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/pascamel/keymap.c b/keyboards/planck/keymaps/pascamel/keymap.c
new file mode 100644
index 000000000..9ee0dde35
--- /dev/null
+++ b/keyboards/planck/keymaps/pascamel/keymap.c
@@ -0,0 +1,237 @@
+/* Copyright 2015-2017 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ BACKLIT,
+ MY_PWD
+};
+
+#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 | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI |Brite |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ KC_LCTL, KC_LALT, KC_LGUI, BACKLIT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | Prev | Play | Next | | | * | 4 | 5 | 6 | - | Del |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Pwd | Vol- | MUTE | Vol+ | | | / | 1 | 2 | 3 | + | PgUp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | 0 | . | = | PgDn |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_ASTR, KC_4, KC_5, KC_6, KC_MINS, KC_DEL,
+ MY_PWD, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, KC_SLSH, KC_1, KC_2, KC_3, KC_PLUS, KC_PGUP,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_0, KC_DOT, KC_EQL, KC_PGDN
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | ~ | | / | { | [ | ] | } | \ | - | + | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | _ | = | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Home | PgDn | PgUp | End |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ _______, KC_TILD, _______, KC_SLSH, KC_LCBR, KC_LBRC, KC_RBRC, KC_RCBR, KC_BSLS, KC_MINS, KC_PLUS, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_EQL, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap| | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ #ifdef KEYBOARD_planck_rev5
+ PORTE &= ~(1<<6);
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ #ifdef KEYBOARD_planck_rev5
+ PORTE |= (1<<6);
+ #endif
+ }
+ return false;
+ break;
+ case MY_PWD:
+ if (record->event.pressed) {
+ SEND_STRING("My secret password!");
+ false;
+ }
+ break;
+ }
+ return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ register_code(KC_PGDN);
+ unregister_code(KC_PGDN);
+ } else {
+ register_code(KC_PGUP);
+ unregister_code(KC_PGUP);
+ }
+ }
+}
+
+void dip_update(uint8_t index, bool active) {
+ switch (index) {
+ case 0:
+ if (active) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_song);
+ #endif
+ layer_on(_ADJUST);
+ } else {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ #endif
+ }
+ }
+}
+
+void matrix_scan_user(void) {
+ #ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ }
+ #endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/pascamel/readme.md b/keyboards/planck/keymaps/pascamel/readme.md
new file mode 100644
index 000000000..b6be21cc9
--- /dev/null
+++ b/keyboards/planck/keymaps/pascamel/readme.md
@@ -0,0 +1,29 @@
+#### Base Layer
+
+A regular QWERTY layer, with Ctrl/alt/cmd on the bottom right corner
+
+![Qwerty](https://i.imgur.com/FpRNJZH.png)
+
+
+
+#### Lower ⇓
+
+Focused on numbers and calculations
+
+![Lower](https://i.imgur.com/PyXSGba.png)
+
+
+
+#### Raise ⇑
+
+Symbols
+
+![Raise](https://i.imgur.com/pYhqcnI.png)
+
+
+
+#### Adjust ⇑+⇓
+
+Settings and configurations
+
+![Adjust](https://i.imgur.com/JN7a0Ku.png)
diff --git a/keyboards/planck/keymaps/pascamel/rules.mk b/keyboards/planck/keymaps/pascamel/rules.mk
new file mode 100644
index 000000000..dcf16bef3
--- /dev/null
+++ b/keyboards/planck/keymaps/pascamel/rules.mk
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/pevecyan/config.h b/keyboards/planck/keymaps/pevecyan/config.h
new file mode 100644
index 000000000..e8c13caac
--- /dev/null
+++ b/keyboards/planck/keymaps/pevecyan/config.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+/*
+ * 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/pevecyan/keymap.c b/keyboards/planck/keymaps/pevecyan/keymap.c
new file mode 100644
index 000000000..57f9f0e7f
--- /dev/null
+++ b/keyboards/planck/keymaps/pevecyan/keymap.c
@@ -0,0 +1,246 @@
+/* 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 "action_layer.h"
+#include "muse.h"
+#include "keymap_slovenian.h"
+
+#define ALTG(kc) ALGR(kc) // FIXME: Remove this
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _ALTGR,
+ _CAPS,
+ _MEMA,
+ _CARON
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+#define CAPS MO(_CAPS)
+#define ALTGR MO(_ALTGR)
+#define MEMA MO(_MEMA)
+#define CARON LT(_CARON, SI_QOT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Z | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | CAPS | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Y | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_TAB, SI_Q, SI_W, SI_E, SI_R, SI_T, SI_Z, SI_U, SI_I, SI_O, SI_P, KC_BSPC,
+ CAPS, SI_A, SI_S, SI_D, SI_F, SI_G, SI_H, SI_J, SI_K, SI_L, CARON, KC_ENT,
+ KC_LSFT, SI_Y, SI_X, SI_C, SI_V, SI_B, SI_N, SI_M, SI_COMM, SI_DOT, SI_MINS, KC_RSFT ,
+ KC_LCTL, KC_LALT, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, ALTGR, MEMA, KC_F12, KC_F5
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | " | # | $ | % | & | / | ( | ) | = | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ SI_TILD, SI_EXLM, SI_DQOT, KC_HASH, SI_DLR, SI_PERC, SI_AMPR, SI_SLSH, SI_LPRN, SI_RPRN, SI_EQL, _______,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_MINS, KC_PPLS, KC_ENT,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_ALTGR] = LAYOUT_planck_grid(
+ _______, ALTG(KC_Q), ALTG(KC_W), ALTG(KC_E), _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, ALTG(KC_F), ALTG(KC_G), _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, ALTG(KC_V), ALTG(KC_B), ALTG(KC_N), _______, ALTG(KC_COMM), ALTG(KC_DOT), _______, _______ ,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_CAPS] = LAYOUT_planck_grid(
+ KC_ESC , KC_BSPC, KC_UP , KC_DEL , _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_MEMA] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, KC_MPLY, KC_VOLU,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_CARON] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, SI_ZV , _______, _______, _______, _______, _______,
+ _______, _______, SI_SV, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, SI_CV, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ register_code(KC_PGDN);
+ unregister_code(KC_PGDN);
+ } else {
+ register_code(KC_PGUP);
+ unregister_code(KC_PGUP);
+ }
+ }
+}
+
+void dip_update(uint8_t index, bool active) {
+ switch (index) {
+ case 0:
+ if (active) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_song);
+ #endif
+ layer_on(_ADJUST);
+ } else {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ #endif
+ }
+ }
+}
+
+void matrix_scan_user(void) {
+ #ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ }
+ #endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/guidoism/readme.md b/keyboards/planck/keymaps/pevecyan/readme.md
index de9680b49..de9680b49 100644
--- a/keyboards/planck/keymaps/guidoism/readme.md
+++ b/keyboards/planck/keymaps/pevecyan/readme.md
diff --git a/keyboards/planck/keymaps/pevecyan/rules.mk b/keyboards/planck/keymaps/pevecyan/rules.mk
new file mode 100644
index 000000000..dcf16bef3
--- /dev/null
+++ b/keyboards/planck/keymaps/pevecyan/rules.mk
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/pickle_jr/rules.mk b/keyboards/planck/keymaps/pickle_jr/rules.mk
index d452c706d..43e0b843f 100644
--- a/keyboards/planck/keymaps/pickle_jr/rules.mk
+++ b/keyboards/planck/keymaps/pickle_jr/rules.mk
@@ -12,7 +12,7 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/planck/keymaps/premek/rules.mk b/keyboards/planck/keymaps/premek/rules.mk
index 247a1fd2a..1e877943d 100644
--- a/keyboards/planck/keymaps/premek/rules.mk
+++ b/keyboards/planck/keymaps/premek/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/planck/keymaps/priyadi/config.h b/keyboards/planck/keymaps/priyadi/config.h
index 448ae3b90..876d057bf 100644
--- a/keyboards/planck/keymaps/priyadi/config.h
+++ b/keyboards/planck/keymaps/priyadi/config.h
@@ -11,8 +11,6 @@
/* skip bootmagic and eeconfig */
#define BOOTMAGIC_KEY_SKIP KC_SPACE
-#define PREVENT_STUCK_MODIFIERS
-
#define UNICODE_TYPE_DELAY 0
#define LAYOUT_DVORAK
diff --git a/keyboards/planck/keymaps/priyadi/rules.mk b/keyboards/planck/keymaps/priyadi/rules.mk
index 27c2638e2..282c047ee 100644
--- a/keyboards/planck/keymaps/priyadi/rules.mk
+++ b/keyboards/planck/keymaps/priyadi/rules.mk
@@ -14,7 +14,7 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
UNICODEMAP_ENABLE = yes # Unicode map
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
API_SYSEX_ENABLE = no
FAUXCLICKY_ENABLE = yes
diff --git a/keyboards/planck/keymaps/pvc/rules.mk b/keyboards/planck/keymaps/pvc/rules.mk
index 8a73eab58..3fb98eca8 100644
--- a/keyboards/planck/keymaps/pvc/rules.mk
+++ b/keyboards/planck/keymaps/pvc/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/planck/keymaps/raffle/config.h b/keyboards/planck/keymaps/raffle/config.h
new file mode 100644
index 000000000..e8c13caac
--- /dev/null
+++ b/keyboards/planck/keymaps/raffle/config.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PLANCK_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+/*
+ * 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/raffle/keymap.c b/keyboards/planck/keymaps/raffle/keymap.c
new file mode 100644
index 000000000..0dbab3893
--- /dev/null
+++ b/keyboards/planck/keymaps/raffle/keymap.c
@@ -0,0 +1,305 @@
+/* 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 "action_layer.h"
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+ _NAV,
+ _DEV
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ BACKLIT,
+ // my macros
+ R_ASGN,
+ R_PIPE,
+ R_CMLN,
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+// my defs
+#define LT_ESC LT(_NAV, KC_ESC) //tap for esc, hold for mouse nav layer
+#define DEV MO(_DEV) // get to dev layer
+#define KC_CAD LALT(LCTL(KC_DEL)) // because awkwardness
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | CTRL | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ESC | APP | GUI | ALT |Lower | Space |Raise | DEV | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_planck_grid(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
+ LT_ESC, KC_APP, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, DEV, _______, _______, _______
+),
+
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | Home | END | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | DEL | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_HOME, KC_END, _______, _______,
+ KC_DEL, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | |Pg Up |Pg Dn | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Del | | | | | | | Next | Vol- | Vol+ | Play
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ _______, KC_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_PGUP, KC_PGDN, _______, _______,
+ KC_DEL, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______,
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Nav Layer
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | PGUP | UP | PGDN | |KC_CAD|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | HOME | LEFT | DOWN |RIGHT | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | END | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_NAV] = LAYOUT_planck_grid(
+ _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_UP, KC_PGDN, _______, KC_CAD,
+ _______, _______, _______, _______, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_END, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* DEV Layer
+ * ,-----------------------------------------------------------------------------------.
+ * | | | |R_CMLM| | | | | | | |KC_CAD|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | |R_ASGN|R_PIPE| | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DEV] = LAYOUT_planck_grid(
+ _______, _______, _______, R_CMLN, _______, _______, _______, _______, _______, _______, _______, KC_CAD,
+ _______, _______, _______, _______, _______, _______, _______, R_ASGN, R_PIPE, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ print("mode just switched to qwerty and this is a huge string\n");
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ #ifdef KEYBOARD_planck_rev5
+ PORTE &= ~(1<<6);
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ #ifdef KEYBOARD_planck_rev5
+ PORTE |= (1<<6);
+ #endif
+ }
+ return false;
+ break;
+ // my macros
+ case R_ASGN:
+ if (record->event.pressed) {
+ SEND_STRING(" <- ");
+ }
+ return false;
+ break;
+ case R_PIPE:
+ if (record->event.pressed) {
+ SEND_STRING(" %>%\n");
+ }
+ return false;
+ break;
+ case R_CMLN:
+ if (record->event.pressed) {
+ SEND_STRING("################################################################################");
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ register_code(KC_PGDN);
+ unregister_code(KC_PGDN);
+ } else {
+ register_code(KC_PGUP);
+ unregister_code(KC_PGUP);
+ }
+ }
+}
+
+void dip_update(uint8_t index, bool active) {
+ switch (index) {
+ case 0:
+ if (active) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_song);
+ #endif
+ layer_on(_ADJUST);
+ } else {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ #endif
+ }
+ }
+}
+
+void matrix_scan_user(void) {
+ #ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ }
+ #endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
+
+
diff --git a/keyboards/planck/keymaps/raffle/readme.md b/keyboards/planck/keymaps/raffle/readme.md
new file mode 100644
index 000000000..4cfb312b9
--- /dev/null
+++ b/keyboards/planck/keymaps/raffle/readme.md
@@ -0,0 +1,11 @@
+# Raffle's Planck Layout
+
+- Caps -> LCtrl
+- LCtrol -> Nav Layer
+ + Nav uses pok3r-like nav (IJKL, H/N for home/end, U/P for pgup/pgdn)
+- RArrow -> Dev layer
+ + handy macros for R programming
+
+Also removes keymaps I don't use (dvorak, etc).
+
+
diff --git a/keyboards/planck/keymaps/raffle/rules.mk b/keyboards/planck/keymaps/raffle/rules.mk
new file mode 100644
index 000000000..dcf16bef3
--- /dev/null
+++ b/keyboards/planck/keymaps/raffle/rules.mk
@@ -0,0 +1 @@
+SRC += muse.c
diff --git a/keyboards/planck/keymaps/rai-suta/rules.mk b/keyboards/planck/keymaps/rai-suta/rules.mk
index 38efe374c..ce13befd9 100644
--- a/keyboards/planck/keymaps/rai-suta/rules.mk
+++ b/keyboards/planck/keymaps/rai-suta/rules.mk
@@ -15,7 +15,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. Do not enable this with audio at the same time.
+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/planck/keymaps/sascha/keymap.c b/keyboards/planck/keymaps/sascha/keymap.c
index afa73e212..684b61f36 100644
--- a/keyboards/planck/keymaps/sascha/keymap.c
+++ b/keyboards/planck/keymaps/sascha/keymap.c
@@ -1,9 +1,8 @@
#include "backlight.h"
-#pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
-#include "planck.h"
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[0] = {
+[0] = LAYOUT_planck_grid(
/* ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐
* │ Esc │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ Bksp │
* ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
@@ -11,15 +10,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
* │ Shft │ Y │ X │ C │ V │ B │ N │ M │ , < │ . > │ / ? │ ' " │
* ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
- * │ Ctrl │ Alt │ GUI │ - _ │ = + │ Spce │ \ | │ ( │ ) │ [ { │ ] } │ Lr 1 │
+ * │ Ctrl │ Alt │ ` ~ │ - _ │ = + │ Spce │ \ | │ ( │ ) │ [ { │ ] } │ Lr 1 │
* └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘
*/
- { KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Z , 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_Y , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_QUOT } ,
- { KC_LCTL , KC_LALT , KC_LGUI , KC_MINS , KC_EQL , KC_SPC , KC_BSLS , KC_LPRN , KC_RPRN , KC_LBRC , KC_RBRC , MO(1) }
- },
-[1] = {
+ KC_ESC , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Z , 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_Y , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_QUOT,
+ KC_LCTL , KC_LALT , KC_GRV , KC_MINS , KC_EQL , KC_SPC , KC_BSLS , KC_LPRN , KC_RPRN , KC_LBRC , KC_RBRC , MO(1)
+ ),
+[1] = LAYOUT_planck_grid(
/* ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┬──────┐
* │ ~ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ DEL │
* ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
@@ -27,14 +26,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
* │ SINS │ ♥ │ ≈ │ ✓ │ ✗ │ ← │ → │ € │ ß │ Ü │ Ö │ Ä │
* ├──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┼──────┤
- * │ Powr │ Rset │ BLSt │ Home │ End │ PgUp │ PgDn │ Left │ Down │ Up │ Rght │ │
+ * │ Rset │ BLSt │ F1 │ Home │ End │ PgUp │ PgDn │ Left │ Down │ Up │ Rght │ │
* └──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┴──────┘
*/
- { KC_TILD , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_DEL } ,
- { KC_GRV , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , KC_CIRC , KC_AMPR , KC_ASTR , UC(L'ü') , UC(L'ö') , UC(L'ä') } ,
- { S(KC_INS) , UC(L'♥') , UC(L'≈') , UC(L'✓') , UC(L'✗') , UC(L'←') , UC(L'→') , UC(L'€') , UC(L'ß') , UC(L'Ü') , UC(L'Ö') , UC(L'Ä') } ,
- { KC_PWR , RESET , BL_STEP , KC_HOME , KC_END , KC_PGUP , KC_PGDN , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , KC_TRNS }
- }
+ KC_TILD , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_DEL,
+ KC_GRV , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , KC_CIRC , KC_AMPR , KC_ASTR , UC(L'ü') , UC(L'ö') , UC(L'ä'),
+ S(KC_INS) , UC(L'♥') , UC(L'≈') , UC(L'✓') , UC(L'✗') , UC(L'←') , UC(L'→') , UC(L'€') , UC(L'ß') , UC(L'Ü') , UC(L'Ö') , UC(L'Ä'),
+ RESET , BL_STEP , KC_F1 , KC_HOME , KC_END , KC_PGUP , KC_PGDN , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , KC_TRNS
+ )
};
void matrix_init_user(void) {
diff --git a/keyboards/planck/keymaps/sascha/rules.mk b/keyboards/planck/keymaps/sascha/rules.mk
index d3918164d..276b71daa 100644
--- a/keyboards/planck/keymaps/sascha/rules.mk
+++ b/keyboards/planck/keymaps/sascha/rules.mk
@@ -1,5 +1,14 @@
AUTO_SHIFT_ENABLE = yes
AUTO_SHIFT_MODIFIERS = yes
+UNICODE_ENABLE = yes
+
+ifeq ($(strip $(KEYBOARD)), planck/rev5)
BACKLIGHT_ENABLE = yes
+CONSOLE_ENABLE = no
+endif
+ifeq ($(strip $(KEYBOARD)), planck/rev6)
+BACKLIGHT_ENABLE = no
+CONSOLE_ENABLE = yes
+EXTRALDFLAGS = -Wl,--build-id=none
UNICODE_ENABLE = yes
-DEFAULT_FOLDER = planck/rev5
+endif
diff --git a/keyboards/planck/keymaps/sdothum/config.h b/keyboards/planck/keymaps/sdothum/config.h
index 4b2cdeece..8bed79e6f 100644
--- a/keyboards/planck/keymaps/sdothum/config.h
+++ b/keyboards/planck/keymaps/sdothum/config.h
@@ -3,9 +3,6 @@
#include "../../config.h"
-// required because lower/raise modifiers are redefined by colemak-dh
-#define PREVENT_STUCK_MODIFIERS
-
// tap dance key press termination interval
#define TAPPING_TERM 250
diff --git a/keyboards/planck/keymaps/sgoodwin/rules.mk b/keyboards/planck/keymaps/sgoodwin/rules.mk
index 279e16eb7..cdcb4a887 100644
--- a/keyboards/planck/keymaps/sgoodwin/rules.mk
+++ b/keyboards/planck/keymaps/sgoodwin/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
API_SYSEX_ENABLE = no # Disable extra stuff for ergodoxen
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/planck/keymaps/skug/config.h b/keyboards/planck/keymaps/skug/config.h
new file mode 100644
index 000000000..79f77786a
--- /dev/null
+++ b/keyboards/planck/keymaps/skug/config.h
@@ -0,0 +1,44 @@
+#pragma once
+
+// Override SpaceCadet Settings
+#undef LSPO_KEY
+#undef RSPC_KEY
+#define LSPO_KEY KC_8 // Nordic Left SpaceCadet
+#define RSPC_KEY KC_9 // Nordic Right SpaceCadet
+
+// Audio
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(COIN_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
+// Most tactile encoders have detents every 4 stages
+#define ENCODER_RESOLUTION 4
diff --git a/keyboards/planck/keymaps/skug/keymap.c b/keyboards/planck/keymaps/skug/keymap.c
new file mode 100644
index 000000000..86a1de767
--- /dev/null
+++ b/keyboards/planck/keymaps/skug/keymap.c
@@ -0,0 +1,344 @@
+/* Copyright 2015-2017 Jack Humbert, Christoffer Holmberg
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+#include "keymap_swedish.h"
+#include "muse.h"
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _DEFAULT,
+ _LOWER,
+ _RAISE,
+ _UTILITY,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ DEFAULT = SAFE_RANGE,
+ RAISE,
+ LOWER,
+ UTILITY,
+ BACKLIT,
+ S1, S2, S3, S4, S5, S6, S7, S8, S9
+};
+
+#define ESC_LOW LT(_LOWER, KC_ESC)
+#define BSP_RAI LT(_RAISE, KC_BSPC)
+#define LFT_CTR CTL_T(NO_APOS)
+#define RGT_CTR CTL_T(KC_TILD)
+#define UTILITY MO(_UTILITY)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Å |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Fn | A | S | D | F | G | H | J | K | L | Ö | Ä |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | - |Shift |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Super| Alt | |L/Esc | Ret | Space|R/Bspc| |AltGr | * | ¨ |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DEFAULT] = LAYOUT_planck_grid(
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , NO_AA ,
+ UTILITY, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , NO_OSLH, NO_AE ,
+ KC_LSPO, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , NO_MINS, KC_RSPC,
+ LFT_CTR, KC_LALT, KC_LGUI, NO_AT , ESC_LOW, KC_ENT , KC_SPC , BSP_RAI, _______, KC_ALGR, NO_ASTR, RGT_CTR
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | + |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_planck_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PLUS,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, NO_GRTR, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_planck_grid(
+ NO_HALF, LSFT(KC_1), NO_QUO2, LSFT(KC_3), NO_BULT, LSFT(KC_5), NO_AMPR, NO_SLSH, NO_LPRN, NO_RPRN, NO_EQL , NO_QUES,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, NO_LESS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Utility layer
+ * ,-----------------------------------------------------------------------------------.
+ * | | | up | | | | | | S1 | S2 | S3 | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | left | down | right| | | | | S4 | S5 | S6 | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | S7 | S8 | S9 | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Del | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_UTILITY] = LAYOUT_planck_grid(
+ _______, _______, KC_UP , _______, _______, _______, _______, _______, S1 , S2 , S3 , _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, S4 , S5 , S6 , _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, S7 , S8 , S9 , _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_DEL , _______, _______, _______, _______
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | |Reset | |Aud on|Audoff|AGnorm|AGswap|Qwerty| | |Utilit| |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_planck_grid(
+ KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 ,
+ _______, RESET , MU_MOD , AU_ON , AU_OFF , AG_NORM, AG_SWAP, DEFAULT, XXXXXXX , XXXXXXX, UTILITY, _______,
+ _______, NO_PIPE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+ float plover_song[][2] = SONG(PLOVER_SOUND);
+ float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
+ float s1[][2] = SONG(NUMBER_ONE);
+ float s2[][2] = SONG(ZELDA_PUZZLE);
+ float s3[][2] = SONG(ZELDA_TREASURE);
+ float s4[][2] = SONG(OVERWATCH_THEME);
+ float s5[][2] = SONG(IMPERIAL_MARCH);
+ float s6[][2] = SONG(E1M1_DOOM);
+ float s7[][2] = SONG(COIN_SOUND);
+ float s8[][2] = SONG(ONE_UP_SOUND);
+ float s9[][2] = SONG(SONIC_RING);
+#endif
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case DEFAULT:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DEFAULT);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ #ifdef KEYBOARD_planck_rev5
+ PORTE &= ~(1<<6);
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ #ifdef KEYBOARD_planck_rev5
+ PORTE |= (1<<6);
+ #endif
+ }
+ return false;
+ break;
+ case S1:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(s1);
+ #endif //AUDIO_ENABLE
+ }
+ return false;
+ break;
+ case S2:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(s2);
+ #endif //AUDIO_ENABLE
+ }
+ return false;
+ break;
+ case S3:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(s3);
+ #endif //AUDIO_ENABLE
+ }
+ return false;
+ break;
+ case S4:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(s4);
+ #endif //AUDIO_ENABLE
+ }
+ return false;
+ break;
+ case S5:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(s5);
+ #endif //AUDIO_ENABLE
+ }
+ return false;
+ break;
+ case S6:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(s6);
+ #endif //AUDIO_ENABLE
+ }
+ return false;
+ break;
+ case S7:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(s7);
+ #endif //AUDIO_ENABLE
+ }
+ return false;
+ break;
+ case S8:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(s8);
+ #endif //AUDIO_ENABLE
+ }
+ return false;
+ break;
+ case S9:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(s9);
+ #endif //AUDIO_ENABLE
+ }
+ return false;
+ break;
+ }
+ return true;
+}
+
+bool muse_mode = false;
+uint8_t last_muse_note = 0;
+uint16_t muse_counter = 0;
+uint8_t muse_offset = 70;
+uint16_t muse_tempo = 50;
+
+void encoder_update(bool clockwise) {
+ if (muse_mode) {
+ if (IS_LAYER_ON(_RAISE)) {
+ if (clockwise) {
+ muse_offset++;
+ } else {
+ muse_offset--;
+ }
+ } else {
+ if (clockwise) {
+ muse_tempo+=1;
+ } else {
+ muse_tempo-=1;
+ }
+ }
+ } else {
+ if (clockwise) {
+ register_code(KC_PGDN);
+ unregister_code(KC_PGDN);
+ } else {
+ register_code(KC_PGUP);
+ unregister_code(KC_PGUP);
+ }
+ }
+}
+
+void dip_update(uint8_t index, bool active) {
+ switch (index) {
+ case 0:
+ if (active) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_song);
+ #endif
+ layer_on(_ADJUST);
+ } else {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(plover_gb_song);
+ #endif
+ layer_off(_ADJUST);
+ }
+ break;
+ case 1:
+ if (active) {
+ muse_mode = true;
+ } else {
+ muse_mode = false;
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ #endif
+ }
+ }
+}
+
+void matrix_scan_user(void) {
+ #ifdef AUDIO_ENABLE
+ if (muse_mode) {
+ if (muse_counter == 0) {
+ uint8_t muse_note = muse_offset + SCALE[muse_clock_pulse()];
+ if (muse_note != last_muse_note) {
+ stop_note(compute_freq_for_midi_note(last_muse_note));
+ play_note(compute_freq_for_midi_note(muse_note), 0xF);
+ last_muse_note = muse_note;
+ }
+ }
+ muse_counter = (muse_counter + 1) % muse_tempo;
+ }
+ #endif
+}
+
+bool music_mask_user(uint16_t keycode) {
+ switch (keycode) {
+ case RAISE:
+ case LOWER:
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/skug/readme.md b/keyboards/planck/keymaps/skug/readme.md
new file mode 100644
index 000000000..aa3e6cda0
--- /dev/null
+++ b/keyboards/planck/keymaps/skug/readme.md
@@ -0,0 +1,8 @@
+![Nordic Planck](https://i.imgur.com/0ZOLnx2.png)
+
+# Nordic Planck
+
+This is my attempt at making a Nordic layout for the planck with all nordic
+characters available in the default layer, things to note are the bottom row
+with Esc, Enter, Space and Backspace in the middle for easy thumb access and
+an arrow cluster on the left.
diff --git a/keyboards/planck/keymaps/skug/rules.mk b/keyboards/planck/keymaps/skug/rules.mk
new file mode 100644
index 000000000..9721fcd74
--- /dev/null
+++ b/keyboards/planck/keymaps/skug/rules.mk
@@ -0,0 +1,3 @@
+SRC += muse.c
+EXTRAKEY_ENABLE = no
+CONSOLE_ENABLE = no
diff --git a/keyboards/planck/keymaps/spacebarracecar/config.h b/keyboards/planck/keymaps/spacebarracecar/config.h
new file mode 100644
index 000000000..4f48857fe
--- /dev/null
+++ b/keyboards/planck/keymaps/spacebarracecar/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(NO_SOUND)
+#endif
diff --git a/keyboards/planck/keymaps/spacebarracecar/keymap.c b/keyboards/planck/keymaps/spacebarracecar/keymap.c
new file mode 100644
index 000000000..b1c0e3148
--- /dev/null
+++ b/keyboards/planck/keymaps/spacebarracecar/keymap.c
@@ -0,0 +1,160 @@
+#include QMK_KEYBOARD_H
+#include "spacebarracecar.h"
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+enum layers {
+ _BASE,
+ _RAISE,
+ _LOWER,
+ _MUSICMODE
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Base
+,-----------------------------------------------------------------------------------------------------------------------.
+|Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace|
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Esc/Nav |A |S |D |F |G |H |J |K |L |; |' |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Shift |Y |X |C |V |B |N |M |, |. |/ |Shift |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|LCtrl | |Win |Alt |Lower |Space |Enter |Raise |AltGr |Win |Menu |RCtrl |
+`-----------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_BASE] = LAYOUT_ortho_4x12(
+ KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC,
+ CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT,
+ CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT,
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+),
+
+/* Lower
+,-----------------------------------------------------------------------------------------------------------------------.
+|~ |! |" |# |$ |% |^ |& |* |( |) | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |? | | | | | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | | | | | | | |
+`-----------------------------------------------------------------------------------------------------------------------'
+*/
+[_LOWER] = LAYOUT_ortho_4x12(
+ DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______,
+ _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE,
+ _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Raise
+,-----------------------------------------------------------------------------------------------------------------------.
+|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |F7 |F8 |F9 |F10 |F11 |F12 | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | | | | | | | |
+`-----------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_RAISE] = LAYOUT_ortho_4x12(
+ CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+[_MUSICMODE] = LAYOUT_ortho_4x12(
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_DOWN, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, MU_MOD, MU_OFF
+),
+
+/* Deadkey
+,-----------------------------------------------------------------------------------------------------------------------.
+| | | | | | | |Ü | |Ö | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Ä |ß | | | | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | |" |" | | | | | |
+`-----------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_DEADKEY] = LAYOUT_ortho_4x12(
+ KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, KC_BSPC,
+ CU_NAV, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ,
+ CU_LSFT, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_RSFT,
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, CU_DDQ, CU_DDQ, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+),
+
+/* Navigation
+,-----------------------------------------------------------------------------------------------------------------------.
+|ALT F4 |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|RESET |ESCT | | | | | | | | | |Game |
+`-----------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_NAV] = LAYOUT_ortho_4x12(
+ ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, MU_ON, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME
+)
+
+};
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+switch (keycode) {
+ case MO(_LOWER):
+ if (game){
+ if(record->event.pressed) {
+ register_code(KC_SPC);
+ } else {
+ unregister_code(KC_SPC);
+ }
+ return false;
+ } else {
+ return true;
+ }
+ case KC_LALT:
+ if (game) {
+ if (record->event.pressed){
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ } else {
+ return true;
+ }
+ case MU_ON:
+ if(record->event.pressed) {
+ layer_off(_LOWER);
+ layer_off(_RAISE);
+ layer_off(_NAV);
+ layer_off(_DEADKEY);
+ layer_on(_MUSICMODE);
+ }
+ return true;
+ case MU_OFF:
+ if(record->event.pressed) {
+ layer_off(_MUSICMODE);
+ }
+ return true;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/planck/keymaps/spacebarracecar/readme.md b/keyboards/planck/keymaps/spacebarracecar/readme.md
new file mode 100644
index 000000000..c8e8134ca
--- /dev/null
+++ b/keyboards/planck/keymaps/spacebarracecar/readme.md
@@ -0,0 +1,5 @@
+# SpacebarRacecar US-International Planck Keymap for German PCs
+
+This keymap emulates most keys of the US-International layout on PCs that have German set as input language.
+This allows the use of the keyboard on any PC in Germany without the need to change any settings.
+The keymap is mostly based on the Planck default layout but adds essential features for german input, like access to Ä, Ö, Ü, ß.
diff --git a/keyboards/planck/keymaps/spacebarracecar/rules.mk b/keyboards/planck/keymaps/spacebarracecar/rules.mk
new file mode 100644
index 000000000..bc817a140
--- /dev/null
+++ b/keyboards/planck/keymaps/spacebarracecar/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 = 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 = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+# 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
+GERMAN_ENABLE = yes # Enable Custom US Ansi Keycodes for PC with German set as input language
diff --git a/keyboards/planck/keymaps/steno/config.h b/keyboards/planck/keymaps/steno/config.h
index 1879ab007..4f99c7eb8 100644
--- a/keyboards/planck/keymaps/steno/config.h
+++ b/keyboards/planck/keymaps/steno/config.h
@@ -15,8 +15,6 @@
#define MUSIC_MASK (keycode != KC_NO)
-#define PREVENT_STUCK_MODIFIERS
-
/*
* MIDI options
*/
@@ -41,4 +39,4 @@
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 2
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/planck/keymaps/tak3over/rules.mk b/keyboards/planck/keymaps/tak3over/rules.mk
index 247a1fd2a..1e877943d 100644
--- a/keyboards/planck/keymaps/tak3over/rules.mk
+++ b/keyboards/planck/keymaps/tak3over/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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 \ No newline at end of file
diff --git a/keyboards/planck/keymaps/tehwalris/config.h b/keyboards/planck/keymaps/tehwalris/config.h
index 4725e1426..c5d55b969 100644
--- a/keyboards/planck/keymaps/tehwalris/config.h
+++ b/keyboards/planck/keymaps/tehwalris/config.h
@@ -3,8 +3,6 @@
#include "../../config.h"
-#define PREVENT_STUCK_MODIFIERS
-
#ifdef AUDIO_ENABLE
// #define STARTUP_SONG SONG(PLANCK_SOUND)
#define STARTUP_SONG SONG(NO_SOUND)
@@ -27,7 +25,7 @@
/* enable basic MIDI features:
- MIDI notes can be sent when in Music mode is on
*/
-
+
#define MIDI_BASIC
/* enable advanced MIDI features:
diff --git a/keyboards/planck/keymaps/thermal_printer/rules.mk b/keyboards/planck/keymaps/thermal_printer/rules.mk
index 7c50d87a0..3c0e340d1 100644
--- a/keyboards/planck/keymaps/thermal_printer/rules.mk
+++ b/keyboards/planck/keymaps/thermal_printer/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PRINTING_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/planck/keymaps/tong92/keymap.c b/keyboards/planck/keymaps/tong92/keymap.c
index 60c8d793b..b9cd24c01 100644
--- a/keyboards/planck/keymaps/tong92/keymap.c
+++ b/keyboards/planck/keymaps/tong92/keymap.c
@@ -1,22 +1,39 @@
//Author: tong92 <tong92power@gmail.com>
-#pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
#include "planck.h"
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
#endif
+enum planck_layers {
+ _WINDOW,
+ _MAC,
+ _LOWER,
+ _RAISE,
+ _WINDOW_SHORTCUT,
+ _MAC_SHORTCUT,
+ _MOUSE
+};
+
+enum planck_keycodes {
+ WINDOW = SAFE_RANGE,
+ MAC,
+ MOUSE,
+ BACKLIT,
+ EXT_MOUSE
+};
+
// Fillers to make layering more clear
#define _______ KC_TRNS
#define XXXXXXX KC_NO
#define LOWER M(1)
#define RAISE M(2)
-#define GO_DEFT M(99)
-#
+#define WINDOW_SHORTCUT MO(_WINDOW_SHORTCUT)
+#define MAC_SHORTCUT MO(_MAC_SHORTCUT)
//MIT Layout
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* 0: Qwerty layer (Default)
+/* Window - Qwerty
* ,-----------------------------------------------------------------------.
* |Tab | q | w | e | r | t | y | u | i | o | p | BS |
* |-----------------------------------------------------------------------|
@@ -27,13 +44,30 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Fn |Ctrl | Win | Alt |Lower| Space |Upper| ' | [ | ] | Alt |
* `-----------------------------------------------------------------------'
*/
-[0] ={
+[_WINDOW] ={
{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
{KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT },
{KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT},
-{MO(4), KC_RCTL,KC_LGUI,KC_LALT,LOWER,KC_SPC,KC_SPC,RAISE,KC_QUOT,KC_LBRC,KC_RBRC,KC_RALT}
+{WINDOW_SHORTCUT, KC_RCTL,KC_LGUI,KC_LALT,LOWER,KC_SPC,KC_SPC,RAISE,KC_QUOT,KC_LBRC,KC_RBRC,KC_RALT}
},
-/* 1: Lower layer
+/* Mac - Qwerty
+* ,-----------------------------------------------------------------------.
+* |Tab | q | w | e | r | t | y | u | i | o | p | BS |
+* |-----------------------------------------------------------------------|
+* |LComd| a | s | d | f | g | h | j | k | l | ; |enter|
+* |-----------------------------------------------------------------------|
+* |Shift| z | x | c | v | b | n | m | , | . | / |Shift|
+* |-----------------------------------------------------------------------|
+* | Fn |Lang |Ctrl | Alt |Lower| Space |Upper| ' | [ | ] |SPOT |
+* `-----------------------------------------------------------------------'
+*/
+[_MAC] ={
+{KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+{KC_LGUI,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT },
+{KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT},
+{MAC_SHORTCUT, LCTL(KC_SPC),KC_LCTL,KC_LALT,LOWER,KC_SPC,KC_SPC,RAISE,KC_QUOT,KC_LBRC,KC_RBRC,LGUI(KC_SPC)}
+},
+/* LOWER
* ,-----------------------------------------------------------------------.
* | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BS |
* |-----------------------------------------------------------------------|
@@ -41,16 +75,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------------------------------------------------------------------|
* | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo|
* |-----------------------------------------------------------------------|
-* | | | | | | SPACE |mouse| END | LEFT| DOWN|RIGHT|
+* | | | | | | SPACE | | END | LEFT| DOWN|RIGHT|
* `-----------------------------------------------------------------------'
*/
-[1] ={
+[_LOWER] ={
{KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC },
{_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS,KC_PLUS,KC_LBRC,KC_RBRC,KC_BSLS },
{_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,KC_F12,_______,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN },
{XXXXXXX,_______,_______,_______,_______,KC_SPC,KC_SPC,_______,KC_END, KC_LEFT,KC_DOWN,KC_RIGHT}
},
-/* 2: Upper layer
+/* RAISE
* ,-----------------------------------------------------------------------.
* | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | BS |
* |-----------------------------------------------------------------------|
@@ -58,16 +92,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------------------------------------------------------------------|
* | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo|
* |-----------------------------------------------------------------------|
-* | | | | |mouse| SPACE | | END | LEFT| DOWN|RIGHT|
+* | | | | | | SPACE | | END | LEFT| DOWN|RIGHT|
* `-----------------------------------------------------------------------'
*/
-[2] ={
+[_RAISE] ={
{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_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS,KC_EQL, KC_LCBR,KC_RCBR,KC_PIPE },
{_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN },
{XXXXXXX,_______,_______,_______,_______,KC_SPC, KC_SPC, _______,KC_END, KC_LEFT,KC_DOWN,KC_RIGHT}
},
-/* 4: fn layer (Window shortcuts)
+/* Window Shortcut
* ,-----------------------------------------------------------------------.
* | ESC |WinOf|WinUp| | |Sh+Ca| | PgUp| UP | PgDo|PrtSc| DEL |
* |-----------------------------------------------------------------------|
@@ -78,11 +112,28 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | |DeskL|DeskR|DeskX|Task | ChangeLang| | | | | LED |
* `-----------------------------------------------------------------------'
*/
-[4] ={
+[_WINDOW_SHORTCUT] ={
{KC_ESC ,LALT(KC_F4) ,LGUI(KC_UP) ,XXXXXXX ,XXXXXXX ,S(KC_CAPS) ,XXXXXXX,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_DELT},
{_______,LGUI(KC_LEFT) ,LGUI(KC_DOWN) ,LGUI(KC_RIGHT) ,XXXXXXX ,LALT(KC_CAPS),KC_CAPS,KC_LEFT,KC_DOWN,KC_RIGHT,XXXXXXX,XXXXXXX},
{_______,LGUI(LSFT(KC_LEFT)),LGUI(LSFT(KC_RIGHT)),XXXXXXX ,XXXXXXX ,LCTL(KC_CAPS),KC_SLCK,KC_HOME,XXXXXXX,KC_END,XXXXXXX,XXXXXXX},
-{KC_TRNS,LGUI(LCTL(KC_LEFT)),LGUI(LCTL(KC_RIGHT)),LGUI(LCTL(KC_F4)),LCTL(LALT(KC_DELT)),LGUI(KC_SPC),LGUI(KC_SPC),XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,M(0)}
+{KC_TRNS,LGUI(LCTL(KC_LEFT)),LGUI(LCTL(KC_RIGHT)),LGUI(LCTL(KC_F4)),LCTL(LALT(KC_DELT)),LGUI(KC_SPC),LGUI(KC_SPC),XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,BACKLIT}
+},
+/* Mac Shortcut
+* ,-----------------------------------------------------------------------.
+* | ESC |CmdUp|CmdDo| | | | | PgUp| UP | PgDo|PrtSc| DEL |
+* |-----------------------------------------------------------------------|
+* | |WBlkL|WBlkR| |ScrF | |CapsL| LEFT| DOWN|RIGHT| | |
+* |-----------------------------------------------------------------------|
+* | |BlckL|BlckR| | | | | HOME| | END | | |
+* |-----------------------------------------------------------------------|
+* | | | | | | MOUSE | | | | | LED |
+* `-----------------------------------------------------------------------'
+*/
+[_MAC_SHORTCUT] ={
+{KC_ESC ,LGUI(KC_UP) ,LGUI(KC_DOWN) ,XXXXXXX,XXXXXXX ,XXXXXXX,XXXXXXX,KC_PGUP,KC_UP,KC_PGDN,KC_PSCR,KC_DELT},
+{_______,LALT(LSFT(KC_LEFT)),LALT(LSFT(KC_RIGHT)),XXXXXXX,LGUI(LCTL(KC_F)),XXXXXXX,KC_CAPS,KC_LEFT,KC_DOWN,KC_RIGHT,XXXXXXX,XXXXXXX},
+{_______,LGUI(LSFT(KC_LEFT)),LGUI(LSFT(KC_RIGHT)),XXXXXXX,XXXXXXX ,XXXXXXX,XXXXXXX,KC_HOME,XXXXXXX,KC_END,XXXXXXX,XXXXXXX},
+{KC_TRNS,_______ ,_______ ,MOUSE ,MOUSE ,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,BACKLIT}
},
/* 10: mouse layer
* ,-----------------------------------------------------------------------.
@@ -90,58 +141,55 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |-----------------------------------------------------------------------|
* | | |Mo_Le|Mo_Do|Mo_Ri| | |M_Bt1|M_WhD|M_Bt2| | |
* |-----------------------------------------------------------------------|
-* | | | | | | | |M_AC0|M_AC1|M_AC2| | |
+* | | | | | | | |M_AC0|M_AC1|M_AC2| |WINDO|
* |-----------------------------------------------------------------------|
-* | | | | | | GO_DEFT | | | | | |
+* | | | | | | GO_DEFT | | | | | MAC |
* `-----------------------------------------------------------------------'
*/
-[10] ={
+[_MOUSE] ={
{XXXXXXX,XXXXXXX,XXXXXXX,KC_MS_U,XXXXXXX,XXXXXXX,XXXXXXX,KC_WH_L,KC_WH_U,KC_WH_R,XXXXXXX,RESET},
{XXXXXXX,XXXXXXX,KC_MS_L,KC_MS_D,KC_MS_R,XXXXXXX,XXXXXXX,KC_BTN1,KC_WH_D,KC_BTN2,XXXXXXX,XXXXXXX},
-{XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,KC_ACL0,KC_ACL1,KC_ACL2,XXXXXXX,XXXXXXX},
-{XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,GO_DEFT,GO_DEFT,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX}
+{XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,KC_ACL0,KC_ACL1,KC_ACL2,XXXXXXX,WINDOW},
+{XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,EXT_MOUSE,EXT_MOUSE,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,MAC}
}
-
};
-//Layout END
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch(id) {
- case 0:
- if (record->event.pressed) {
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- }
- break;
- case 1:
- if (record->event.pressed) {
- layer_on(1);
- update_tri_layer(1, 2, 10);
- } else {
- layer_off(1);
- update_tri_layer(1, 2, 10);
- }
- break;
- case 2:
- if (record->event.pressed) {
- layer_on(2);
- update_tri_layer(1, 2, 10);
- } else {
- layer_off(2);
- update_tri_layer(1, 2, 10);
- }
- break;
- case 99:
- if (record->event.pressed) {
- layer_off(10);
- layer_off(1);
- layer_off(2);
- layer_on(0);
- update_tri_layer(0 ,1 ,2);
- }
- break;
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case WINDOW:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_WINDOW);
+ }
+ return false;
+ break;
+ case MAC:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_MAC);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ }
+ return false;
+ break;
+ case MOUSE:
+ if (record->event.pressed) {
+ layer_on(_MOUSE);
+ }
+ return false;
+ break;
+ case EXT_MOUSE:
+ if (record->event.pressed) {
+ layer_off(_MOUSE);
+ layer_off(_WINDOW_SHORTCUT);
+ layer_off(_MAC_SHORTCUT);
}
- return MACRO_NONE;
+ return false;
+ break;
+ }
+ return true;
};
diff --git a/keyboards/planck/keymaps/tong92/rules.mk b/keyboards/planck/keymaps/tong92/rules.mk
index e6608e74c..df9e7918c 100644
--- a/keyboards/planck/keymaps/tong92/rules.mk
+++ b/keyboards/planck/keymaps/tong92/rules.mk
@@ -52,7 +52,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. Do not enable this with audio at the same time.
+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/planck/keymaps/vaire/config.h b/keyboards/planck/keymaps/vaire/config.h
new file mode 100644
index 000000000..96a13cc42
--- /dev/null
+++ b/keyboards/planck/keymaps/vaire/config.h
@@ -0,0 +1,37 @@
+#pragma
+
+
+
+
+/*
+ * 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 MOUSEKEY_INTERVAL 16
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_WHEEL_DELAY 0
+
+
+#define MIDI_BASIC
+
+#define BACKLIGHT_BREATHING
+
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
diff --git a/keyboards/planck/keymaps/vaire/keymap.c b/keyboards/planck/keymaps/vaire/keymap.c
new file mode 100644
index 000000000..71cbcd8bd
--- /dev/null
+++ b/keyboards/planck/keymaps/vaire/keymap.c
@@ -0,0 +1,150 @@
+#include QMK_KEYBOARD_H
+ #include "action_layer.h"
+
+
+extern keymap_config_t keymap_config;
+
+#define EXCEL_HOME LALT(KC_H)
+#define EXCEL_COL LCTL(KC_SPC)
+#define EXCEL_ROW LSFT(KC_SPC)
+#define DESK_LEFT LCTL(LGUI(KC_LEFT))
+#define WIN_LEFT LSFT(KC_TAB)
+#define WIN_CLOSE LALT(KC_F4)
+#define WIN_RIGHT KC_TAB
+#define DESK_RIGHT LCTL(LGUI(KC_RGHT))
+#define DOCS LGUI(KC_E)
+#define SNAP_RIGHT LGUI(KC_RGHT)
+#define SNAP_UP LGUI(KC_UP)
+#define SNAP_LEFT LGUI(KC_LEFT)
+#define SNAP_DOWN LGUI(KC_DOWN)
+#define COPY LCTL(KC_C)
+#define PASTE LCTL(KC_V)
+#define CUT LCTL(KC_X)
+#define UNDO LCTL(KC_Z)
+#define FIND LCTL(KC_F)
+
+
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+
+ LAYOUT_planck_grid(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, SFT_T(KC_ENT),
+ MO(1), KC_LCTL, KC_LALT, KC_LGUI, MO(2), LT(5,KC_ENT), LT(4,KC_SPC), MO(3), KC_SLSH, KC_LEFT, KC_DOWN, CTL_T(KC_RGHT)),
+
+ LAYOUT_planck_grid(
+ KC_ESC, KC_NLCK, LCTL(KC_SPC), KC_UP, LSFT(KC_SPC), KC_DLR, KC_EQL, KC_P7, KC_P8, KC_P9, KC_PPLS, LCTL(KC_BSPC),
+ KC_TAB, FIND, KC_LEFT, KC_DOWN, KC_RGHT, KC_PERC, KC_CIRC, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_BSLS,
+ KC_LSFT, UNDO, CUT, COPY, PASTE, EXCEL_HOME, KC_PSCR, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_LSFT,
+ KC_TRNS, KC_LCTL, KC_LALT, KC_LGUI, TO(1), KC_ENT, KC_SPC, KC_PENT, KC_P0, KC_PDOT, KC_PAST, KC_LCTL),
+
+ LAYOUT_planck_grid(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_EQL, KC_LT, KC_GT, KC_LPRN,
+ KC_LSFT, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MUTE, KC_MPLY, KC_MNXT, KC_PGUP, SFT_T(KC_VOLU),
+ TO(0), KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_ENT, KC_SPC, MO(3), KC_PSCR, KC_MPRV, KC_PGDOWN, CTL_T(KC_VOLD)),
+
+ LAYOUT_planck_grid(
+ KC_TILD, DESK_LEFT, WIN_LEFT, KC_F4, WIN_RIGHT, DESK_RIGHT, DOCS, SNAP_LEFT, SNAP_UP, SNAP_RIGHT, SNAP_DOWN, KC_DEL,
+ KC_CAPS, KC_QUOT, KC_LBRC, KC_LCBR, KC_LPRN, KC_BSLS, KC_SLSH, KC_RPRN, KC_RCBR, KC_RBRC, KC_DQUO, KC_QUOT,
+ KC_PWR, KC_SLEP, KC_WAKE, KC_HOME, BL_BRTG, BL_STEP, KC_TRNS, KC_CALC, KC_LT, KC_GT, KC_COLON, KC_LSFT,
+ TO(0), KC_LCTL, KC_LALT, KC_LGUI, KC_LALT, KC_LCTL, KC_TRNS, KC_TRNS, AU_TOG, MU_TOG, MU_MOD, LCTL(KC_RGHT)),
+
+ LAYOUT_planck_grid(
+ TO(0), KC_LSCR, WIN_LEFT, KC_MS_WH_UP, WIN_RIGHT, KC_TRNS, KC_TRNS, KC_MS_BTN1, KC_MS_U, KC_MS_BTN2, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_INS, KC_MS_WH_LEFT, KC_MS_WH_DOWN, KC_MS_WH_RIGHT, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS,
+ RESET, KC_APP, KC_MS_ACCEL0, KC_MS_ACCEL0, KC_MS_ACCEL0, KC_TRNS, KC_TRNS, TO(0), TO(1), TO(2), TO(3), TO(4),
+ TO(0), KC_MENU, KC_TRNS, KC_TRNS, KC_LALT, KC_LCTL, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RCTL),
+
+ LAYOUT_planck_grid(
+ KC_BSPC, KC_P, KC_O, KC_I, KC_U, KC_Y, KC_T, KC_R, KC_E, KC_W, KC_Q, KC_BSPC,
+ KC_TAB, KC_SCLN, KC_L, KC_K, KC_J, KC_H, KC_G, KC_F, KC_D, KC_S, KC_A, KC_QUOT,
+ KC_LSFT, KC_ENT, KC_DOT, KC_COMM, KC_M, KC_N, KC_B, KC_V, KC_C, KC_X, KC_Z, SFT_T(KC_ENT),
+ TO(0), KC_LCTL, KC_LALT, KC_LGUI, MO(2), KC_TRNS, KC_TRNS, MO(3), KC_SLSH, KC_LEFT, KC_DOWN, LCTL(KC_RGHT)),
+
+
+
+};
+
+
+#ifdef AUDIO_ENABLE
+
+void matrix_init_user(void)
+{
+ set_voice(default_voice);
+ startup_user();
+ println("Matrix Init");
+}
+
+void led_set_user(uint8_t usb_led)
+{
+ static uint8_t old_usb_led = 0;
+
+ _delay_ms(10); // gets rid of tick
+
+ if (!is_playing_notes())
+ {
+ if ((usb_led & (1<<USB_LED_CAPS_LOCK)) && !(old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+ {
+ // If CAPS LK LED is turning on...
+ PLAY_SONG(tone_caps_on);
+ }
+ else if (!(usb_led & (1<<USB_LED_CAPS_LOCK)) && (old_usb_led & (1<<USB_LED_CAPS_LOCK)))
+ {
+ // If CAPS LK LED is turning off...
+ PLAY_SONG(tone_caps_off);
+ }
+ else if ((usb_led & (1<<USB_LED_NUM_LOCK)) && !(old_usb_led & (1<<USB_LED_NUM_LOCK)))
+ {
+ // If NUM LK LED is turning on...
+ PLAY_SONG(tone_numlk_on);
+ }
+ else if (!(usb_led & (1<<USB_LED_NUM_LOCK)) && (old_usb_led & (1<<USB_LED_NUM_LOCK)))
+ {
+ // If NUM LED is turning off...
+ PLAY_SONG(tone_numlk_off);
+ }
+ else if ((usb_led & (1<<USB_LED_SCROLL_LOCK)) && !(old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+ {
+ // If SCROLL LK LED is turning on...
+ PLAY_SONG(tone_scroll_on);
+ }
+ else if (!(usb_led & (1<<USB_LED_SCROLL_LOCK)) && (old_usb_led & (1<<USB_LED_SCROLL_LOCK)))
+ {
+ // If SCROLL LED is turning off...
+ PLAY_SONG(tone_scroll_off);
+ }
+ }
+
+ old_usb_led = usb_led;
+}
+
+
+void startup_user()
+{
+ _delay_ms(30); // gets rid of tick
+ PLAY_SONG(tone_my_startup);
+}
+
+void shutdown_user()
+{
+ PLAY_SONG(tone_my_goodbye);
+ _delay_ms(3000);
+ stop_all_notes();
+}
+
+void audio_on_user(void)
+{
+ PLAY_SONG(tone_audio_on);
+}
+
+void music_on_user(void)
+{
+ PLAY_SONG(tone_music_on);
+}
+
+#endif /* AUDIO_ENABLE */ \ No newline at end of file
diff --git a/keyboards/planck/keymaps/vaire/readme.md b/keyboards/planck/keymaps/vaire/readme.md
new file mode 100644
index 000000000..6ce39de95
--- /dev/null
+++ b/keyboards/planck/keymaps/vaire/readme.md
@@ -0,0 +1,6 @@
+#The vaire planck layout
+
+- easy access numpad
+- mouse and wheel controls
+- flipped keyboard for one hand typing
+- sound on all num, scroll, and caps lock \ No newline at end of file
diff --git a/keyboards/planck/keymaps/vaire/rules.mk b/keyboards/planck/keymaps/vaire/rules.mk
new file mode 100644
index 000000000..22e4bd934
--- /dev/null
+++ b/keyboards/planck/keymaps/vaire/rules.mk
@@ -0,0 +1,82 @@
+# 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.
+ifeq ($(strip $(KEYBOARD)), planck/rev3)
+ BOOTLOADER = atmel-dfu
+endif
+ifeq ($(strip $(KEYBOARD)), planck/rev4)
+ BOOTLOADER = atmel-dfu
+endif
+ifeq ($(strip $(KEYBOARD)), planck/rev5)
+ BOOTLOADER = qmk-dfu
+endif
+ifeq ($(strip $(KEYBOARD)), planck/light)
+ BOOTLOADER = qmk-dfu
+endif
+
+# 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 = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # 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 = yes # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+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
+
+LAYOUTS = ortho_4x12 planck_mit planck_grid
+LAYOUTS_HAS_RGB = no
+
+DEFAULT_FOLDER = planck/rev5
+
diff --git a/keyboards/planck/keymaps/vifon/config.h b/keyboards/planck/keymaps/vifon/config.h
index 4cb4a1235..be395faad 100644
--- a/keyboards/planck/keymaps/vifon/config.h
+++ b/keyboards/planck/keymaps/vifon/config.h
@@ -26,9 +26,6 @@
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 2
-/* prevent the modifiers from being stuck, sacrificing some memory */
-#define PREVENT_STUCK_MODIFIERS
-
/* A larger buffer for the dynamic macros as this keymap is not taking
* up that much memory.
*/
diff --git a/keyboards/planck/keymaps/vifon/keymap.c b/keyboards/planck/keymaps/vifon/keymap.c
index 0fa8d9066..6398accc2 100644
--- a/keyboards/planck/keymaps/vifon/keymap.c
+++ b/keyboards/planck/keymaps/vifon/keymap.c
@@ -1,11 +1,5 @@
-#pragma message "You may need to add LAYOUT_planck_grid to your keymap layers - see default for an example"
-#include "planck.h"
-#ifdef BACKLIGHT_ENABLE
-# include "backlight.h"
-#endif
-#include "timer.h"
-#include <bootloader.h>
+#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
@@ -27,90 +21,98 @@ enum planck_keycodes {
KM_LW = SAFE_RANGE,
KM_RS,
KM_SHLK, /* ShiftLock */
+ KM_HOLD, /* Any-key Lock */
KM_RST, /* Reset */
KM_NUM, /* Numeric layer */
KM_SLP, /* Sleep 250 ms */
- KM_PPLR, /* Pure Pro layer */
+ KM_PP_GAME, /* Pure Pro Gaming layer */
+ KM_PP_HOLD, /* Pure Pro / PP Gaming layer */
DYNAMIC_MACRO_RANGE,
};
#include "dynamic_macro.h"
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_QW] = { /* 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},
- {CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_FN0 },
- {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL}
-},
-[_CM] = { /* Colemak */
- {KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC},
- {CTL_T(KC_ESC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT},
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_FN0 },
- {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL}
-},
-[_PP] = { /* Pure Pro */
- {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_ENT },
- {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_RSFT, KC_UP, KC_RCTL},
- {KC_LCTL, MO(_DYN),KC_LGUI, KC_LALT, KM_LW, KC_SPC, KC_SPC, KM_RS, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT}
-},
-[_PPG] = { /* Pure Pro: Gaming */
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, XXXXXXX, _______, KM_RS , _______, _______, KM_LW , _______, _______, _______, _______},
-},
-[_NM] = { /* Numeric */
- {KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {KC_LSFT, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, KC_FN0 },
- {_______, _______, _______, _______, _______, KC_SPC, KC_SPC, _______, _______, _______, _______, _______}
-},
-[_LW]= { /* LOWER */
- {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_ESC, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), KM_NUM, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE},
- {_______, LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), KM_SLP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_ENT },
- {_______, BL_TOGG, _______, _______, _______, KC_BTN1, KC_BTN1, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT}
-},
-[_RS]= { /* RAISE */
- {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_ESC, 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, DF(_QW), DF(_CM), KM_PPLR, KM_RST, KC_ENT },
- {_______, BL_STEP, _______, _______, _______, KC_BTN2, KC_BTN2, _______, KC_MPLY, KC_VOLD, KC_VOLU, _______}
-},
-[_DL]= { /* DUAL */
- {_______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______, KC_APP, KC_INS, _______, KC_PSCR, _______},
- {_______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ACL0, KC_ACL2},
- {_______, _______, KC_BTN2, KC_BTN3, KC_BTN1, KC_WWW_BACK, KC_WWW_FORWARD, KC_MUTE, _______, _______, _______, _______},
- {_______, _______, KC_LGUI, KC_LALT, _______, _______, _______, _______, _______, _______, _______, _______}
-},
-[_DYN]= { /* special */
- {_______, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, KC_APP, KC_INS, _______, KC_PSCR, KC_PAUS},
- {_______, DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, _______, KC_CAPS, KC_SLCK, KC_NLCK},
- {KM_SHLK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______}
-},
-};
-
-#undef _______
-
-const uint16_t PROGMEM fn_actions[] = {
- ACTION_MODS_TAP_KEY(MOD_RSFT, KC_ENT),
+ [_QW] = LAYOUT_planck_mit( /* 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,
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT),
+ KC_LCTL, MO(_DYN), KC_LGUI, KC_LALT, KM_LW, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL
+ ),
+ [_CM] = LAYOUT_planck_mit( /* Colemak */
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ CTL_T(KC_ESC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MT(MOD_RSFT, KC_ENT),
+ KC_LCTL, MO(_DYN), KC_LGUI, KC_LALT, KM_LW, KC_SPC, KM_RS, KC_RALT, KC_DOWN, KC_UP, KC_RCTL
+ ),
+ [_PP] = LAYOUT_planck_mit( /* Pure Pro */
+ 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_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, MT(MOD_RSFT, KC_DOT), KC_UP, MT(MOD_RCTL, KC_SLSH),
+ KC_LCTL, MO(_DYN), KC_LGUI, KC_LALT, KM_LW, KC_SPC, KM_RS, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_PPG] = LAYOUT_planck_mit( /* Pure Pro: Gaming */
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_RSFT, _______, KC_RCTL,
+ _______, _______, KM_LW, _______, KM_RS, _______, KM_RS , _______, _______, _______, _______
+ ),
+ [_NM] = LAYOUT_planck_mit( /* Numeric */
+ KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_LSFT, _______, _______, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, _______, MT(MOD_RSFT, KC_ENT),
+ _______, _______, _______, _______, _______, KC_SPC, _______, _______, _______, _______, _______
+ ),
+ [_LW] = LAYOUT_planck_mit( /* LOWER */
+ 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_ESC, LGUI(KC_1), LGUI(KC_2), LGUI(KC_3), LGUI(KC_4), LGUI(KC_5), KM_NUM, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, LGUI(KC_6), LGUI(KC_7), LGUI(KC_8), LGUI(KC_9), LGUI(KC_0), KM_SLP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_ENT,
+ _______, BL_TOGG, _______, _______, _______, KC_BTN1, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ ),
+ [_RS] = LAYOUT_planck_mit( /* RAISE */
+ 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_ESC, 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, DF(_QW), DF(_CM), KM_PP_HOLD, KM_RST, KC_ENT,
+ _______, BL_STEP, _______, _______, _______, KC_BTN2, _______, KC_MPLY, KC_VOLD, KC_VOLU, _______
+ ),
+ [_DL] = LAYOUT_planck_mit( /* DUAL */
+ _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______, KC_APP, KC_INS, _______, KC_PSCR, _______,
+ _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ACL0, KC_ACL2,
+ _______, _______, KC_BTN2, KC_BTN3, KC_BTN1, KC_WWW_BACK, KC_WWW_FORWARD, KC_MUTE, _______, _______, _______, _______,
+ _______, _______, KC_LGUI, KC_LALT, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [_DYN] = LAYOUT_planck_mit( /* special */
+ KM_HOLD, DYN_REC_START1, DYN_MACRO_PLAY1, _______, _______, _______, _______, KC_APP, KC_INS, _______, KC_PSCR, KC_PAUS,
+ KC_LOCK, DYN_REC_START2, DYN_MACRO_PLAY2, _______, _______, _______, _______, _______, _______, KC_CAPS, KC_SLCK, KC_NLCK,
+ KM_SHLK, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, KM_PP_GAME, DF(_QW), DF(_PP), _______, _______, _______, _______
+ ),
};
+/* It's a pseudo-layer composed of two real layers, we need a function for this. */
+void enable_gaming_layer(void) {
+ default_layer_set((1UL << _PP) | (1UL << _PPG));
+#ifdef BACKLIGHT_ENABLE
+ backlight_toggle();
+ _delay_ms(100);
+ backlight_toggle();
+#endif
+}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
static uint16_t key_timer;
+ static uint8_t ignore_up_events = 0;
uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode);
if (!process_record_dynamic_macro(macro_kc, record)) {
return false;
}
+ if (ignore_up_events > 0 && keycode != MO(_DYN) && keycode != KM_HOLD && !record->event.pressed) {
+ ignore_up_events -= 1;
+ return false;
+ }
+
switch (keycode) {
case KM_LW:
if (record->event.pressed) {
@@ -133,7 +135,30 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case KM_SHLK:
register_code(KC_LSFT);
break;
+ case KM_HOLD:
+ if (!record->event.pressed) {
+ ignore_up_events += 1;
+ }
+ break;
case KM_RST:
+ {
+ /* Make slash available on the PP layer. */
+ if ((1UL << _PP) & default_layer_state) {
+ int32_t old_default_layer_state = default_layer_state;
+ int32_t old_layer_state = layer_state;
+
+ layer_state = 0;
+ default_layer_state = (1UL << _QW);
+
+ process_record(record);
+
+ layer_state = old_layer_state;
+ default_layer_state = old_default_layer_state;
+
+ return false;
+ }
+ }
+
if (record->event.pressed) {
key_timer = timer_read();
} else {
@@ -146,15 +171,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
}
break;
- case KM_PPLR:
+ case KM_PP_GAME:
+ if (!record->event.pressed) {
+ enable_gaming_layer();
+ }
+ break;
+ case KM_PP_HOLD:
if (record->event.pressed) {
key_timer = timer_read();
} else {
if (timer_elapsed(key_timer) >= 250) {
- default_layer_set((1UL << _PP) | (1UL << _PPG));
- backlight_toggle();
- _delay_ms(100);
- backlight_toggle();
+ enable_gaming_layer();
} else {
default_layer_set(1UL << _PP);
}
diff --git a/keyboards/planck/keymaps/vifon/rules.mk b/keyboards/planck/keymaps/vifon/rules.mk
index 15a7b736f..5caec1afa 100644
--- a/keyboards/planck/keymaps/vifon/rules.mk
+++ b/keyboards/planck/keymaps/vifon/rules.mk
@@ -15,7 +15,9 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+API_SYSEX_ENABLE = no # https://www.reddit.com/r/olkb/comments/5swhij/_/ddie6zq/
+KEY_LOCK_ENABLE = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/planck/keymaps/yale/config.h b/keyboards/planck/keymaps/yale/config.h
deleted file mode 100644
index 8a916bbd0..000000000
--- a/keyboards/planck/keymaps/yale/config.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define PREVENT_STUCK_MODIFIERS
-
-#endif
-
-
-
diff --git a/keyboards/planck/keymaps/yale/rules.mk b/keyboards/planck/keymaps/yale/rules.mk
index 581e08cd0..caff043c5 100644
--- a/keyboards/planck/keymaps/yale/rules.mk
+++ b/keyboards/planck/keymaps/yale/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/yang/rules.mk b/keyboards/planck/keymaps/yang/rules.mk
index 6b18762fa..173fe2989 100644
--- a/keyboards/planck/keymaps/yang/rules.mk
+++ b/keyboards/planck/keymaps/yang/rules.mk
@@ -2,7 +2,7 @@
# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
AUDIO_ENABLE = no
ifndef QUANTUM_DIR
diff --git a/keyboards/planck/keymaps/zach/config.h b/keyboards/planck/keymaps/zach/config.h
index 19a3856a3..dc79bad06 100644
--- a/keyboards/planck/keymaps/zach/config.h
+++ b/keyboards/planck/keymaps/zach/config.h
@@ -55,7 +55,6 @@
//#define NO_ACTION_ONESHOT
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
-#define PREVENT_STUCK_MODIFIERS
//#define DYNAMIC_MACRO_ENABLE // Enable if you need to use the macro functionality
//#define SPACE_CADET // Parenthesis on L/R shift
diff --git a/keyboards/planck/keymaps/zach/rules.mk b/keyboards/planck/keymaps/zach/rules.mk
index 9d86fc81f..ca24b4792 100644
--- a/keyboards/planck/keymaps/zach/rules.mk
+++ b/keyboards/planck/keymaps/zach/rules.mk
@@ -20,7 +20,7 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode (can't be used with unicodemap)
UNICODEMAP_ENABLE = yes # Enable extended unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/planck/keymaps/zrichard/rules.mk b/keyboards/planck/keymaps/zrichard/rules.mk
index 0b87bc988..7b17f58ce 100755
--- a/keyboards/planck/keymaps/zrichard/rules.mk
+++ b/keyboards/planck/keymaps/zrichard/rules.mk
@@ -20,7 +20,7 @@ MIDI_ENABLE = yes # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
TAP_DANCE_ENABLE = no # Enable double or n tap macros
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/planck/planck.h b/keyboards/planck/planck.h
index f0a12d933..d908d80ec 100644
--- a/keyboards/planck/planck.h
+++ b/keyboards/planck/planck.h
@@ -3,6 +3,8 @@
#include "quantum.h"
+#define encoder_update(clockwise) encoder_update_user(uint8_t index, clockwise)
+
#ifdef __AVR__
#define LAYOUT_planck_mit( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
diff --git a/keyboards/planck/readme.md b/keyboards/planck/readme.md
index 08617322e..083279e8a 100644
--- a/keyboards/planck/readme.md
+++ b/keyboards/planck/readme.md
@@ -5,12 +5,16 @@ Planck
A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
-Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
-Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, Teensy 2.0
+Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
+Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, Teensy 2.0
Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
Make example for this keyboard (after setting up your build environment):
make planck/rev4:default
+Install examples:
+
+ make planck/rev6:default:dfu-util
+
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
diff --git a/keyboards/planck/rev6/chconf.h b/keyboards/planck/rev6/chconf.h
index b52ca7d2c..1d9f12ff1 100644
--- a/keyboards/planck/rev6/chconf.h
+++ b/keyboards/planck/rev6/chconf.h
@@ -41,14 +41,14 @@
* @brief System time counter resolution.
* @note Allowed values are 16 or 32 bits.
*/
-#define CH_CFG_ST_RESOLUTION 16
+#define CH_CFG_ST_RESOLUTION 32
/**
* @brief System tick frequency.
* @details Frequency of the system timer that drives the system ticks. This
* setting also defines the system tick time unit.
*/
-#define CH_CFG_ST_FREQUENCY 10000
+#define CH_CFG_ST_FREQUENCY 100000
/**
* @brief Time delta constant for the tick-less mode.
diff --git a/keyboards/planck/rev6/config.h b/keyboards/planck/rev6/config.h
index 0e462180b..c0fbb412e 100644
--- a/keyboards/planck/rev6/config.h
+++ b/keyboards/planck/rev6/config.h
@@ -43,6 +43,10 @@
* #define UNUSED_PINS
*/
+#define NUMBER_OF_ENCODERS 1
+#define ENCODERS_PAD_A { B12 }
+#define ENCODERS_PAD_B { B13 }
+
#define MUSIC_MAP
#undef AUDIO_VOICES
#undef C6_AUDIO
@@ -50,9 +54,6 @@
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 6
-/* Prevent modifiers from being stuck on after layer changes. */
-#define PREVENT_STUCK_MODIFIERS
-
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
//#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/planck/rev6/halconf.h b/keyboards/planck/rev6/halconf.h
index 5e5d70219..8fe8e0c6f 100644
--- a/keyboards/planck/rev6/halconf.h
+++ b/keyboards/planck/rev6/halconf.h
@@ -111,7 +111,7 @@
* @brief Enables the PWM subsystem.
*/
#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
-#define HAL_USE_PWM TRUE
+#define HAL_USE_PWM FALSE
#endif
/**
diff --git a/keyboards/planck/rev6/matrix.c b/keyboards/planck/rev6/matrix.c
index e4ebe48ac..2df588cef 100644
--- a/keyboards/planck/rev6/matrix.c
+++ b/keyboards/planck/rev6/matrix.c
@@ -21,10 +21,6 @@ static matrix_row_t matrix_debouncing[MATRIX_COLS];
static bool debouncing = false;
static uint16_t debouncing_time = 0;
-static uint8_t encoder_state = 0;
-static int8_t encoder_value = 0;
-static int8_t encoder_LUT[] = { 0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0 };
-
static bool dip_switch[4] = {0, 0, 0, 0};
__attribute__ ((weak))
@@ -53,12 +49,6 @@ void matrix_init(void) {
palSetPadMode(GPIOA, 10, PAL_MODE_INPUT_PULLUP);
palSetPadMode(GPIOB, 9, PAL_MODE_INPUT_PULLUP);
- // encoder setup
- palSetPadMode(GPIOB, 12, PAL_MODE_INPUT_PULLUP);
- palSetPadMode(GPIOB, 13, PAL_MODE_INPUT_PULLUP);
-
- encoder_state = (palReadPad(GPIOB, 12) << 0) | (palReadPad(GPIOB, 13) << 1);
-
// actual matrix setup
palSetPadMode(GPIOB, 11, PAL_MODE_OUTPUT_PUSHPULL);
palSetPadMode(GPIOB, 10, PAL_MODE_OUTPUT_PUSHPULL);
@@ -87,15 +77,8 @@ void matrix_init(void) {
__attribute__ ((weak))
void dip_update(uint8_t index, bool active) { }
-__attribute__ ((weak))
-void encoder_update(bool clockwise) { }
-
bool last_dip_switch[4] = {0};
-#ifndef ENCODER_RESOLUTION
- #define ENCODER_RESOLUTION 4
-#endif
-
uint8_t matrix_scan(void) {
// dip switch
dip_switch[0] = !palReadPad(GPIOB, 14);
@@ -108,18 +91,6 @@ uint8_t matrix_scan(void) {
}
memcpy(last_dip_switch, dip_switch, sizeof(&dip_switch));
- // encoder on B12 and B13
- encoder_state <<= 2;
- encoder_state |= (palReadPad(GPIOB, 12) << 0) | (palReadPad(GPIOB, 13) << 1);
- encoder_value += encoder_LUT[encoder_state & 0xF];
- if (encoder_value >= ENCODER_RESOLUTION) {
- encoder_update(0);
- }
- if (encoder_value <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
- encoder_update(1);
- }
- encoder_value %= ENCODER_RESOLUTION;
-
// actual matrix
for (int col = 0; col < MATRIX_COLS; col++) {
matrix_row_t data = 0;
diff --git a/keyboards/planck/rev6/mcuconf.h b/keyboards/planck/rev6/mcuconf.h
index 2d27bee4e..7c3c6e570 100644
--- a/keyboards/planck/rev6/mcuconf.h
+++ b/keyboards/planck/rev6/mcuconf.h
@@ -225,7 +225,7 @@
* ST driver system settings.
*/
#define STM32_ST_IRQ_PRIORITY 8
-#define STM32_ST_USE_TIMER 4
+#define STM32_ST_USE_TIMER 2
/*
* UART driver system settings.
diff --git a/keyboards/planck/rev6/rules.mk b/keyboards/planck/rev6/rules.mk
index 3603e287b..dce683a7f 100644
--- a/keyboards/planck/rev6/rules.mk
+++ b/keyboards/planck/rev6/rules.mk
@@ -54,3 +54,4 @@ CUSTOM_MATRIX = yes # Custom matrix file
AUDIO_ENABLE = yes
RGBLIGHT_ENABLE = no
# SERIAL_LINK_ENABLE = yes
+ENCODER_ENABLE = yes
diff --git a/keyboards/playkbtw/ca66/config.h b/keyboards/playkbtw/ca66/config.h
index c35718042..53bbe95e3 100644
--- a/keyboards/playkbtw/ca66/config.h
+++ b/keyboards/playkbtw/ca66/config.h
@@ -42,8 +42,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
#define RGB_DI_PIN B1
#ifdef RGB_DI_PIN
diff --git a/keyboards/playkbtw/ca66/keymaps/olivia/keymap.c b/keyboards/playkbtw/ca66/keymaps/olivia/keymap.c
index f27824e57..ed3d625e4 100644
--- a/keyboards/playkbtw/ca66/keymaps/olivia/keymap.c
+++ b/keyboards/playkbtw/ca66/keymaps/olivia/keymap.c
@@ -11,7 +11,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT(
KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, RESET,
- KC_CAPS, RGB_RMOD,RGB_SMOD,RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_TOG, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_CAPS, RGB_RMOD,RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_TOG, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
diff --git a/keyboards/playkbtw/ca66/readme.md b/keyboards/playkbtw/ca66/readme.md
index 74f060604..9e1ff7397 100644
--- a/keyboards/playkbtw/ca66/readme.md
+++ b/keyboards/playkbtw/ca66/readme.md
@@ -5,7 +5,7 @@ Custom 65%
Keyboard Maintainer: QMK Community
Hardware Supported: CA66
-Hardware Availability: [Play Keyboard](http://playkeyboard.qdm.com.tw/)
+Hardware Availability: [Play Keyboard](http://play-keyboard.store/)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/playkbtw/pk60/config.h b/keyboards/playkbtw/pk60/config.h
index 06101349c..601e3c8a5 100644
--- a/keyboards/playkbtw/pk60/config.h
+++ b/keyboards/playkbtw/pk60/config.h
@@ -43,9 +43,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN E2
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
@@ -55,4 +52,4 @@
#define RGBLIGHT_VAL_STEP 8
#endif
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/playkbtw/pk60/readme.md b/keyboards/playkbtw/pk60/readme.md
index 8b14d4021..f4be12dd4 100644
--- a/keyboards/playkbtw/pk60/readme.md
+++ b/keyboards/playkbtw/pk60/readme.md
@@ -8,7 +8,7 @@ Fitted with all stock GH60 cases, with WS2812 RGB underglow.
Keyboard Maintainer: [Barry Huang](https://github.com/yj7272098)
Hardware Supported: Play Keyboard60
-Hardware Availability: [Play Keyboard](http://playkeyboard.qdm.com.tw/)
+Hardware Availability: [Play Keyboard](http://play-keyboard.store/)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/playkbtw/readme.md b/keyboards/playkbtw/readme.md
index adb1ca8c8..4dd58188e 100644
--- a/keyboards/playkbtw/readme.md
+++ b/keyboards/playkbtw/readme.md
@@ -1,5 +1,5 @@
# PlayKeyboardTW
-[PlayKeyboardTW]((http://playkeyboard.qdm.com.tw/)) is a Taiwan based company responsible for keyboards such as the CA66 and the PK60.
+[PlayKeyboardTW]((http://play-keyboard.store/)) is a Taiwan based company responsible for keyboards such as the CA66 and the PK60.
This directory is a collection of all their keyboards.
diff --git a/keyboards/preonic/info.json b/keyboards/preonic/info.json
index 3e5670cfa..cb0798b54 100644
--- a/keyboards/preonic/info.json
+++ b/keyboards/preonic/info.json
@@ -6,7 +6,7 @@
"width": 12,
"height": 5,
"layouts": {
- "KEYMAP": {
+ "LAYOUT_preonic_1x2uC": {
"key_count": 59,
"layout": [
{ "w": 1, "x": 0, "y": 0 },
@@ -69,7 +69,7 @@
{ "w": 1, "x": 10, "y": 4 },
{ "w": 1, "x": 11, "y": 4 } ]
},
- "LAYOUT_preonic_grid": {
+ "LAYOUT_ortho_5x12": {
"key_count": 60,
"layout": [
{ "w": 1, "x": 0, "y": 0 },
diff --git a/keyboards/preonic/keymaps/boy314/config.h b/keyboards/preonic/keymaps/boy314/config.h
new file mode 100644
index 000000000..b18b95477
--- /dev/null
+++ b/keyboards/preonic/keymaps/boy314/config.h
@@ -0,0 +1,38 @@
+#pragma once
+
+#ifdef AUDIO_ENABLE
+ #define STARTUP_SONG SONG(PREONIC_SOUND)
+ // #define STARTUP_SONG SONG(NO_SOUND)
+
+ #define DEFAULT_LAYER_SONGS { SONG(QWERTY_SOUND), \
+ SONG(COLEMAK_SOUND), \
+ SONG(DVORAK_SOUND) \
+ }
+#endif
+
+#define MUSIC_MASK (keycode != KC_NO)
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+
+#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 2
+
diff --git a/keyboards/preonic/keymaps/boy314/keymap.c b/keyboards/preonic/keymaps/boy314/keymap.c
new file mode 100644
index 000000000..67292bdb3
--- /dev/null
+++ b/keyboards/preonic/keymaps/boy314/keymap.c
@@ -0,0 +1,213 @@
+/* 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
+
+#define FN_CAPS LT(_FL, KC_CAPSLOCK)
+
+// define layers
+#define _QWERTY 0
+#define _DVORAK 1
+#define _OSU 2
+#define _LOWER 10
+#define _RAISE 11
+#define _ADJUST 12
+
+// macro shortcuts
+#define QWERTY TO(_QWERTY)
+#define DVORAK TO(_DVORAK)
+#define OSU TO(_OSU)
+#define LOWER M(_LOWER)
+#define RAISE M(_RAISE)
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Enter|
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Caps | A | S | D | F | G | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | N | M | , | . | / | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Del | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_QWERTY] = LAYOUT_preonic_grid( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, \
+ KC_LCTL, KC_DEL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | / |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | CAPS | A | O | E | U | I | D | H | T | N | S | Enter|
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z | Shift|
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Del | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_DVORAK] = LAYOUT_preonic_grid( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, \
+ KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT, \
+ KC_LSPO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSPC, \
+ KC_LCTL, KC_DEL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_LOWER] = LAYOUT_preonic_grid( \
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_HOME, KC_END, _______, \
+ _______, XXXXXXX, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | ` | | | Up | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | | Left | Down |Right | | | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | |PageDn|PageUP| |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC},
+ {KC_GRV, _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_DEL},
+ {KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS},
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_PGUP, _______},
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+
+[_RAISE] = LAYOUT_preonic_grid( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_GRV, _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ KC_DEL, _______, KC_LEFT, KC_DOWN,KC_RIGHT, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|AudOff|AGnorm|AGswap|Qwerty| | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | |Voice-|Voice+|Mus on|MusOff|MidiOn|MidOff|Dvorak| | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | OSU | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+
+[_ADJUST] = LAYOUT_preonic_grid( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, RESET, DEBUG, _______, _______, _______, _______, TERM_ON, TERM_OFF,_______, _______, KC_DEL, \
+ _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, _______, _______, _______, _______, \
+ _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, DVORAK, _______, _______, _______, _______, \
+ _______, OSU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record)
+{
+ switch (keycode)
+ {
+ case QWERTY:
+ if (record->event.pressed)
+ {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed)
+ {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+ case OSU:
+ if (record->event.pressed)
+ {
+ set_single_persistent_default_layer(_OSU);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed)
+ {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ else
+ {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed)
+ {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ else
+ {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+};
diff --git a/keyboards/preonic/keymaps/boy314/readme.md b/keyboards/preonic/keymaps/boy314/readme.md
new file mode 100644
index 000000000..9d8a2fd11
--- /dev/null
+++ b/keyboards/preonic/keymaps/boy314/readme.md
@@ -0,0 +1,8 @@
+# Boy_314's XD75RE Layout
+- NOTE: ONLY SUPPORTS DVORAK AT THE MOMENT, WILL UPDATE WITH QWERTY WHEN I GET THE TIME TO DO SO.
+- Features many symbols and function keys in secondary layers.
+- NOTE: WORK IN PROGRESS
+# THINGS TO DO
+- make better use of bottom row
+- add numpad toggle layer
+- explore rgb underglow options \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/boy314/rules.mk b/keyboards/preonic/keymaps/boy314/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/preonic/keymaps/boy314/rules.mk
diff --git a/keyboards/preonic/keymaps/bucktooth/config.h b/keyboards/preonic/keymaps/bucktooth/config.h
index b98883120..23e9e0ed2 100644
--- a/keyboards/preonic/keymaps/bucktooth/config.h
+++ b/keyboards/preonic/keymaps/bucktooth/config.h
@@ -4,6 +4,5 @@
#include "../../config.h"
#define FORCE_NKRO 1
-#define PREVENT_STUCK_MODIFIERS
#endif
diff --git a/keyboards/preonic/keymaps/bucktooth/rules.mk b/keyboards/preonic/keymaps/bucktooth/rules.mk
index 3e87d41d3..9dbdfcbd3 100644
--- a/keyboards/preonic/keymaps/bucktooth/rules.mk
+++ b/keyboards/preonic/keymaps/bucktooth/rules.mk
@@ -11,7 +11,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/preonic/keymaps/dlaroe/rules.mk b/keyboards/preonic/keymaps/dlaroe/rules.mk
index b35624471..eea316849 100644
--- a/keyboards/preonic/keymaps/dlaroe/rules.mk
+++ b/keyboards/preonic/keymaps/dlaroe/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/preonic/keymaps/jacwib/config.h b/keyboards/preonic/keymaps/jacwib/config.h
index b98883120..23e9e0ed2 100644
--- a/keyboards/preonic/keymaps/jacwib/config.h
+++ b/keyboards/preonic/keymaps/jacwib/config.h
@@ -4,6 +4,5 @@
#include "../../config.h"
#define FORCE_NKRO 1
-#define PREVENT_STUCK_MODIFIERS
#endif
diff --git a/keyboards/preonic/keymaps/jacwib/keymap.c b/keyboards/preonic/keymaps/jacwib/keymap.c
index 0b63abce1..ffd588945 100644
--- a/keyboards/preonic/keymaps/jacwib/keymap.c
+++ b/keyboards/preonic/keymaps/jacwib/keymap.c
@@ -46,7 +46,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM, \
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH, \
KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS, \
- KC_LCTL, KC_LALT, KC_LGUI, NO_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_ALGR, LOWER, KC_SPC, KC_ENT, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Lower
@@ -109,7 +109,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, NO_AM, \
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_AE, NO_OSLH, \
KC_LSFT, NO_LESS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_COMM, NO_MINS, \
- KC_LCTL, KC_LALT, KC_LGUI, NO_ALGR, MLOWER, KC_SPC, KC_ENT, MRAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_ALGR, MLOWER, KC_SPC, KC_ENT, MRAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Mac Lower
diff --git a/keyboards/preonic/keymaps/jacwib/rules.mk b/keyboards/preonic/keymaps/jacwib/rules.mk
index 3e87d41d3..9dbdfcbd3 100644
--- a/keyboards/preonic/keymaps/jacwib/rules.mk
+++ b/keyboards/preonic/keymaps/jacwib/rules.mk
@@ -11,7 +11,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/preonic/keymaps/kinesis/rules.mk b/keyboards/preonic/keymaps/kinesis/rules.mk
index 6c8d2897c..f37fe4338 100644
--- a/keyboards/preonic/keymaps/kinesis/rules.mk
+++ b/keyboards/preonic/keymaps/kinesis/rules.mk
@@ -15,7 +15,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/preonic/keymaps/kuatsure/config.h b/keyboards/preonic/keymaps/kuatsure/config.h
index ba0ed525e..bae774211 100644
--- a/keyboards/preonic/keymaps/kuatsure/config.h
+++ b/keyboards/preonic/keymaps/kuatsure/config.h
@@ -3,6 +3,9 @@
#include "config_common.h"
+#define NO_AUTO_SHIFT_SPECIAL
+#define NO_AUTO_SHIFT_ALPHA
+
#ifdef AUDIO_ENABLE
#define STARTUP_SONG SONG(PREONIC_SOUND)
// #define STARTUP_SONG SONG(NO_SOUND)
diff --git a/keyboards/preonic/keymaps/kuatsure/keymap.c b/keyboards/preonic/keymaps/kuatsure/keymap.c
index 63c3937fc..5a7fa40e5 100644
--- a/keyboards/preonic/keymaps/kuatsure/keymap.c
+++ b/keyboards/preonic/keymaps/kuatsure/keymap.c
@@ -32,17 +32,19 @@ enum preonic_keycodes {
GAME_MOD,
LOWER,
RAISE,
+
+ END_OF_LINE,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty
* ,-----------------------------------------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | Tab | Q | W | E | R | T | Y | U | I | O | P | \ |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' |
+ * | Esc/C| A | S | D | F | G | H | J | K | L | ; | ' |
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
* |------+------+------+------+------+------+------+------+------+------+------+------|
@@ -50,32 +52,36 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* `-----------------------------------------------------------------------------------'
*/
[_QWERTY] = LAYOUT_preonic_grid_wrapper( \
- KC_ESC, _________________NUMBER_L1_________________, _________________NUMBER_R1_________________, KC_BSPC, \
+ KC_GRV, _________________NUMBER_L1_________________, _________________NUMBER_R1_________________, KC_BSPC, \
KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSLS, \
- KC_LCTL, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, \
+ KT_CESC, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, \
KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_ENT, \
KC_LEAD, GAME, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
),
/* Game
+ *
+ * Mostly transparent, but wanted to disable gui key, and give different raise / lower layers ( game_mod ).
+ * Also give a key to get back to qwerty layout.
+ *
* ,-----------------------------------------------------------------------------------.
- * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * | | | | | | | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | Y | U | I | O | P | \ |
+ * | | | | | | | | | | | | |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' |
+ * | | | | | | | | | | | | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
+ * | | | | | | | | | | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * |Leader|Qwerty| Alt | Spc |Game+ | Space |Game+ | Left | Down | Up |Right |
+ * | |Qwerty| | Spc |Game+ | |Game+ | | | | |
* `-----------------------------------------------------------------------------------'
*/
[_GAME] = LAYOUT_preonic_grid_wrapper( \
- KC_ESC, _________________NUMBER_L1_________________, _________________NUMBER_R1_________________, KC_BSPC, \
- KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_BSLS, \
- KC_LCTL, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, \
- KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_ENT, \
- KC_LEAD, QWERTY, KC_LALT, KC_SPC, GAME_MOD, KC_SPC, KC_SPC, GAME_MOD, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, QWERTY, _______, KC_SPC, GAME_MOD, _______, _______, GAME_MOD, _______, _______, _______, _______ \
),
/* Game Modifiers
@@ -101,7 +107,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Lower
* ,-----------------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | < | > | | | |
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
* |------+------+------+------+------+-------------+------+------+------+------+------|
* | | | | Up | | ` | | { | } | _ | | | |
* |------+------+------+------+------+-------------+------+------+------+------+------|
@@ -109,35 +115,35 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------|------+------+------+------+------+------|
* | | Vol- | Prev | Play | Next | Vol+ | - | [ | ] | | ? | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | Mute | | | | Esc | | Home | PgUp | PgDwn| End |
+ * | | Mute | | | | | | Home | PgUp | PgDwn| End |
* `-----------------------------------------------------------------------------------'
*/
[_LOWER] = LAYOUT_preonic_grid_wrapper( \
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_LT, KC_GT, _______, _______, _______, \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
_______, _______, _______, KC_UP, _______, KC_GRV, _______, KC_LCBR, KC_RCBR, KC_UNDS, _______, KC_PIPE, \
_______, KC_DEL, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TILD, KC_EQL, KC_LPRN, KC_RPRN, KC_PLUS, KC_COLN, KC_DQT , \
_______, KC_VOLD, KC_MRWD, KC_MPLY, KC_MFFD, KC_VOLU, KC_MINS, KC_LBRC, KC_RBRC, _______, KC_QUES, _______, \
- _______, KC_MUTE, _______, _______, _______, KC_ESC, KC_ESC, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END \
+ _______, KC_MUTE, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END \
),
/* Raise
* ,-----------------------------------------------------------------------------------.
* | E`~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
* |------+------+------+------+------+-------------+------+------+------+------+------|
- * | | F9 | F10 | F11 | F12 | | | | | | | Bksp |
+ * | | F9 | F10 | F11 | F12 | | | { | } | | | Bksp |
* |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F5 | F6 | F7 | F8 | | | | | | | |
+ * | | F5 | F6 | F7 | F8 | | | ( | ) | < | > | |
* |------+------+------+------+------+------|------+------+------+------+------+------|
- * | | F1 | F2 | F3 | F4 | | | | | | | |
+ * | | F1 | F2 | F3 | F4 | | | [ | ] | | | |
* |------+------+------+------+------+------+------+------+------+------+------+------|
* | | | | | | Enter | | Home | PgUp | PgDwn| End |
* `-----------------------------------------------------------------------------------'
*/
[_RAISE] = LAYOUT_preonic_grid_wrapper( \
KC_GESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______, \
- _______, ____________FUNCTION_3____________, _______, _______, _______, _______, _______, _______, KC_BSPC, \
- _______, ____________FUNCTION_2____________, _______, _______, _______, _______, _______, _______, _______, \
- _______, ____________FUNCTION_1____________, _______, _______, _______, _______, _______, _______, _______, \
+ _______, ____________FUNCTION_3____________, _______, _______, KC_LCBR, KC_RCBR, _______, _______, KC_BSPC, \
+ _______, ____________FUNCTION_2____________, _______, _______, KC_LPRN, KC_RPRN, KC_LT, KC_GT, _______, \
+ _______, ____________FUNCTION_1____________, _______, _______, KC_LBRC, KC_RBRC, _______, _______, _______, \
_______, _______, _______, _______, _______, KC_ENT, KC_ENT, _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END \
),
diff --git a/keyboards/preonic/keymaps/kuatsure/rules.mk b/keyboards/preonic/keymaps/kuatsure/rules.mk
index 76d73acef..4aacc7051 100644
--- a/keyboards/preonic/keymaps/kuatsure/rules.mk
+++ b/keyboards/preonic/keymaps/kuatsure/rules.mk
@@ -1 +1,3 @@
BACKLIGHT_ENABLE = no
+LEADER_ENABLE = yes
+AUTO_SHIFT_ENABLE = yes
diff --git a/keyboards/preonic/keymaps/seph/rules.mk b/keyboards/preonic/keymaps/seph/rules.mk
index 4333bf455..dd26cd906 100644
--- a/keyboards/preonic/keymaps/seph/rules.mk
+++ b/keyboards/preonic/keymaps/seph/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/preonic/keymaps/that_canadian/config.h b/keyboards/preonic/keymaps/that_canadian/config.h
deleted file mode 100644
index 11cafbefc..000000000
--- a/keyboards/preonic/keymaps/that_canadian/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-#define PREVENT_STUCK_MODIFIERS
-
-#endif
diff --git a/keyboards/preonic/keymaps/trigotometry/config.h b/keyboards/preonic/keymaps/trigotometry/config.h
new file mode 100644
index 000000000..eaf6997db
--- /dev/null
+++ b/keyboards/preonic/keymaps/trigotometry/config.h
@@ -0,0 +1,8 @@
+#pragma once
+
+#define STARTUP_SONG SONG(PREONIC_SOUND)
+#define MUSIC_MASK (keycode != KC_NO)
+
+#define FORCE_NKRO 1
+#define PREVENT_STUCK_MODIFIERS
+#define GRAVE_ESC_GUI_OVERRIDE \ No newline at end of file
diff --git a/keyboards/preonic/keymaps/trigotometry/keymap.c b/keyboards/preonic/keymaps/trigotometry/keymap.c
new file mode 100644
index 000000000..31cee4a4c
--- /dev/null
+++ b/keyboards/preonic/keymaps/trigotometry/keymap.c
@@ -0,0 +1,165 @@
+#include QMK_KEYBOARD_H
+#ifdef AUDIO_ENABLE
+ #include "audio.h"
+#endif
+
+// Layer declarations
+enum preonic_layers {
+ _QWERTY = 1,
+ _GAMING = 2,
+ _LOWER = 3,
+ _RAISE = 4,
+};
+
+enum preonic_keycodes {
+ QWERTY = SAFE_RANGE,
+ GAMING,
+ LOWER,
+ RAISE,
+};
+
+// QMK predefined macros
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY
+ * ,-----------------------------------------------------------------------------------.
+ * | GEsc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Shft | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |SFTENT| Z | X | C | V | B | N | M | , | . | / | Entr |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Ctrl | Alt | Supr |Lower | Space | Raise| Left | Down | Up | Rght |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_QWERTY] = LAYOUT_preonic_grid(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ SFT_ENT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT, \
+ XXXXXXX, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Gaming
+ * ,-----------------------------------------------------------------------------------.
+ * | Grve | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Shft | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shft | Z | X | C | V | B | N | M | , | . | / | Entr |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Ctrl | Alt | Alt |Lower | Space | Raise| Left | Down | Up | Rght |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_GAMING] = LAYOUT_preonic_grid(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, \
+ KC_LSFT, 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_LCTL, KC_LALT, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | | * | / | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | VolD | Up | VolU | | | 7 | 8 | 9 | - | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | Left | Down | Rght | | | 4 | 5 | 6 | + | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | Prev | Play | Skip | | | 1 | 2 | 3 | = | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | Supr | | | 0 | Home |PageDn|PageUp| End |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_preonic_grid(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_PAST, KC_PSLS, XXXXXXX, KC_DEL, \
+ _______, XXXXXXX, KC_VOLD, KC_UP, KC_VOLU, XXXXXXX, XXXXXXX, KC_7, KC_8, KC_9, KC_PMNS, KC_BSPC, \
+ _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_4, KC_5, KC_6, KC_PPLS, XXXXXXX, \
+ _______, XXXXXXX, KC_MRWD, KC_MPLY, KC_MFFD, XXXXXXX, XXXXXXX, KC_1, KC_2, KC_3, KC_PEQL, KC_ENT, \
+ _______, _______, _______, KC_LGUI, _______, _______, _______, KC_0, KC_HOME, KC_PGDN, KC_PGUP, KC_END \
+),
+
+/* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | \ | | | / | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | [ | { | ( | < | > | ) | } | ] | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | + | - | _ | = | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | |Qwerty| Game | | Reset|
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_preonic_grid(
+ KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11 , \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_BSLS, XXXXXXX, XXXXXXX, KC_PSLS, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
+ _______, KC_PIPE, KC_LBRC, KC_LCBR, KC_LPRN, KC_LABK, KC_RABK, KC_RPRN, KC_RCBR, KC_RBRC, KC_PIPE, XXXXXXX, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_PPLS, KC_PMNS, KC_UNDS, KC_EQL, XXXXXXX, XXXXXXX, XXXXXXX, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, QWERTY , GAMING, XXXXXXX, RESET \
+)
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ } else {
+ layer_off(_LOWER);
+ }
+ return false;
+ break;
+
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ break;
+
+ case GAMING:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_GAMING);
+ }
+ return false;
+ break;
+
+ }
+ return true;
+};
+
+// NFI how to bring this inline with current QMK standards yet, or it's redundant and don't use it.
+// #ifdef AUDIO_ENABLE
+// float tone_startup[][2] = {
+// {NOTE_D5, 8},
+// {NOTE_E6, 8},
+// {NOTE_D6, 8},
+// {NOTE_E5, 8}
+// };
+
+// void startup_user()
+// {
+// _delay_ms(20); // gets rid of tick
+// PLAY_SONG(tone_startup);
+// }
+// #endif
diff --git a/keyboards/preonic/keymaps/trigotometry/readme.md b/keyboards/preonic/keymaps/trigotometry/readme.md
new file mode 100644
index 000000000..aff01a22e
--- /dev/null
+++ b/keyboards/preonic/keymaps/trigotometry/readme.md
@@ -0,0 +1,75 @@
+# Trigotometry's v1.0
+
+This layout is the confluence of the standard Preonic QWERTY layout and some of my own tweaks to make it's software as logical and straight cut as it's physical presence, at least in my eyes. Some might say there's wasted space, though possibly true, I believe in keeping it minimal and only adding what is really needed. So if, like me, you're also beginning your journey of coding and enjoy some downtime with friends on the battlefield I think you'll find this layout a stellar place to kick off your customisation.
+
+## Qwerty
+ /* Qwerty
+ * ,-----------------------------------------------------------------------------------.
+ * | GEsc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Shft | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * |SFTENT| Z | X | C | V | B | N | M | , | . | / | ENT |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | Ctrl | Alt | Supr |Lower | Space | Raise| Left | Down | Up | Rght |
+ * `-----------------------------------------------------------------------------------
+ */
+Take note of the dual Enter keys, located where normally there'd be a pair of Shifts. I did this to ensure the alphas stayed in the same spot when compared to a staggered and standard board. My brain found it easier to switch the mods across keyboard than the relative position in the alphas, however it's easy to reverse the Enters/Shifts and you'll be back an (nearly) square one!
+
+Also, LEnter acts as a Shift if it's held.
+
+
+
+## Gaming
+ /* Gaming
+ * ,-----------------------------------------------------------------------------------.
+ * | Grve | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Shft | A | S | D | F | G | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shft | Z | X | C | V | B | N | M | , | . | / | Entr |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | Ctrl | Ctrl | Alt | Alt |Lower | Space | Raise| Left | Down | Up | Rght |
+ * `-----------------------------------------------------------------------------------'
+ */
+Honestly it's pretty standard, however I've doubled up on the important modifiers and removed the Super. It's still accessable readily by holding Lower and the key to it's left. Neato? I thought so.
+
+
+
+## Raise Layer
+ /* Raise
+ * ,-----------------------------------------------------------------------------------.
+ * | F12 | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | \ | | | / | | | | |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | | [ | { | ( | < | > | ) | } | ] | | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | + | - | _ | = | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | |Qwerty| Game | | Reset|
+ * `-----------------------------------------------------------------------------------'
+ */
+Pretty self explanatory I think.
+
+
+
+## Lower Layer
+ /* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | | * | / | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | VolD | Up | VolU | | | 7 | 8 | 9 | - | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | Left | Down | Rght | | | 4 | 5 | 6 | + | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | Prev | Play | Skip | | | 1 | 2 | 3 | = | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | Supr | | | 0 | Home |PageDn|PageUp| End |
+ * `-----------------------------------------------------------------------------------'
+ */
+ Music controls and arrows in prime location. F1-F6 there for extra mappings when in the Gaming layer.
diff --git a/keyboards/preonic/keymaps/trigotometry/rules.mk b/keyboards/preonic/keymaps/trigotometry/rules.mk
new file mode 100644
index 000000000..a6bcd5637
--- /dev/null
+++ b/keyboards/preonic/keymaps/trigotometry/rules.mk
@@ -0,0 +1,2 @@
+#Build Options
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
diff --git a/keyboards/preonic/keymaps/zach/config.h b/keyboards/preonic/keymaps/zach/config.h
index bb8913c7a..25f88afdc 100644
--- a/keyboards/preonic/keymaps/zach/config.h
+++ b/keyboards/preonic/keymaps/zach/config.h
@@ -65,7 +65,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
//#define RGB_DI_PIN D1
-//#define RGBLIGHT_TIMER
+
//#define RGBLED_NUM 28 // Number of LEDs
//#define RGBLIGHT_HUE_STEP 10
//#define RGBLIGHT_SAT_STEP 17
@@ -87,7 +87,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
-#define PREVENT_STUCK_MODIFIERS
//#define DYNAMIC_MACRO_ENABLE // Enable if you need to use the macro functionality
//#define SPACE_CADET // Parenthesis on L/R shift
diff --git a/keyboards/preonic/keymaps/zach/rules.mk b/keyboards/preonic/keymaps/zach/rules.mk
index eebf41349..f00af4396 100644
--- a/keyboards/preonic/keymaps/zach/rules.mk
+++ b/keyboards/preonic/keymaps/zach/rules.mk
@@ -20,7 +20,7 @@ AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
UNICODEMAP_ENABLE = yes # Enable extended unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/preonic/preonic.h b/keyboards/preonic/preonic.h
index 8d7b577a9..e2aa1545c 100644
--- a/keyboards/preonic/preonic.h
+++ b/keyboards/preonic/preonic.h
@@ -1,149 +1,26 @@
-#ifndef PREONIC_H
-#define PREONIC_H
+#pragma once
#include "quantum.h"
-#ifdef __AVR__
-
-#define LAYOUT_preonic_1x2uC( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
- k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b \
-) \
-{ \
- { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
- { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
- { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
- { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
- { k40, k41, k42, k43, k44, k45, k45, k47, k48, k49, k4a, k4b } \
-}
-
-#define LAYOUT_preonic_grid( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
- k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
-) \
-{ \
- { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
- { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
- { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
- { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
- { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \
-}
-
-#define KEYMAP LAYOUT_preonic_1x2uC
-#define LAYOUT_ortho_5x12 LAYOUT_preonic_grid
-
-#else
-
-#define LAYOUT_preonic_1x2uC( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
- k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b \
-) \
-{ \
- { k00, k01, k02, k03, k04, k05 }, \
- { k10, k11, k12, k13, k14, k15 }, \
- { k20, k21, k22, k23, k24, k25 }, \
- { k30, k31, k32, k33, k34, k35 }, \
- { k06, k07, k08, k09, k0a, k0b }, \
- { k16, k17, k18, k19, k1a, k1b }, \
- { k26, k27, k28, k29, k2a, k2b }, \
- { k36, k37, k38, k39, k3a, k3b }, \
- { k40, k41, k42, k49, k4a, k4b }, \
- { k46, k47, k48, k43, k44, k45 } \
-}
-
-#define LAYOUT_preonic_1x2uR( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
- k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b \
-) \
-{ \
- { k00, k01, k02, k03, k04, k05 }, \
- { k10, k11, k12, k13, k14, k15 }, \
- { k20, k21, k22, k23, k24, k25 }, \
- { k30, k31, k32, k33, k34, k35 }, \
- { k06, k07, k08, k09, k0a, k0b }, \
- { k16, k17, k18, k19, k1a, k1b }, \
- { k26, k27, k28, k29, k2a, k2b }, \
- { k36, k37, k38, k39, k3a, k3b }, \
- { k40, k41, k42, k49, k4a, k4b }, \
- { k46, k47, k48, k43, k44, k45 } \
-}
-#define LAYOUT_preonic_1x2uL( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
- k40, k41, k42, k43, k44, k46, k47, k48, k49, k4a, k4b \
-) \
-{ \
- { k00, k01, k02, k03, k04, k05 }, \
- { k10, k11, k12, k13, k14, k15 }, \
- { k20, k21, k22, k23, k24, k25 }, \
- { k30, k31, k32, k33, k34, k35 }, \
- { k06, k07, k08, k09, k0a, k0b }, \
- { k16, k17, k18, k19, k1a, k1b }, \
- { k26, k27, k28, k29, k2a, k2b }, \
- { k36, k37, k38, k39, k3a, k3b }, \
- { k40, k41, k42, k49, k4a, k4b }, \
- { k46, k47, k48, k43, k44, k45 } \
-}
-
-#define LAYOUT_preonic_2x2u( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
- k40, k41, k42, k43, k44, k46, k48, k49, k4a, k4b \
-) \
-{ \
- { k00, k01, k02, k03, k04, k05 }, \
- { k10, k11, k12, k13, k14, k15 }, \
- { k20, k21, k22, k23, k24, k25 }, \
- { k30, k31, k32, k33, k34, k35 }, \
- { k06, k07, k08, k09, k0a, k0b }, \
- { k16, k17, k18, k19, k1a, k1b }, \
- { k26, k27, k28, k29, k2a, k2b }, \
- { k36, k37, k38, k39, k3a, k3b }, \
- { k40, k41, k42, k49, k4a, k4b }, \
- { k46, k47, k48, k43, k44, k45 } \
-}
+/**************************************************
+** Include headers specific to keyboard revision **
+***************************************************/
+#ifdef KEYBOARD_preonic_rev1
+ #include "rev1.h"
+#endif
-#define LAYOUT_preonic_grid( \
- k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
- k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
- k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
-) \
-{ \
- { k00, k01, k02, k03, k04, k05 }, \
- { k10, k11, k12, k13, k14, k15 }, \
- { k20, k21, k22, k23, k24, k25 }, \
- { k30, k31, k32, k33, k34, k35 }, \
- { k06, k07, k08, k09, k0a, k0b }, \
- { k16, k17, k18, k19, k1a, k1b }, \
- { k26, k27, k28, k29, k2a, k2b }, \
- { k36, k37, k38, k39, k3a, k3b }, \
- { k40, k41, k42, k49, k4a, k4b }, \
- { k46, k47, k48, k43, k44, k45 } \
-}
+#ifdef KEYBOARD_preonic_rev2
+ #include "rev2.h"
+#endif
-#define KEYMAP LAYOUT_preonic_grid
-#define LAYOUT_ortho_4x12 LAYOUT_preonic_grid
-#define KC_LAYOUT_ortho_4x12 KC_KEYMAP
+#ifdef KEYBOARD_preonic_rev3
+ #include "rev3.h"
+#endif
-#endif
+/**************************************************
+** Layout macros aliases common to all revisions **
-#endif
+ Name of Alias Matrix Name:
+ ----------------- ------------------- ****/
+#define LAYOUT_ortho_5x12 LAYOUT_preonic_grid
diff --git a/keyboards/preonic/rev1/rev1.h b/keyboards/preonic/rev1/rev1.h
index 6705b7259..6ca4afd3e 100644
--- a/keyboards/preonic/rev1/rev1.h
+++ b/keyboards/preonic/rev1/rev1.h
@@ -13,4 +13,41 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "preonic.h" \ No newline at end of file
+
+#pragma once
+
+#include "preonic.h"
+
+#ifdef __AVR__ // Preonic revs. 1 & 2
+
+ #define LAYOUT_preonic_1x2uC( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k43, k44, k45, k45, k47, k48, k49, k4a, k4b } \
+ }
+
+ #define LAYOUT_preonic_grid( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \
+ }
+
+#endif
diff --git a/keyboards/preonic/rev2/rev2.h b/keyboards/preonic/rev2/rev2.h
index 511721459..6ca4afd3e 100644
--- a/keyboards/preonic/rev2/rev2.h
+++ b/keyboards/preonic/rev2/rev2.h
@@ -14,4 +14,40 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#pragma once
+
#include "preonic.h"
+
+#ifdef __AVR__ // Preonic revs. 1 & 2
+
+ #define LAYOUT_preonic_1x2uC( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k43, k44, k45, k45, k47, k48, k49, k4a, k4b } \
+ }
+
+ #define LAYOUT_preonic_grid( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b } \
+ }
+
+#endif
diff --git a/keyboards/preonic/rev3/config.h b/keyboards/preonic/rev3/config.h
index 3f57c591a..98899dc6a 100644
--- a/keyboards/preonic/rev3/config.h
+++ b/keyboards/preonic/rev3/config.h
@@ -50,9 +50,6 @@
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 6
-/* Prevent modifiers from being stuck on after layer changes. */
-#define PREVENT_STUCK_MODIFIERS
-
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
//#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/preonic/rev3/info.json b/keyboards/preonic/rev3/info.json
new file mode 100644
index 000000000..b1ad1227e
--- /dev/null
+++ b/keyboards/preonic/rev3/info.json
@@ -0,0 +1,330 @@
+{
+ "keyboard_name": "Preonic rev. 3",
+ "keyboard_folder": "preonic/rev3",
+ "url": "https://olkb.com/preonic",
+ "maintainer": "jackhumbert",
+ "width": 12,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_preonic_1x2uC": {
+ "key_count": 59,
+ "layout": [
+ {"label":"k00", "x":0, "y":0},
+ {"label":"k01", "x":1, "y":0},
+ {"label":"k02", "x":2, "y":0},
+ {"label":"k03", "x":3, "y":0},
+ {"label":"k04", "x":4, "y":0},
+ {"label":"k05", "x":5, "y":0},
+ {"label":"k06", "x":6, "y":0},
+ {"label":"k07", "x":7, "y":0},
+ {"label":"k08", "x":8, "y":0},
+ {"label":"k09", "x":9, "y":0},
+ {"label":"k0a", "x":10, "y":0},
+ {"label":"k0b", "x":11, "y":0},
+ {"label":"k10", "x":0, "y":1},
+ {"label":"k11", "x":1, "y":1},
+ {"label":"k12", "x":2, "y":1},
+ {"label":"k13", "x":3, "y":1},
+ {"label":"k14", "x":4, "y":1},
+ {"label":"k15", "x":5, "y":1},
+ {"label":"k16", "x":6, "y":1},
+ {"label":"k17", "x":7, "y":1},
+ {"label":"k18", "x":8, "y":1},
+ {"label":"k19", "x":9, "y":1},
+ {"label":"k1a", "x":10, "y":1},
+ {"label":"k1b", "x":11, "y":1},
+ {"label":"k20", "x":0, "y":2},
+ {"label":"k21", "x":1, "y":2},
+ {"label":"k22", "x":2, "y":2},
+ {"label":"k23", "x":3, "y":2},
+ {"label":"k24", "x":4, "y":2},
+ {"label":"k25", "x":5, "y":2},
+ {"label":"k26", "x":6, "y":2},
+ {"label":"k27", "x":7, "y":2},
+ {"label":"k28", "x":8, "y":2},
+ {"label":"k29", "x":9, "y":2},
+ {"label":"k2a", "x":10, "y":2},
+ {"label":"k2b", "x":11, "y":2},
+ {"label":"k30", "x":0, "y":3},
+ {"label":"k31", "x":1, "y":3},
+ {"label":"k32", "x":2, "y":3},
+ {"label":"k33", "x":3, "y":3},
+ {"label":"k34", "x":4, "y":3},
+ {"label":"k35", "x":5, "y":3},
+ {"label":"k36", "x":6, "y":3},
+ {"label":"k37", "x":7, "y":3},
+ {"label":"k38", "x":8, "y":3},
+ {"label":"k39", "x":9, "y":3},
+ {"label":"k3a", "x":10, "y":3},
+ {"label":"k3b", "x":11, "y":3},
+ {"label":"k40", "x":0, "y":4},
+ {"label":"k41", "x":1, "y":4},
+ {"label":"k42", "x":2, "y":4},
+ {"label":"k43", "x":3, "y":4},
+ {"label":"k44", "x":4, "y":4},
+ {"label":"k45", "x":5, "y":4, "w":2},
+ {"label":"k47", "x":7, "y":4},
+ {"label":"k48", "x":8, "y":4},
+ {"label":"k49", "x":9, "y":4},
+ {"label":"k4a", "x":10, "y":4},
+ {"label":"k4b", "x":11, "y":4}
+ ]
+ },
+ "LAYOUT_preonic_1x2uR": {
+ "key_count": 59,
+ "layout": [
+ {"label":"k00", "x":0, "y":0},
+ {"label":"k01", "x":1, "y":0},
+ {"label":"k02", "x":2, "y":0},
+ {"label":"k03", "x":3, "y":0},
+ {"label":"k04", "x":4, "y":0},
+ {"label":"k05", "x":5, "y":0},
+ {"label":"k06", "x":6, "y":0},
+ {"label":"k07", "x":7, "y":0},
+ {"label":"k08", "x":8, "y":0},
+ {"label":"k09", "x":9, "y":0},
+ {"label":"k0a", "x":10, "y":0},
+ {"label":"k0b", "x":11, "y":0},
+ {"label":"k10", "x":0, "y":1},
+ {"label":"k11", "x":1, "y":1},
+ {"label":"k12", "x":2, "y":1},
+ {"label":"k13", "x":3, "y":1},
+ {"label":"k14", "x":4, "y":1},
+ {"label":"k15", "x":5, "y":1},
+ {"label":"k16", "x":6, "y":1},
+ {"label":"k17", "x":7, "y":1},
+ {"label":"k18", "x":8, "y":1},
+ {"label":"k19", "x":9, "y":1},
+ {"label":"k1a", "x":10, "y":1},
+ {"label":"k1b", "x":11, "y":1},
+ {"label":"k20", "x":0, "y":2},
+ {"label":"k21", "x":1, "y":2},
+ {"label":"k22", "x":2, "y":2},
+ {"label":"k23", "x":3, "y":2},
+ {"label":"k24", "x":4, "y":2},
+ {"label":"k25", "x":5, "y":2},
+ {"label":"k26", "x":6, "y":2},
+ {"label":"k27", "x":7, "y":2},
+ {"label":"k28", "x":8, "y":2},
+ {"label":"k29", "x":9, "y":2},
+ {"label":"k2a", "x":10, "y":2},
+ {"label":"k2b", "x":11, "y":2},
+ {"label":"k30", "x":0, "y":3},
+ {"label":"k31", "x":1, "y":3},
+ {"label":"k32", "x":2, "y":3},
+ {"label":"k33", "x":3, "y":3},
+ {"label":"k34", "x":4, "y":3},
+ {"label":"k35", "x":5, "y":3},
+ {"label":"k36", "x":6, "y":3},
+ {"label":"k37", "x":7, "y":3},
+ {"label":"k38", "x":8, "y":3},
+ {"label":"k39", "x":9, "y":3},
+ {"label":"k3a", "x":10, "y":3},
+ {"label":"k3b", "x":11, "y":3},
+ {"label":"k40", "x":0, "y":4},
+ {"label":"k41", "x":1, "y":4},
+ {"label":"k42", "x":2, "y":4},
+ {"label":"k43", "x":3, "y":4},
+ {"label":"k44", "x":4, "y":4},
+ {"label":"k45", "x":5, "y":4},
+ {"label":"k47", "x":6, "y":4, "w":2},
+ {"label":"k48", "x":8, "y":4},
+ {"label":"k49", "x":9, "y":4},
+ {"label":"k4a", "x":10, "y":4},
+ {"label":"k4b", "x":11, "y":4}
+ ]
+ },
+ "LAYOUT_preonic_1x2uL": {
+ "key_count": 59,
+ "layout": [
+ {"label":"k00", "x":0, "y":0},
+ {"label":"k01", "x":1, "y":0},
+ {"label":"k02", "x":2, "y":0},
+ {"label":"k03", "x":3, "y":0},
+ {"label":"k04", "x":4, "y":0},
+ {"label":"k05", "x":5, "y":0},
+ {"label":"k06", "x":6, "y":0},
+ {"label":"k07", "x":7, "y":0},
+ {"label":"k08", "x":8, "y":0},
+ {"label":"k09", "x":9, "y":0},
+ {"label":"k0a", "x":10, "y":0},
+ {"label":"k0b", "x":11, "y":0},
+ {"label":"k10", "x":0, "y":1},
+ {"label":"k11", "x":1, "y":1},
+ {"label":"k12", "x":2, "y":1},
+ {"label":"k13", "x":3, "y":1},
+ {"label":"k14", "x":4, "y":1},
+ {"label":"k15", "x":5, "y":1},
+ {"label":"k16", "x":6, "y":1},
+ {"label":"k17", "x":7, "y":1},
+ {"label":"k18", "x":8, "y":1},
+ {"label":"k19", "x":9, "y":1},
+ {"label":"k1a", "x":10, "y":1},
+ {"label":"k1b", "x":11, "y":1},
+ {"label":"k20", "x":0, "y":2},
+ {"label":"k21", "x":1, "y":2},
+ {"label":"k22", "x":2, "y":2},
+ {"label":"k23", "x":3, "y":2},
+ {"label":"k24", "x":4, "y":2},
+ {"label":"k25", "x":5, "y":2},
+ {"label":"k26", "x":6, "y":2},
+ {"label":"k27", "x":7, "y":2},
+ {"label":"k28", "x":8, "y":2},
+ {"label":"k29", "x":9, "y":2},
+ {"label":"k2a", "x":10, "y":2},
+ {"label":"k2b", "x":11, "y":2},
+ {"label":"k30", "x":0, "y":3},
+ {"label":"k31", "x":1, "y":3},
+ {"label":"k32", "x":2, "y":3},
+ {"label":"k33", "x":3, "y":3},
+ {"label":"k34", "x":4, "y":3},
+ {"label":"k35", "x":5, "y":3},
+ {"label":"k36", "x":6, "y":3},
+ {"label":"k37", "x":7, "y":3},
+ {"label":"k38", "x":8, "y":3},
+ {"label":"k39", "x":9, "y":3},
+ {"label":"k3a", "x":10, "y":3},
+ {"label":"k3b", "x":11, "y":3},
+ {"label":"k40", "x":0, "y":4},
+ {"label":"k41", "x":1, "y":4},
+ {"label":"k42", "x":2, "y":4},
+ {"label":"k43", "x":3, "y":4},
+ {"label":"k44", "x":4, "y":4, "w":2},
+ {"label":"k46", "x":6, "y":4},
+ {"label":"k47", "x":7, "y":4},
+ {"label":"k48", "x":8, "y":4},
+ {"label":"k49", "x":9, "y":4},
+ {"label":"k4a", "x":10, "y":4},
+ {"label":"k4b", "x":11, "y":4}
+ ]
+ },
+ "LAYOUT_preonic_2x2u": {
+ "key_count": 58,
+ "layout": [
+ {"label":"k00", "x":0, "y":0},
+ {"label":"k01", "x":1, "y":0},
+ {"label":"k02", "x":2, "y":0},
+ {"label":"k03", "x":3, "y":0},
+ {"label":"k04", "x":4, "y":0},
+ {"label":"k05", "x":5, "y":0},
+ {"label":"k06", "x":6, "y":0},
+ {"label":"k07", "x":7, "y":0},
+ {"label":"k08", "x":8, "y":0},
+ {"label":"k09", "x":9, "y":0},
+ {"label":"k0a", "x":10, "y":0},
+ {"label":"k0b", "x":11, "y":0},
+ {"label":"k10", "x":0, "y":1},
+ {"label":"k11", "x":1, "y":1},
+ {"label":"k12", "x":2, "y":1},
+ {"label":"k13", "x":3, "y":1},
+ {"label":"k14", "x":4, "y":1},
+ {"label":"k15", "x":5, "y":1},
+ {"label":"k16", "x":6, "y":1},
+ {"label":"k17", "x":7, "y":1},
+ {"label":"k18", "x":8, "y":1},
+ {"label":"k19", "x":9, "y":1},
+ {"label":"k1a", "x":10, "y":1},
+ {"label":"k1b", "x":11, "y":1},
+ {"label":"k20", "x":0, "y":2},
+ {"label":"k21", "x":1, "y":2},
+ {"label":"k22", "x":2, "y":2},
+ {"label":"k23", "x":3, "y":2},
+ {"label":"k24", "x":4, "y":2},
+ {"label":"k25", "x":5, "y":2},
+ {"label":"k26", "x":6, "y":2},
+ {"label":"k27", "x":7, "y":2},
+ {"label":"k28", "x":8, "y":2},
+ {"label":"k29", "x":9, "y":2},
+ {"label":"k2a", "x":10, "y":2},
+ {"label":"k2b", "x":11, "y":2},
+ {"label":"k30", "x":0, "y":3},
+ {"label":"k31", "x":1, "y":3},
+ {"label":"k32", "x":2, "y":3},
+ {"label":"k33", "x":3, "y":3},
+ {"label":"k34", "x":4, "y":3},
+ {"label":"k35", "x":5, "y":3},
+ {"label":"k36", "x":6, "y":3},
+ {"label":"k37", "x":7, "y":3},
+ {"label":"k38", "x":8, "y":3},
+ {"label":"k39", "x":9, "y":3},
+ {"label":"k3a", "x":10, "y":3},
+ {"label":"k3b", "x":11, "y":3},
+ {"label":"k40", "x":0, "y":4},
+ {"label":"k41", "x":1, "y":4},
+ {"label":"k42", "x":2, "y":4},
+ {"label":"k43", "x":3, "y":4},
+ {"label":"k44", "x":4, "y":4, "w":2},
+ {"label":"k46", "x":6, "y":4, "w":2},
+ {"label":"k48", "x":8, "y":4},
+ {"label":"k49", "x":9, "y":4},
+ {"label":"k4a", "x":10, "y":4},
+ {"label":"k4b", "x":11, "y":4}
+ ]
+ },
+ "LAYOUT_ortho_5x12": {
+ "key_count": 60,
+ "layout": [
+ {"label":"k00", "x":0, "y":0},
+ {"label":"k01", "x":1, "y":0},
+ {"label":"k02", "x":2, "y":0},
+ {"label":"k03", "x":3, "y":0},
+ {"label":"k04", "x":4, "y":0},
+ {"label":"k05", "x":5, "y":0},
+ {"label":"k06", "x":6, "y":0},
+ {"label":"k07", "x":7, "y":0},
+ {"label":"k08", "x":8, "y":0},
+ {"label":"k09", "x":9, "y":0},
+ {"label":"k0a", "x":10, "y":0},
+ {"label":"k0b", "x":11, "y":0},
+ {"label":"k10", "x":0, "y":1},
+ {"label":"k11", "x":1, "y":1},
+ {"label":"k12", "x":2, "y":1},
+ {"label":"k13", "x":3, "y":1},
+ {"label":"k14", "x":4, "y":1},
+ {"label":"k15", "x":5, "y":1},
+ {"label":"k16", "x":6, "y":1},
+ {"label":"k17", "x":7, "y":1},
+ {"label":"k18", "x":8, "y":1},
+ {"label":"k19", "x":9, "y":1},
+ {"label":"k1a", "x":10, "y":1},
+ {"label":"k1b", "x":11, "y":1},
+ {"label":"k20", "x":0, "y":2},
+ {"label":"k21", "x":1, "y":2},
+ {"label":"k22", "x":2, "y":2},
+ {"label":"k23", "x":3, "y":2},
+ {"label":"k24", "x":4, "y":2},
+ {"label":"k25", "x":5, "y":2},
+ {"label":"k26", "x":6, "y":2},
+ {"label":"k27", "x":7, "y":2},
+ {"label":"k28", "x":8, "y":2},
+ {"label":"k29", "x":9, "y":2},
+ {"label":"k2a", "x":10, "y":2},
+ {"label":"k2b", "x":11, "y":2},
+ {"label":"k30", "x":0, "y":3},
+ {"label":"k31", "x":1, "y":3},
+ {"label":"k32", "x":2, "y":3},
+ {"label":"k33", "x":3, "y":3},
+ {"label":"k34", "x":4, "y":3},
+ {"label":"k35", "x":5, "y":3},
+ {"label":"k36", "x":6, "y":3},
+ {"label":"k37", "x":7, "y":3},
+ {"label":"k38", "x":8, "y":3},
+ {"label":"k39", "x":9, "y":3},
+ {"label":"k3a", "x":10, "y":3},
+ {"label":"k3b", "x":11, "y":3},
+ {"label":"k40", "x":0, "y":4},
+ {"label":"k41", "x":1, "y":4},
+ {"label":"k42", "x":2, "y":4},
+ {"label":"k43", "x":3, "y":4},
+ {"label":"k44", "x":4, "y":4},
+ {"label":"k45", "x":5, "y":4},
+ {"label":"k46", "x":6, "y":4},
+ {"label":"k47", "x":7, "y":4},
+ {"label":"k48", "x":8, "y":4},
+ {"label":"k49", "x":9, "y":4},
+ {"label":"k4a", "x":10, "y":4},
+ {"label":"k4b", "x":11, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/preonic/rev3/rev3.h b/keyboards/preonic/rev3/rev3.h
index 7c274ae27..af97239fd 100644
--- a/keyboards/preonic/rev3/rev3.h
+++ b/keyboards/preonic/rev3/rev3.h
@@ -13,9 +13,111 @@
* 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 REV3_H
-#define REV3_H
+
+#pragma once
#include "preonic.h"
+#ifndef __AVR__ // Preonic rev. 3 and later
+
+ #define LAYOUT_preonic_1x2uC( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05 }, \
+ { k10, k11, k12, k13, k14, k15 }, \
+ { k20, k21, k22, k23, k24, k25 }, \
+ { k30, k31, k32, k33, k34, k35 }, \
+ { k06, k07, k08, k09, k0a, k0b }, \
+ { k16, k17, k18, k19, k1a, k1b }, \
+ { k26, k27, k28, k29, k2a, k2b }, \
+ { k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k49, k4a, k4b }, \
+ { k45, k47, k48, k43, k44, k45 } \
+ }
+
+ #define LAYOUT_preonic_1x2uR( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k47, k48, k49, k4a, k4b \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05 }, \
+ { k10, k11, k12, k13, k14, k15 }, \
+ { k20, k21, k22, k23, k24, k25 }, \
+ { k30, k31, k32, k33, k34, k35 }, \
+ { k06, k07, k08, k09, k0a, k0b }, \
+ { k16, k17, k18, k19, k1a, k1b }, \
+ { k26, k27, k28, k29, k2a, k2b }, \
+ { k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k49, k4a, k4b }, \
+ { k47, k47, k48, k43, k44, k45 } \
+ }
+
+ #define LAYOUT_preonic_1x2uL( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k46, k47, k48, k49, k4a, k4b \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05 }, \
+ { k10, k11, k12, k13, k14, k15 }, \
+ { k20, k21, k22, k23, k24, k25 }, \
+ { k30, k31, k32, k33, k34, k35 }, \
+ { k06, k07, k08, k09, k0a, k0b }, \
+ { k16, k17, k18, k19, k1a, k1b }, \
+ { k26, k27, k28, k29, k2a, k2b }, \
+ { k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k49, k4a, k4b }, \
+ { k46, k47, k48, k43, k44, k44 } \
+ }
+
+ #define LAYOUT_preonic_2x2u( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k46, k48, k49, k4a, k4b \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05 }, \
+ { k10, k11, k12, k13, k14, k15 }, \
+ { k20, k21, k22, k23, k24, k25 }, \
+ { k30, k31, k32, k33, k34, k35 }, \
+ { k06, k07, k08, k09, k0a, k0b }, \
+ { k16, k17, k18, k19, k1a, k1b }, \
+ { k26, k27, k28, k29, k2a, k2b }, \
+ { k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k49, k4a, k4b }, \
+ { k46, k46, k48, k43, k44, k44 } \
+ }
+
+ #define LAYOUT_preonic_grid( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
+ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
+ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b \
+ ) \
+ { \
+ { k00, k01, k02, k03, k04, k05 }, \
+ { k10, k11, k12, k13, k14, k15 }, \
+ { k20, k21, k22, k23, k24, k25 }, \
+ { k30, k31, k32, k33, k34, k35 }, \
+ { k06, k07, k08, k09, k0a, k0b }, \
+ { k16, k17, k18, k19, k1a, k1b }, \
+ { k26, k27, k28, k29, k2a, k2b }, \
+ { k36, k37, k38, k39, k3a, k3b }, \
+ { k40, k41, k42, k49, k4a, k4b }, \
+ { k46, k47, k48, k43, k44, k45 } \
+ }
+
#endif
diff --git a/keyboards/prime_r/config.h b/keyboards/prime_r/config.h
deleted file mode 100644
index b53f14905..000000000
--- a/keyboards/prime_r/config.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-Copyright 2018 Andrew Heaston
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-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
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER PrimeKB
-#define PRODUCT Prime_R
-#define DESCRIPTION A compact layout with mini-numpad.
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 16
-
-/* key matrix pins */
-#define MATRIX_ROW_PINS { D1, D0, B7, B3, B2 }
-#define MATRIX_COL_PINS { D2, D3, D5, D4, D6, D7, B4, B5, C7, C6, F7, F6, F5, F4, F1, F0 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* number of backlight levels */
-#define BACKLIGHT_PIN B6
-#ifdef BACKLIGHT_PIN
-#define BACKLIGHT_LEVELS 5
-#endif
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-
-#ifdef RGB_DI_PIN
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 0
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#endif
-
-#endif
diff --git a/keyboards/prime_r/readme.md b/keyboards/prime_r/readme.md
deleted file mode 100644
index 7a77b2073..000000000
--- a/keyboards/prime_r/readme.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Prime_R
-
-![Prime_R](https://i.imgur.com/ldOVlLG.jpg)
-
-A compact layout with the footprint of your typical 65% board, featuring a right mini-numpad. Produced by /u/holtenc at www.primekb.com
-
-[Additional resources here](https://www.primekb.com/pages/programming)
-
-Keyboard Maintainer: [Andrew Heaston](https://github.com/rooski15)
-Hardware Supported: prime_r pcb, ATmega32U4
-Hardware Availability: [Prime_KB](https://www.primekb.com/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make prime_r:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-
diff --git a/keyboards/primekb/prime_l/config.h b/keyboards/primekb/prime_l/config.h
new file mode 100644
index 000000000..8e2457816
--- /dev/null
+++ b/keyboards/primekb/prime_l/config.h
@@ -0,0 +1,57 @@
+/*
+Copyright 2018 Jumail Mundekkat
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4024
+#define DEVICE_VER 0x0001
+#define MANUFACTURER PrimeKB
+#define PRODUCT Prime_L
+#define DESCRIPTION Custom layout keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS { D1, D0, B7, B3, B2 }
+#define MATRIX_COL_PINS { D2, D3, D5, D4, D6, D7, B4, B5, C7, C6, F7, F6, F5, F4, F1, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B6
+/*#define BACKLIGHT_BREATHING*/
+#define BACKLIGHT_LEVELS 4
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
diff --git a/keyboards/primekb/prime_l/info.json b/keyboards/primekb/prime_l/info.json
new file mode 100644
index 000000000..8a407fd3e
--- /dev/null
+++ b/keyboards/primekb/prime_l/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Prime_L",
+ "url": "https://www.primekb.com",
+ "maintainer": "MxBlu",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":15, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2, "w":1.25}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"x":11.25, "y":2}, {"x":12.25, "y":2}, {"x":13.25, "y":2}, {"x":14.25, "y":2, "w":1.75}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3, "w":1.75}, {"x":4.75, "y":3}, {"x":5.75, "y":3}, {"x":6.75, "y":3}, {"x":7.75, "y":3}, {"x":8.75, "y":3}, {"x":9.75, "y":3}, {"x":10.75, "y":3}, {"x":11.75, "y":3}, {"x":12.75, "y":3}, {"x":13.75, "y":3}, {"x":14.75, "y":3, "w":1.25}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4, "w":1.25}, {"x":4.25, "y":4, "w":1.25}, {"x":5.5, "y":4}, {"x":6.5, "y":4}, {"x":7.5, "y":4, "w":2}, {"x":9.5, "y":4, "w":2.25}, {"x":11.75, "y":4}, {"x":12.75, "y":4}, {"x":13.75, "y":4}, {"x":14.75, "y":4, "w":1.25}]
+ }
+ }
+}
diff --git a/keyboards/primekb/prime_l/keymaps/default/config.h b/keyboards/primekb/prime_l/keymaps/default/config.h
new file mode 100644
index 000000000..95917a65c
--- /dev/null
+++ b/keyboards/primekb/prime_l/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/primekb/prime_l/keymaps/default/keymap.c b/keyboards/primekb/prime_l/keymaps/default/keymap.c
new file mode 100644
index 000000000..8a044b955
--- /dev/null
+++ b/keyboards/primekb/prime_l/keymaps/default/keymap.c
@@ -0,0 +1,74 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// 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_HOME, KC_END, KC_PSCR, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_PGUP, KC_BSPC,
+ KC_P7, KC_P8, KC_P9, KC_NLCK, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_PGDN, KC_BSLS,
+ KC_P4, KC_P5, KC_P6, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
+ KC_P1, KC_P2, KC_P3, 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_ENT, KC_PDOT, KC_P0, KC_LCTL, KC_LALT, KC_LBRC, KC_RBRC, MO(1), KC_SPC, KC_MINS, KC_EQL, KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT(
+ RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_GRV, 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_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_SCLN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/primekb/prime_l/keymaps/default/readme.md b/keyboards/primekb/prime_l/keymaps/default/readme.md
new file mode 100644
index 000000000..4e4db8879
--- /dev/null
+++ b/keyboards/primekb/prime_l/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for prime_l \ No newline at end of file
diff --git a/keyboards/primekb/prime_l/prime_l.c b/keyboards/primekb/prime_l/prime_l.c
new file mode 100644
index 000000000..844407a10
--- /dev/null
+++ b/keyboards/primekb/prime_l/prime_l.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "prime_l.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/primekb/prime_l/prime_l.h b/keyboards/primekb/prime_l/prime_l.h
new file mode 100644
index 000000000..b50898b28
--- /dev/null
+++ b/keyboards/primekb/prime_l/prime_l.h
@@ -0,0 +1,35 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef PRIME_L_H
+#define PRIME_L_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215 , \
+ K300, K301, K302, K303, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+ K400, K401, K402, K403, K405, K406, K407, K408, K410, K412, K413, K414, K415 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO, K215 }, \
+ { K300, K301, K302, K303, KC_NO, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+ { K400, K401, K402, K403, KC_NO, K405, K406, K407, K408, KC_NO, K410, KC_NO, K412, K413, K414, K415 } \
+}
+
+#endif
diff --git a/keyboards/primekb/prime_l/readme.md b/keyboards/primekb/prime_l/readme.md
new file mode 100644
index 000000000..3f760a4cc
--- /dev/null
+++ b/keyboards/primekb/prime_l/readme.md
@@ -0,0 +1,15 @@
+# Prime_L
+
+![Prime_L](https://i.imgur.com/jUWhjOD.jpg)
+
+A compact layout with the footprint of your typical 65% board, featuring a left mini-numpad. Pre-drilled and counter sunk holes for use with optional feet for a slight tilt. Switches are oriented so that back light LEDs are on the top of the switch.
+
+Keyboard Maintainer: [MxBlue](https://github.com/MxBlu)
+Hardware Supported: Prime_L PCBs, ATMega32u4
+Hardware Availability: [Store Link](https://www.primekb.com/collections/keyboards/products/bundle-save)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make primekb/prime_l: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/primekb/prime_l/rules.mk b/keyboards/primekb/prime_l/rules.mk
new file mode 100644
index 000000000..5cce4e811
--- /dev/null
+++ b/keyboards/primekb/prime_l/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 = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/primekb/prime_m/config.h b/keyboards/primekb/prime_m/config.h
new file mode 100644
index 000000000..366504375
--- /dev/null
+++ b/keyboards/primekb/prime_m/config.h
@@ -0,0 +1,57 @@
+/*
+Copyright 2018 Jumail Mundekkat
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4024
+#define DEVICE_VER 0x0001
+#define MANUFACTURER PrimeKB
+#define PRODUCT Prime_M
+#define DESCRIPTION 6x5 Macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 6
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS { C5, B5, B2, D5, D3 }
+#define MATRIX_COL_PINS { B3, C7, C6, D2, D1, D0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+/*#define BACKLIGHT_BREATHING*/
+#define BACKLIGHT_LEVELS 4
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
diff --git a/keyboards/primekb/prime_m/info.json b/keyboards/primekb/prime_m/info.json
new file mode 100644
index 000000000..533252202
--- /dev/null
+++ b/keyboards/primekb/prime_m/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Prime_M",
+ "url": "https://www.primekb.com",
+ "maintainer": "MxBlu",
+ "width": 6,
+ "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":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "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":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/primekb/prime_m/keymaps/default/config.h b/keyboards/primekb/prime_m/keymaps/default/config.h
new file mode 100644
index 000000000..95917a65c
--- /dev/null
+++ b/keyboards/primekb/prime_m/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/primekb/prime_m/keymaps/default/keymap.c b/keyboards/primekb/prime_m/keymaps/default/keymap.c
new file mode 100644
index 000000000..d230439d0
--- /dev/null
+++ b/keyboards/primekb/prime_m/keymaps/default/keymap.c
@@ -0,0 +1,82 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// 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_LPRN, KC_RPRN, KC_PSLS, KC_PAST, LT(2, KC_BSPC),
+ KC_F1, KC_F2, KC_P7, KC_P8, KC_P9, KC_DEL,
+ KC_F3, KC_F4, KC_P4, KC_P5, KC_P6, KC_PMNS,
+ KC_F5, KC_F6, KC_P1, KC_P2, KC_P3, KC_PPLS,
+ KC_LCTL, KC_LALT, TO(1), KC_P0, KC_PDOT, KC_ENT
+ ),
+
+ [1] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, LT(2, KC_F9),
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B,
+ KC_LCTL, KC_LALT, TO(0), KC_P, KC_H, KC_SPC
+ ),
+
+ [2] = LAYOUT(
+ BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLD
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/primekb/prime_m/keymaps/default/readme.md b/keyboards/primekb/prime_m/keymaps/default/readme.md
new file mode 100644
index 000000000..5654918ab
--- /dev/null
+++ b/keyboards/primekb/prime_m/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for prime_m \ No newline at end of file
diff --git a/keyboards/primekb/prime_m/prime_m.c b/keyboards/primekb/prime_m/prime_m.c
new file mode 100644
index 000000000..a33db95d8
--- /dev/null
+++ b/keyboards/primekb/prime_m/prime_m.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "prime_m.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/primekb/prime_m/prime_m.h b/keyboards/primekb/prime_m/prime_m.h
new file mode 100644
index 000000000..0449a66d9
--- /dev/null
+++ b/keyboards/primekb/prime_m/prime_m.h
@@ -0,0 +1,35 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef PRIME_M_H
+#define PRIME_M_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, \
+ K10, K11, K12, K13, K14, K15, \
+ K20, K21, K22, K23, K24, K25, \
+ K30, K31, K32, K33, K34, K35, \
+ K40, K41, K42, K43, K44, K45 \
+) { \
+ { K00, K01, K02, K03, K04, K05 }, \
+ { K10, K11, K12, K13, K14, K15 }, \
+ { K20, K21, K22, K23, K24, K25 }, \
+ { K30, K31, K32, K33, K34, K35 }, \
+ { K40, K41, K42, K43, K44, K45 } \
+}
+
+#endif
diff --git a/keyboards/primekb/prime_m/readme.md b/keyboards/primekb/prime_m/readme.md
new file mode 100644
index 000000000..668b29e4a
--- /dev/null
+++ b/keyboards/primekb/prime_m/readme.md
@@ -0,0 +1,15 @@
+# Prime_M
+
+![Prime_M](https://i.imgur.com/Iqa6FJw.jpg)
+
+The Prime_M is a premium input device that is designed to be flexible so that it can cover many needs. The case is milled from a solid block of aluminum and features an integrated switch plate, which is 4.75mm thick yet designed to allow MX style switches to properly snap in. The bottom cover is machine from solid brass and is pre-drilled/countersunk for use with optional feet to give the device a slight tilt.
+
+Keyboard Maintainer: [MxBlue](https://github.com/MxBlu)
+Hardware Supported: Prime_M PCB, ATMega32u2
+Hardware Availability: [GB Post](https://geekhack.org/index.php?topic=91821.0), [B-Stock Listing](https://www.primekb.com/products/prime_m)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make primekb/prime_m: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/primekb/prime_m/rules.mk b/keyboards/primekb/prime_m/rules.mk
new file mode 100644
index 000000000..8d3b835f1
--- /dev/null
+++ b/keyboards/primekb/prime_m/rules.mk
@@ -0,0 +1,80 @@
+# 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
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/primekb/prime_o/config.h b/keyboards/primekb/prime_o/config.h
new file mode 100644
index 000000000..eb897ef8f
--- /dev/null
+++ b/keyboards/primekb/prime_o/config.h
@@ -0,0 +1,57 @@
+/*
+Copyright 2018 Jumail Mundekkat
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x4024
+#define DEVICE_VER 0x0001
+#define MANUFACTURER PrimeKB
+#define PRODUCT Prime_O
+#define DESCRIPTION A Large Ortholinear
+
+/* key matrix size */
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 8
+
+/* Keyboard Matrix Assignments */
+#define MATRIX_ROW_PINS { D4, D6, B1, C5, B4, B3, C4, B2, B0, D5 }
+#define MATRIX_COL_PINS { B6, B5, C7, C6, D2, D1, D0, C2 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B7
+/*#define BACKLIGHT_BREATHING*/
+#define BACKLIGHT_LEVELS 4
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
diff --git a/keyboards/primekb/prime_o/info.json b/keyboards/primekb/prime_o/info.json
new file mode 100644
index 000000000..83fc14360
--- /dev/null
+++ b/keyboards/primekb/prime_o/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Prime_O",
+ "url": "https://www.primekb.com",
+ "maintainer": "MxBlu",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":8, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":15, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":6, "y":2}, {"x":7, "y":2}, {"x":8, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":15, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"x":7, "y":3}, {"x":8, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}, {"x":15, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}, {"x":4, "y":4}, {"x":5, "y":4}, {"x":6, "y":4}, {"x":7, "y":4}, {"x":8, "y":4}, {"x":9, "y":4}, {"x":10, "y":4}, {"x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/primekb/prime_o/keymaps/default/config.h b/keyboards/primekb/prime_o/keymaps/default/config.h
new file mode 100644
index 000000000..95917a65c
--- /dev/null
+++ b/keyboards/primekb/prime_o/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/primekb/prime_o/keymaps/default/keymap.c b/keyboards/primekb/prime_o/keymaps/default/keymap.c
new file mode 100644
index 000000000..a2d9e807c
--- /dev/null
+++ b/keyboards/primekb/prime_o/keymaps/default/keymap.c
@@ -0,0 +1,77 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+#define L1BS LT(1, KC_BSPC)
+
+// 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_PMNS, KC_PSLS, KC_PAST, KC_NLCK, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_9, KC_DEL,
+ KC_PPLS, KC_P7, KC_P8, KC_P9, KC_PSCR, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
+ KC_PPLS, KC_P4, KC_P5, KC_P6, KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT,KC_ENT,
+ KC_ENT, KC_P1, KC_P2, KC_P3, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_LSFT,
+ KC_ENT, KC_PDOT, KC_P0, KC_P0, KC_LCTL, KC_LALT,KC_LBRC,KC_RBRC,L1BS, L1BS, KC_SPC, KC_SPC, KC_MINS,KC_EQL, KC_RGUI,KC_RCTL
+ ),
+
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
+ KC_TRNS, KC_F11, KC_F12, 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_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_CAPS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_RGHT,KC_SCLN,KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MUTE,
+ BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_DEL, KC_DEL, KC_VOLD,KC_VOLU,KC_MUTE,KC_MUTE
+ ),
+
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QMKBEST:
+ if (record->event.pressed) {
+ // when keycode QMKBEST is pressed
+ SEND_STRING("QMK is the best thing ever!");
+ } else {
+ // when keycode QMKBEST is released
+ }
+ break;
+ case QMKURL:
+ if (record->event.pressed) {
+ // when keycode QMKURL is pressed
+ SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
+ } else {
+ // when keycode QMKURL is released
+ }
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/primekb/prime_o/keymaps/default/readme.md b/keyboards/primekb/prime_o/keymaps/default/readme.md
new file mode 100644
index 000000000..e6e7a1dc9
--- /dev/null
+++ b/keyboards/primekb/prime_o/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for prime_o \ No newline at end of file
diff --git a/keyboards/primekb/prime_o/keymaps/spacebarracecar/config.h b/keyboards/primekb/prime_o/keymaps/spacebarracecar/config.h
new file mode 100644
index 000000000..6f70f09be
--- /dev/null
+++ b/keyboards/primekb/prime_o/keymaps/spacebarracecar/config.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c b/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c
new file mode 100644
index 000000000..6e2011770
--- /dev/null
+++ b/keyboards/primekb/prime_o/keymaps/spacebarracecar/keymap.c
@@ -0,0 +1,420 @@
+#include QMK_KEYBOARD_H
+#include "spacebarracecar.h"
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+#define LEFTNUM
+
+enum layers {
+ _BASE,
+ _RAISE,
+ _LOWER,
+ _GAME = _NAV+1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+#ifdef LEFTNUM
+
+/* Base
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |\ |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|+ |7 |8 |9 |Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace|
+|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|= |4 |5 |6 |Esc/Nav |A |S |D |F |G |H |J |K |L |; |' |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Enter |1 |2 |3 |(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift |
+|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Backspace|. |0 |00 |RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_BASE] = LAYOUT(
+ KC_PMNS, KC_PAST, KC_PSLS, KC_NLCK, CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS,
+ KC_PPLS, KC_P7, KC_P8, KC_P9, KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC,
+ CU_EQL, KC_P4, KC_P5, KC_P6, CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT,
+ KC_PENT, KC_P1, KC_P2, KC_P3, CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT,
+ KC_BSPC, KC_PDOT, KC_P0, KC_P00, KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+),
+
+/* Lower
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|+ |7 |8 |9 |~ |! |" |# |$ |% |^ |& |* |( |) | |
+|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|= |4 |5 |6 | |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Enter |1 |2 |3 | |? | | | | | | | | | | |
+|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Backspace|. |0 |00 | | | | | | | | | | | | |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_LOWER] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______,
+ _______, _______, _______, _______, _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE,
+ _______, _______, _______, _______, _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Raise
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|- |* |/ |Numlock |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|+ |7 |8 |9 |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |
+|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|= |4 |5 |6 | |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Enter |1 |2 |3 | |F7 |F8 |F9 |F10 |F11 |F12 | | | | | |
+|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Backspace|. |0 |00 | | | | | | | | | | | | |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_RAISE] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______,
+ _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS,
+ _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Deadkey
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|- |* |/ |Numlock | | | | | | | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|+ |7 |8 |9 | | | | | | | |Ü | |Ö | | |
+|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|= |4 |5 |6 | |Ä |ß | | | | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Enter |1 |2 |3 | | | | | | | | | | | | |
+|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Backspace|. |0 |00 | | | | | |" |" | | | | | |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_DEADKEY] = LAYOUT(
+ _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED,
+ _______, _______, _______, _______, KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______,
+ _______, _______, _______, _______, _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ,
+ _______, _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, CU_DDQ, CU_DDQ, _______, _______, _______, _______, _______
+),
+
+/* Navigation
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|- |* |/ |Numlock |Escape | | | | | | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|+ |7 |8 |9 |ALT F4 |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del |
+|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|= |4 |5 |6 | |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Enter |1 |2 |3 | |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | |
+|---------+---------+---------+---------|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Backspace|. |0 |00 |RESET |ESCT | | | | | | | | | |Game |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_NAV] = LAYOUT(
+ _______, _______, _______, _______, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ _______, _______, _______, _______, ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL,
+ _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT,
+ _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ _______, _______, _______, _______, RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME
+),
+
+// Can be used to place macros on the numpad
+[_GAME] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+#elif defined CENTERNUM
+
+/* Base
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|` |1 |2 |3 |4 |5 |Numlock |/ |* |= |6 |7 |8 |9 |0 |\ |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Tab |Q |W |E |R |T |7 |8 |9 |- |Z |U |I |O |P |Backspace|
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Esc/Nav |A |S |D |F |G |4 |5 |6 |+ |H |J |K |L |; |' |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|(/LShift |Y |X |C |V |B |1 |2 |3 |Enter |N |M |, |. |/ |)/RShift |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|RCtrl | |Alt |Win |Lower |Space |00 |0 |. |Tab |Enter |Raise |Win |AltGr | |LCtrl |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_BASE] = LAYOUT(
+ CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS,
+ KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, KC_P7, KC_P8, KC_P9, KC_PPLS, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC,
+ CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, KC_P4, KC_P5, KC_P6, CU_EQL, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT,
+ CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, KC_P1, KC_P2, KC_P3, KC_PENT, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT,
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_P00, KC_P0, KC_PDOT, KC_TAB, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+),
+
+/* Lower
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|` |1 |2 |3 |4 |5 |Numlock |/ |* |- |6 |7 |8 |9 |0 | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|~ |! |" |# |$ |% |7 |8 |9 |+ |^ |& |* |( |) | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |@ |Strg+X |Strg+C |Strg+V | |4 |5 |6 |= | |_ |+ |{ |} || |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |? | | | | |1 |2 |3 |Enter | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | |00 |0 |. |Tab | | | | | | |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_LOWER] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, _______, _______, _______, _______, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______,
+ _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, _______, _______, _______, _______, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE,
+ _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, XXXXXXX, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Raise
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|` |1 |2 |3 |4 |5 |Numlock |/ |* |- |6 |7 |8 |9 |0 | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|` |1 |2 |3 |4 |5 |7 |8 |9 |+ |6 |7 |8 |9 |0 | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |F1 |F2 |F3 |F4 |F5 |4 |5 |6 |= |F6 |- |= |[ |] |\ |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |F7 |F8 |F9 |F10 |F11 |1 |2 |3 |Enter |F12 | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | |00 |0 |. |Tab | | | | | | |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_RAISE] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, _______, _______, _______, _______, CU_6, CU_7, CU_8, CU_9, CU_0, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, _______, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, _______, KC_F12, XXXXXXX, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Deadkey
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+| | | | | | |Numlock |/ |* |- | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | |7 |8 |9 |+ | |Ü | |Ö | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Ä |ß | | | |4 |5 |6 |= | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | |1 |2 |3 |Enter | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | |" |00 |0 |. |Tab |" | | | | | |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_DEADKEY] = LAYOUT(
+ CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED,
+ KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______,
+ _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ,
+ _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______,
+ _______, _______, _______, _______, _______, CU_DDQ, _______, _______, _______, _______, CU_DDQ, _______, _______, _______, _______, _______
+),
+
+/* Navigation
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|Escape | | | | | |Numlock |/ |* |- | | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|ALT F4 |PageDown |Up |PageUp |Home | |7 |8 |9 |+ | | |Win+Up | | |Del |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Left |Down |Right |End | |4 |5 |6 |= | |Win+Left |Win+Down |Win+Right| |Enter |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Prev |Pause |Next |LowerVol |RaiseVol |1 |2 |3 |Enter |Mute | | | | | |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|RESET |ESCT | | | | |00 |0 |. |Tab | | | | | |Game |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_NAV] = LAYOUT(
+ KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, _______, _______, _______, _______, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, _______, _______, _______, _______, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, _______, _______, _______, _______, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______,
+ RESET, CU_ESCT, _______, _______, _______, KC_SPC, _______, _______, _______, _______, KC_ENT, _______, _______, _______, _______, CU_GAME
+),
+
+// Can be used to place macros on the numpad
+[_GAME] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+#else
+
+/* Base
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |\ |Numlock |/ |* |= |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Tab |Q |W |E |R |T |Z |U |I |O |P |Backspace|7 |8 |9 |- |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|Esc/Nav |A |S |D |F |G |H |J |K |L |; |' |4 |5 |6 |+ |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|(/LShift |Y |X |C |V |B |N |M |, |. |/ |)/RShift |1 |2 |3 |Enter |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|RCtrl | |Alt |Win |Lower |Space |Enter |Raise |Win |AltGr | |LCtrl |00 |0 |. |Tab |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_BASE] = LAYOUT(
+ CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, CU_BSLS, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, DE_Q, DE_W, DE_E, DE_R, DE_T, CU_Z, DE_U, DE_I, DE_O, DE_P, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ CU_NAV, DE_A, DE_S, DE_D, DE_F, DE_G, DE_H, DE_J, DE_K, DE_L, CU_SCLN, CU_QUOT, KC_P4, KC_P5, KC_P6, CU_EQL,
+ CU_LSFT, CU_Y, DE_X, DE_C, DE_V, DE_B, DE_N, DE_M, CU_COMM, CU_DOT, CU_SLSH, CU_RSFT, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, XXXXXXX, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_P00, KC_P0, KC_PDOT, KC_TAB
+),
+
+/* Lower
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |Numlock |/ |* |- |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|~ |! |" |# |$ |% |^ |& |* |( |) | |7 |8 |9 |+ |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |@ |Strg+X |Strg+C |Strg+V | | |_ |+ |{ |} || |4 |5 |6 |= |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |? | | | | | | | | | | |1 |2 |3 |Enter |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | | | | | | | |00 |0 |. |Tab |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_LOWER] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ DE_TILD, DE_EXLM, DE_DQOT, DE_HASH, DE_DLR, DE_PERC, CU_CIRC, DE_AMPR, DE_ASTR, DE_LPRN, DE_RPRN, _______, _______, _______, _______, _______,
+ _______, DE_AT, CTRLX, CTRLC, CTRLV, XXXXXXX, XXXXXXX, DE_UNDS, DE_PLUS, DE_LCBR, DE_RCBR, DE_PIPE, _______, _______, _______, _______,
+ _______, DE_EURO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Raise
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |Numlock |/ |* |- |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 | |7 |8 |9 |+ |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |F1 |F2 |F3 |F4 |F5 |F6 |- |= |[ |] |\ |4 |5 |6 |= |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |F7 |F8 |F9 |F10 |F11 |F12 | | | | | |1 |2 |3 |Enter |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | | | | | | | |00 |0 |. |Tab |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_RAISE] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ CU_GRV, DE_1, DE_2, CU_3, DE_4, DE_5, CU_6, CU_7, CU_8, CU_9, CU_0, _______, _______, _______, _______, _______,
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, DE_MINS, CU_EQL, CU_LBRC, CU_RBRC, CU_BSLS, _______, _______, _______, _______,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Deadkey
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+| | | | | | | | | | | | |Numlock |/ |* |- |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | | |Ü | |Ö | | |7 |8 |9 |+ |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Ä |ß | | | | | | | | | |4 |5 |6 |= |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | | | | | | | | |1 |2 |3 |Enter |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| | | | | |" |" | | | | | |00 |0 |. |Tab |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_DEADKEY] = LAYOUT(
+ CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______,
+ KC_TAB, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_UE, CU_ED, CU_OE, CU_ED, _______, _______, _______, _______, _______,
+ _______, CU_AE, CU_SS, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_DDQ, _______, _______, _______, _______,
+ _______, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, CU_ED, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, CU_DDQ, CU_DDQ, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+
+/* Navigation
+,---------------------------------------------------------------------------------------------------------------------------------------------------------------.
+|Escape | | | | | | | | | | | |Numlock |/ |* |- |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|ALT F4 |PageDown |Up |PageUp |Home | | | |Win+Up | | |Del |7 |8 |9 |+ |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Left |Down |Right |End | | |Win+Left |Win+Down |Win+Right| |Enter |4 |5 |6 |= |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+| |Prev |Pause |Next |LowerVol |RaiseVol |Mute | | | | | |1 |2 |3 |Enter |
+|---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------+---------|
+|RESET |ESCT | | | | | | | | | |Game |00 |0 |. |Tab |
+`---------------------------------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+[_NAV] = LAYOUT(
+ KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______,
+ ALTF4, KC_PGDN, KC_UP, KC_PGUP, KC_HOME, XXXXXXX, XXXXXXX, XXXXXXX, GUIU, XXXXXXX, XXXXXXX, KC_DEL, _______, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, XXXXXXX, XXXXXXX, GUIL, GUID, GUIR, XXXXXXX, KC_ENT, _______, _______, _______, _______,
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______,
+ RESET, CU_ESCT, _______, _______, _______, KC_SPC, KC_ENT, _______, _______, _______, _______, CU_GAME, _______, _______, _______, _______
+),
+
+// Can be used to place macros on the numpad
+[_GAME] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+)
+
+#endif
+
+};
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+switch (keycode) {
+ case MO(_LOWER):
+ if (game){
+ if(record->event.pressed) {
+ register_code(KC_SPC);
+ } else {
+ unregister_code(KC_SPC);
+ }
+ return false;
+ } else {
+ return true;
+ }
+ case KC_LALT:
+ if (game) {
+ if (record->event.pressed){
+ layer_on(_RAISE);
+ } else {
+ layer_off(_RAISE);
+ }
+ return false;
+ } else {
+ return true;
+ }
+ case CU_GAME:
+ if(record->event.pressed) {
+ if (game)
+ layer_on(_GAME);
+ else
+ layer_off(_GAME);
+ }
+ return false;
+ default:
+ return true;
+ }
+}
diff --git a/keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md b/keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md
new file mode 100644
index 000000000..7e78330f0
--- /dev/null
+++ b/keyboards/primekb/prime_o/keymaps/spacebarracecar/readme.md
@@ -0,0 +1,6 @@
+# SpacebarRacecar US-International Prime_O Keymap for German PCs
+
+This keymap emulates most keys of the US-International layout on PCs that have German set as input language.
+This allows the use of the keyboard on any PC in Germany without the need to change any settings.
+The keymap is mostly based on the Planck default layout but adds essential features for german input, like access to Ä, Ö, Ü, ß.
+Righthand numpad is enabled by default, enable lefthand numpad with #define LEFTNUM and center numpad with #define CENTERNUM.
diff --git a/keyboards/primekb/prime_o/keymaps/spacebarracecar/rules.mk b/keyboards/primekb/prime_o/keymaps/spacebarracecar/rules.mk
new file mode 100644
index 000000000..f50334d5e
--- /dev/null
+++ b/keyboards/primekb/prime_o/keymaps/spacebarracecar/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 = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# 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
+GERMAN_ENABLE = yes # Enable Custom US Ansi Keycodes for PC with German set as input language
diff --git a/keyboards/primekb/prime_o/prime_o.c b/keyboards/primekb/prime_o/prime_o.c
new file mode 100644
index 000000000..d603cc6c9
--- /dev/null
+++ b/keyboards/primekb/prime_o/prime_o.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "prime_o.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/primekb/prime_o/prime_o.h b/keyboards/primekb/prime_o/prime_o.h
new file mode 100644
index 000000000..99a805452
--- /dev/null
+++ b/keyboards/primekb/prime_o/prime_o.h
@@ -0,0 +1,40 @@
+/* Copyright 2018 Jumail Mundekkat
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef PRIME_O_H
+#define PRIME_O_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K001, K008, K013, K018, K023, K029, K035, K041, K046, K052, K058, K064, K071, K076, K081, K086, \
+ K002, K009, K014, K019, K024, K030, K036, K042, K047, K053, K059, K065, K072, K077, K082, K087, \
+ K004, K010, K015, K020, K025, K031, K037, K043, K048, K054, K060, K066, K073, K078, K083, K089, \
+ K005, K011, K016, K021, K026, K032, K038, K044, K049, K055, K061, K067, K074, K079, K084, K090, \
+ K007, K012, K017, K022, K028, K034, K040, K045, K051, K057, K063, K069, K075, K080, K085, K092 \
+) { \
+ { K007, K017, K028, K040, K051, K063, K075, K085 }, \
+ { K005, K016, K026, K038, K049, K061, K074, K084 }, \
+ { K004, K015, K025, K037, K048, K060, K073, K083 }, \
+ { K002, K014, K024, K036, K047, K059, K072, K082 }, \
+ { K001, K013, K023, K035, K046, K058, K071, K081 }, \
+ { K008, K018, K029, K041, K052, K064, K076, K086 }, \
+ { K009, K019, K030, K042, K053, K065, K077, K087 }, \
+ { K010, K020, K031, K043, K054, K066, K078, K089 }, \
+ { K011, K021, K032, K044, K055, K067, K079, K090 }, \
+ { K012, K022, K034, K045, K057, K069, K080, K092 } \
+}
+
+#endif
diff --git a/keyboards/primekb/prime_o/readme.md b/keyboards/primekb/prime_o/readme.md
new file mode 100644
index 000000000..fe91a86b9
--- /dev/null
+++ b/keyboards/primekb/prime_o/readme.md
@@ -0,0 +1,15 @@
+# Prime_O
+
+![Prime_O](https://i.imgur.com/ujbBdja.jpg)
+
+A 16x5 ortholinear keyboard that has many layout options, including: full grid, left- or right-side full sized numpads, and Many spacebar locations. Standard in-switch backlighting. See primekb.com for full details of possible layouts.
+
+Keyboard Maintainer: [MxBlue](https://github.com/MxBlu)
+Hardware Supported: Prime_O PCB, ATMega32u2
+Hardware Availability: GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make primekb/prime_o: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/primekb/prime_o/rules.mk b/keyboards/primekb/prime_o/rules.mk
new file mode 100644
index 000000000..8d3b835f1
--- /dev/null
+++ b/keyboards/primekb/prime_o/rules.mk
@@ -0,0 +1,80 @@
+# 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
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/primekb/prime_r/config.h b/keyboards/primekb/prime_r/config.h
new file mode 100644
index 000000000..ad92199a2
--- /dev/null
+++ b/keyboards/primekb/prime_r/config.h
@@ -0,0 +1,71 @@
+/*
+Copyright 2018 Andrew Heaston
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+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
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER PrimeKB
+#define PRODUCT Prime_R
+#define DESCRIPTION A compact layout with mini-numpad.
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D1, D0, B7, B3, B2 }
+#define MATRIX_COL_PINS { D2, D3, D5, D4, D6, D7, B4, B5, C7, C6, F7, F6, F5, F4, F1, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B6
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 5
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 0
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+#endif
diff --git a/keyboards/prime_r/info.json b/keyboards/primekb/prime_r/info.json
index 1899df9f3..1899df9f3 100644
--- a/keyboards/prime_r/info.json
+++ b/keyboards/primekb/prime_r/info.json
diff --git a/keyboards/prime_r/keymaps/default/config.h b/keyboards/primekb/prime_r/keymaps/default/config.h
index e7ffd3aa2..e7ffd3aa2 100644
--- a/keyboards/prime_r/keymaps/default/config.h
+++ b/keyboards/primekb/prime_r/keymaps/default/config.h
diff --git a/keyboards/prime_r/keymaps/default/keymap.c b/keyboards/primekb/prime_r/keymaps/default/keymap.c
index a39d197e2..a39d197e2 100644
--- a/keyboards/prime_r/keymaps/default/keymap.c
+++ b/keyboards/primekb/prime_r/keymaps/default/keymap.c
diff --git a/keyboards/prime_r/keymaps/default/readme.md b/keyboards/primekb/prime_r/keymaps/default/readme.md
index be92dce9b..be92dce9b 100644
--- a/keyboards/prime_r/keymaps/default/readme.md
+++ b/keyboards/primekb/prime_r/keymaps/default/readme.md
diff --git a/keyboards/prime_r/keymaps/rooski/config.h b/keyboards/primekb/prime_r/keymaps/rooski/config.h
index 51728ccd3..51728ccd3 100644
--- a/keyboards/prime_r/keymaps/rooski/config.h
+++ b/keyboards/primekb/prime_r/keymaps/rooski/config.h
diff --git a/keyboards/prime_r/keymaps/rooski/keymap.c b/keyboards/primekb/prime_r/keymaps/rooski/keymap.c
index 3fadc6c6b..3fadc6c6b 100644
--- a/keyboards/prime_r/keymaps/rooski/keymap.c
+++ b/keyboards/primekb/prime_r/keymaps/rooski/keymap.c
diff --git a/keyboards/prime_r/keymaps/rooski/readme.md b/keyboards/primekb/prime_r/keymaps/rooski/readme.md
index c61314ee0..c61314ee0 100644
--- a/keyboards/prime_r/keymaps/rooski/readme.md
+++ b/keyboards/primekb/prime_r/keymaps/rooski/readme.md
diff --git a/keyboards/prime_r/keymaps/rooski/rules.mk b/keyboards/primekb/prime_r/keymaps/rooski/rules.mk
index f81654768..f81654768 100644
--- a/keyboards/prime_r/keymaps/rooski/rules.mk
+++ b/keyboards/primekb/prime_r/keymaps/rooski/rules.mk
diff --git a/keyboards/prime_r/prime_r.c b/keyboards/primekb/prime_r/prime_r.c
index 845769dae..845769dae 100644
--- a/keyboards/prime_r/prime_r.c
+++ b/keyboards/primekb/prime_r/prime_r.c
diff --git a/keyboards/prime_r/prime_r.h b/keyboards/primekb/prime_r/prime_r.h
index 8295fc336..8295fc336 100644
--- a/keyboards/prime_r/prime_r.h
+++ b/keyboards/primekb/prime_r/prime_r.h
diff --git a/keyboards/primekb/prime_r/readme.md b/keyboards/primekb/prime_r/readme.md
new file mode 100644
index 000000000..dfce62e1a
--- /dev/null
+++ b/keyboards/primekb/prime_r/readme.md
@@ -0,0 +1,17 @@
+# Prime_R
+
+![Prime_R](https://i.imgur.com/ldOVlLG.jpg)
+
+A compact layout with the footprint of your typical 65% board, featuring a right mini-numpad. Produced by /u/holtenc at www.primekb.com
+
+[Additional resources here](https://www.primekb.com/pages/programming)
+
+Keyboard Maintainer: [Andrew Heaston](https://github.com/rooski15)
+Hardware Supported: prime_r pcb, ATmega32U4
+Hardware Availability: [Prime_KB](https://www.primekb.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make primekb/prime_r: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/prime_r/rules.mk b/keyboards/primekb/prime_r/rules.mk
index 0e7a40727..0e7a40727 100644
--- a/keyboards/prime_r/rules.mk
+++ b/keyboards/primekb/prime_r/rules.mk
diff --git a/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.c b/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.c
new file mode 100644
index 000000000..4331155df
--- /dev/null
+++ b/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.c
@@ -0,0 +1,126 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#include "hal.h"
+
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+/**
+ * @brief PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ * This variable is used by the HAL when initializing the PAL driver.
+ */
+const PALConfig pal_default_config = {
+#if STM32_HAS_GPIOA
+ {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
+ VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
+#endif
+#if STM32_HAS_GPIOB
+ {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
+ VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
+#endif
+#if STM32_HAS_GPIOC
+ {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
+ VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
+#endif
+#if STM32_HAS_GPIOD
+ {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
+ VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
+#endif
+#if STM32_HAS_GPIOE
+ {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
+ VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
+#endif
+#if STM32_HAS_GPIOF
+ {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
+ VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
+#endif
+#if STM32_HAS_GPIOG
+ {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
+ VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
+#endif
+#if STM32_HAS_GPIOH
+ {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
+ VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
+#endif
+#if STM32_HAS_GPIOI
+ {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
+ VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}
+#endif
+};
+#endif
+
+void enter_bootloader_mode_if_requested(void);
+
+/**
+ * @brief Early initialization code.
+ * @details This initialization must be performed just after stack setup
+ * and before any other initialization.
+ */
+void __early_init(void) {
+ enter_bootloader_mode_if_requested();
+ stm32_clock_init();
+}
+
+#if HAL_USE_SDC || defined(__DOXYGEN__)
+/**
+ * @brief SDC card detection.
+ */
+bool sdc_lld_is_card_inserted(SDCDriver *sdcp) {
+
+ (void)sdcp;
+ /* TODO: Fill the implementation.*/
+ return true;
+}
+
+/**
+ * @brief SDC card write protection detection.
+ */
+bool sdc_lld_is_write_protected(SDCDriver *sdcp) {
+
+ (void)sdcp;
+ /* TODO: Fill the implementation.*/
+ return false;
+}
+#endif /* HAL_USE_SDC */
+
+#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
+/**
+ * @brief MMC_SPI card detection.
+ */
+bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return true;
+}
+
+/**
+ * @brief MMC_SPI card write protection detection.
+ */
+bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return false;
+}
+#endif
+
+/**
+ * @brief Board-specific initialization code.
+ * @todo Add your board-specific code, if any.
+ */
+void boardInit(void) {
+}
diff --git a/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.h b/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.h
new file mode 100644
index 000000000..ec26557f3
--- /dev/null
+++ b/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.h
@@ -0,0 +1,1187 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _BOARD_H_
+#define _BOARD_H_
+
+/*
+ * Setup for Clueboard 60% Keyboard
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_GENERIC_STM32_F303XC
+#define BOARD_NAME "Planck PCB"
+
+/*
+ * Board oscillators-related settings.
+ * NOTE: LSE not fitted.
+ */
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK 0U
+#endif
+
+#define STM32_LSEDRV (3U << 3U)
+
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK 8000000U
+#endif
+
+// #define STM32_HSE_BYPASS
+
+/*
+ * MCU type as defined in the ST header.
+ */
+#define STM32F303xC
+
+/*
+ * IO pins assignments.
+ */
+#define GPIOA_PIN0 0U
+#define GPIOA_PIN1 1U
+#define GPIOA_PIN2 2U
+#define GPIOA_PIN3 3U
+#define GPIOA_PIN4 4U
+#define GPIOA_PIN5 5U
+#define GPIOA_PIN6 6U
+#define GPIOA_PIN7 7U
+#define GPIOA_PIN8 8U
+#define GPIOA_PIN9 9U
+#define GPIOA_PIN10 10U
+#define GPIOA_USB_DM 11U
+#define GPIOA_USB_DP 12U
+#define GPIOA_SWDIO 13U
+#define GPIOA_SWCLK 14U
+#define GPIOA_PIN15 15U
+
+#define GPIOB_PIN0 0U
+#define GPIOB_PIN1 1U
+#define GPIOB_PIN2 2U
+#define GPIOB_PIN3 3U
+#define GPIOB_PIN4 4U
+#define GPIOB_PIN5 5U
+#define GPIOB_PIN6 6U
+#define GPIOB_PIN7 7U
+#define GPIOB_PIN8 8U
+#define GPIOB_PIN9 9U
+#define GPIOB_PIN10 10U
+#define GPIOB_PIN11 11U
+#define GPIOB_PIN12 12U
+#define GPIOB_PIN13 13U
+#define GPIOB_PIN14 14U
+#define GPIOB_PIN15 15U
+
+#define GPIOC_PIN0 0U
+#define GPIOC_PIN1 1U
+#define GPIOC_PIN2 2U
+#define GPIOC_PIN3 3U
+#define GPIOC_PIN4 4U
+#define GPIOC_PIN5 5U
+#define GPIOC_PIN6 6U
+#define GPIOC_PIN7 7U
+#define GPIOC_PIN8 8U
+#define GPIOC_PIN9 9U
+#define GPIOC_PIN10 10U
+#define GPIOC_PIN11 11U
+#define GPIOC_PIN12 12U
+#define GPIOC_PIN13 13U
+#define GPIOC_PIN14 14U
+#define GPIOC_PIN15 15U
+
+#define GPIOD_PIN0 0U
+#define GPIOD_PIN1 1U
+#define GPIOD_PIN2 2U
+#define GPIOD_PIN3 3U
+#define GPIOD_PIN4 4U
+#define GPIOD_PIN5 5U
+#define GPIOD_PIN6 6U
+#define GPIOD_PIN7 7U
+#define GPIOD_PIN8 8U
+#define GPIOD_PIN9 9U
+#define GPIOD_PIN10 10U
+#define GPIOD_PIN11 11U
+#define GPIOD_PIN12 12U
+#define GPIOD_PIN13 13U
+#define GPIOD_PIN14 14U
+#define GPIOD_PIN15 15U
+
+#define GPIOE_PIN0 0U
+#define GPIOE_PIN1 1U
+#define GPIOE_PIN2 2U
+#define GPIOE_PIN3 3U
+#define GPIOE_PIN4 4U
+#define GPIOE_PIN5 5U
+#define GPIOE_PIN6 6U
+#define GPIOE_PIN7 7U
+#define GPIOE_PIN8 8U
+#define GPIOE_PIN9 9U
+#define GPIOE_PIN10 10U
+#define GPIOE_PIN11 11U
+#define GPIOE_PIN12 12U
+#define GPIOE_PIN13 13U
+#define GPIOE_PIN14 14U
+#define GPIOE_PIN15 15U
+
+#define GPIOF_I2C2_SDA 0U
+#define GPIOF_I2C2_SCL 1U
+#define GPIOF_PIN2 2U
+#define GPIOF_PIN3 3U
+#define GPIOF_PIN4 4U
+#define GPIOF_PIN5 5U
+#define GPIOF_PIN6 6U
+#define GPIOF_PIN7 7U
+#define GPIOF_PIN8 8U
+#define GPIOF_PIN9 9U
+#define GPIOF_PIN10 10U
+#define GPIOF_PIN11 11U
+#define GPIOF_PIN12 12U
+#define GPIOF_PIN13 13U
+#define GPIOF_PIN14 14U
+#define GPIOF_PIN15 15U
+
+#define GPIOG_PIN0 0U
+#define GPIOG_PIN1 1U
+#define GPIOG_PIN2 2U
+#define GPIOG_PIN3 3U
+#define GPIOG_PIN4 4U
+#define GPIOG_PIN5 5U
+#define GPIOG_PIN6 6U
+#define GPIOG_PIN7 7U
+#define GPIOG_PIN8 8U
+#define GPIOG_PIN9 9U
+#define GPIOG_PIN10 10U
+#define GPIOG_PIN11 11U
+#define GPIOG_PIN12 12U
+#define GPIOG_PIN13 13U
+#define GPIOG_PIN14 14U
+#define GPIOG_PIN15 15U
+
+#define GPIOH_PIN0 0U
+#define GPIOH_PIN1 1U
+#define GPIOH_PIN2 2U
+#define GPIOH_PIN3 3U
+#define GPIOH_PIN4 4U
+#define GPIOH_PIN5 5U
+#define GPIOH_PIN6 6U
+#define GPIOH_PIN7 7U
+#define GPIOH_PIN8 8U
+#define GPIOH_PIN9 9U
+#define GPIOH_PIN10 10U
+#define GPIOH_PIN11 11U
+#define GPIOH_PIN12 12U
+#define GPIOH_PIN13 13U
+#define GPIOH_PIN14 14U
+#define GPIOH_PIN15 15U
+
+/*
+ * IO lines assignments.
+ */
+#define LINE_L3GD20_SDI PAL_LINE(GPIOA, 7U)
+#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
+#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
+#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
+#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
+
+#define LINE_PIN6 PAL_LINE(GPIOF, 0U)
+#define LINE_PIN7 PAL_LINE(GPIOF, 1U)
+
+#define LINE_CAPS_LOCK PAL_LINE(GPIOB, 7U)
+
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
+#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
+#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
+#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
+#define PIN_ODR_LOW(n) (0U << (n))
+#define PIN_ODR_HIGH(n) (1U << (n))
+#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
+#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
+#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
+#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
+#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
+#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
+#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
+#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
+#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
+#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
+
+/*
+ * GPIOA setup:
+ *
+ * PA0 - NC
+ * PA1 - NC
+ * PA2 - COL1
+ * PA3 - COL2
+ * PA4 - SPEAKER1
+ * PA5 - SPEAKER2
+ * PA6 - COL3
+ * PA7 - COL8
+ * PA8 - COL6
+ * PA9 - COL7
+ * PA10 - ROW5
+ * PA11 - USB_DM (alternate 14).
+ * PA12 - USB_DP (alternate 14).
+ * PA13 - SWDIO (alternate 0).
+ * PA14 - SWCLK (alternate 0).
+ * PA15 - ROW4
+ */
+#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_PIN0) | \
+ PIN_MODE_ALTERNATE(GPIOA_PIN1) | \
+ PIN_MODE_INPUT(GPIOA_PIN2) | \
+ PIN_MODE_INPUT(GPIOA_PIN3) | \
+ PIN_MODE_INPUT(GPIOA_PIN4) | \
+ PIN_MODE_INPUT(GPIOA_PIN5) | \
+ PIN_MODE_INPUT(GPIOA_PIN6) | \
+ PIN_MODE_INPUT(GPIOA_PIN7) | \
+ PIN_MODE_INPUT(GPIOA_PIN8) | \
+ PIN_MODE_INPUT(GPIOA_PIN9) | \
+ PIN_MODE_INPUT(GPIOA_PIN10) | \
+ PIN_MODE_ALTERNATE(GPIOA_USB_DM) | \
+ PIN_MODE_ALTERNATE(GPIOA_USB_DP) | \
+ PIN_MODE_ALTERNATE(GPIOA_SWDIO) | \
+ PIN_MODE_ALTERNATE(GPIOA_SWCLK) | \
+ PIN_MODE_INPUT(GPIOA_PIN15))
+#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_USB_DM) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_USB_DP) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_SWDIO) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_SWCLK) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
+#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOA_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOA_USB_DM) | \
+ PIN_OSPEED_VERYLOW(GPIOA_USB_DP) | \
+ PIN_OSPEED_HIGH(GPIOA_SWDIO) | \
+ PIN_OSPEED_HIGH(GPIOA_SWCLK) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN15))
+#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_PIN0) | \
+ PIN_PUPDR_FLOATING(GPIOA_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
+ PIN_PUPDR_FLOATING(GPIOA_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
+ PIN_PUPDR_FLOATING(GPIOA_USB_DM) | \
+ PIN_PUPDR_FLOATING(GPIOA_USB_DP) | \
+ PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
+ PIN_PUPDR_PULLDOWN(GPIOA_SWCLK) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN15))
+#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_PIN0) | \
+ PIN_ODR_HIGH(GPIOA_PIN1) | \
+ PIN_ODR_HIGH(GPIOA_PIN2) | \
+ PIN_ODR_HIGH(GPIOA_PIN3) | \
+ PIN_ODR_HIGH(GPIOA_PIN4) | \
+ PIN_ODR_HIGH(GPIOA_PIN5) | \
+ PIN_ODR_HIGH(GPIOA_PIN6) | \
+ PIN_ODR_HIGH(GPIOA_PIN7) | \
+ PIN_ODR_HIGH(GPIOA_PIN8) | \
+ PIN_ODR_HIGH(GPIOA_PIN9) | \
+ PIN_ODR_HIGH(GPIOA_PIN10) | \
+ PIN_ODR_HIGH(GPIOA_USB_DM) | \
+ PIN_ODR_HIGH(GPIOA_USB_DP) | \
+ PIN_ODR_HIGH(GPIOA_SWDIO) | \
+ PIN_ODR_HIGH(GPIOA_SWCLK) | \
+ PIN_ODR_HIGH(GPIOA_PIN15))
+#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN1, 1) | \
+ PIN_AFIO_AF(GPIOA_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN5, 5) | \
+ PIN_AFIO_AF(GPIOA_PIN6, 5) | \
+ PIN_AFIO_AF(GPIOA_PIN7, 5))
+#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOA_USB_DM, 14) | \
+ PIN_AFIO_AF(GPIOA_USB_DP, 14) | \
+ PIN_AFIO_AF(GPIOA_SWDIO, 0) | \
+ PIN_AFIO_AF(GPIOA_SWCLK, 0) | \
+ PIN_AFIO_AF(GPIOA_PIN15, 0))
+
+/*
+ * GPIOB setup:
+ *
+ * PB0 - PIN0 (input pullup).
+ * PB1 - PIN1 (input pullup).
+ * PB2 - PIN2 (input pullup).
+ * PB3 - PIN3 (alternate 0).
+ * PB4 - PIN4 (input pullup).
+ * PB5 - PIN5 (input pullup).
+ * PB6 - PIN6 LSM303DLHC_SCL (alternate 4).
+ * PB7 - PIN7 LSM303DLHC_SDA (alternate 4).
+ * PB8 - PIN8 (input pullup).
+ * PB9 - PIN9 (input pullup).
+ * PB10 - PIN10 (input pullup).
+ * PB11 - PIN11 (input pullup).
+ * PB12 - PIN12 (input pullup).
+ * PB13 - PIN13 (input pullup).
+ * PB14 - PIN14 (input pullup).
+ * PB15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
+ PIN_MODE_INPUT(GPIOB_PIN1) | \
+ PIN_MODE_INPUT(GPIOB_PIN2) | \
+ PIN_MODE_ALTERNATE(GPIOB_PIN3) | \
+ PIN_MODE_INPUT(GPIOB_PIN4) | \
+ PIN_MODE_INPUT(GPIOB_PIN5) | \
+ PIN_MODE_ALTERNATE(GPIOB_PIN6) | \
+ PIN_MODE_OUTPUT(GPIOB_PIN7) | \
+ PIN_MODE_INPUT(GPIOB_PIN8) | \
+ PIN_MODE_INPUT(GPIOB_PIN9) | \
+ PIN_MODE_INPUT(GPIOB_PIN10) | \
+ PIN_MODE_INPUT(GPIOB_PIN11) | \
+ PIN_MODE_INPUT(GPIOB_PIN12) | \
+ PIN_MODE_INPUT(GPIOB_PIN13) | \
+ PIN_MODE_INPUT(GPIOB_PIN14) | \
+ PIN_MODE_INPUT(GPIOB_PIN15))
+#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
+ PIN_OTYPE_OPENDRAIN(GPIOB_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN15))
+#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN15))
+#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
+ PIN_PUPDR_FLOATING(GPIOB_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
+ PIN_PUPDR_FLOATING(GPIOB_PIN6) | \
+ PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN15))
+#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
+ PIN_ODR_HIGH(GPIOB_PIN1) | \
+ PIN_ODR_HIGH(GPIOB_PIN2) | \
+ PIN_ODR_HIGH(GPIOB_PIN3) | \
+ PIN_ODR_HIGH(GPIOB_PIN4) | \
+ PIN_ODR_HIGH(GPIOB_PIN5) | \
+ PIN_ODR_HIGH(GPIOB_PIN6) | \
+ PIN_ODR_LOW(GPIOB_PIN7) | \
+ PIN_ODR_HIGH(GPIOB_PIN8) | \
+ PIN_ODR_HIGH(GPIOB_PIN9) | \
+ PIN_ODR_HIGH(GPIOB_PIN10) | \
+ PIN_ODR_HIGH(GPIOB_PIN11) | \
+ PIN_ODR_HIGH(GPIOB_PIN12) | \
+ PIN_ODR_HIGH(GPIOB_PIN13) | \
+ PIN_ODR_HIGH(GPIOB_PIN14) | \
+ PIN_ODR_HIGH(GPIOB_PIN15))
+#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN6, 4) | \
+ PIN_AFIO_AF(GPIOB_PIN7, 0))
+#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOB_PIN15, 0))
+
+/*
+ * GPIOC setup:
+ *
+ * PC0 - PIN0 (input pullup).
+ * PC1 - PIN1 (input pullup).
+ * PC2 - PIN2 (input pullup).
+ * PC3 - PIN3 (input pullup).
+ * PC4 - PIN4 (input pullup).
+ * PC5 - PIN5 (input pullup).
+ * PC6 - PIN6 (input pullup).
+ * PC7 - PIN7 (input pullup).
+ * PC8 - PIN8 (input pullup).
+ * PC9 - PIN9 (input pullup).
+ * PC10 - PIN10 (input pullup).
+ * PC11 - PIN11 (input pullup).
+ * PC12 - PIN12 (input pullup).
+ * PC13 - PIN13 (input pullup).
+ * PC14 - PIN14 (input floating).
+ * PC15 - PIN15 (input floating).
+ */
+#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_PIN0) | \
+ PIN_MODE_INPUT(GPIOC_PIN1) | \
+ PIN_MODE_INPUT(GPIOC_PIN2) | \
+ PIN_MODE_INPUT(GPIOC_PIN3) | \
+ PIN_MODE_INPUT(GPIOC_PIN4) | \
+ PIN_MODE_INPUT(GPIOC_PIN5) | \
+ PIN_MODE_INPUT(GPIOC_PIN6) | \
+ PIN_MODE_INPUT(GPIOC_PIN7) | \
+ PIN_MODE_INPUT(GPIOC_PIN8) | \
+ PIN_MODE_INPUT(GPIOC_PIN9) | \
+ PIN_MODE_INPUT(GPIOC_PIN10) | \
+ PIN_MODE_INPUT(GPIOC_PIN11) | \
+ PIN_MODE_INPUT(GPIOC_PIN12) | \
+ PIN_MODE_INPUT(GPIOC_PIN13) | \
+ PIN_MODE_INPUT(GPIOC_PIN14) | \
+ PIN_MODE_INPUT(GPIOC_PIN15))
+#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN15))
+#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOC_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOC_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN15))
+#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
+ PIN_PUPDR_FLOATING(GPIOC_PIN14) | \
+ PIN_PUPDR_FLOATING(GPIOC_PIN15))
+#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \
+ PIN_ODR_HIGH(GPIOC_PIN1) | \
+ PIN_ODR_HIGH(GPIOC_PIN2) | \
+ PIN_ODR_HIGH(GPIOC_PIN3) | \
+ PIN_ODR_HIGH(GPIOC_PIN4) | \
+ PIN_ODR_HIGH(GPIOC_PIN5) | \
+ PIN_ODR_HIGH(GPIOC_PIN6) | \
+ PIN_ODR_HIGH(GPIOC_PIN7) | \
+ PIN_ODR_HIGH(GPIOC_PIN8) | \
+ PIN_ODR_HIGH(GPIOC_PIN9) | \
+ PIN_ODR_HIGH(GPIOC_PIN10) | \
+ PIN_ODR_HIGH(GPIOC_PIN11) | \
+ PIN_ODR_HIGH(GPIOC_PIN12) | \
+ PIN_ODR_HIGH(GPIOC_PIN13) | \
+ PIN_ODR_HIGH(GPIOC_PIN14) | \
+ PIN_ODR_HIGH(GPIOC_PIN15))
+#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN7, 0))
+#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOC_PIN15, 0))
+
+/*
+ * GPIOD setup:
+ *
+ * PD0 - PIN0 (input pullup).
+ * PD1 - PIN1 (input pullup).
+ * PD2 - PIN2 (input pullup).
+ * PD3 - PIN3 (input pullup).
+ * PD4 - PIN4 (input pullup).
+ * PD5 - PIN5 (input pullup).
+ * PD6 - PIN6 (input pullup).
+ * PD7 - PIN7 (input pullup).
+ * PD8 - PIN8 (input pullup).
+ * PD9 - PIN9 (input pullup).
+ * PD11 - PIN10 (input pullup).
+ * PD11 - PIN11 (input pullup).
+ * PD12 - PIN12 (input pullup).
+ * PD13 - PIN13 (input pullup).
+ * PD14 - PIN14 (input pullup).
+ * PD15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
+ PIN_MODE_INPUT(GPIOD_PIN1) | \
+ PIN_MODE_INPUT(GPIOD_PIN2) | \
+ PIN_MODE_INPUT(GPIOD_PIN3) | \
+ PIN_MODE_INPUT(GPIOD_PIN4) | \
+ PIN_MODE_INPUT(GPIOD_PIN5) | \
+ PIN_MODE_INPUT(GPIOD_PIN6) | \
+ PIN_MODE_INPUT(GPIOD_PIN7) | \
+ PIN_MODE_INPUT(GPIOD_PIN8) | \
+ PIN_MODE_INPUT(GPIOD_PIN9) | \
+ PIN_MODE_INPUT(GPIOD_PIN10) | \
+ PIN_MODE_INPUT(GPIOD_PIN11) | \
+ PIN_MODE_INPUT(GPIOD_PIN12) | \
+ PIN_MODE_INPUT(GPIOD_PIN13) | \
+ PIN_MODE_INPUT(GPIOD_PIN14) | \
+ PIN_MODE_INPUT(GPIOD_PIN15))
+#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
+#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOD_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOD_PIN15))
+#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN15))
+#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
+ PIN_ODR_HIGH(GPIOD_PIN1) | \
+ PIN_ODR_HIGH(GPIOD_PIN2) | \
+ PIN_ODR_HIGH(GPIOD_PIN3) | \
+ PIN_ODR_HIGH(GPIOD_PIN4) | \
+ PIN_ODR_HIGH(GPIOD_PIN5) | \
+ PIN_ODR_HIGH(GPIOD_PIN6) | \
+ PIN_ODR_HIGH(GPIOD_PIN7) | \
+ PIN_ODR_HIGH(GPIOD_PIN8) | \
+ PIN_ODR_HIGH(GPIOD_PIN9) | \
+ PIN_ODR_HIGH(GPIOD_PIN10) | \
+ PIN_ODR_HIGH(GPIOD_PIN11) | \
+ PIN_ODR_HIGH(GPIOD_PIN12) | \
+ PIN_ODR_HIGH(GPIOD_PIN13) | \
+ PIN_ODR_HIGH(GPIOD_PIN14) | \
+ PIN_ODR_HIGH(GPIOD_PIN15))
+#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN7, 0))
+#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOD_PIN15, 0))
+
+/*
+ * GPIOE setup:
+ *
+ * PE0 - PIN0 (input pullup).
+ * PE1 - PIN1 (input pullup).
+ * PE2 - PIN2 (input pullup).
+ * PE3 - PIN3 L3GD20_CS (output pushpull maximum).
+ * PE4 - PIN4 (input pullup).
+ * PE5 - PIN5 (input pullup).
+ * PE6 - PIN6 (input pullup).
+ * PE7 - PIN7 (input pullup).
+ * PE8 - PIN8 (output pushpull maximum).
+ * PE9 - PIN9 (output pushpull maximum).
+ * PE10 - PIN10 (output pushpull maximum).
+ * PE11 - PIN11 (output pushpull maximum).
+ * PE12 - PIN12 (output pushpull maximum).
+ * PE13 - PIN13 (output pushpull maximum).
+ * PE14 - PIN14 (output pushpull maximum).
+ * PE15 - PIN15 (output pushpull maximum).
+ */
+#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
+ PIN_MODE_INPUT(GPIOE_PIN1) | \
+ PIN_MODE_INPUT(GPIOE_PIN2) |\
+ PIN_MODE_OUTPUT(GPIOE_PIN3) | \
+ PIN_MODE_INPUT(GPIOE_PIN4) |\
+ PIN_MODE_INPUT(GPIOE_PIN5) |\
+ PIN_MODE_INPUT(GPIOE_PIN6) | \
+ PIN_MODE_INPUT(GPIOE_PIN7) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN8) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN9) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN10) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN11) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN12) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN13) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN14) | \
+ PIN_MODE_OUTPUT(GPIOE_PIN15))
+#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN1) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN2) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN4) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN5) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN10) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN14) |\
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
+#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOE_PIN0) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN1) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN2) |\
+ PIN_OSPEED_HIGH(GPIOE_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN4) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN5) |\
+ PIN_OSPEED_VERYLOW(GPIOE_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOE_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN15))
+#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN2) |\
+ PIN_PUPDR_FLOATING(GPIOE_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN4) |\
+ PIN_PUPDR_PULLUP(GPIOE_PIN5) |\
+ PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
+ PIN_PUPDR_FLOATING(GPIOE_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
+ PIN_PUPDR_FLOATING(GPIOE_PIN13) | \
+ PIN_PUPDR_FLOATING(GPIOE_PIN14) |\
+ PIN_PUPDR_FLOATING(GPIOE_PIN15))
+#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
+ PIN_ODR_HIGH(GPIOE_PIN1) | \
+ PIN_ODR_HIGH(GPIOE_PIN2) | \
+ PIN_ODR_HIGH(GPIOE_PIN3) | \
+ PIN_ODR_HIGH(GPIOE_PIN4) | \
+ PIN_ODR_HIGH(GPIOE_PIN5) | \
+ PIN_ODR_HIGH(GPIOE_PIN6) | \
+ PIN_ODR_HIGH(GPIOE_PIN7) | \
+ PIN_ODR_LOW(GPIOE_PIN8) | \
+ PIN_ODR_LOW(GPIOE_PIN9) | \
+ PIN_ODR_LOW(GPIOE_PIN10) | \
+ PIN_ODR_LOW(GPIOE_PIN11) | \
+ PIN_ODR_LOW(GPIOE_PIN12) | \
+ PIN_ODR_LOW(GPIOE_PIN13) | \
+ PIN_ODR_LOW(GPIOE_PIN14) | \
+ PIN_ODR_LOW(GPIOE_PIN15))
+#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN2, 0) |\
+ PIN_AFIO_AF(GPIOE_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN4, 0) |\
+ PIN_AFIO_AF(GPIOE_PIN5, 0) |\
+ PIN_AFIO_AF(GPIOE_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN7, 0))
+#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOE_PIN15, 0))
+
+/*
+ * GPIOF setup:
+ *
+ * PF0 - I2C2_SDA (input floating).
+ * PF1 - I2C2_SCL (input floating).
+ * PF2 - PIN2 (input pullup).
+ * PF3 - PIN3 (input pullup).
+ * PF4 - PIN4 (input pullup).
+ * PF5 - PIN5 (input pullup).
+ * PF6 - PIN6 (input pullup).
+ * PF7 - PIN7 (input pullup).
+ * PF8 - PIN8 (input pullup).
+ * PF9 - PIN9 (input pullup).
+ * PF10 - PIN10 (input pullup).
+ * PF11 - PIN11 (input pullup).
+ * PF12 - PIN12 (input pullup).
+ * PF13 - PIN13 (input pullup).
+ * PF14 - PIN14 (input pullup).
+ * PF15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_I2C2_SDA) | \
+ PIN_MODE_INPUT(GPIOF_I2C2_SCL) | \
+ PIN_MODE_INPUT(GPIOF_PIN2) | \
+ PIN_MODE_INPUT(GPIOF_PIN3) | \
+ PIN_MODE_INPUT(GPIOF_PIN4) | \
+ PIN_MODE_INPUT(GPIOF_PIN5) | \
+ PIN_MODE_INPUT(GPIOF_PIN6) | \
+ PIN_MODE_INPUT(GPIOF_PIN7) | \
+ PIN_MODE_INPUT(GPIOF_PIN8) | \
+ PIN_MODE_INPUT(GPIOF_PIN9) | \
+ PIN_MODE_INPUT(GPIOF_PIN10) | \
+ PIN_MODE_INPUT(GPIOF_PIN11) | \
+ PIN_MODE_INPUT(GPIOF_PIN12) | \
+ PIN_MODE_INPUT(GPIOF_PIN13) | \
+ PIN_MODE_INPUT(GPIOF_PIN14) | \
+ PIN_MODE_INPUT(GPIOF_PIN15))
+#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SDA) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_I2C2_SCL) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
+#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_HIGH(GPIOF_I2C2_SDA) | \
+ PIN_OSPEED_HIGH(GPIOF_I2C2_SCL) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN15))
+#define VAL_GPIOF_PUPDR (PIN_PUPDR_FLOATING(GPIOF_I2C2_SDA) | \
+ PIN_PUPDR_FLOATING(GPIOF_I2C2_SCL) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN15))
+#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_I2C2_SDA) | \
+ PIN_ODR_HIGH(GPIOF_I2C2_SCL) | \
+ PIN_ODR_HIGH(GPIOF_PIN2) | \
+ PIN_ODR_HIGH(GPIOF_PIN3) | \
+ PIN_ODR_HIGH(GPIOF_PIN4) | \
+ PIN_ODR_HIGH(GPIOF_PIN5) | \
+ PIN_ODR_HIGH(GPIOF_PIN6) | \
+ PIN_ODR_HIGH(GPIOF_PIN7) | \
+ PIN_ODR_HIGH(GPIOF_PIN8) | \
+ PIN_ODR_HIGH(GPIOF_PIN9) | \
+ PIN_ODR_HIGH(GPIOF_PIN10) | \
+ PIN_ODR_HIGH(GPIOF_PIN11) | \
+ PIN_ODR_HIGH(GPIOF_PIN12) | \
+ PIN_ODR_HIGH(GPIOF_PIN13) | \
+ PIN_ODR_HIGH(GPIOF_PIN14) | \
+ PIN_ODR_HIGH(GPIOF_PIN15))
+#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_I2C2_SDA, 0) | \
+ PIN_AFIO_AF(GPIOF_I2C2_SCL, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN7, 0))
+#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOF_PIN15, 0))
+
+/*
+ * GPIOG setup:
+ *
+ * PG0 - PIN0 (input pullup).
+ * PG1 - PIN1 (input pullup).
+ * PG2 - PIN2 (input pullup).
+ * PG3 - PIN3 (input pullup).
+ * PG4 - PIN4 (input pullup).
+ * PG5 - PIN5 (input pullup).
+ * PG6 - PIN6 (input pullup).
+ * PG7 - PIN7 (input pullup).
+ * PG8 - PIN8 (input pullup).
+ * PG9 - PIN9 (input pullup).
+ * PG10 - PIN10 (input pullup).
+ * PG11 - PIN11 (input pullup).
+ * PG12 - PIN12 (input pullup).
+ * PG13 - PIN13 (input pullup).
+ * PG14 - PIN14 (input pullup).
+ * PG15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOG_MODER (PIN_MODE_INPUT(GPIOG_PIN0) | \
+ PIN_MODE_INPUT(GPIOG_PIN1) | \
+ PIN_MODE_INPUT(GPIOG_PIN2) | \
+ PIN_MODE_INPUT(GPIOG_PIN3) | \
+ PIN_MODE_INPUT(GPIOG_PIN4) | \
+ PIN_MODE_INPUT(GPIOG_PIN5) | \
+ PIN_MODE_INPUT(GPIOG_PIN6) | \
+ PIN_MODE_INPUT(GPIOG_PIN7) | \
+ PIN_MODE_INPUT(GPIOG_PIN8) | \
+ PIN_MODE_INPUT(GPIOG_PIN9) | \
+ PIN_MODE_INPUT(GPIOG_PIN10) | \
+ PIN_MODE_INPUT(GPIOG_PIN11) | \
+ PIN_MODE_INPUT(GPIOG_PIN12) | \
+ PIN_MODE_INPUT(GPIOG_PIN13) | \
+ PIN_MODE_INPUT(GPIOG_PIN14) | \
+ PIN_MODE_INPUT(GPIOG_PIN15))
+#define VAL_GPIOG_OTYPER (PIN_OTYPE_PUSHPULL(GPIOG_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOG_PIN15))
+#define VAL_GPIOG_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOG_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOG_PIN15))
+#define VAL_GPIOG_PUPDR (PIN_PUPDR_PULLUP(GPIOG_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOG_PIN15))
+#define VAL_GPIOG_ODR (PIN_ODR_HIGH(GPIOG_PIN0) | \
+ PIN_ODR_HIGH(GPIOG_PIN1) | \
+ PIN_ODR_HIGH(GPIOG_PIN2) | \
+ PIN_ODR_HIGH(GPIOG_PIN3) | \
+ PIN_ODR_HIGH(GPIOG_PIN4) | \
+ PIN_ODR_HIGH(GPIOG_PIN5) | \
+ PIN_ODR_HIGH(GPIOG_PIN6) | \
+ PIN_ODR_HIGH(GPIOG_PIN7) | \
+ PIN_ODR_HIGH(GPIOG_PIN8) | \
+ PIN_ODR_HIGH(GPIOG_PIN9) | \
+ PIN_ODR_HIGH(GPIOG_PIN10) | \
+ PIN_ODR_HIGH(GPIOG_PIN11) | \
+ PIN_ODR_HIGH(GPIOG_PIN12) | \
+ PIN_ODR_HIGH(GPIOG_PIN13) | \
+ PIN_ODR_HIGH(GPIOG_PIN14) | \
+ PIN_ODR_HIGH(GPIOG_PIN15))
+#define VAL_GPIOG_AFRL (PIN_AFIO_AF(GPIOG_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN7, 0))
+#define VAL_GPIOG_AFRH (PIN_AFIO_AF(GPIOG_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOG_PIN15, 0))
+
+/*
+ * GPIOH setup:
+ *
+ * PH0 - PIN0 (input pullup).
+ * PH1 - PIN1 (input pullup).
+ * PH2 - PIN2 (input pullup).
+ * PH3 - PIN3 (input pullup).
+ * PH4 - PIN4 (input pullup).
+ * PH5 - PIN5 (input pullup).
+ * PH6 - PIN6 (input pullup).
+ * PH7 - PIN7 (input pullup).
+ * PH8 - PIN8 (input pullup).
+ * PH9 - PIN9 (input pullup).
+ * PH10 - PIN10 (input pullup).
+ * PH11 - PIN11 (input pullup).
+ * PH12 - PIN12 (input pullup).
+ * PH13 - PIN13 (input pullup).
+ * PH14 - PIN14 (input pullup).
+ * PH15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOH_MODER (PIN_MODE_INPUT(GPIOH_PIN0) | \
+ PIN_MODE_INPUT(GPIOH_PIN1) | \
+ PIN_MODE_INPUT(GPIOH_PIN2) | \
+ PIN_MODE_INPUT(GPIOH_PIN3) | \
+ PIN_MODE_INPUT(GPIOH_PIN4) | \
+ PIN_MODE_INPUT(GPIOH_PIN5) | \
+ PIN_MODE_INPUT(GPIOH_PIN6) | \
+ PIN_MODE_INPUT(GPIOH_PIN7) | \
+ PIN_MODE_INPUT(GPIOH_PIN8) | \
+ PIN_MODE_INPUT(GPIOH_PIN9) | \
+ PIN_MODE_INPUT(GPIOH_PIN10) | \
+ PIN_MODE_INPUT(GPIOH_PIN11) | \
+ PIN_MODE_INPUT(GPIOH_PIN12) | \
+ PIN_MODE_INPUT(GPIOH_PIN13) | \
+ PIN_MODE_INPUT(GPIOH_PIN14) | \
+ PIN_MODE_INPUT(GPIOH_PIN15))
+#define VAL_GPIOH_OTYPER (PIN_OTYPE_PUSHPULL(GPIOH_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOH_PIN15))
+#define VAL_GPIOH_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOH_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN10) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOH_PIN15))
+#define VAL_GPIOH_PUPDR (PIN_PUPDR_PULLUP(GPIOH_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOH_PIN15))
+#define VAL_GPIOH_ODR (PIN_ODR_HIGH(GPIOH_PIN0) | \
+ PIN_ODR_HIGH(GPIOH_PIN1) | \
+ PIN_ODR_HIGH(GPIOH_PIN2) | \
+ PIN_ODR_HIGH(GPIOH_PIN3) | \
+ PIN_ODR_HIGH(GPIOH_PIN4) | \
+ PIN_ODR_HIGH(GPIOH_PIN5) | \
+ PIN_ODR_HIGH(GPIOH_PIN6) | \
+ PIN_ODR_HIGH(GPIOH_PIN7) | \
+ PIN_ODR_HIGH(GPIOH_PIN8) | \
+ PIN_ODR_HIGH(GPIOH_PIN9) | \
+ PIN_ODR_HIGH(GPIOH_PIN10) | \
+ PIN_ODR_HIGH(GPIOH_PIN11) | \
+ PIN_ODR_HIGH(GPIOH_PIN12) | \
+ PIN_ODR_HIGH(GPIOH_PIN13) | \
+ PIN_ODR_HIGH(GPIOH_PIN14) | \
+ PIN_ODR_HIGH(GPIOH_PIN15))
+#define VAL_GPIOH_AFRL (PIN_AFIO_AF(GPIOH_PIN0, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN1, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN2, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN3, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN4, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN5, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN6, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN7, 0))
+#define VAL_GPIOH_AFRH (PIN_AFIO_AF(GPIOH_PIN8, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN9, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN10, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN11, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN12, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN13, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN14, 0) | \
+ PIN_AFIO_AF(GPIOH_PIN15, 0))
+
+
+/*
+ * USB bus activation macro, required by the USB driver.
+ */
+// #define usb_lld_connect_bus(usbp)
+#define usb_lld_connect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_ALTERNATE(14)))
+// #define usb_lld_connect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_INPUT)
+/*
+ * USB bus de-activation macro, required by the USB driver.
+ */
+// #define usb_lld_disconnect_bus(usbp)
+#define usb_lld_disconnect_bus(usbp) (palSetPadMode(GPIOA, GPIOA_USB_DP, PAL_MODE_OUTPUT_PUSHPULL)); palClearPad(GPIOA, GPIOA_USB_DP)
+// #define usb_lld_disconnect_bus(usbp) palSetPadMode(GPIOA, 12, PAL_MODE_OUTPUT_PUSHPULL); palClearPad(GPIOA, 12)
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* _BOARD_H_ */
diff --git a/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.mk b/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.mk
new file mode 100644
index 000000000..43377629a
--- /dev/null
+++ b/keyboards/proton_c/boards/GENERIC_STM32_F303XC/board.mk
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F303XC
diff --git a/keyboards/proton_c/bootloader_defs.h b/keyboards/proton_c/bootloader_defs.h
new file mode 100644
index 000000000..3b0e9d20a
--- /dev/null
+++ b/keyboards/proton_c/bootloader_defs.h
@@ -0,0 +1,7 @@
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here:
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ * This also requires a patch to chibios:
+ * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+ */
+#define STM32_BOOTLOADER_ADDRESS 0x1FFFD800
diff --git a/keyboards/proton_c/chconf.h b/keyboards/proton_c/chconf.h
new file mode 100644
index 000000000..1d9f12ff1
--- /dev/null
+++ b/keyboards/proton_c/chconf.h
@@ -0,0 +1,520 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION 32
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY 100000
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#define CH_CFG_ST_TIMEDELTA 2
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM 0
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE 0
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM TRUE
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY TRUE
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT TRUE
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES TRUE
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES TRUE
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS TRUE
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS TRUE
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES TRUE
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY TRUE
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES TRUE
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE TRUE
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP TRUE
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS TRUE
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS FALSE
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS FALSE
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS FALSE
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK TRUE
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS FALSE
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note It is invoked from within @p chThdInit() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */
diff --git a/keyboards/proton_c/config.h b/keyboards/proton_c/config.h
new file mode 100644
index 000000000..1a2346d41
--- /dev/null
+++ b/keyboards/proton_c/config.h
@@ -0,0 +1,121 @@
+/* Copyright 2018 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0006
+#define MANUFACTURER QMK
+#define PRODUCT Proton C
+#define DESCRIPTION A compact ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 1
+
+#define MATRIX_ROW_PINS { B9 }
+#define MATRIX_COL_PINS { B0 }
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 6
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+// #define WS2812_LED_N 2
+// #define RGBLED_NUM WS2812_LED_N
+// #define WS2812_TIM_N 2
+// #define WS2812_TIM_CH 2
+// #define PORT_WS2812 GPIOA
+// #define PIN_WS2812 1
+// #define WS2812_DMA_STREAM STM32_DMA1_STREAM2 // DMA stream for TIMx_UP (look up in reference manual under DMA Channel selection)
+//#define WS2812_DMA_CHANNEL 7 // DMA channel for TIMx_UP
+//#define WS2812_EXTERNAL_PULLUP
+
diff --git a/keyboards/proton_c/halconf.h b/keyboards/proton_c/halconf.h
new file mode 100644
index 000000000..8fe8e0c6f
--- /dev/null
+++ b/keyboards/proton_c/halconf.h
@@ -0,0 +1,388 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef HALCONF_H
+#define HALCONF_H
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC TRUE
+#endif
+
+/**
+ * @brief Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT TRUE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C FALSE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM FALSE
+#endif
+
+/**
+ * @brief Enables the QSPI subsystem.
+ */
+#if !defined(HAL_USE_QSPI) || defined(__DOXYGEN__)
+#define HAL_USE_QSPI FALSE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB TRUE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 16 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 256 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 1
+#endif
+
+/**
+ * @brief Serial over USB number of buffers.
+ * @note The default is 2 buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_NUMBER) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_NUMBER 2
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT TRUE
+#endif
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* UART driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_WAIT) || defined(__DOXYGEN__)
+#define UART_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p uartAcquireBus() and @p uartReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(UART_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define UART_USE_MUTUAL_EXCLUSION FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+#endif /* HALCONF_H */
+
+/** @} */
diff --git a/keyboards/proton_c/keymaps/default/keymap.c b/keyboards/proton_c/keymaps/default/keymap.c
new file mode 100644
index 000000000..a3103432f
--- /dev/null
+++ b/keyboards/proton_c/keymaps/default/keymap.c
@@ -0,0 +1,21 @@
+/* Copyright 2018 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = {{ KC_A }}
+};
diff --git a/keyboards/proton_c/mcuconf.h b/keyboards/proton_c/mcuconf.h
new file mode 100644
index 000000000..7c3c6e570
--- /dev/null
+++ b/keyboards/proton_c/mcuconf.h
@@ -0,0 +1,257 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef MCUCONF_H
+#define MCUCONF_H
+
+/*
+ * STM32F3xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 15...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F3xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_HSI_ENABLED TRUE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED TRUE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSE
+#define STM32_PREDIV_VALUE 1
+#define STM32_PLLMUL_VALUE 9
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE1 STM32_PPRE1_DIV2
+#define STM32_PPRE2 STM32_PPRE2_DIV2
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_ADC12PRES STM32_ADC12PRES_DIV1
+#define STM32_ADC34PRES STM32_ADC34PRES_DIV1
+#define STM32_USART1SW STM32_USART1SW_PCLK
+#define STM32_USART2SW STM32_USART2SW_PCLK
+#define STM32_USART3SW STM32_USART3SW_PCLK
+#define STM32_UART4SW STM32_UART4SW_PCLK
+#define STM32_UART5SW STM32_UART5SW_PCLK
+#define STM32_I2C1SW STM32_I2C1SW_SYSCLK
+#define STM32_I2C2SW STM32_I2C2SW_SYSCLK
+#define STM32_TIM1SW STM32_TIM1SW_PCLK2
+#define STM32_TIM8SW STM32_TIM8SW_PCLK2
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+#define STM32_USB_CLOCK_REQUIRED TRUE
+#define STM32_USBPRE STM32_USBPRE_DIV1P5
+
+#undef STM32_HSE_BYPASS
+// #error "oh no"
+// #endif
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_DUAL_MODE FALSE
+#define STM32_ADC_COMPACT_SAMPLES FALSE
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_USE_ADC2 FALSE
+#define STM32_ADC_USE_ADC3 FALSE
+#define STM32_ADC_USE_ADC4 FALSE
+#define STM32_ADC_ADC1_DMA_STREAM STM32_DMA_STREAM_ID(1, 1)
+#define STM32_ADC_ADC2_DMA_STREAM STM32_DMA_STREAM_ID(2, 1)
+#define STM32_ADC_ADC3_DMA_STREAM STM32_DMA_STREAM_ID(2, 5)
+#define STM32_ADC_ADC4_DMA_STREAM STM32_DMA_STREAM_ID(2, 2)
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_ADC2_DMA_PRIORITY 2
+#define STM32_ADC_ADC3_DMA_PRIORITY 2
+#define STM32_ADC_ADC4_DMA_PRIORITY 2
+#define STM32_ADC_ADC12_IRQ_PRIORITY 5
+#define STM32_ADC_ADC3_IRQ_PRIORITY 5
+#define STM32_ADC_ADC4_IRQ_PRIORITY 5
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC2_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC3_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC4_DMA_IRQ_PRIORITY 5
+#define STM32_ADC_ADC12_CLOCK_MODE ADC_CCR_CKMODE_AHB_DIV1
+#define STM32_ADC_ADC34_CLOCK_MODE ADC_CCR_CKMODE_AHB_DIV1
+
+/*
+ * CAN driver system settings.
+ */
+#define STM32_CAN_USE_CAN1 FALSE
+#define STM32_CAN_CAN1_IRQ_PRIORITY 11
+
+/*
+ * DAC driver system settings.
+ */
+#define STM32_DAC_DUAL_MODE FALSE
+#define STM32_DAC_USE_DAC1_CH1 TRUE
+#define STM32_DAC_USE_DAC1_CH2 TRUE
+#define STM32_DAC_DAC1_CH1_IRQ_PRIORITY 10
+#define STM32_DAC_DAC1_CH2_IRQ_PRIORITY 10
+#define STM32_DAC_DAC1_CH1_DMA_PRIORITY 2
+#define STM32_DAC_DAC1_CH2_DMA_PRIORITY 2
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI1_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI2_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI3_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI4_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI5_9_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI10_15_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI18_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI19_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI20_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI21_22_29_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI30_32_IRQ_PRIORITY 6
+#define STM32_EXT_EXTI33_IRQ_PRIORITY 6
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM4 FALSE
+#define STM32_GPT_USE_TIM6 TRUE
+#define STM32_GPT_USE_TIM7 TRUE
+#define STM32_GPT_USE_TIM8 TRUE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 7
+#define STM32_GPT_TIM2_IRQ_PRIORITY 7
+#define STM32_GPT_TIM3_IRQ_PRIORITY 7
+#define STM32_GPT_TIM4_IRQ_PRIORITY 7
+#define STM32_GPT_TIM6_IRQ_PRIORITY 7
+#define STM32_GPT_TIM7_IRQ_PRIORITY 7
+#define STM32_GPT_TIM8_IRQ_PRIORITY 7
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 10
+#define STM32_I2C_I2C2_IRQ_PRIORITY 10
+#define STM32_I2C_USE_DMA TRUE
+#define STM32_I2C_I2C1_DMA_PRIORITY 1
+#define STM32_I2C_I2C2_DMA_PRIORITY 1
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_USE_TIM4 FALSE
+#define STM32_ICU_USE_TIM8 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 7
+#define STM32_ICU_TIM2_IRQ_PRIORITY 7
+#define STM32_ICU_TIM3_IRQ_PRIORITY 7
+#define STM32_ICU_TIM4_IRQ_PRIORITY 7
+#define STM32_ICU_TIM8_IRQ_PRIORITY 7
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 TRUE
+#define STM32_PWM_USE_TIM3 TRUE
+#define STM32_PWM_USE_TIM4 FALSE
+#define STM32_PWM_USE_TIM8 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 7
+#define STM32_PWM_TIM2_IRQ_PRIORITY 7
+#define STM32_PWM_TIM3_IRQ_PRIORITY 7
+#define STM32_PWM_TIM4_IRQ_PRIORITY 7
+#define STM32_PWM_TIM8_IRQ_PRIORITY 7
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 TRUE
+#define STM32_SERIAL_USE_USART3 FALSE
+#define STM32_SERIAL_USE_UART4 FALSE
+#define STM32_SERIAL_USE_UART5 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 12
+#define STM32_SERIAL_USART2_PRIORITY 12
+#define STM32_SERIAL_USART3_PRIORITY 12
+#define STM32_SERIAL_UART4_PRIORITY 12
+#define STM32_SERIAL_UART5_PRIORITY 12
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_USE_SPI3 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI3_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 10
+#define STM32_SPI_SPI2_IRQ_PRIORITY 10
+#define STM32_SPI_SPI3_IRQ_PRIORITY 10
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 8
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USE_USART3 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 12
+#define STM32_UART_USART2_IRQ_PRIORITY 12
+#define STM32_UART_USART3_IRQ_PRIORITY 12
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_USART3_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_HP_IRQ_PRIORITY 13
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 14
+
+/*
+ * WDG driver system settings.
+ */
+#define STM32_WDG_USE_IWDG FALSE
+
+#endif /* MCUCONF_H */
diff --git a/keyboards/proton_c/proton_c.c b/keyboards/proton_c/proton_c.c
new file mode 100644
index 000000000..525634347
--- /dev/null
+++ b/keyboards/proton_c/proton_c.c
@@ -0,0 +1,25 @@
+/* Copyright 2018 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "proton_c.h"
+
+void matrix_init_kb(void) {
+ // Turn status LED on
+ setPinOutput(C13);
+ writePinHigh(C13);
+
+ matrix_init_user();
+}
diff --git a/keyboards/proton_c/proton_c.h b/keyboards/proton_c/proton_c.h
new file mode 100644
index 000000000..159f9975a
--- /dev/null
+++ b/keyboards/proton_c/proton_c.h
@@ -0,0 +1,18 @@
+/* Copyright 2018 Jack Humbert
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+#include "quantum.h"
diff --git a/keyboards/proton_c/readme.md b/keyboards/proton_c/readme.md
new file mode 100644
index 000000000..5f27795ae
--- /dev/null
+++ b/keyboards/proton_c/readme.md
@@ -0,0 +1,16 @@
+Proton C
+===
+
+![Proton C](https://i.imgur.com/xZrjIqa.jpg)
+
+A Pro Micro drop-in replacement.
+
+Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
+Hardware Supported: QMK Proton C
+Hardware Availability: [List of vendors](https://qmk.fm/proton-c)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make proton_c: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/proton_c/rules.mk b/keyboards/proton_c/rules.mk
new file mode 100644
index 000000000..f682c1fd6
--- /dev/null
+++ b/keyboards/proton_c/rules.mk
@@ -0,0 +1,51 @@
+## chip/board settings
+# - the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F3xx
+
+# Linker script to use
+# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F303xC
+
+# Startup code to use
+# - it should exist in <chibios>/os/common/startup/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f3xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+BOARD = GENERIC_STM32_F303XC
+
+# Cortex version
+MCU = cortex-m4
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 7
+
+USE_FPU = yes
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+# OPT_DEFS = -DCORTEX_VTOR_INIT=0x08005000
+OPT_DEFS =
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+# comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+## (Note that for BOOTMAGIC on Teensy LC you have to use a custom .ld script.)
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+#SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover
+AUDIO_ENABLE = yes
+RGBLIGHT_ENABLE = no
+# SERIAL_LINK_ENABLE = yes
diff --git a/keyboards/ps2avrGB/README.md b/keyboards/ps2avrGB/README.md
index 5111be264..8399dff02 100644
--- a/keyboards/ps2avrGB/README.md
+++ b/keyboards/ps2avrGB/README.md
@@ -17,6 +17,7 @@ compatible with QMK; fully supported boards have their own directory.
- [b.fake](https://github.com/qmk/qmk_firmware/tree/master/keyboards/bfake)
- [b.mini](https://github.com/qmk/qmk_firmware/tree/master/keyboards/bmini)
+- [b.face](https://github.com/qmk/qmk_firmware/tree/master/keyboards/bface)
- [pearl](https://github.com/qmk/qmk_firmware/tree/master/keyboards/pearl)
## Installing
diff --git a/keyboards/ps2avrGB/rules.mk b/keyboards/ps2avrGB/rules.mk
index c7c12dcf1..1be9edc24 100644
--- a/keyboards/ps2avrGB/rules.mk
+++ b/keyboards/ps2avrGB/rules.mk
@@ -26,13 +26,13 @@ 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
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = atmel-dfu
# build options
-BOOTMAGIC_ENABLE = yes
-MOUSEKEY_ENABLE = yes
+BOOTMAGIC_ENABLE = full
+MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes
CONSOLE_ENABLE = yes
COMMAND_ENABLE = yes
diff --git a/keyboards/puck/config.h b/keyboards/puck/config.h
new file mode 100644
index 000000000..b2cb1b23e
--- /dev/null
+++ b/keyboards/puck/config.h
@@ -0,0 +1,31 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER OkKeebs LLC
+#define PRODUCT Puck
+#define DESCRIPTION 4x3 macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 3
+
+#define MATRIX_ROW_PINS { D2, D3, C6, C7 }
+#define MATRIX_COL_PINS { B4, D7, D6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* number of backlight levels */
+#define BACKLIGHT_LEVELS 3
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/puck/info.json b/keyboards/puck/info.json
new file mode 100644
index 000000000..e8d03a43f
--- /dev/null
+++ b/keyboards/puck/info.json
@@ -0,0 +1,25 @@
+{
+ "keyboard_name": "Puck",
+ "url": "",
+ "maintainer": "john-pettigrew",
+ "width": 3,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"SW1", "x":0, "y":0},
+ {"label":"SW2", "x":1, "y":0},
+ {"label":"SW3", "x":2, "y":0},
+ {"label":"SW4", "x":0, "y":1},
+ {"label":"SW5", "x":1, "y":1},
+ {"label":"SW6", "x":2, "y":1},
+ {"label":"SW7", "x":0, "y":2},
+ {"label":"SW8", "x":1, "y":2},
+ {"label":"SW9", "x":2, "y":2},
+ {"label":"SW10", "x":0, "y":3},
+ {"label":"SW11", "x":1, "y":3},
+ {"label":"SW12", "x":2, "y":3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/puck/keymaps/default/keymap.c b/keyboards/puck/keymaps/default/keymap.c
new file mode 100644
index 000000000..6ba70a88b
--- /dev/null
+++ b/keyboards/puck/keymaps/default/keymap.c
@@ -0,0 +1,64 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _HL 1
+#define _LL 2
+
+enum keycodes {
+ LOW,
+ HIGH
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * Base Layer (Numbers)
+ */
+ [_BL] = LAYOUT(
+ KC_KP_7, KC_KP_8, KC_KP_9,
+ KC_KP_4, KC_KP_5, KC_KP_6,
+ KC_KP_1, KC_KP_2, KC_KP_3,
+ LOW, KC_KP_0, HIGH
+ ),
+ /*
+ * High Layer (Work)
+ */
+ [_HL] = LAYOUT(
+ KC_NUMLOCK, KC_PAST, KC_NO,
+ KC_PMNS, KC_PENT, KC_PPLS,
+ KC_NO, KC_PSLS, KC_NO,
+ KC_NO, KC_PDOT, KC_NO
+ ),
+ /*
+ * Low Layer (Media)
+ */
+ [_LL] = LAYOUT(
+ KC_NO, KC_VOLU, KC_NO,
+ KC_MPRV, KC_MPLY, KC_MNXT,
+ KC_NO, KC_VOLD, KC_NO,
+ KC_NO, KC_NO, KC_NO
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case HIGH:
+ if (record->event.pressed) {
+ layer_on(_HL);
+ }else{
+ layer_off(_HL);
+ layer_off(_LL);
+ }
+ return false;
+ break;
+ case LOW:
+ if (record->event.pressed) {
+ layer_on(_LL);
+ }else{
+ layer_off(_LL);
+ layer_off(_HL);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/puck/puck.c b/keyboards/puck/puck.c
new file mode 100644
index 000000000..0e26b9c3c
--- /dev/null
+++ b/keyboards/puck/puck.c
@@ -0,0 +1 @@
+#include "puck.h"
diff --git a/keyboards/puck/puck.h b/keyboards/puck/puck.h
new file mode 100644
index 000000000..0f2a284a6
--- /dev/null
+++ b/keyboards/puck/puck.h
@@ -0,0 +1,18 @@
+#ifndef PUCK_H
+#define PUCK_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, \
+ K03, K04, K05, \
+ K06, K07, K08, \
+ K09, K0A, K0B \
+) { \
+ { K00, K01, K02 }, \
+ { K03, K04, K05 }, \
+ { K06, K07, K08 }, \
+ { K09, K0A, K0B }, \
+}
+
+#endif
diff --git a/keyboards/puck/readme.md b/keyboards/puck/readme.md
new file mode 100644
index 000000000..fe1bd1668
--- /dev/null
+++ b/keyboards/puck/readme.md
@@ -0,0 +1,13 @@
+# Puck
+
+A 4x3 macropad.
+
+Keyboard Maintainer: [John Pettigrew](https://github.com/john-pettigrew)
+Hardware Supported: Puck PCB
+Hardware Availability: [OKKeebs.com](https://okkeebs.com/products/puck-pcb)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make puck: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/puck/rules.mk b/keyboards/puck/rules.mk
new file mode 100644
index 000000000..48144534d
--- /dev/null
+++ b/keyboards/puck/rules.mk
@@ -0,0 +1,68 @@
+
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+BOOTLOADER = halfkay
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# 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/quefrency/i2c.c b/keyboards/quefrency/i2c.c
deleted file mode 100644
index 084c890c4..000000000
--- a/keyboards/quefrency/i2c.c
+++ /dev/null
@@ -1,162 +0,0 @@
-#include <util/twi.h>
-#include <avr/io.h>
-#include <stdlib.h>
-#include <avr/interrupt.h>
-#include <util/twi.h>
-#include <stdbool.h>
-#include "i2c.h"
-
-#ifdef USE_I2C
-
-// Limits the amount of we wait for any one i2c transaction.
-// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
-// 9 bits, a single transaction will take around 90μs to complete.
-//
-// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
-// poll loop takes at least 8 clock cycles to execute
-#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
-
-#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
-
-volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-static volatile uint8_t slave_buffer_pos;
-static volatile bool slave_has_register_set = false;
-
-// Wait for an i2c operation to finish
-inline static
-void i2c_delay(void) {
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-
- // easier way, but will wait slightly longer
- // _delay_us(100);
-}
-
-// Setup twi to run at 100kHz
-void i2c_master_init(void) {
- // no prescaler
- TWSR = 0;
- // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
- // Check datasheets for more info.
- TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
-}
-
-// Start a transaction with the given i2c slave address. The direction of the
-// transfer is set with I2C_READ and I2C_WRITE.
-// returns: 0 => success
-// 1 => error
-uint8_t i2c_master_start(uint8_t address) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
-
- i2c_delay();
-
- // check that we started successfully
- if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
- return 1;
-
- TWDR = address;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
- return 1; // slave did not acknowledge
- else
- return 0; // success
-}
-
-
-// Finish the i2c transaction.
-void i2c_master_stop(void) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
-
- uint16_t lim = 0;
- while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
- lim++;
-}
-
-// Write one byte to the i2c slave.
-// returns 0 => slave ACK
-// 1 => slave NACK
-uint8_t i2c_master_write(uint8_t data) {
- TWDR = data;
- TWCR = (1<<TWINT) | (1<<TWEN);
-
- i2c_delay();
-
- // check if the slave acknowledged us
- return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
-}
-
-// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
-// if ack=0 the acknowledge bit is not set.
-// returns: byte read from i2c device
-uint8_t i2c_master_read(int ack) {
- TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
-
- i2c_delay();
- return TWDR;
-}
-
-void i2c_reset_state(void) {
- TWCR = 0;
-}
-
-void i2c_slave_init(uint8_t address) {
- TWAR = address << 0; // slave i2c address
- // TWEN - twi enable
- // TWEA - enable address acknowledgement
- // TWINT - twi interrupt flag
- // TWIE - enable the twi interrupt
- TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
-}
-
-ISR(TWI_vect);
-
-ISR(TWI_vect) {
- uint8_t ack = 1;
- switch(TW_STATUS) {
- case TW_SR_SLA_ACK:
- // this device has been addressed as a slave receiver
- slave_has_register_set = false;
- break;
-
- case TW_SR_DATA_ACK:
- // this device has received data as a slave receiver
- // The first byte that we receive in this transaction sets the location
- // of the read/write location of the slaves memory that it exposes over
- // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
- // slave_buffer_pos after each write.
- if(!slave_has_register_set) {
- slave_buffer_pos = TWDR;
- // don't acknowledge the master if this memory loctaion is out of bounds
- if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
- ack = 0;
- slave_buffer_pos = 0;
- }
- slave_has_register_set = true;
- } else {
- i2c_slave_buffer[slave_buffer_pos] = TWDR;
- BUFFER_POS_INC();
- }
- break;
-
- case TW_ST_SLA_ACK:
- case TW_ST_DATA_ACK:
- // master has addressed this device as a slave transmitter and is
- // requesting data.
- TWDR = i2c_slave_buffer[slave_buffer_pos];
- BUFFER_POS_INC();
- break;
-
- case TW_BUS_ERROR: // something went wrong, reset twi state
- TWCR = 0;
- default:
- break;
- }
- // Reset everything, so we are ready for the next TWI interrupt
- TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
-}
-#endif
diff --git a/keyboards/quefrency/i2c.h b/keyboards/quefrency/i2c.h
deleted file mode 100644
index c15b6bc50..000000000
--- a/keyboards/quefrency/i2c.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef I2C_H
-#define I2C_H
-
-#include <stdint.h>
-
-#ifndef F_CPU
-#define F_CPU 16000000UL
-#endif
-
-#define I2C_READ 1
-#define I2C_WRITE 0
-
-#define I2C_ACK 1
-#define I2C_NACK 0
-
-#define SLAVE_BUFFER_SIZE 0x10
-
-// i2c SCL clock frequency
-#define SCL_CLOCK 400000L
-
-extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
-
-void i2c_master_init(void);
-uint8_t i2c_master_start(uint8_t address);
-void i2c_master_stop(void);
-uint8_t i2c_master_write(uint8_t data);
-uint8_t i2c_master_read(int);
-void i2c_reset_state(void);
-void i2c_slave_init(uint8_t address);
-
-
-static inline unsigned char i2c_start_read(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_READ);
-}
-
-static inline unsigned char i2c_start_write(unsigned char addr) {
- return i2c_master_start((addr << 1) | I2C_WRITE);
-}
-
-// from SSD1306 scrips
-extern unsigned char i2c_rep_start(unsigned char addr);
-extern void i2c_start_wait(unsigned char addr);
-extern unsigned char i2c_readAck(void);
-extern unsigned char i2c_readNak(void);
-extern unsigned char i2c_read(unsigned char ack);
-
-#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
-
-#endif
diff --git a/keyboards/quefrency/info.json b/keyboards/quefrency/info.json
index f63cd1f6c..160e7896b 100644
--- a/keyboards/quefrency/info.json
+++ b/keyboards/quefrency/info.json
@@ -2,7 +2,7 @@
"keyboard_name": "Quefrency",
"url": "https://keeb.io",
"maintainer": "nooges",
- "width": 16,
+ "width": 17,
"height": 5,
"layouts": {
"LAYOUT": {
@@ -72,17 +72,103 @@
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"Alt", "x":1.25, "y":4, "w":1.25},
- {"label":"GUI", "x":2.5, "y":4, "w":1.25},
+ {"label":"Win", "x":2.5, "y":4, "w":1.25},
{"label":"Fn", "x":3.75, "y":4, "w":1.25},
{"label":"Space", "x":5, "y":4, "w":2.25},
- {"label":"Backspace", "x":8.25, "y":4, "w":2.75},
+ {"label":"Fn", "x":8.25, "y":4, "w":1.25},
+ {"label":"Space", "x":9.5, "y":4, "w":1.5},
{"label":"Alt", "x":11, "y":4},
{"label":"Ctrl", "x":12, "y":4},
{"label":"Left", "x":13, "y":4},
{"label":"Down", "x":14, "y":4},
{"label":"Right", "x":15, "y":4}
]
- }
+ },
+ "LAYOUT_65": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"6", "x":6, "y":0},
+
+ {"label":"7", "x":8, "y":0},
+ {"label":"8", "x":9, "y":0},
+ {"label":"9", "x":10, "y":0},
+ {"label":"0", "x":11, "y":0},
+ {"label":"-", "x":12, "y":0},
+ {"label":"=", "x":13, "y":0},
+ {"label":"Del", "x":14, "y":0},
+ {"label":"Bksp", "x":15, "y":0},
+ {"label":"Home", "x":16, "y":0},
+
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+
+ {"label":"Y", "x":7.5, "y":1},
+ {"label":"U", "x":8.5, "y":1},
+ {"label":"I", "x":9.5, "y":1},
+ {"label":"O", "x":10.5, "y":1},
+ {"label":"P", "x":11.5, "y":1},
+ {"label":"[", "x":12.5, "y":1},
+ {"label":"]", "x":13.5, "y":1},
+ {"label":"Backslash", "x":14.5, "y":1, "w":1.5},
+ {"label":"End", "x":16, "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":7.75, "y":2},
+ {"label":"J", "x":8.75, "y":2},
+ {"label":"K", "x":9.75, "y":2},
+ {"label":"L", "x":10.75, "y":2},
+ {"label":";", "x":11.75, "y":2},
+ {"label":"'", "x":12.75, "y":2},
+ {"label":"Enter", "x":13.75, "y":2, "w":2.25},
+ {"label":"Page Up", "x":16, "y":2},
+
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+
+ {"label":"N", "x":8.25, "y":3},
+ {"label":"M", "x":9.25, "y":3},
+ {"label":",", "x":10.25, "y":3},
+ {"label":".", "x":11.25, "y":3},
+ {"label":"/", "x":12.25, "y":3},
+ {"label":"Shift", "x":13.25, "y":3, "w":1.75},
+ {"label":"Up", "x":15, "y":3},
+ {"label":"Page Down", "x":16, "y":3},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Alt", "x":1.25, "y":4, "w":1.25},
+ {"label":"Win", "x":2.5, "y":4, "w":1.25},
+ {"label":"Fn", "x":3.75, "y":4, "w":1.25},
+ {"label":"Space", "x":5, "y":4, "w":2.25},
+
+ {"label":"Fn", "x":8.25, "y":4, "w":1.25},
+ {"label":"Space", "x":9.5, "y":4, "w":1.5},
+ {"label":"Alt", "x":11, "y":4},
+ {"label":"Ctrl", "x":12, "y":4},
+ {"label":"Win", "x":13, "y":4},
+ {"label":"Left", "x":14, "y":4},
+ {"label":"Down", "x":15, "y":4},
+ {"label":"Right", "x":16, "y":4}
+ ]
+ }
}
}
diff --git a/keyboards/quefrency/keymaps/bjohnson/config.h b/keyboards/quefrency/keymaps/bjohnson/config.h
new file mode 100644
index 000000000..37c6d6672
--- /dev/null
+++ b/keyboards/quefrency/keymaps/bjohnson/config.h
@@ -0,0 +1,41 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+#define TAPPING_TERM 500
+
+#define IGNORE_MOD_TAP_INTERRUPT
+#define PERMISSIVE_HOLD
+#define FORCE_NKRO
+#define RETRO_TAPPING
+
+#define TAPPING_TOGGLE 1
+
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
+
+#define RGBLIGHT_SLEEP
diff --git a/keyboards/quefrency/keymaps/bjohnson/keymap.c b/keyboards/quefrency/keymaps/bjohnson/keymap.c
new file mode 100644
index 000000000..434a0a305
--- /dev/null
+++ b/keyboards/quefrency/keymaps/bjohnson/keymap.c
@@ -0,0 +1,33 @@
+#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 _BASE 0
+#define _FN1 1
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_65(
+ 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, XXXXXXX, 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_DEL, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_INS, \
+ KC_LCTL, KC_LGUI, KC_LALT, LT(_FN1,KC_SPC),KC_SPC, KC_SPC, XXXXXXX, KC_RALT, KC_RGUI, XXXXXXX, KC_APP, KC_RCTL, TT(_FN1)
+ ),
+
+ [_FN1] = LAYOUT_65(
+ KC_TILD, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_BSPC, KC_PGUP, \
+ _______, _______, KC_UP, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, _______, _______, _______, _______, KC_PGDN, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, KC_P4, KC_P5, KC_P6, _______, _______, _______, _______, \
+ _______, RGB_MOD, RGB_HUI, RGB_HUD, _______, _______, _______, KC_P1, KC_P2, KC_P3, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, KC_P0, XXXXXXX, _______, _______, XXXXXXX, _______, _______, _______
+ )
+};
diff --git a/keyboards/quefrency/keymaps/bjohnson/rules.mk b/keyboards/quefrency/keymaps/bjohnson/rules.mk
new file mode 100644
index 000000000..70fa71100
--- /dev/null
+++ b/keyboards/quefrency/keymaps/bjohnson/rules.mk
@@ -0,0 +1,22 @@
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = 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 = 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 = yes # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+SPLIT_KEYBOARD = yes
diff --git a/keyboards/quefrency/keymaps/bramver/README.md b/keyboards/quefrency/keymaps/bramver/README.md
new file mode 100644
index 000000000..76310ed73
--- /dev/null
+++ b/keyboards/quefrency/keymaps/bramver/README.md
@@ -0,0 +1,61 @@
+# Quefrency Layout - initial 60%
+
+Standard qwerty layout.
+Limited emoji support and proper mouse settings.
+
+Mostly based off of my other XD75 and Nyquist layouts.
+
+## Keymap
+
+```
+/* 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_DEL , KC_BSPC , \
+ * KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , /**/ KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC , KC_RBRC , KC_BSLS , \
+ * MO_EMOJ , KC_A , KC_S , KC_D , KC_F , KC_G , /**/ KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT , KC_ENT , \
+ * KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , /**/ KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT , KC_UP , \
+ * KC_LCTL , KC_LALT , KC_LGUI , MO_SYMB , SP_LMS , /**/ SP_RMS , KC_BSPC , KC_RGUI , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT
+ *
+ */
+
+/* LMSE
+ *
+ * _______ , _______ , _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ * _______ , KC_WH_L , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_U , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ * _______ , KC_WH_R , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_D , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ ,\
+ * _______ , _______ , KC_PGDN , KC_PGUP , KC_END , KC_HOME , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ * _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______
+ *
+ */
+
+/* RMSE
+ *
+ * _______ , _______ , _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ * _______ , _______ , _______ , _______ , _______ , _______ , /**/ KC_WH_U , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_L , _______ , _______ , _______ , \
+ * _______ , _______ , _______ , _______ , _______ , _______ , /**/ KC_WH_D , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_R , _______ , _______ ,\
+ * _______ , _______ , _______ , _______ , _______ , _______ , /**/ KC_HOME , KC_END , KC_PGUP , KC_PGDN , _______ , _______ , _______ , \
+ * _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______
+ *
+ */
+
+/* SYMB
+ *
+ * KC_GESC , KC_F1 , KC_F12 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , /**/ KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_DEL , KC_BSPC , \
+ * _______ , _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ * _______ , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , /**/ KC_CIRC , KC_AMPR , KC_ASTR , KC_LPRN , KC_RPRN , _______ , _______ ,\
+ * _______ , _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ * _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______
+ *
+ */
+
+/* EMOJ
+ *
+ * _______ , _______ , _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ * _______ , X(CLAP) , X(CUM) , X(BNIS) , X(BUTT) , X(CAR) , /**/ X(FIRE) , X(REDB) , X(MONY) , X(HNDR) , X(SOS) , _______ , _______ , _______ , \
+ * _______ , X(CELE) , X(PRAY) , X(NAIL) , X(OK) , X(THNK) , /**/ X(UNAM) , X(HEYE) , X(COOL) , X(EYES) , X(SMIR) , _______ , _______ ,\
+ * _______ , X(TRIU) , X(SCRM) , X(VOMI) , X(DTIV) , X(EXPL) , /**/ X(HAIR) , X(DANC) , X(STRN) , X(LEFT) , X(RGHT) , _______ , _______ , \
+ * _______ , _______ , _______ , _______ , _______ , /**/ _______ , _______ , _______ , _______ , _______ , _______ , _______
+ *
+ */
+
+``` \ No newline at end of file
diff --git a/keyboards/quefrency/keymaps/bramver/config.h b/keyboards/quefrency/keymaps/bramver/config.h
new file mode 100644
index 000000000..c908386e2
--- /dev/null
+++ b/keyboards/quefrency/keymaps/bramver/config.h
@@ -0,0 +1,31 @@
+/* Copyright 2018 darm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define USE_SERIAL
+#define MASTER_LEFT
+
+#define TAPPING_TERM 200
+#define TAPPING_TOGGLE 2
+
+#define MOUSEKEY_DELAY 0
+#define MOUSEKEY_INTERVAL 16
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_WHEEL_MAX_SPEED 8
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
+#define MOUSEKEY_WHEEL_DELAY 0
diff --git a/keyboards/quefrency/keymaps/bramver/keymap.c b/keyboards/quefrency/keymaps/bramver/keymap.c
new file mode 100644
index 000000000..527f5de04
--- /dev/null
+++ b/keyboards/quefrency/keymaps/bramver/keymap.c
@@ -0,0 +1,134 @@
+#include QMK_KEYBOARD_H
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+};
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+#define _BASE 0
+#define _LMSE 1
+#define _RMSE 2
+#define _SYMB 3
+#define _EMOJ 4
+
+#define SP_LMS LT(_LMSE, KC_SPC)
+#define SP_RMS LT(_RMSE, KC_SPC)
+#define MO_SYMB TT(_SYMB)
+#define MO_EMOJ TT(_EMOJ)
+
+
+enum emoji_map {
+ UNAM, // unamused 😒
+ HEYE, // smiling face with heart shaped eyes 😍
+ OK, // ok hand sign 👌
+ SMIR, // smirk 😏
+ PRAY, // pray 🙏
+ CELE, // celebration 🙌
+ COOL, // smile with sunglasses 😎
+ EYES, // eyes
+ THNK, // BIG THONK
+ NAIL, // Nailcare
+ SOS, // Vuile sos
+ REDB, // Red B
+ HNDR, // 100
+ MONY,
+ FIRE,
+ CAR,
+ BUTT,
+ BNIS,
+ CUM,
+ CLAP,
+ TRIU, // Fart from nose
+ SCRM,
+ VOMI,
+ DTIV, // Detective
+ EXPL, // Brainsplosion
+ HAIR, // Haircut
+ DANC, // Salsa dancer
+ STRN, // Stronk
+ LEFT, // Point Left
+ RGHT, // Point Right
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+ [UNAM] = 0x1F612,
+ [HEYE] = 0x1f60d,
+ [OK] = 0x1F44C,
+ [SMIR] = 0x1F60F,
+ [PRAY] = 0x1F64F,
+ [CELE] = 0x1F64C,
+ [COOL] = 0x1F60E,
+ [EYES] = 0x1F440,
+ [THNK] = 0x1F914,
+ [NAIL] = 0x1F485,
+ [SOS] = 0x1F198,
+ [REDB] = 0x1F171,
+ [HNDR] = 0x1F4AF,
+ [MONY] = 0x1F480,
+ [FIRE] = 0x1F525,
+ [CAR] = 0x1F697,
+ [BUTT] = 0x1F351,
+ [BNIS] = 0x1F346,
+ [CUM] = 0x1F4A6,
+ [CLAP] = 0x1F44F,
+ [TRIU] = 0x1F624,
+ [SCRM] = 0x1F631,
+ [VOMI] = 0x1F92E,
+ [DTIV] = 0x1F575,
+ [EXPL] = 0x1F92F,
+ [HAIR] = 0x2640,
+ [DANC] = 0x1F483,
+ [STRN] = 0x1F4AA,
+ [LEFT] = 0x1F448,
+ [RGHT] = 0x1F449,
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT(
+ KC_GESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS , KC_EQL , KC_DEL , KC_BSPC , \
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC , KC_RBRC , KC_BSLS , \
+ MO_EMOJ , KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT , KC_ENT , \
+ KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT , KC_UP , \
+ KC_LCTL , KC_LALT , KC_LGUI , MO_SYMB , SP_LMS , SP_RMS , KC_BSPC , KC_RGUI , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT
+ ),
+
+ [_LMSE] = LAYOUT(
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ _______ , KC_WH_L , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_U , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ _______ , KC_WH_R , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_D , _______ , _______ , _______ , _______ , _______ , _______ , _______ ,\
+ _______ , _______ , KC_PGDN , KC_PGUP , KC_END , KC_HOME , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______
+ ),
+
+ [_RMSE] = LAYOUT(
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ _______ , _______ , _______ , _______ , _______ , _______ , KC_WH_U , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_L , _______ , _______ , _______ , \
+ _______ , _______ , _______ , _______ , _______ , _______ , KC_WH_D , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_R , _______ , _______ ,\
+ _______ , _______ , _______ , _______ , _______ , _______ , KC_HOME , KC_END , KC_PGUP , KC_PGDN , _______ , _______ , _______ , \
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______
+ ),
+
+ [_SYMB] = LAYOUT(
+ KC_GESC , KC_F1 , KC_F12 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_DEL , KC_BSPC , \
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ _______ , KC_EXLM , KC_AT , KC_HASH , KC_DLR , KC_PERC , KC_CIRC , KC_AMPR , KC_ASTR , KC_LPRN , KC_RPRN , _______ , _______ ,\
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______
+ ),
+
+ [_EMOJ] = LAYOUT(
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , \
+ _______ , X(CLAP) , X(CUM) , X(BNIS) , X(BUTT) , X(CAR) , X(FIRE) , X(REDB) , X(MONY) , X(HNDR) , X(SOS) , _______ , _______ , _______ , \
+ _______ , X(CELE) , X(PRAY) , X(NAIL) , X(OK) , X(THNK) , X(UNAM) , X(HEYE) , X(COOL) , X(EYES) , X(SMIR) , _______ , _______ ,\
+ _______ , X(TRIU) , X(SCRM) , X(VOMI) , X(DTIV) , X(EXPL) , X(HAIR) , X(DANC) , X(STRN) , X(LEFT) , X(RGHT) , _______ , _______ , \
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______
+ ),
+
+};
+
+void matrix_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+};
diff --git a/keyboards/quefrency/keymaps/bramver/rules.mk b/keyboards/quefrency/keymaps/bramver/rules.mk
new file mode 100644
index 000000000..d211d7b4c
--- /dev/null
+++ b/keyboards/quefrency/keymaps/bramver/rules.mk
@@ -0,0 +1,6 @@
+# Build options
+MOUSEKEY_ENABLE = yes # Emulates mouse key using keypresses
+EXTRAKEY_ENABLE = yes # Use system and audio control key codes
+TAP_DANCE_ENABLE = no # Use multi-tap features
+UNICODEMAP_ENABLE = yes # Emojify me pls
+NKRO_ENABLE = yes
diff --git a/keyboards/quefrency/keymaps/default/config.h b/keyboards/quefrency/keymaps/default/config.h
index 20e49c421..f9efe78c5 100644
--- a/keyboards/quefrency/keymaps/default/config.h
+++ b/keyboards/quefrency/keymaps/default/config.h
@@ -3,6 +3,7 @@ This is the c configuration file for the keymap
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,14 +19,9 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
/* Use I2C or Serial, not both */
#define USE_SERIAL
// #define USE_I2C
-
-#endif
diff --git a/keyboards/quefrency/keymaps/default/keymap.c b/keyboards/quefrency/keymaps/default/keymap.c
index e6aba1a27..964a997dd 100644
--- a/keyboards/quefrency/keymaps/default/keymap.c
+++ b/keyboards/quefrency/keymaps/default/keymap.c
@@ -22,7 +22,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_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL, KC_LALT, KC_LGUI, MO(_FN1),KC_SPC, KC_BSPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ KC_LCTL, KC_LALT, KC_LGUI, MO(_FN1),KC_SPC, MO(_FN1),KC_BSPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FN1] = LAYOUT(
@@ -30,6 +30,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
RGB_TOG, RGB_MOD, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
_______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______,\
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- KC_TILD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ KC_TILD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
diff --git a/keyboards/quefrency/keymaps/default65/config.h b/keyboards/quefrency/keymaps/default65/config.h
new file mode 100644
index 000000000..f9efe78c5
--- /dev/null
+++ b/keyboards/quefrency/keymaps/default65/config.h
@@ -0,0 +1,27 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
diff --git a/keyboards/quefrency/keymaps/default65/keymap.c b/keyboards/quefrency/keymaps/default65/keymap.c
new file mode 100644
index 000000000..4b07949b0
--- /dev/null
+++ b/keyboards/quefrency/keymaps/default65/keymap.c
@@ -0,0 +1,35 @@
+#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 _BASE 0
+#define _FN1 1
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+};
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_65(
+ 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_DEL, 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_LALT, KC_LGUI, MO(_FN1),KC_SPC, MO(_FN1),KC_SPC, KC_RALT, KC_RCTL, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_FN1] = LAYOUT_65(
+ KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_BSPC, _______, \
+ RGB_TOG, RGB_MOD, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_TILD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/quefrency/keymaps/default65/rules.mk b/keyboards/quefrency/keymaps/default65/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/quefrency/keymaps/default65/rules.mk
diff --git a/keyboards/quefrency/matrix.c b/keyboards/quefrency/matrix.c
deleted file mode 100644
index fdeead7dc..000000000
--- a/keyboards/quefrency/matrix.c
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-/*
- * scan matrix
- */
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include "wait.h"
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-#include "split_util.h"
-#include "pro_micro.h"
-#include "config.h"
-#include "timer.h"
-#include "backlight.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else // USE_SERIAL
-# include "serial.h"
-#endif
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-
-#if (DEBOUNCING_DELAY > 0)
- static uint16_t debouncing_time;
- static bool debouncing = false;
-#endif
-
-#if (MATRIX_COLS <= 8)
-# define print_matrix_header() print("\nr/c 01234567\n")
-# define print_matrix_row(row) print_bin_reverse8(matrix_get_row(row))
-# define matrix_bitpop(i) bitpop(matrix[i])
-# define ROW_SHIFTER ((uint8_t)1)
-#else
-# error "Currently only supports 8 COLS"
-#endif
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-#define ERROR_DISCONNECT_COUNT 5
-
-#define SERIAL_LED_ADDR 0x00
-
-#define ROWS_PER_HAND (MATRIX_ROWS/2)
-
-static uint8_t error_count = 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];
-
-#if (DIODE_DIRECTION == COL2ROW)
- static void init_cols(void);
- static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row);
- static void unselect_rows(void);
- static void select_row(uint8_t row);
- static void unselect_row(uint8_t row);
-#elif (DIODE_DIRECTION == ROW2COL)
- static void init_rows(void);
- static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col);
- static void unselect_cols(void);
- static void unselect_col(uint8_t col);
- static void select_col(uint8_t col);
-#endif
-
-__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;
-
- // initialize matrix state: all keys off
- for (uint8_t i=0; i < MATRIX_ROWS; i++) {
- matrix[i] = 0;
- matrix_debouncing[i] = 0;
- }
-
- matrix_init_quantum();
-
-}
-
-uint8_t _matrix_scan(void)
-{
- int offset = isLeftHand ? 0 : (ROWS_PER_HAND);
-#if (DIODE_DIRECTION == COL2ROW)
- // Set row, read cols
- for (uint8_t current_row = 0; current_row < ROWS_PER_HAND; current_row++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_cols_on_row(matrix_debouncing+offset, current_row);
-
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-
-# else
- read_cols_on_row(matrix+offset, current_row);
-# endif
-
- }
-
-#elif (DIODE_DIRECTION == ROW2COL)
- // Set col, read rows
- for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
-# if (DEBOUNCING_DELAY > 0)
- bool matrix_changed = read_rows_on_col(matrix_debouncing+offset, current_col);
- if (matrix_changed) {
- debouncing = true;
- debouncing_time = timer_read();
- }
-# else
- read_rows_on_col(matrix+offset, current_col);
-# endif
-
- }
-#endif
-
-# if (DEBOUNCING_DELAY > 0)
- if (debouncing && (timer_elapsed(debouncing_time) > DEBOUNCING_DELAY)) {
- for (uint8_t i = 0; i < ROWS_PER_HAND; i++) {
- matrix[i+offset] = matrix_debouncing[i+offset];
- }
- debouncing = false;
- }
-# endif
-
- return 1;
-}
-
-#ifdef USE_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(void) {
- int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
-
- if (serial_update_buffers()) {
- return 1;
- }
-
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- matrix[slaveOffset+i] = serial_slave_buffer[i];
- }
-
-#ifdef BACKLIGHT_ENABLE
- // Write backlight level for slave to read
- serial_master_buffer[SERIAL_LED_ADDR] = get_backlight_level();
-#endif
- return 0;
-}
-#endif
-
-uint8_t matrix_scan(void)
-{
- uint8_t ret = _matrix_scan();
-
-#ifdef USE_I2C
- if( i2c_transaction() ) {
-#else // USE_SERIAL
- if( serial_transaction() ) {
-#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_I2C
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- i2c_slave_buffer[i] = matrix[offset+i];
- }
-#else // USE_SERIAL
- for (int i = 0; i < ROWS_PER_HAND; ++i) {
- serial_slave_buffer[i] = matrix[offset+i];
- }
-
-#ifdef BACKLIGHT_ENABLE
- // Read backlight level sent from master and update level on slave
- backlight_set(serial_master_buffer[SERIAL_LED_ADDR]);
-#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;
-}
-
-#if (DIODE_DIRECTION == COL2ROW)
-
-static void init_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
-{
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[current_row];
-
- // Clear data in matrix row
- current_matrix[current_row] = 0;
-
- // Select row and wait for row selecton to stabilize
- select_row(current_row);
- wait_us(30);
-
- // For each col...
- for(uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
-
- // Select the col pin to read (active low)
- uint8_t pin = col_pins[col_index];
- uint8_t pin_state = (_SFR_IO8(pin >> 4) & _BV(pin & 0xF));
-
- // Populate the matrix row with the state of the col pin
- current_matrix[current_row] |= pin_state ? 0 : (ROW_SHIFTER << col_index);
- }
-
- // Unselect row
- unselect_row(current_row);
-
- return (last_row_value != current_matrix[current_row]);
-}
-
-static void select_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_row(uint8_t row)
-{
- uint8_t pin = row_pins[row];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#elif (DIODE_DIRECTION == ROW2COL)
-
-static void init_rows(void)
-{
- for(uint8_t x = 0; x < ROWS_PER_HAND; x++) {
- uint8_t pin = row_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
-{
- bool matrix_changed = false;
-
- // Select col and wait for col selecton to stabilize
- select_col(current_col);
- wait_us(30);
-
- // For each row...
- for(uint8_t row_index = 0; row_index < ROWS_PER_HAND; row_index++)
- {
-
- // Store last value of row prior to reading
- matrix_row_t last_row_value = current_matrix[row_index];
-
- // Check row pin state
- if ((_SFR_IO8(row_pins[row_index] >> 4) & _BV(row_pins[row_index] & 0xF)) == 0)
- {
- // Pin LO, set col bit
- current_matrix[row_index] |= (ROW_SHIFTER << current_col);
- }
- else
- {
- // Pin HI, clear col bit
- current_matrix[row_index] &= ~(ROW_SHIFTER << current_col);
- }
-
- // Determine if the matrix changed state
- if ((last_row_value != current_matrix[row_index]) && !(matrix_changed))
- {
- matrix_changed = true;
- }
- }
-
- // Unselect col
- unselect_col(current_col);
-
- return matrix_changed;
-}
-
-static void select_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) |= _BV(pin & 0xF); // OUT
- _SFR_IO8((pin >> 4) + 2) &= ~_BV(pin & 0xF); // LOW
-}
-
-static void unselect_col(uint8_t col)
-{
- uint8_t pin = col_pins[col];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
-}
-
-static void unselect_cols(void)
-{
- for(uint8_t x = 0; x < MATRIX_COLS; x++) {
- uint8_t pin = col_pins[x];
- _SFR_IO8((pin >> 4) + 1) &= ~_BV(pin & 0xF); // IN
- _SFR_IO8((pin >> 4) + 2) |= _BV(pin & 0xF); // HI
- }
-}
-
-#endif
diff --git a/keyboards/quefrency/readme.md b/keyboards/quefrency/readme.md
index 33681c1a7..8fb1c6bc1 100644
--- a/keyboards/quefrency/readme.md
+++ b/keyboards/quefrency/readme.md
@@ -15,6 +15,8 @@ Example of flashing this keyboard:
make quefrency/rev1:default:avrdude
+Handedness detection is already hardwired onto the PCB, so no need to deal with `EE_HANDS` or flashing .eep files.
+
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
A build guide for this keyboard can be found here: [Keebio Build Guides](https://docs.keeb.io)
diff --git a/keyboards/quefrency/rev1/config.h b/keyboards/quefrency/rev1/config.h
index c24cf5ab3..88d704486 100644
--- a/keyboards/quefrency/rev1/config.h
+++ b/keyboards/quefrency/rev1/config.h
@@ -16,10 +16,9 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef REV1_CONFIG_H
-#define REV1_CONFIG_H
+#pragma once
-#include "../config.h"
+#include QMK_KEYBOARD_CONFIG_H
/* USB Device descriptor parameter */
#define VENDOR_ID 0xCB10
@@ -27,23 +26,24 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0100
#define MANUFACTURER Keebio
#define PRODUCT Quefrency
-#define DESCRIPTION Split 60 percent staggered keyboard
+#define DESCRIPTION Split 60/65 percent staggered keyboard
/* key matrix size */
// Rows are doubled-up
-#define MATRIX_ROWS 10
+#define MATRIX_ROWS 12
#define MATRIX_COLS 8
// wiring of each half
-#define MATRIX_ROW_PINS { F4, D4, D7, E6, B4 }
+#define MATRIX_ROW_PINS { F4, D4, D7, E6, B4, B5 }
#define MATRIX_COL_PINS { F5, F6, F7, B1, B3, B2, B6, C6 }
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
+#define SPLIT_HAND_PIN D2
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -56,29 +56,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 16 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
-
-/*
- * 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
-
-
-#endif
diff --git a/keyboards/quefrency/rev1/rev1.c b/keyboards/quefrency/rev1/rev1.c
index 06fbfa25e..a690a7eff 100644
--- a/keyboards/quefrency/rev1/rev1.c
+++ b/keyboards/quefrency/rev1/rev1.c
@@ -1,7 +1,5 @@
#include "quefrency.h"
-
void matrix_init_kb(void) {
matrix_init_user();
};
-
diff --git a/keyboards/quefrency/rev1/rev1.h b/keyboards/quefrency/rev1/rev1.h
index 44476354b..c7dcaa9fe 100644
--- a/keyboards/quefrency/rev1/rev1.h
+++ b/keyboards/quefrency/rev1/rev1.h
@@ -1,7 +1,6 @@
-#ifndef REV1_H
-#define REV1_H
+#pragma once
-#include "../quefrency.h"
+#include "quefrency.h"
#include "quantum.h"
@@ -19,7 +18,7 @@
LB1, LB2, LB3, LB4, LB5, LB6, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, \
LC1, LC2, LC3, LC4, LC5, LC6, RC1, RC2, RC3, RC4, RC5, RC6, RC8, \
LD1, LD3, LD4, LD5, LD6, LD7, RD1, RD2, RD3, RD4, RD6, RD7, RD8, \
- LE1, LE2, LE3, LE5, LE7, RE1, RE4, RE5, RE6, RE7, RE8 \
+ LE1, LE2, LE3, LE5, LE7, RE1, RE2, RE4, RE5, RE6, RE7, RE8 \
) \
{ \
{ LA1, LA2, LA3, LA4, LA5, LA6, LA7, KC_NO }, \
@@ -27,11 +26,33 @@
{ LC1, LC2, LC3, LC4, LC5, LC6, KC_NO, KC_NO }, \
{ LD1, KC_NO, LD3, LD4, LD5, LD6, LD7, KC_NO }, \
{ LE1, LE2, LE3, KC_NO, LE5, KC_NO, LE7, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8 }, \
{ RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8 }, \
{ RC1, RC2, RC3, RC4, RC5, RC6, KC_NO, RC8 }, \
{ RD1, RD2, RD3, RD4, KC_NO, RD6, RD7, RD8 }, \
- { RE1, KC_NO, KC_NO, RE4, RE5, RE6, RE7, RE8 } \
+ { RE1, RE2, KC_NO, RE4, RE5, RE6, RE7, RE8 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO } \
}
-#endif
+#define LAYOUT_65( \
+ LA1, LA2, LA3, LA4, LA5, LA6, LA7, RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8, RA9, \
+ LB1, LB2, LB3, LB4, LB5, LB6, RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8, RB9, \
+ LC1, LC2, LC3, LC4, LC5, LC6, RC1, RC2, RC3, RC4, RC5, RC6, RC8, RC9, \
+ LD1, LD3, LD4, LD5, LD6, LD7, RD1, RD2, RD3, RD4, RD6, RD7, RD8, RD9, \
+ LE1, LE2, LE3, LE5, LE7, RE1, RE2, RE4, RE5, RE6, RE7, RE8, RE9 \
+ ) \
+ { \
+ { LA1, LA2, LA3, LA4, LA5, LA6, LA7, KC_NO }, \
+ { LB1, LB2, LB3, LB4, LB5, LB6, KC_NO, KC_NO }, \
+ { LC1, LC2, LC3, LC4, LC5, LC6, KC_NO, KC_NO }, \
+ { LD1, KC_NO, LD3, LD4, LD5, LD6, LD7, KC_NO }, \
+ { LE1, LE2, LE3, KC_NO, LE5, KC_NO, LE7, KC_NO }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { RA1, RA2, RA3, RA4, RA5, RA6, RA7, RA8 }, \
+ { RB1, RB2, RB3, RB4, RB5, RB6, RB7, RB8 }, \
+ { RC1, RC2, RC3, RC4, RC5, RC6, RC9, RC8 }, \
+ { RD1, RD2, RD3, RD4, RD9, RD6, RD7, RD8 }, \
+ { RE1, RE2, RE9, RE4, RE5, RE6, RE7, RE8 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RA9, RB9 } \
+ }
diff --git a/keyboards/quefrency/rules.mk b/keyboards/quefrency/rules.mk
index 93ccd2b05..3ec04fbf1 100644
--- a/keyboards/quefrency/rules.mk
+++ b/keyboards/quefrency/rules.mk
@@ -1,48 +1,7 @@
-SRC += matrix.c \
- i2c.c \
- split_util.c \
- serial.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)
@@ -63,12 +22,12 @@ 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 this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = yes
USE_I2C = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-CUSTOM_MATRIX = yes
+SPLIT_KEYBOARD = yes
DEFAULT_FOLDER = quefrency/rev1
diff --git a/keyboards/quefrency/serial.c b/keyboards/quefrency/serial.c
deleted file mode 100644
index 74bcbb6bf..000000000
--- a/keyboards/quefrency/serial.c
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * WARNING: be careful changing this code, it is very timing dependent
- */
-
-#ifndef F_CPU
-#define F_CPU 16000000
-#endif
-
-#include <avr/io.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <stdbool.h>
-#include "serial.h"
-
-#ifndef USE_I2C
-
-// Serial pulse period in microseconds. Its probably a bad idea to lower this
-// value.
-#define SERIAL_DELAY 24
-
-uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
-uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
-
-#define SLAVE_DATA_CORRUPT (1<<0)
-volatile uint8_t status = 0;
-
-inline static
-void serial_delay(void) {
- _delay_us(SERIAL_DELAY);
-}
-
-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(void) {
- SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-inline static
-uint8_t serial_read_pin(void) {
- return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
-}
-
-inline static
-void serial_low(void) {
- SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
-}
-
-inline static
-void serial_high(void) {
- SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
-}
-
-void serial_master_init(void) {
- serial_output();
- serial_high();
-}
-
-void serial_slave_init(void) {
- serial_input();
-
- // Enable INT0
- EIMSK |= _BV(INT0);
- // Trigger on falling edge of INT0
- EICRA &= ~(_BV(ISC00) | _BV(ISC01));
-}
-
-// Used by the master to synchronize timing with the slave.
-static
-void sync_recv(void) {
- serial_input();
- // This shouldn't hang if the slave disconnects because the
- // serial line will float to high if the slave does disconnect.
- while (!serial_read_pin());
- serial_delay();
-}
-
-// Used by the slave to send a synchronization signal to the master.
-static
-void sync_send(void) {
- serial_output();
-
- serial_low();
- serial_delay();
-
- serial_high();
-}
-
-// Reads a byte from the serial line
-static
-uint8_t serial_read_byte(void) {
- uint8_t byte = 0;
- serial_input();
- for ( uint8_t i = 0; i < 8; ++i) {
- byte = (byte << 1) | serial_read_pin();
- serial_delay();
- _delay_us(1);
- }
-
- return byte;
-}
-
-// Sends a byte with MSB ordering
-static
-void serial_write_byte(uint8_t data) {
- uint8_t b = 8;
- serial_output();
- while( b-- ) {
- if(data & (1 << b)) {
- serial_high();
- } else {
- serial_low();
- }
- serial_delay();
- }
-}
-
-// interrupt handle to be used by the slave device
-ISR(SERIAL_PIN_INTERRUPT) {
- sync_send();
-
- uint8_t checksum = 0;
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_slave_buffer[i]);
- sync_send();
- checksum += serial_slave_buffer[i];
- }
- serial_write_byte(checksum);
- sync_send();
-
- // wait for the sync to finish sending
- serial_delay();
-
- // read the middle of pulses
- _delay_us(SERIAL_DELAY/2);
-
- uint8_t checksum_computed = 0;
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_master_buffer[i] = serial_read_byte();
- sync_send();
- checksum_computed += serial_master_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_send();
-
- serial_input(); // end transaction
-
- if ( checksum_computed != checksum_received ) {
- status |= SLAVE_DATA_CORRUPT;
- } else {
- status &= ~SLAVE_DATA_CORRUPT;
- }
-}
-
-inline
-bool serial_slave_DATA_CORRUPT(void) {
- return status & SLAVE_DATA_CORRUPT;
-}
-
-// Copies the serial_slave_buffer to the master and sends the
-// serial_master_buffer to the slave.
-//
-// Returns:
-// 0 => no error
-// 1 => slave did not respond
-int serial_update_buffers(void) {
- // this code is very time dependent, so we need to disable interrupts
- cli();
-
- // signal to the slave that we want to start a transaction
- serial_output();
- serial_low();
- _delay_us(1);
-
- // wait for the slaves response
- serial_input();
- serial_high();
- _delay_us(SERIAL_DELAY);
-
- // check if the slave is present
- if (serial_read_pin()) {
- // slave failed to pull the line low, assume not present
- sei();
- return 1;
- }
-
- // if the slave is present syncronize with it
- sync_recv();
-
- uint8_t checksum_computed = 0;
- // receive data from the slave
- for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
- serial_slave_buffer[i] = serial_read_byte();
- sync_recv();
- checksum_computed += serial_slave_buffer[i];
- }
- uint8_t checksum_received = serial_read_byte();
- sync_recv();
-
- if (checksum_computed != checksum_received) {
- sei();
- return 1;
- }
-
- uint8_t checksum = 0;
- // send data to the slave
- for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
- serial_write_byte(serial_master_buffer[i]);
- sync_recv();
- checksum += serial_master_buffer[i];
- }
- serial_write_byte(checksum);
- sync_recv();
-
- // always, release the line when not in use
- serial_output();
- serial_high();
-
- sei();
- return 0;
-}
-
-#endif
diff --git a/keyboards/quefrency/serial.h b/keyboards/quefrency/serial.h
deleted file mode 100644
index 15fe4db7b..000000000
--- a/keyboards/quefrency/serial.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef MY_SERIAL_H
-#define MY_SERIAL_H
-
-#include "config.h"
-#include <stdbool.h>
-
-/* TODO: some defines for interrupt setup */
-#define SERIAL_PIN_DDR DDRD
-#define SERIAL_PIN_PORT PORTD
-#define SERIAL_PIN_INPUT PIND
-#define SERIAL_PIN_MASK _BV(PD0)
-#define SERIAL_PIN_INTERRUPT INT0_vect
-
-#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
-#define SERIAL_MASTER_BUFFER_LENGTH 1
-
-// Buffers for master - slave communication
-extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
-extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
-
-void serial_master_init(void);
-void serial_slave_init(void);
-int serial_update_buffers(void);
-bool serial_slave_data_corrupt(void);
-
-#endif
diff --git a/keyboards/quefrency/split_util.c b/keyboards/quefrency/split_util.c
deleted file mode 100644
index 2704e30e0..000000000
--- a/keyboards/quefrency/split_util.c
+++ /dev/null
@@ -1,80 +0,0 @@
-#include <avr/io.h>
-#include <avr/wdt.h>
-#include <avr/power.h>
-#include <avr/interrupt.h>
-#include <util/delay.h>
-#include <avr/eeprom.h>
-#include "split_util.h"
-#include "matrix.h"
-#include "keyboard.h"
-#include "config.h"
-#include "timer.h"
-#include "pincontrol.h"
-
-#ifdef USE_I2C
-# include "i2c.h"
-#else
-# include "serial.h"
-#endif
-
-volatile bool isLeftHand = true;
-
-static void setup_handedness(void) {
- // Test D2 pin for handedness, if D2 is grounded, it's the right hand
- pinMode(D2, PinDirectionInput);
- isLeftHand = digitalRead(D2);
-}
-
-static void keyboard_master_setup(void) {
-#ifdef USE_I2C
- i2c_master_init();
-#ifdef SSD1306OLED
- matrix_master_OLED_init();
-#endif
-#else
- serial_master_init();
-#endif
-}
-
-static void keyboard_slave_setup(void) {
- timer_init();
-#ifdef USE_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();
-}
-
-void keyboard_slave_loop(void) {
- matrix_init();
-
- while (1) {
- matrix_slave_scan();
- }
-}
-
-// this code runs before the usb and keyboard is initialized
-void matrix_setup(void) {
- split_keyboard_setup();
-
- if (!has_usb()) {
- keyboard_slave_loop();
- }
-}
diff --git a/keyboards/quefrency/split_util.h b/keyboards/quefrency/split_util.h
deleted file mode 100644
index 595a0659e..000000000
--- a/keyboards/quefrency/split_util.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#ifndef SPLIT_KEYBOARD_UTIL_H
-#define SPLIT_KEYBOARD_UTIL_H
-
-#include <stdbool.h>
-#include "eeconfig.h"
-
-#define SLAVE_I2C_ADDRESS 0x32
-
-extern volatile bool isLeftHand;
-
-// slave version of matix scan, defined in matrix.c
-void matrix_slave_scan(void);
-
-void split_keyboard_setup(void);
-bool has_usb(void);
-void keyboard_slave_loop(void);
-
-void matrix_master_OLED_init (void);
-
-#endif
diff --git a/keyboards/qwertyydox/config.h b/keyboards/qwertyydox/config.h
new file mode 100644
index 000000000..a68565223
--- /dev/null
+++ b/keyboards/qwertyydox/config.h
@@ -0,0 +1,91 @@
+/*
+Copyright 2018 Ayden <aydenvis@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef REV1_CONFIG_H
+#define REV1_CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCEEB
+#define PRODUCT_ID 0x1256
+#define DEVICE_VER 0x0100
+#define MANUFACTURER AYDENandDAD Youtube
+#define PRODUCT QWERTYYdox
+#define DESCRIPTION Split 45 percent ergonomic keyboard with two Y keys
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 7
+
+// wiring of each half
+#define MATRIX_ROW_PINS { B6, B2, B3, B1 }
+#define MATRIX_COL_PINS { F7, F6, F5, C6, D7, D4, D1 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define BACKLIGHT_PIN E6
+#define BACKLIGHT_LEVELS 5
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D6
+
+#define RGBLED_NUM 12 // Number of LEDs
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/qwertyydox/info.json b/keyboards/qwertyydox/info.json
new file mode 100644
index 000000000..0b762388e
--- /dev/null
+++ b/keyboards/qwertyydox/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "QWERTYYdox",
+ "manufacturer": "aydenvis",
+ "identifier": "0x1256",
+ "url": "",
+ "maintainer": "qmk",
+ "processor": "atmega32u4",
+ "width": 14,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 53,
+ "layout": [{"label":"L00", "x":0, "y":0.375}, {"label":"L01", "x":1, "y":0.25}, {"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.5}, {"label":"R00", "x":9, "y":0.5}, {"label":"R01", "x":10, "y":0.25}, {"label":"R02", "x":11, "y":0.125}, {"label":"R03", "x":12, "y":0}, {"label":"R04", "x":13, "y":0.125}, {"label":"R05", "x":14, "y":0.25}, {"label":"R06", "x":15, "y":0.375}, {"label":"L10", "x":0, "y":1.375}, {"label":"L11", "x":1, "y":1.25}, {"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.5}, {"label":"R10", "x":9, "y":1.5}, {"label":"R11", "x":10, "y":1.25}, {"label":"R12", "x":11, "y":1.125}, {"label":"R13", "x":12, "y":1}, {"label":"R14", "x":13, "y":1.125}, {"label":"R15", "x":14, "y":1.25}, {"label":"R16", "x":15, "y":1.375}, {"label":"L20", "x":0, "y":2.375}, {"label":"L21", "x":1, "y":2.25}, {"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.5, "y":3}, {"label":"R20", "x":8.5, "y":3}, {"label":"R21", "x":10, "y":2.25}, {"label":"R22", "x":11, "y":2.125}, {"label":"R23", "x":12, "y":2}, {"label":"R24", "x":13, "y":2.125}, {"label":"R25", "x":14, "y":2.25}, {"label":"R26", "x":15, "y":2.375}, {"label":"L30", "x":0, "y":3.375}, {"label":"L31", "x":1, "y":3.25}, {"label":"L32", "x":2, "y":3.125}, {"label":"L33", "x":3, "y":3}, {"label":"L34", "x":5.5, "y":4}, {"label":"L35", "x":6.5, "y":4}, {"label":"R30", "x":8.5, "y":4}, {"label":"R31", "x":9.5, "y":4}, {"label":"R32", "x":12, "y":3}, {"label":"R33", "x":13, "y":3.125}, {"label":"R34", "x":14, "y":3.25}, {"label":"R35", "x":15, "y":3.375}]
+ }
+ }
+}
diff --git a/keyboards/qwertyydox/keymaps/default/config.h b/keyboards/qwertyydox/keymaps/default/config.h
new file mode 100644
index 000000000..6b4e3fe96
--- /dev/null
+++ b/keyboards/qwertyydox/keymaps/default/config.h
@@ -0,0 +1,43 @@
+/*
+Copyright 2018 Ayden <aydenvis@gmail.com
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+
+// #define MASTER_LEFT
+#define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 12
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+
+#define MOUSEKEY_DELAY 150
+#define MOUSEKEY_INTERVAL 20
+#define MOUSEKEY_MAX_SPEED 10
+#define MOUSEKEY_TIME_TO_MAX 10
+#define MOUSEKEY_WHEEL_MAX_SPEED 8
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 40 \ No newline at end of file
diff --git a/keyboards/qwertyydox/keymaps/default/keymap.c b/keyboards/qwertyydox/keymaps/default/keymap.c
new file mode 100644
index 000000000..5967c5146
--- /dev/null
+++ b/keyboards/qwertyydox/keymaps/default/keymap.c
@@ -0,0 +1,83 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+#define _QWERTY 0
+#define _NUM 1
+#define _NAV 2
+enum custom_keycodes {
+ qwerty = SAFE_RANGE,
+ nav,
+ num,
+ EQL
+};
+
+// #define KC_ KC_TRNS
+#define __ KC_NO
+#define NAV TO(2)
+#define NUM TO(1)
+#define ALPHA TO(0)
+#define NPLUS KC_KP_PLUS
+#define NMINUS KC_KP_MINUS
+#define NSTAR KC_KP_ASTERISK
+#define NSLASH KC_KP_SLASH
+
+
+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_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, __, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LCTL, KC_LGUI, KC_LALT, qwerty, KC_ENT, KC_DEL, NUM, NAV, KC_SPC, KC_BSPC, KC_LEFT, KC_RALT, KC_RGUI, KC_RCTL
+ //`--------+--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------+--------'
+ ),
+
+ [_NUM] = 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_NO,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_NO,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, __, KC_NO, KC_PPLS, KC_PMNS, EQL, KC_PAST, KC_PSLS,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_LCTL, KC_ESC, KC_NO, num, KC_ENT, KC_LSFT, NAV, ALPHA, KC_SPC, KC_BSPC, KC_LEFT, KC_RALT, KC_RGUI, KC_RCTL
+ //`--------+--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------+--------'
+ ),
+
+ [_NAV] = LAYOUT(
+ //,--------+--------+--------+--------+--------+--------+--------. ,--------+--------+--------+--------+--------+--------+--------.
+ KC_ESC, KC_NO, KC_ACL0, KC_ACL1, KC_ACL2, KC_WH_L, KC_WH_R, KC_ESC, KC_NO, KC_UP, NSLASH, NSTAR, NMINUS, NPLUS,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_WH_U, KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT,KC_NO, KC_NO, KC_NO,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_INS, KC_HOME, KC_PGUP, KC_BTN1, KC_BTN2, KC_WH_D, __, KC_MS_L, KC_MS_U, KC_MS_D, KC_MS_R, KC_NO, KC_NO,
+ //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
+ KC_DEL, KC_END, KC_PGDN, nav, KC_LCTL, KC_SPC, ALPHA, NUM, KC_LSFT, KC_BSPC, KC_NO, KC_NO, KC_NO, RESET
+ //`--------+--------+--------+--------+--------+--------+--------/ \--------+--------+--------+--------+--------+--------+--------'
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case qwerty:
+ SEND_STRING("-QWERTY");
+ return false;
+ case nav:
+ SEND_STRING("-NAV"); // selects all and copies
+ return false;
+ case num:
+ SEND_STRING("-NUM"); // selects all and copies
+ return false;
+ case EQL:
+ SEND_STRING("="); // selects all and copies
+ return false;
+ }
+ }
+ return true;
+};
diff --git a/keyboards/qwertyydox/keymaps/default/rules.mk b/keyboards/qwertyydox/keymaps/default/rules.mk
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/keyboards/qwertyydox/keymaps/default/rules.mk
@@ -0,0 +1 @@
+
diff --git a/keyboards/qwertyydox/qwertyydox.c b/keyboards/qwertyydox/qwertyydox.c
new file mode 100644
index 000000000..53c3eca64
--- /dev/null
+++ b/keyboards/qwertyydox/qwertyydox.c
@@ -0,0 +1 @@
+#include "qwertyydox.h"
diff --git a/keyboards/qwertyydox/qwertyydox.h b/keyboards/qwertyydox/qwertyydox.h
new file mode 100644
index 000000000..57bd0dc54
--- /dev/null
+++ b/keyboards/qwertyydox/qwertyydox.h
@@ -0,0 +1,24 @@
+#ifndef QWERTYYDOX_H
+#define QWERTYYDOX_H
+
+#ifdef KEYBOARD_qwertyydox_rev1
+ #include "rev1.h"
+#endif
+
+#include "quantum.h"
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) \
+ LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##L06, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, KC_##R06, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##L16, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, KC_##R16, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##L26, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, KC_##R26, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \
+ )
+
+#endif \ No newline at end of file
diff --git a/keyboards/qwertyydox/readme.md b/keyboards/qwertyydox/readme.md
new file mode 100644
index 000000000..1fa984e03
--- /dev/null
+++ b/keyboards/qwertyydox/readme.md
@@ -0,0 +1,27 @@
+QWERTYYdox
+====
+
+![QWERTYYdox](https://imgur.com/gallery/Pwwb0Q0)
+
+
+A split ergo 4x7 keyboard with 3 thumb keys and 2 Y keys.
+
+**Status** The QWERTYYdox is a personal project, however it is completely functional.
+
+Keyboard Maintainer: /u/aydenvis
+
+Hardware Supported: Pro Micro (ATmega32U4)
+
+Hardware Availability: The whole thing is handwired with plates cut by [/u/JOlimon](stratakb.com)
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make qwertyydox/rev1:default
+
+Example of flashing this keyboard:
+
+ make qwertyydox/rev1:default:avrdude
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
diff --git a/keyboards/qwertyydox/rev1/config.h b/keyboards/qwertyydox/rev1/config.h
new file mode 100644
index 000000000..a2557592d
--- /dev/null
+++ b/keyboards/qwertyydox/rev1/config.h
@@ -0,0 +1,92 @@
+/*
+Copyright 2018 Ayden <aydenvis@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef REV1_CONFIG_H
+#define REV1_CONFIG_H
+
+#include QMK_KEYBOARD_CONFIG_H
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCEEB
+#define PRODUCT_ID 0x1256
+#define DEVICE_VER 0x0100
+#define MANUFACTURER AYDENandDAD
+#define PRODUCT QWERTYdox Keyboard
+#define DESCRIPTION Split 40 percent keyboard
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 7
+
+// wiring of each half
+#define MATRIX_ROW_PINS { B6, B2, B3, B1 }
+#define MATRIX_COL_PINS { F7, F6, F5, C6, D7, D4, D1 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define BACKLIGHT_PIN E6
+#define BACKLIGHT_LEVELS 5
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D6
+
+#define RGBLED_NUM 12 // Number of LEDs
+
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/qwertyydox/rev1/rev1.c b/keyboards/qwertyydox/rev1/rev1.c
new file mode 100644
index 000000000..609c479eb
--- /dev/null
+++ b/keyboards/qwertyydox/rev1/rev1.c
@@ -0,0 +1,22 @@
+#include "rev1.h"
+
+
+#ifdef SSD1306OLED
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+ led_set_user(usb_led);
+}
+#endif
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
diff --git a/keyboards/qwertyydox/rev1/rev1.h b/keyboards/qwertyydox/rev1/rev1.h
new file mode 100644
index 000000000..d620e6210
--- /dev/null
+++ b/keyboards/qwertyydox/rev1/rev1.h
@@ -0,0 +1,37 @@
+#ifndef REV1_H
+#define REV1_H
+
+#include "qwertyydox.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, R26, \
+ L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05, L06 }, \
+ { L10, L11, L12, L13, L14, L15, KC_NO }, \
+ { L20, L21, L22, L23, L24, L25, KC_NO }, \
+ { L30, L31, L32, L33, L34, L35, L36 }, \
+ { R06, R05, R04, R03, R02, R01, R00 }, \
+ { R16, R15, R14, R13, R12, R11, R10 }, \
+ { R26, R25, R24, R23, R22, R21, R20, }, \
+ { R36, R35, R34, R33, R32, R31, R30 } \
+ }
+
+#endif
diff --git a/keyboards/qwertyydox/rev1/rules.mk b/keyboards/qwertyydox/rev1/rules.mk
new file mode 100644
index 000000000..7b30c0bef
--- /dev/null
+++ b/keyboards/qwertyydox/rev1/rules.mk
@@ -0,0 +1 @@
+BACKLIGHT_ENABLE = no
diff --git a/keyboards/qwertyydox/rules.mk b/keyboards/qwertyydox/rules.mk
new file mode 100644
index 000000000..8c6171bc0
--- /dev/null
+++ b/keyboards/qwertyydox/rules.mk
@@ -0,0 +1,69 @@
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# 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 = 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 = 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.
+SUBPROJECT_rev1 = yes
+USE_I2C = yes # I2C is used between the sides
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = qwertyydox/rev1
diff --git a/keyboards/rama/m10_b/config.h b/keyboards/rama/m10_b/config.h
index de626dba5..144f88d56 100644
--- a/keyboards/rama/m10_b/config.h
+++ b/keyboards/rama/m10_b/config.h
@@ -26,7 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define DEVICE_VER 0x0001
#define MANUFACTURER RAMA.WORKS
#define PRODUCT RAMA M10-B
-#define DESCRIPTION RAMA M10-B Macropad
+#define DESCRIPTION RAMA M10-B
/* key matrix size */
#define MATRIX_ROWS 1
@@ -186,4 +186,26 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
//#define MIDI_TONE_KEYCODE_OCTAVES 1
+//#define WT_MONO_BACKLIGHT
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*10*2)) = (35+80)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 115
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 909
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+
#endif
diff --git a/keyboards/rama/m10_b/keymaps/default/keymap.c b/keyboards/rama/m10_b/keymaps/default/keymap.c
index 8002b8c7c..c307bcb2a 100644
--- a/keyboards/rama/m10_b/keymaps/default/keymap.c
+++ b/keyboards/rama/m10_b/keymaps/default/keymap.c
@@ -6,21 +6,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_KP_7, KC_KP_8, KC_KP_9, KC_KP_4, KC_KP_5, KC_KP_6, KC_KP_1, KC_KP_2, KC_KP_3, KC_KP_0 )
};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- return MACRO_NONE;
-}
-
-void matrix_init_user(void)
-{
-}
-
-void matrix_scan_user(void)
-{
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record)
-{
- return true;
-}
diff --git a/keyboards/rama/m10_b/keymaps/knops/config.h b/keyboards/rama/m10_b/keymaps/knops/config.h
index d150575c1..7c3ec9601 100644
--- a/keyboards/rama/m10_b/keymaps/knops/config.h
+++ b/keyboards/rama/m10_b/keymaps/knops/config.h
@@ -19,6 +19,7 @@
#include "../../config.h"
-// place overrides here
+#undef RAW_ENABLE
+#undef DYNAMIC_KEYMAP_ENABLE
#endif
diff --git a/keyboards/rama/m10_b/m10_b.c b/keyboards/rama/m10_b/m10_b.c
index f43f6e2a1..ccff6d62c 100644
--- a/keyboards/rama/m10_b/m10_b.c
+++ b/keyboards/rama/m10_b/m10_b.c
@@ -1,4 +1,4 @@
-/* Copyright 2018 Wilba
+/* Copyright 2018 Jason Williams (Wilba)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -13,32 +13,5 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "m10_b.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);
-}
-*/
+// Nothing to see here, move along... ;-)
diff --git a/keyboards/rama/m10_b/rules.mk b/keyboards/rama/m10_b/rules.mk
index 24df4632d..70258b9ea 100644
--- a/keyboards/rama/m10_b/rules.mk
+++ b/keyboards/rama/m10_b/rules.mk
@@ -1,5 +1,7 @@
+# project specific files
+SRC = keyboards/wilba_tech/wt_main.c
+
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -39,30 +41,28 @@ F_USB = $(F_CPU)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
+# Boot Section
+BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE ?= no # USB Nkey Rollover
-BACKLIGHT_ENABLE ?= yes # Enable keyboard backlight functionality on B7 by default
-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
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
diff --git a/keyboards/rama/m60_a/config.h b/keyboards/rama/m60_a/config.h
new file mode 100644
index 000000000..01cfe05a5
--- /dev/null
+++ b/keyboards/rama/m60_a/config.h
@@ -0,0 +1,131 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "config_common.h"
+
+// USB Device descriptor parameter
+#define VENDOR_ID 0x5241 // "RW"
+#define PRODUCT_ID 0x060A // 60-A
+#define DEVICE_VER 0x0001
+#define MANUFACTURER RAMA.WORKS
+#define PRODUCT RAMA M60-A
+#define DESCRIPTION RAMA M60-A Keyboard
+
+
+
+// key matrix size
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+// M60-A PCB default pin-out
+#define MATRIX_ROW_PINS { F0, F1, F4, F6, F7 }
+#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6 }
+#define UNUSED_PINS
+
+// IS31FL3731 driver
+#define DRIVER_COUNT 2
+#define DRIVER_LED_TOTAL 72
+
+// COL2ROW or ROW2COL
+#define DIODE_DIRECTION COL2ROW
+
+// Set 0 if debouncing isn't needed
+#define DEBOUNCING_DELAY 5
+
+// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
+#define LOCKING_SUPPORT_ENABLE
+// Locking resynchronize hack
+#define LOCKING_RESYNC_ENABLE
+
+// key combination for command
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+// disable debug print
+//#define NO_DEBUG
+
+// disable print
+//#define NO_PRINT
+
+// disable action features
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#define RGB_BACKLIGHT_ENABLED 1
+
+// This conditionally compiles the backlight code for M60-A specifics
+#define RGB_BACKLIGHT_M60_A
+
+// enable/disable LEDs based on layout
+// they aren't really used if RGB_BACKLIGHT_M60_A defined
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 1
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 1
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 1
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 1
+
+// disable backlight when USB suspended (PC sleep/hibernate/shutdown)
+#define RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED 0
+
+// disable backlight after timeout in minutes, 0 = no timeout
+#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 0
+
+// the default effect (RGB test)
+#define RGB_BACKLIGHT_EFFECT 255
+
+// These define which keys in the matrix are alphas/mods
+// Used for backlight effects so colors are different for
+// alphas vs. mods
+// Each value is for a row, bit 0 is column 0
+// Alpha=0 Mod=1
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_0 0b0000000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0b0010000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0b0011000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0b0011000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0b0011100000000111
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Backlight config starts after EEPROM version
+#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35
+// Dynamic keymap starts after backlight config (35+31)
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 66
+// Dynamic macro starts after dynamic keymaps (66+(4*5*14*2)) = (66+560)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 626
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 398
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/rama/m60_a/info.json b/keyboards/rama/m60_a/info.json
new file mode 100644
index 000000000..577becd21
--- /dev/null
+++ b/keyboards/rama/m60_a/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "M60-A",
+ "url": "",
+ "maintainer": "Wilba",
+ "bootloader": "DFU",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_hhkb": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/rama/m60_a/keymaps/default/keymap.c b/keyboards/rama/m60_a/keymaps/default/keymap.c
new file mode 100644
index 000000000..7b6d9b756
--- /dev/null
+++ b/keyboards/rama/m60_a/keymaps/default/keymap.c
@@ -0,0 +1,40 @@
+// M60-A layout
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_60_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FN_MO13,
+ KC_LGUI, KC_LALT, KC_SPC, KC_RALT, FN_MO23),
+
+// Fn1 Layer
+[1] = LAYOUT_60_hhkb(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_60_hhkb(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = LAYOUT_60_hhkb(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
+
+
diff --git a/keyboards/rama/m60_a/keymaps/proto/config.h b/keyboards/rama/m60_a/keymaps/proto/config.h
new file mode 100644
index 000000000..54a185ff1
--- /dev/null
+++ b/keyboards/rama/m60_a/keymaps/proto/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+// This fixes the diodes mounted reversed (fab fail) on M60-A prototype
+#undef DIODE_DIRECTION
+#define DIODE_DIRECTION ROW2COL
diff --git a/keyboards/rama/m60_a/keymaps/proto/keymap.c b/keyboards/rama/m60_a/keymaps/proto/keymap.c
new file mode 100644
index 000000000..7b6d9b756
--- /dev/null
+++ b/keyboards/rama/m60_a/keymaps/proto/keymap.c
@@ -0,0 +1,40 @@
+// M60-A layout
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_60_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FN_MO13,
+ KC_LGUI, KC_LALT, KC_SPC, KC_RALT, FN_MO23),
+
+// Fn1 Layer
+[1] = LAYOUT_60_hhkb(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_60_hhkb(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = LAYOUT_60_hhkb(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
+
+
diff --git a/keyboards/rama/m60_a/m60_a.c b/keyboards/rama/m60_a/m60_a.c
new file mode 100644
index 000000000..80a98460d
--- /dev/null
+++ b/keyboards/rama/m60_a/m60_a.c
@@ -0,0 +1,18 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef RGB_BACKLIGHT_M60_A
+#error RGB_BACKLIGHT_M60_A not defined, you done goofed somehao, brah
+#endif
diff --git a/keyboards/rama/m60_a/m60_a.h b/keyboards/rama/m60_a/m60_a.h
new file mode 100644
index 000000000..3caab6ac0
--- /dev/null
+++ b/keyboards/rama/m60_a/m60_a.h
@@ -0,0 +1,37 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+#include "../../zeal60/rgb_backlight_keycodes.h"
+#include "../../zeal60/zeal60_keycodes.h"
+
+#define XXX KC_NO
+
+#define LAYOUT_60_hhkb( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K41, K42, K47, K4B, K4C \
+) { \
+ { 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 }, \
+ { XXX, K41, K42, XXX, XXX, XXX, XXX, K47, XXX, XXX, XXX, K4B, K4C, XXX } \
+}
+
diff --git a/keyboards/rama/m60_a/readme.md b/keyboards/rama/m60_a/readme.md
new file mode 100644
index 000000000..fe54f0163
--- /dev/null
+++ b/keyboards/rama/m60_a/readme.md
@@ -0,0 +1,15 @@
+# RAMA M60-A
+
+![RAMA M60-A](https://static1.squarespace.com/static/563c788ae4b099120ae219e2/t/5aafa6a20e2e7254480b21bf/1535873164793/RAMA-M60-A-03.688.jpg?format=1500w)
+
+The M60-A represents the benchmark and equilibrium between function and design for us at Rama Works. The gently exaggerated design of the frame is not understated, but rather provocative. Inspiration and evolution from previous models are evident in the beautifully articulated design and the well defined aesthetic, the fingerprint of our 'Industrial Modern' designs. The M60-A offers a unique contender in the traditional 60% form factor. [More info at RAMA WORKS](https://rama.works/m60-a/)
+
+Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
+Hardware Supported: RAMA M60-A PCB
+Hardware Availability: [RAMA WORKS Store](https://ramaworks.store/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rama/m60_a: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/rama/m60_a/rules.mk b/keyboards/rama/m60_a/rules.mk
new file mode 100644
index 000000000..09ed03e95
--- /dev/null
+++ b/keyboards/rama/m60_a/rules.mk
@@ -0,0 +1,80 @@
+
+
+# project specific files
+SRC = keyboards/zeal60/zeal60.c \
+ keyboards/zeal60/rgb_backlight.c \
+ quantum/color.c \
+ drivers/issi/is31fl3731.c \
+ drivers/avr/i2c_master.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = yes
+
+LAYOUTS = 60_hhkb
diff --git a/keyboards/rama/m6_a/config.h b/keyboards/rama/m6_a/config.h
index 0c5355f4a..049749bd7 100644
--- a/keyboards/rama/m6_a/config.h
+++ b/keyboards/rama/m6_a/config.h
@@ -1,22 +1,19 @@
-/*
-Copyright 2018 Wilba
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
#include "config_common.h"
@@ -48,7 +45,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
#define DIODE_DIRECTION COL2ROW
-
+
// #define BACKLIGHT_PIN B7
// #define BACKLIGHT_BREATHING
// #define BACKLIGHT_LEVELS 3
@@ -110,81 +107,29 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* control how magic key switches layers */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
-
-/* override magic key keymap */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
-//#define MAGIC_KEY_HELP1 H
-//#define MAGIC_KEY_HELP2 SLASH
-//#define MAGIC_KEY_DEBUG D
-//#define MAGIC_KEY_DEBUG_MATRIX X
-//#define MAGIC_KEY_DEBUG_KBD K
-//#define MAGIC_KEY_DEBUG_MOUSE M
-//#define MAGIC_KEY_VERSION V
-//#define MAGIC_KEY_STATUS S
-//#define MAGIC_KEY_CONSOLE C
-//#define MAGIC_KEY_LAYER0_ALT1 ESC
-//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
-//#define MAGIC_KEY_LAYER0 0
-//#define MAGIC_KEY_LAYER1 1
-//#define MAGIC_KEY_LAYER2 2
-//#define MAGIC_KEY_LAYER3 3
-//#define MAGIC_KEY_LAYER4 4
-//#define MAGIC_KEY_LAYER5 5
-//#define MAGIC_KEY_LAYER6 6
-//#define MAGIC_KEY_LAYER7 7
-//#define MAGIC_KEY_LAYER8 8
-//#define MAGIC_KEY_LAYER9 9
-//#define MAGIC_KEY_BOOTLOADER PAUSE
-//#define MAGIC_KEY_LOCK CAPS
-//#define MAGIC_KEY_EEPROM E
-//#define MAGIC_KEY_NKRO N
-//#define MAGIC_KEY_SLEEP_LED Z
+#define RGB_BACKLIGHT_ENABLED 0
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
-/* disable print */
-//#define NO_PRINT
+// EEPROM usage
-/* 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
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
-/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
-//#define MIDI_TONE_KEYCODE_OCTAVES 1
+// NOTE: M6-A doesn't use RGB backlight, but we keep this
+// consistent with M6-B which does.
-#endif
+// Backlight config starts after EEPROM version
+#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35
+// Dynamic keymap starts after backlight config (35+43)
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 78
+// Dynamic macro starts after dynamic keymaps (78+(4*6*2)) = (78+48)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 126
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 898
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/rama/m6_a/keymaps/default/config.h b/keyboards/rama/m6_a/keymaps/default/config.h
deleted file mode 100644
index d150575c1..000000000
--- a/keyboards/rama/m6_a/keymaps/default/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2018 Wilba
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-// place overrides here
-
-#endif
diff --git a/keyboards/rama/m6_a/keymaps/default/keymap.c b/keyboards/rama/m6_a/keymaps/default/keymap.c
index 6b15f3cd1..7a408fa8a 100644
--- a/keyboards/rama/m6_a/keymaps/default/keymap.c
+++ b/keyboards/rama/m6_a/keymaps/default/keymap.c
@@ -3,322 +3,14 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
LAYOUT(
- TO(1), KC_A, KC_B, KC_C, KC_D, KC_E),
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6),
LAYOUT(
- TO(2), KC_F, KC_G, KC_H, KC_I, KC_J),
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
LAYOUT(
- TO(3), KC_K, KC_L, KC_M, KC_N, KC_O),
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
LAYOUT(
- TO(4), KC_P, KC_Q, KC_R, KC_S, KC_T),
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO) };
- LAYOUT(
- TO(5), KC_U, KC_V, KC_W, KC_X, KC_Y),
-
- LAYOUT(
- TO(0), KC_Z, KC_1, KC_2, KC_3, KC_4)};
-
-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;
-}
-
-// M6-A LEDs are connected to D6, B6, F5, B4, C7, F7
-// This is 1-based because I copied it from Knops code.
-void set_switch_led(int ledId, bool state)
-{
- if (state)
- {
- switch (ledId)
- {
- case 1:
- PORTD |= (1 << 6);
- break;
- case 2:
- PORTB |= (1 << 6);
- break;
- case 3:
- PORTF |= (1 << 5);
- break;
- case 4:
- PORTB |= (1 << 4);
- break;
- case 5:
- PORTC |= (1 << 7);
- break;
- case 6:
- PORTF |= (1 << 7);
- break;
- }
- }
- else
- {
- switch (ledId)
- {
- case 1:
- PORTD &= ~(1 << 6);
- break;
- case 2:
- PORTB &= ~(1 << 6);
- break;
- case 3:
- PORTF &= ~(1 << 5);
- break;
- case 4:
- PORTB &= ~(1 << 4);
- break;
- case 5:
- PORTC &= ~(1 << 7);
- break;
- case 6:
- PORTF &= ~(1 << 7);
- break;
- }
- }
-}
-
-void set_layer_led(int layerId)
-{
- // UNUSED
-}
-
-void led_set_layer(int layer);
-
-void matrix_init_user(void)
-{
- led_init_ports();
- led_set_layer(0);
-}
-
-void matrix_scan_user(void)
-{
-}
-
-// M6-A LEDs are connected to D6, B6, F5, B4, C7, F7
-void led_init_ports()
-{
- // Switch #1
- DDRD |= (1 << 6);
- PORTD &= ~(1 << 6);
-
- // Switch #2
- DDRB |= (1 << 6);
- PORTB &= ~(1 << 6);
-
- // Switch #3
- DDRF |= (1 << 5);
- PORTF &= ~(1 << 5);
-
- // Switch #4
- DDRB |= (1 << 4);
- PORTB &= ~(1 << 4);
-
- // Switch #5
- DDRC |= (1 << 7);
- PORTC &= ~(1 << 7);
-
- // Switch #6
- DDRF |= (1 << 7);
- PORTF &= ~(1 << 7);
-}
-
-void led_set_user(uint8_t usb_led)
-{
-
- if (usb_led & (1 << USB_LED_NUM_LOCK))
- {
- }
- else
- {
- }
-
- if (usb_led & (1 << USB_LED_CAPS_LOCK))
- {
- }
- else
- {
- }
-
- if (usb_led & (1 << USB_LED_SCROLL_LOCK))
- {
- }
- else
- {
- }
-
- if (usb_led & (1 << USB_LED_COMPOSE))
- {
- }
- else
- {
- }
-
- if (usb_led & (1 << USB_LED_KANA))
- {
- }
- else
- {
- }
-}
-
-void led_set_layer(int layer)
-{
- switch (layer)
- {
- case 0:
- set_switch_led(1, true);
- set_switch_led(2, false);
- set_switch_led(3, false);
- set_switch_led(4, false);
- set_switch_led(5, false);
- set_switch_led(6, false);
- break;
- case 1:
- set_switch_led(1, false);
- set_switch_led(2, true);
- set_switch_led(3, false);
- set_switch_led(4, false);
- set_switch_led(5, false);
- set_switch_led(6, false);
- break;
- case 2:
- set_switch_led(1, false);
- set_switch_led(2, false);
- set_switch_led(3, true);
- set_switch_led(4, false);
- set_switch_led(5, false);
- set_switch_led(6, false);
- break;
- case 3:
- set_switch_led(1, false);
- set_switch_led(2, false);
- set_switch_led(3, false);
- set_switch_led(4, true);
- set_switch_led(5, false);
- set_switch_led(6, false);
- break;
- case 4:
- set_switch_led(1, false);
- set_switch_led(2, false);
- set_switch_led(3, false);
- set_switch_led(4, false);
- set_switch_led(5, true);
- set_switch_led(6, false);
- break;
- case 5:
- set_switch_led(1, false);
- set_switch_led(2, false);
- set_switch_led(3, false);
- set_switch_led(4, false);
- set_switch_led(5, false);
- set_switch_led(6, true);
- break;
- default:
- set_switch_led(1, true);
- set_switch_led(2, true);
- set_switch_led(3, true);
- set_switch_led(4, true);
- set_switch_led(5, true);
- set_switch_led(6, true);
- break;
- }
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record)
-{
- switch (keycode)
- {
- case TO(0):
- if (record->event.pressed)
- {
- led_set_layer(0);
- }
- break;
- case TO(1):
- if (record->event.pressed)
- {
- led_set_layer(1);
- }
- break;
- case TO(2):
- if (record->event.pressed)
- {
- led_set_layer(2);
- }
- break;
- case TO(3):
- if (record->event.pressed)
- {
- led_set_layer(3);
- }
- break;
- case TO(4):
- if (record->event.pressed)
- {
- led_set_layer(4);
- }
- break;
- case TO(5):
- if (record->event.pressed)
- {
- led_set_layer(5);
- }
- break;
- }
- return true;
-}
diff --git a/keyboards/rama/m6_a/m6_a.c b/keyboards/rama/m6_a/m6_a.c
index 1c84ea2b8..fa1900360 100644
--- a/keyboards/rama/m6_a/m6_a.c
+++ b/keyboards/rama/m6_a/m6_a.c
@@ -1,4 +1,4 @@
-/* Copyright 2018 Wilba
+/* Copyright 2018 Jason Williams (Wilba)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -13,32 +13,3 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "m6_a.h"
-/*
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
-
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
-
- matrix_scan_user();
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
- // put your per-action keyboard code here
- // runs for every action, just before processing by the firmware
-
- return process_record_user(keycode, record);
-}
-
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
- led_set_user(usb_led);
-}
-*/
diff --git a/keyboards/rama/m6_a/readme.md b/keyboards/rama/m6_a/readme.md
index 5dd2b92e1..ceaf6a88d 100644
--- a/keyboards/rama/m6_a/readme.md
+++ b/keyboards/rama/m6_a/readme.md
@@ -12,4 +12,4 @@ Make example for this keyboard (after setting up your build environment):
make rama/m6_a:default
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file
diff --git a/keyboards/rama/m6_a/rules.mk b/keyboards/rama/m6_a/rules.mk
index ca2a2a5f8..399e9e80d 100644
--- a/keyboards/rama/m6_a/rules.mk
+++ b/keyboards/rama/m6_a/rules.mk
@@ -1,5 +1,7 @@
+# project specific files
+SRC = keyboards/zeal60/zeal60.c
+
# MCU name
-#MCU = at90usb1286
MCU = atmega32u4
# Processor frequency.
@@ -38,31 +40,35 @@ F_USB = $(F_CPU)
# Interrupt driven control endpoint task(+60)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+# Boot Section
+BOOTLOADER = atmel-dfu
-# Boot Section Size in *bytes*
-# Teensy halfKay 512
-# Teensy++ halfKay 1024
-# Atmel DFU loader 4096
-# LUFA bootloader 4096
-# USBaspLoader 2048
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
# Build Options
# change yes to no to disable
#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= yes # Console for debug(+400)
-COMMAND_ENABLE ?= yes # Commands for debug and configuration
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE ?= no # USB Nkey Rollover
-BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality on B7 by default
-MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config)
-UNICODE_ENABLE ?= no # Unicode
-BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE ?= no # Audio output on port C6
-FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = no
+
diff --git a/keyboards/rama/m6_b/config.h b/keyboards/rama/m6_b/config.h
new file mode 100644
index 000000000..67034ef8c
--- /dev/null
+++ b/keyboards/rama/m6_b/config.h
@@ -0,0 +1,163 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x5241 // "RW"
+#define PRODUCT_ID 0x006B // 6-B
+#define DEVICE_VER 0x0001
+#define MANUFACTURER RAMA.WORKS
+#define PRODUCT RAMA M6-B
+#define DESCRIPTION RAMA M6-B Macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 6
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { E6 }
+#define MATRIX_COL_PINS { D4, B5, F4, D7, C6, F6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define RGB_BACKLIGHT_ENABLED 1
+
+// This conditionally compiles the backlight code for M6-B specifics
+#define RGB_BACKLIGHT_M6_B
+
+// enable/disable LEDs based on layout
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
+
+// disable backlight when USB suspended (PC sleep/hibernate/shutdown)
+#define RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED 0
+
+// disable backlight after timeout in minutes, 0 = no timeout
+#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 0
+
+// the default effect (RGB test)
+#define RGB_BACKLIGHT_EFFECT 255
+
+// These define which keys in the matrix are alphas/mods
+// Used for backlight effects so colors are different for
+// alphas vs. mods
+// Each value is for a row, bit 0 is column 0
+// Alpha=0 Mod=1
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_0 0
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Backlight config starts after EEPROM version
+#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35
+// Dynamic keymap starts after backlight config (35+43)
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 78
+// Dynamic macro starts after dynamic keymaps (78+(4*6*2)) = (78+48)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 126
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 898
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/rama/m6_b/info.json b/keyboards/rama/m6_b/info.json
new file mode 100644
index 000000000..c88a3cc61
--- /dev/null
+++ b/keyboards/rama/m6_b/info.json
@@ -0,0 +1,19 @@
+{
+ "keyboard_name": "m6-b",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 3,
+ "height": 2,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "x": 0, "y": 0 },
+ { "x": 1, "y": 0 },
+ { "x": 2, "y": 0 },
+ { "x": 0, "y": 1 },
+ { "x": 1, "y": 1 },
+ { "x": 2, "y": 1 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/rama/m6_b/keymaps/default/keymap.c b/keyboards/rama/m6_b/keymaps/default/keymap.c
new file mode 100644
index 000000000..7a408fa8a
--- /dev/null
+++ b/keyboards/rama/m6_b/keymaps/default/keymap.c
@@ -0,0 +1,16 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO) };
+
diff --git a/keyboards/rama/m6_b/m6_b.c b/keyboards/rama/m6_b/m6_b.c
new file mode 100644
index 000000000..581b31d75
--- /dev/null
+++ b/keyboards/rama/m6_b/m6_b.c
@@ -0,0 +1,18 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef RGB_BACKLIGHT_M6_B
+#error RGB_BACKLIGHT_M6_B not defined, you done goofed somehao, brah
+#endif
diff --git a/keyboards/rama/m6_b/m6_b.h b/keyboards/rama/m6_b/m6_b.h
new file mode 100644
index 000000000..bd4158bcb
--- /dev/null
+++ b/keyboards/rama/m6_b/m6_b.h
@@ -0,0 +1,28 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+
+// 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( \
+ K00, K01, K02, K03, K04, K05) \
+ { \
+ {K00, K01, K02, K03, K04, K05}, \
+ }
+
diff --git a/keyboards/rama/m6_b/readme.md b/keyboards/rama/m6_b/readme.md
new file mode 100644
index 000000000..d6bdd0c4c
--- /dev/null
+++ b/keyboards/rama/m6_b/readme.md
@@ -0,0 +1,15 @@
+# RAMA M6-B
+
+![RAMA M6-B](https://static1.squarespace.com/static/563c788ae4b099120ae219e2/t/59fc7b1053450adf5bf9a852/1515932239307/RAMA-RAMA-M6-DSA-XO-CAPS.73-3_1.jpg?format=1500w)
+
+A 6-key companion keyboard. [More info at RAMA WORKS](https://rama.works/m6a)
+
+Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
+Hardware Supported: RAMA M6-B PCB
+Hardware Availability: [RAMA WORKS Store](https://ramaworks.store/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rama/m6_b:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file
diff --git a/keyboards/rama/m6_b/rules.mk b/keyboards/rama/m6_b/rules.mk
new file mode 100644
index 000000000..b7a76b8dd
--- /dev/null
+++ b/keyboards/rama/m6_b/rules.mk
@@ -0,0 +1,79 @@
+# project specific files
+SRC = keyboards/zeal60/zeal60.c \
+ keyboards/zeal60/rgb_backlight.c \
+ quantum/color.c \
+ drivers/issi/is31fl3218.c \
+ drivers/avr/i2c_master.c
+
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = yes
+
diff --git a/keyboards/rama/readme.md b/keyboards/rama/readme.md
index 4625eb1ef..c7ddf6d11 100644
--- a/keyboards/rama/readme.md
+++ b/keyboards/rama/readme.md
@@ -6,4 +6,6 @@ Firmware for keyboards designed by [RAMA WORKS](https://rama.works)
[RAMA M60-A](https://rama.works/#/m60-a/)
+[RAMA U80-A](https://rama.works/#/tkl-a/)
+
[RAMA M10-B](https://www.massdrop.com/buy/rama-m10-a?mode=guest_open)
diff --git a/keyboards/rama/u80_a/config.h b/keyboards/rama/u80_a/config.h
new file mode 100644
index 000000000..c733601e1
--- /dev/null
+++ b/keyboards/rama/u80_a/config.h
@@ -0,0 +1,208 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x5241 // "RW"
+#define PRODUCT_ID 0x080A // 80-A
+#define DEVICE_VER 0x0001
+#define MANUFACTURER RAMA.WORKS
+#define PRODUCT RAMA U80-A
+#define DESCRIPTION RAMA U80-A Keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 17
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F1, F0, E6, F4, F6, F7 }
+#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4, B7, B0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION ROW2COL
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+#define WT_MONO_BACKLIGHT
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x07
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*6*17*2)) = (35+816)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 851
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 173
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/rama/u80_a/info.json b/keyboards/rama/u80_a/info.json
new file mode 100644
index 000000000..cb61c89b8
--- /dev/null
+++ b/keyboards/rama/u80_a/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "RAMA U80-A",
+ "url": "https://rama.works/#/tkl-a/",
+ "maintainer": "Wilba",
+ "bootloader": "atmel-dfu",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "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}, {"x":14, "y":1.5}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":1.75}, {"x":14, "y":4.5}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
+ }
+ }
+}
diff --git a/keyboards/rama/u80_a/keymaps/default/keymap.c b/keyboards/rama/u80_a/keymaps/default/keymap.c
new file mode 100644
index 000000000..036a57b68
--- /dev/null
+++ b/keyboards/rama/u80_a/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_TRNS, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
diff --git a/keyboards/rama/u80_a/readme.md b/keyboards/rama/u80_a/readme.md
new file mode 100644
index 000000000..c98d00cb6
--- /dev/null
+++ b/keyboards/rama/u80_a/readme.md
@@ -0,0 +1,15 @@
+# RAMA U80-A
+
+![RAMA U80-A](https://something.com/something.jpg)
+
+A TKL keyboard. [More info at RAMA WORKS](https://rama.works/#/tkl-a/)
+
+Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
+Hardware Supported: RAMA U80-A PCB
+Hardware Availability: [RAMA WORKS Store](https://ramaworks.store/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rama/u80_a: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/rama/u80_a/rules.mk b/keyboards/rama/u80_a/rules.mk
new file mode 100644
index 000000000..54479529b
--- /dev/null
+++ b/keyboards/rama/u80_a/rules.mk
@@ -0,0 +1,71 @@
+# project specific files
+SRC = drivers/issi/is31fl3736.c \
+ drivers/avr/i2c_master.c \
+ keyboards/wilba_tech/wt_mono_backlight.c \
+ keyboards/wilba_tech/wt_main.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
diff --git a/keyboards/rama/u80_a/u80_a.c b/keyboards/rama/u80_a/u80_a.c
new file mode 100644
index 000000000..ccff6d62c
--- /dev/null
+++ b/keyboards/rama/u80_a/u80_a.c
@@ -0,0 +1,17 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Nothing to see here, move along... ;-)
diff --git a/keyboards/rama/u80_a/u80_a.h b/keyboards/rama/u80_a/u80_a.h
new file mode 100644
index 000000000..26403ef34
--- /dev/null
+++ b/keyboards/rama/u80_a/u80_a.h
@@ -0,0 +1,43 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define ____ KC_NO
+
+// Right switch of split backspace is at 3,13 and is the only switch
+// whose physical position doesn't match switch matrix position :-(
+// However, it also makes no sense to view the physical as 18 columns,
+// so the numbering goes 00 to 16. Deal with it.
+
+#define LAYOUT_all( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K313, K114, K115, K116, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
+ K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K415, \
+ K500, K501, K502, K506, K510, K511, K512, K513, K514, K515, K516 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, ____, K014, K015, K016 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, ____, ____, ____ }, \
+ { K400, ____, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, ____, K415, ____ }, \
+ { K500, K501, K502, ____, ____, ____, K506, ____, ____, ____, K510, K511, K512, K513, K514, K515, K516 } \
+}
+
diff --git a/keyboards/redox/config.h b/keyboards/redox/config.h
index 1083ff5f5..96f57f25e 100644
--- a/keyboards/redox/config.h
+++ b/keyboards/redox/config.h
@@ -15,9 +15,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
-
-#endif
diff --git a/keyboards/redox/info.json b/keyboards/redox/info.json
index f75d88a6b..f91017365 100644
--- a/keyboards/redox/info.json
+++ b/keyboards/redox/info.json
@@ -6,7 +6,92 @@
"height": 6.25,
"layouts": {
"LAYOUT": {
- "layout": [{"label":"[L2] `", "x":0, "y":0.375, "w":1.25}, {"label":"!", "x":1.25, "y":0.375}, {"label":"@", "x":2.25, "y":0.125}, {"label":"#", "x":3.25, "y":0}, {"label":"$", "x":4.25, "y":0.125}, {"label":"%", "x":5.25, "y":0.25}, {"label":"[L1]", "x":6.25, "y":0.75}, {"label":"[L1]", "x":11.25, "y":0.75}, {"label":"^", "x":12.25, "y":0.25}, {"label":"&", "x":13.25, "y":0.125}, {"label":"*", "x":14.25, "y":0}, {"label":"(", "x":15.25, "y":0.125}, {"label":")", "x":16.25, "y":0.375}, {"label":"[L2] -", "x":17.25, "y":0.375, "w":1.25}, {"label":"Tab", "x":0, "y":1.375, "w":1.25}, {"label":"Q", "x":1.25, "y":1.375}, {"label":"W", "x":2.25, "y":1.125}, {"label":"E", "x":3.25, "y":1}, {"label":"R", "x":4.25, "y":1.125}, {"label":"T", "x":5.25, "y":1.25}, {"label":"[", "x":6.25, "y":1.75, "h":1.5}, {"label":"]", "x":11.25, "y":1.75, "h":1.5}, {"label":"Y", "x":12.25, "y":1.25}, {"label":"U", "x":13.25, "y":1.125}, {"label":"I", "x":14.25, "y":1}, {"label":"O", "x":15.25, "y":1.125}, {"label":"P", "x":16.25, "y":1.375}, {"label":"=", "x":17.25, "y":1.375, "w":1.25}, {"label":"Esc", "x":0, "y":2.375, "w":1.25}, {"label":"A", "x":1.25, "y":2.375}, {"label":"S", "x":2.25, "y":2.125}, {"label":"D", "x":3.25, "y":2}, {"label":"F", "x":4.25, "y":2.125}, {"label":"G", "x":5.25, "y":2.25}, {"label":"PgUp", "x":6.75, "y":3.75}, {"label":"End", "x":10.75, "y":3.75}, {"label":"H", "x":12.25, "y":2.25}, {"label":"J", "x":13.25, "y":2.125}, {"label":"K", "x":14.25, "y":2}, {"label":"L", "x":15.25, "y":2.125}, {"label":":", "x":16.25, "y":2.375}, {"label":"'", "x":17.25, "y":2.375, "w":1.25}, {"label":"Shift", "x":0, "y":3.375, "w":1.25}, {"label":"Z", "x":1.25, "y":3.375}, {"label":"X", "x":2.25, "y":3.125}, {"label":"C", "x":3.25, "y":3}, {"label":"V", "x":4.25, "y":3.125}, {"label":"B", "x":5.25, "y":3.25}, {"label":"PgDn", "x":7.75, "y":3.75}, {"label":"Home", "x":9.75, "y":3.75}, {"label":"N", "x":12.25, "y":3.25}, {"label":"M", "x":13.25, "y":3.125}, {"label":"<", "x":14.25, "y":3}, {"label":">", "x":15.25, "y":3.125}, {"label":"?", "x":16.25, "y":3.375}, {"label":"Shift", "x":17.25, "y":3.375, "w":1.25}, {"label":"GUI", "x":0.25, "y":4.375}, {"label":"+", "x":1.25, "y":4.375}, {"label":"-", "x":2.25, "y":4.125}, {"label":"[Alt] *", "x":3.25, "y":4}, {"label":"[Ctrl] /", "x":5.5, "y":5.25, "w":1.25}, {"label":"Backspace", "x":6.75, "y":4.75, "h":1.5}, {"label":"Del", "x":7.75, "y":4.75, "h":1.5}, {"label":"Enter", "x":9.75, "y":4.75, "h":1.5}, {"label":"Space", "x":10.75, "y":4.75, "h":1.5}, {"label":"Alt", "x":11.75, "y":5.25, "w":1.25}, {"label":"Left", "x":14.25, "y":4}, {"label":"Down", "x":15.25, "y":4.125}, {"label":"Up", "x":16.25, "y":4.375}, {"label":"Right", "x":17.25, "y":4.375}]
+ "layout": [
+ {"label":"_Nav || `", "x":0, "y":0.375, "w":1.25},
+ {"label":"1", "x":1.25, "y":0.375},
+ {"label":"2", "x":2.25, "y":0.125},
+ {"label":"3", "x":3.25, "y":0},
+ {"label":"4", "x":4.25, "y":0.125},
+ {"label":"5", "x":5.25, "y":0.25},
+
+ {"label":"6", "x":12.25, "y":0.25},
+ {"label":"7", "x":13.25, "y":0.125},
+ {"label":"8", "x":14.25, "y":0},
+ {"label":"9", "x":15.25, "y":0.125},
+ {"label":"0", "x":16.25, "y":0.375},
+ {"label":"_Nav || -", "x":17.25, "y":0.375, "w":1.25},
+
+ {"label":"Tab", "x":0, "y":1.375, "w":1.25},
+ {"label":"Q", "x":1.25, "y":1.375},
+ {"label":"W", "x":2.25, "y":1.125},
+ {"label":"E", "x":3.25, "y":1},
+ {"label":"R", "x":4.25, "y":1.125},
+ {"label":"T", "x":5.25, "y":1.25},
+ {"label":"MO(_SYMB)", "x":6.25, "y":0.75},
+
+ {"label":"MO(_SYMB)", "x":11.25, "y":0.75},
+ {"label":"Y", "x":12.25, "y":1.25},
+ {"label":"U", "x":13.25, "y":1.125},
+ {"label":"I", "x":14.25, "y":1},
+ {"label":"O", "x":15.25, "y":1.125},
+ {"label":"P", "x":16.25, "y":1.375},
+ {"label":"=", "x":17.25, "y":1.375, "w":1.25},
+
+ {"label":"Esc", "x":0, "y":2.375, "w":1.25},
+ {"label":"A", "x":1.25, "y":2.375},
+ {"label":"S", "x":2.25, "y":2.125},
+ {"label":"D", "x":3.25, "y":2},
+ {"label":"F", "x":4.25, "y":2.125},
+ {"label":"G", "x":5.25, "y":2.25},
+ {"label":"[", "x":6.25, "y":1.75, "h":1.5},
+
+ {"label":"]", "x":11.25, "y":1.75, "h":1.5},
+ {"label":"H", "x":12.25, "y":2.25},
+ {"label":"J", "x":13.25, "y":2.125},
+ {"label":"K", "x":14.25, "y":2},
+ {"label":"L", "x":15.25, "y":2.125},
+ {"label":";", "x":16.25, "y":2.375},
+ {"label":"'", "x":17.25, "y":2.375, "w":1.25},
+
+ {"label":"Shift", "x":0, "y":3.375, "w":1.25},
+ {"label":"Z", "x":1.25, "y":3.375},
+ {"label":"X", "x":2.25, "y":3.125},
+ {"label":"C", "x":3.25, "y":3},
+ {"label":"V", "x":4.25, "y":3.125},
+ {"label":"B", "x":5.25, "y":3.25},
+
+ {"label":"_Adjust/Page Up", "x":6.75, "y":3.75},
+ {"label":"Page Down", "x":7.75, "y":3.75},
+
+ {"label":"Home", "x":9.75, "y":3.75},
+ {"label":"_Adjust/End", "x":10.75, "y":3.75},
+
+ {"label":"N", "x":12.25, "y":3.25},
+ {"label":"M", "x":13.25, "y":3.125},
+ {"label":",", "x":14.25, "y":3},
+ {"label":",", "x":15.25, "y":3.125},
+ {"label":"\\", "x":16.25, "y":3.375},
+ {"label":"Shift", "x":17.25, "y":3.375, "w":1.25},
+
+ {"label":"LGUI", "x":0.25, "y":4.375},
+ {"label":"P+", "x":1.25, "y":4.375},
+ {"label":"P-", "x":2.25, "y":4.125},
+ {"label":"LAlt || P*", "x":3.25, "y":4},
+
+ {"label":"LCtrl || P/", "x":5.5, "y":5.25, "w":1.25},
+ {"label":"Backspace", "x":6.75, "y":4.75, "h":1.5},
+ {"label":"Delete", "x":7.75, "y":4.75, "h":1.5},
+
+ {"label":"Enter", "x":9.75, "y":4.75, "h":1.5},
+ {"label":"Space", "x":10.75, "y":4.75, "h":1.5},
+ {"label":"RAlt", "x":11.75, "y":5.25, "w":1.25},
+
+ {"label":"Left", "x":14.25, "y":4},
+ {"label":"Down", "x":15.25, "y":4.125},
+ {"label":"Up", "x":16.25, "y":4.375},
+ {"label":"Right", "x":17.25, "y":4.375}
+ ]
}
}
}
+
diff --git a/keyboards/redox/keymaps/default/config.h b/keyboards/redox/keymaps/default/config.h
index 22e26c004..a3ef209a0 100644
--- a/keyboards/redox/keymaps/default/config.h
+++ b/keyboards/redox/keymaps/default/config.h
@@ -15,18 +15,13 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/* Use I2C or Serial, not both */
-
-// #define USE_SERIAL
-#define USE_I2C
+#define USE_SERIAL
+// #define USE_I2C
/* Select hand configuration */
-
#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
@@ -37,5 +32,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-
-#endif
diff --git a/keyboards/redox/keymaps/default/keymap.c b/keyboards/redox/keymaps/default/keymap.c
index 3031a0c8e..ef8eeb2e1 100644
--- a/keyboards/redox/keymaps/default/keymap.c
+++ b/keyboards/redox/keymaps/default/keymap.c
@@ -18,99 +18,75 @@ enum custom_keycodes {
ADJUST,
};
-// Fillers to make layering more clear
-#define KC_ KC_TRNS
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
+// Shortcut to make keymap more readable
+#define KC_BKSL KC_BSLASH
+#define SYM_L MO(_SYMB)
+
+#define KC_ALAS LALT_T(KC_PAST)
+#define KC_CTPL LCTL_T(KC_PSLS)
+
+#define KC_NAGR LT(_NAV, KC_GRV)
+#define KC_NAMI LT(_NAV, KC_MINS)
+
+#define KC_ADEN LT(_ADJUST, KC_END)
+#define KC_ADPU LT(_ADJUST, KC_PGUP)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* QWERTY
- * ,------------------------------------------------. ,------------------------------------------------.
- * |`-Lyr2| 1 | 2 | 3 | 4 | 5 | Lyr1 | | Lyr1 | 6 | 7 | 8 | 9 | 0 |--Lyr2|
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | = |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Esc | A | S | D | F | G | PgUp | | End | H | J | K | L | ; | ' |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | PgDn | | Home | N | M | , | . | \ |Shift |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Gui | + | - |*(Alt)|/(Ctr)|Bcksp | Del | |Enter |Space | Alt | Left | Down | Up | Right|
- * `------------------------------------------------' `------------------------------------------------'
- */
[_QWERTY] = LAYOUT(
- //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
- LT(_NAV, KC_GRV) , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 ,MO(_SYMB), MO(_SYMB), KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,LT(_NAV, KC_MINS),
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T ,KC_LBRC, KC_RBRC , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_EQL,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- KC_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , LT(_ADJUST, KC_PGUP), LT( _ADJUST, KC_END) , 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_PGDN, KC_HOME , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_BSLASH, KC_RSFT,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- KC_LGUI,KC_PPLS,KC_PMNS,LALT_T(KC_PAST),LCTL_T(KC_PSLS),KC_BSPC,KC_DEL , KC_ENT , KC_SPC, KC_RALT,KC_LEFT,KC_DOWN, KC_UP ,KC_RGHT
- //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----'
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_NAGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_NAMI ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,SYM_L , SYM_L ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_EQL ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_ESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_LBRC , KC_RBRC ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_QUOT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_BKSL ,KC_RSFT ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ KC_LGUI ,KC_PPLS ,KC_PMNS ,KC_ALAS , KC_CTPL , KC_BSPC ,KC_DEL , KC_ENT ,KC_SPC , KC_RALT , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
),
-/* Symbols
- * ,------------------------------------------------. ,------------------------------------------------.
- * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | ! | @ | { | } | | | | | | | 7 | 8 | 9 | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | # | $ | [ | ] | ~ | | | | | 4 | 5 | 6 | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | % | ^ | ( | ) | ` | | | | | 1 | 2 | 3 | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | 0 | 0 | . | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
[_SYMB] = LAYOUT(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX,
- _______, KC_EXLM, KC_AT , KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, XXXXXXX, XXXXXXX,
- _______, KC_HASH, KC_DLR , KC_LBRC, KC_RBRC, KC_GRV, _______, _______, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, XXXXXXX, XXXXXXX,
- _______, KC_PERC, KC_CIRC, KC_LPRN, KC_RPRN, KC_TILD, _______, _______, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, XXXXXXX, XXXXXXX,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, KC_PDOT, XXXXXXX, XXXXXXX
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_PIPE ,_______ , _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_HASH ,KC_DLR ,KC_LBRC ,KC_RBRC ,KC_GRV ,_______ , _______ ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_PERC ,KC_CIRC ,KC_LPRN ,KC_RPRN ,KC_TILD ,_______ ,_______ , _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , KC_KP_0 , KC_KP_0 ,KC_PDOT ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
),
-/* Navigation
- * ,------------------------------------------------. ,------------------------------------------------.
- * | | | | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | |MOUS_U| |WHEL_U| | | | | | | | | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | |MOUS_L|MOUS_D|MOUS_R|WHEL_D| | | | | LEFT | DOWN | UP |RIGHT | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | |MOUS_1|MOUS_2| | | | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
[_NAV] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- XXXXXXX, XXXXXXX, KC_MS_U, XXXXXXX, KC_WH_U, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RIGHT,XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BTN1 , KC_BTN2 ,_______ , _______ ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
),
[_ADJUST] = LAYOUT(
- XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX,
- XXXXXXX, RESET , RGB_M_P, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, KC_DEL, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,RESET ,RGB_M_P ,RGB_TOG ,RGB_MOD ,RGB_HUD ,RGB_HUI , RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
)
};
-
-#ifdef AUDIO_ENABLE
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-#endif
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
diff --git a/keyboards/redox/keymaps/finex/config.h b/keyboards/redox/keymaps/finex/config.h
new file mode 100644
index 000000000..b23342ce0
--- /dev/null
+++ b/keyboards/redox/keymaps/finex/config.h
@@ -0,0 +1,34 @@
+/*
+Copyright 2018 Leonardo (FiNeX) Finetti <finex@finex.org>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/redox/keymaps/finex/keymap.c b/keyboards/redox/keymaps/finex/keymap.c
new file mode 100644
index 000000000..8b8f5f183
--- /dev/null
+++ b/keyboards/redox/keymaps/finex/keymap.c
@@ -0,0 +1,188 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Layer names
+#define _QWERTY 0
+#define _COLEMAKDHMK 1
+#define _QWERTY_MAC 2
+#define _COLEMAKDHMK_MAC 3
+#define _SYMB 4
+#define _ADJUST 5
+
+// Custom keycodes
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAKDHMK,
+ QWERTY_MAC,
+ COLEMAKDHMK_MAC,
+ SYMB,
+ ADJUST,
+ ASC_SAR,
+ ASC_DAR,
+ ASC_SQT,
+ ASC_DQT,
+ ASC_HAP,
+ ASC_SAD
+};
+
+// Shortcut to make keymap more readable
+#define KC_SYQT LT(_SYMB, KC_QUOT)
+#define KC_SYGR LT(_SYMB, KC_GRV)
+#define KC_SYSP LT(_SYMB, KC_SPC)
+#define KC_ADEN LT(_ADJUST, KC_END)
+#define KC_ADPU LT(_ADJUST, KC_PGUP)
+#define KC_CESC LCTL_T(KC_ESC)
+#define KC_CBSP LCTL_T(KC_BSPC)
+#define KC_CMIN RCTL_T(KC_MINUS)
+#define KC_GBSP LGUI_T(KC_BSPC)
+#define KC_ADEL LALT_T(KC_DEL)
+#define KC_APLS RALT_T(KC_PPLS)
+#define KC_LSEN LSFT_T(KC_ENT)
+#define KC_RSEN RSFT_T(KC_ENT)
+#define FN1 QWERTY
+#define FN2 COLEMAKDHMK
+#define FN3 QWERTY_MAC
+#define FN4 COLEMAKDHMK_MAC
+
+// Send custom strings or change default base layer
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case ASC_SAR:
+ SEND_STRING("->");
+ return false;
+ case ASC_DAR:
+ SEND_STRING("=>");
+ return false;
+ case ASC_SQT:
+ // SS_RALT(): Avoid sending dead key on software intl layouts
+ SEND_STRING(SS_RALT("'"));
+ return false;
+ case ASC_DQT:
+ // SS_RALT(SS_LSFT()): Avoid sending dead key on software intl layouts
+ SEND_STRING(SS_RALT(SS_LSFT("\"")));
+ return false;
+ case ASC_HAP:
+ SEND_STRING(":-) ");
+ return false;
+ case ASC_SAD:
+ SEND_STRING(":-( ");
+ return false;
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAKDHMK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAKDHMK);
+ }
+ return false;
+ break;
+ case QWERTY_MAC:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY_MAC);
+ }
+ return false;
+ break;
+ case COLEMAKDHMK_MAC:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAKDHMK_MAC);
+ }
+ return false;
+ break;
+ }
+ }
+ return true;
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_SYGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_SYQT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_DEL , KC_BSPC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_EQL ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_CESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_LBRC , KC_RBRC ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_CMIN ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSPO ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSPC ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LGUI , KC_ADEL , KC_CBSP ,KC_LSEN , KC_RSEN ,KC_SYSP , KC_APLS , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_COLEMAKDHMK] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_SYGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_SYQT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_F ,KC_P ,KC_B ,KC_DEL , KC_BSPC ,KC_J ,KC_L ,KC_U ,KC_Y ,KC_SCLN ,KC_EQL ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_CESC ,KC_A ,KC_R ,KC_S ,KC_T ,KC_G ,KC_LBRC , KC_RBRC ,KC_M ,KC_N ,KC_E ,KC_I ,KC_O ,KC_CMIN ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSPO ,KC_Z ,KC_X ,KC_C ,KC_D ,KC_V ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_K ,KC_H ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSPC ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LGUI , KC_ADEL , KC_CBSP ,KC_LSEN , KC_RSEN ,KC_SYSP , KC_APLS , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_QWERTY_MAC] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_SYGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_SYQT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_DEL , KC_BSPC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_EQL ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_CESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_LBRC , KC_RBRC ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_CMIN ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSPO ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSPC ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LCTL , KC_ADEL , KC_GBSP ,KC_LSEN , KC_RSEN ,KC_SYSP , KC_APLS , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_COLEMAKDHMK_MAC] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_SYGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_SYQT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_F ,KC_P ,KC_B ,KC_DEL , KC_BSPC ,KC_J ,KC_L ,KC_U ,KC_Y ,KC_SCLN ,KC_EQL ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_CESC ,KC_A ,KC_R ,KC_S ,KC_T ,KC_G ,KC_LBRC , KC_RBRC ,KC_M ,KC_N ,KC_E ,KC_I ,KC_O ,KC_CMIN ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSPO ,KC_Z ,KC_X ,KC_C ,KC_D ,KC_V ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_K ,KC_H ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSPC ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ KC_SYSP ,KC_BSLS ,KC_QUOT ,KC_LCTL , KC_ADEL , KC_GBSP ,KC_LSEN , KC_RSEN ,KC_SYSP , KC_APLS , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_SYMB] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_CIRC ,KC_BSLS ,KC_PMNS ,KC_UNDS ,XXXXXXX ,_______ , _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,KC_F11 ,KC_APP ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_PAST ,KC_PIPE ,ASC_SQT ,KC_TILD ,KC_QUOT ,ASC_SAR , ASC_DAR ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,KC_F12 ,KC_PSCR ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_HASH ,KC_AMPR ,KC_AT ,ASC_DQT ,KC_GRV ,ASC_SAD ,ASC_HAP , _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,KC_UP ,_______ ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , KC_KP_0 , KC_PDOT ,KC_LEFT ,KC_DOWN ,KC_RGHT
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX ,FN1 ,FN2 ,FN3 ,FN4 ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,RESET ,RGB_M_P ,RGB_TOG ,RGB_MOD ,RGB_HUD ,RGB_HUI , RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,RGB_M_B ,RGB_M_R ,RGB_M_SW,RGB_M_SN,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,RGB_M_K ,RGB_M_X ,RGB_M_G ,XXXXXXX ,_______ ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ )
+
+};
diff --git a/keyboards/redox/keymaps/finex/readme.md b/keyboards/redox/keymaps/finex/readme.md
new file mode 100644
index 000000000..f1b6fa7c7
--- /dev/null
+++ b/keyboards/redox/keymaps/finex/readme.md
@@ -0,0 +1,35 @@
+# Customized keymap for Redox by Leonardo (FiNeX) Finetti.
+
+
+## Features
+
+- Enabled USE_SERIAL for Falba.Tech Redox keyboards.
+- PC Layouts: QWERTY, Colemak Mod DH-MK.
+- Mac Layouts: same as above with CTRL-GUI keys inverted on the bottom row.
+- Added redundant "Space", "Esc" and "Ctrl" keys.
+- Added macro to print "->" and "=>" strings.
+- Added macro to print ":-( " and ":-) " strings.
+- Added more arrows.
+- Added "(" and ")" on Shifts keys.
+- Added Shift on both ) "Enter" keys.
+- Removed Mouse and media support.
+- Added missing "Print Screen" and "Menu" keys.
+- Added missing "F11" and "F12" keys.
+
+
+## Layers
+
+This keymap use the default one with some minor improvements to suit my needs.
+
+## Changelog
+
+- 2018/11/13
+ First public release
+
+
+## TODO
+
+- Bring back mouse and multimedia keys.
+- Add default Colemak Mod DH layout.
+- Improve top corner keys.
+- Improve bottom row keys (mostly KC_BSLS and KC_QUOT).
diff --git a/keyboards/redox/keymaps/finex/rules.mk b/keyboards/redox/keymaps/finex/rules.mk
new file mode 100644
index 000000000..21550e9fe
--- /dev/null
+++ b/keyboards/redox/keymaps/finex/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+
+COMMAND_ENABLE = no
diff --git a/keyboards/redox/keymaps/german/config.h b/keyboards/redox/keymaps/german/config.h
new file mode 100644
index 000000000..a3ef209a0
--- /dev/null
+++ b/keyboards/redox/keymaps/german/config.h
@@ -0,0 +1,34 @@
+/*
+Copyright 2018 Mattia Dal Ben <matthewdibi@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+#define USE_SERIAL
+// #define USE_I2C
+
+/* Select hand configuration */
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/redox/keymaps/german/keymap.c b/keyboards/redox/keymaps/german/keymap.c
new file mode 100644
index 000000000..f94cd164a
--- /dev/null
+++ b/keyboards/redox/keymaps/german/keymap.c
@@ -0,0 +1,96 @@
+#include QMK_KEYBOARD_H
+
+#include "keymap_german.h"
+
+extern keymap_config_t keymap_config;
+extern rgblight_config_t rgblight_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _SYMB 1
+#define _NAV 2
+#define _ADJUST 3
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ SYMB,
+ NAV,
+ ADJUST,
+};
+
+// Shortcut to make keymap more readable
+#define KC_BKSL KC_BSLASH
+#define SYM_L MO(_SYMB)
+
+#define KC_ALAS LALT_T(KC_PAST)
+#define KC_CTPL LCTL_T(KC_PSLS)
+
+#define KC_NAGR LT(_NAV, DE_CIRC)
+#define KC_NAMI LT(_NAV, DE_SS)
+
+#define KC_ADEN LT(_ADJUST, KC_END)
+#define KC_ADPU LT(_ADJUST, KC_PGUP)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_NAGR ,DE_1 ,DE_2 ,DE_3 ,DE_4 ,DE_5 , DE_6 ,DE_7 ,DE_8 ,DE_9 ,DE_0 ,KC_NAMI ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,DE_Q ,DE_W ,DE_E ,DE_R ,DE_T ,SYM_L , SYM_L ,DE_Z ,DE_U ,DE_I ,DE_O ,DE_P ,DE_UE ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_ESC ,DE_A ,DE_S ,DE_D ,DE_F ,DE_G ,DE_ACUT , DE_PLUS ,DE_H ,DE_J ,DE_K ,DE_L ,DE_OE ,DE_AE ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT ,DE_Y ,DE_X ,DE_C ,DE_V ,DE_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,DE_N ,DE_M ,DE_COMM ,DE_DOT ,DE_MINS ,KC_RSFT ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ KC_LGUI ,KC_PPLS ,KC_PMNS ,KC_ALAS , KC_CTPL , KC_BSPC ,KC_DEL , KC_ENT ,KC_SPC , KC_RALT , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+
+ [_SYMB] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,DE_EXLM ,DE_AT ,DE_LCBR ,DE_RCBR ,DE_PIPE ,_______ , _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,XXXXXXX ,KC_F12 ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,DE_HASH ,DE_DLR ,DE_LBRC ,DE_RBRC ,DE_TILD ,_______ , _______ ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT ,DE_PERC ,DE_CIRC ,DE_LPRN ,DE_RPRN ,DE_GRV ,_______ ,_______ , _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,XXXXXXX ,KC_RSFT ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,KC_LALT , KC_LCTL , _______ ,_______ , _______ ,_______ , KC_KP_0 , KC_KP_0 ,KC_PDOT ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_NAV] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BTN1 , KC_BTN2 ,_______ , _______ ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,RESET ,RGB_M_P ,RGB_TOG ,RGB_MOD ,RGB_HUD ,RGB_HUI , RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ )
+
+};
diff --git a/keyboards/redox/keymaps/german/readme.md b/keyboards/redox/keymaps/german/readme.md
new file mode 100644
index 000000000..91bc230fc
--- /dev/null
+++ b/keyboards/redox/keymaps/german/readme.md
@@ -0,0 +1,5 @@
+# German keymap for Redox
+
+The layout acommodates the German umlauts and the punctuation symbols
+at their usual positions relative to the other alphabetic characters.
+Apart from that it stays close to the default english redox layout.
diff --git a/keyboards/redox/keymaps/german/rules.mk b/keyboards/redox/keymaps/german/rules.mk
new file mode 100644
index 000000000..1e3cebb14
--- /dev/null
+++ b/keyboards/redox/keymaps/german/rules.mk
@@ -0,0 +1 @@
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/redox/keymaps/italian/config.h b/keyboards/redox/keymaps/italian/config.h
index 22e26c004..a3ef209a0 100644
--- a/keyboards/redox/keymaps/italian/config.h
+++ b/keyboards/redox/keymaps/italian/config.h
@@ -15,18 +15,13 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/* Use I2C or Serial, not both */
-
-// #define USE_SERIAL
-#define USE_I2C
+#define USE_SERIAL
+// #define USE_I2C
/* Select hand configuration */
-
#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
@@ -37,5 +32,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-
-#endif
diff --git a/keyboards/redox/keymaps/italian/keymap.c b/keyboards/redox/keymaps/italian/keymap.c
index c590d2d2d..1eb34ff10 100644
--- a/keyboards/redox/keymaps/italian/keymap.c
+++ b/keyboards/redox/keymaps/italian/keymap.c
@@ -1,5 +1,7 @@
#include QMK_KEYBOARD_H
+#include "keymap_italian.h"
+
extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
@@ -18,99 +20,83 @@ enum custom_keycodes {
ADJUST,
};
-// Fillers to make layering more clear
-#define KC_ KC_TRNS
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
+// Shortcut to make keymap more readable
+#define KC_BKSL KC_BSLASH
+#define SYM_L MO(_SYMB)
+
+#define KC_ALAS LALT_T(KC_PAST)
+#define KC_CTPL LCTL_T(KC_PSLS)
+
+#define KC_NAGR LT(_NAV, KC_GRV)
+#define KC_NAMI LT(_NAV, KC_MINS)
+
+#define KC_ADEN LT(_ADJUST, KC_END)
+#define KC_ADPU LT(_ADJUST, KC_PGUP)
+
+// Italian specific shortcuts
+#define ALT_IACC RALT_T(IT_IACC)
+#define GUI_LESS LGUI_T(IT_LESS)
+
+#define IT_SHSL RSFT_T(KC_SLSH)
+#define IT_GRV RALT(KC_MINS)
+#define IT_TILD RALT(KC_EQL)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* QWERTY
- * ,------------------------------------------------. ,------------------------------------------------.
- * |\-Lyr2| 1 | 2 | 3 | 4 | 5 | Lyr1 | | Lyr1 | 6 | 7 | 8 | 9 | 0 |'-Lyr2|
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | è |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Esc | A | S | D | F | G | PgUp | | End | H | J | K | L | ò | à |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | PgDn | | Home | N | M | , | . | ù |-(Sft)|
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * |<(Gui)| + | - |*(Alt)|/(Ctr)|Bcksp | Del | |Enter |Space |ì(AlG)| Left | Down | Up | Right|
- * `------------------------------------------------' `------------------------------------------------'
- */
[_QWERTY] = LAYOUT(
- //,----+----+----+----+----+----+----. ,----+----+----+----+----+----+----.
- LT(_NAV, KC_GRV) , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 ,MO(_SYMB), MO(_SYMB), KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,LT(_NAV, KC_MINS),
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T ,RALT(KC_LBRC), RALT(KC_RBRC) , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_LBRC,
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- KC_ESC , KC_A , KC_S , KC_D , KC_F , KC_G , LT(_ADJUST, KC_PGUP), LT( _ADJUST, KC_END) , 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_PGDN, KC_HOME , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_BSLASH,RSFT_T(KC_SLSH),
- //|----+----+----+----+----+----+----| |----+----+----+----+----+----+----|
- LGUI_T(KC_NONUS_BSLASH),KC_PPLS,KC_PMNS,LALT_T(KC_PAST),LCTL_T(KC_PSLS),KC_BSPC,KC_DEL , KC_ENT , KC_SPC, RALT_T(KC_EQL),KC_LEFT,KC_DOWN, KC_UP ,KC_RGHT
- //`----+----+----+----+----+----+----' `----+----+----+----+----+----+----'
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_NAGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_NAMI ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,SYM_L , SYM_L ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,IT_EACC ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_ESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,IT_LBRC , IT_RBRC ,KC_H ,KC_J ,KC_K ,KC_L ,IT_OACC ,IT_AACC ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,IT_UACC ,IT_SHSL ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ GUI_LESS,KC_PPLS ,KC_PMNS ,KC_ALAS , KC_CTPL , KC_BSPC ,KC_DEL , KC_ENT ,KC_SPC , ALT_IACC, KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
),
-/* Symbols
- * ,------------------------------------------------. ,------------------------------------------------.
- * | | F1 | F2 | F3 | F4 | F5 | | | | F6 | F7 | F8 | F9 | F10 | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | ! | @ | { | } | | | | | | | 7 | 8 | 9 | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | # | $ | [ | ] | ~ | | | | | 4 | 5 | 6 | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | % | ^ | ( | ) | ` | | | | | 1 | 2 | 3 | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | 0 | 0 | . | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
-
[_SYMB] = LAYOUT(
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX,
- _______, KC_EXLM, RALT(KC_SCLN), RALT(KC_LCBR), RALT(KC_RCBR), KC_TILD, _______, _______, XXXXXXX, KC_KP_7, KC_KP_8, KC_KP_9, XXXXXXX, XXXXXXX,
- _______, RALT(KC_QUOT), KC_DLR , RALT(KC_LBRC), RALT(KC_RBRC), RALT(KC_EQL), _______, _______, XXXXXXX, KC_KP_4, KC_KP_5, KC_KP_6, XXXXXXX, XXXXXXX,
- _______, KC_PERC, LSFT(KC_EQL) , LSFT(KC_8), LSFT(KC_9), RALT(KC_MINS), _______, _______, XXXXXXX, KC_KP_1, KC_KP_2, KC_KP_3, XXXXXXX, XXXXXXX,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_KP_0, KC_KP_0, KC_PDOT, XXXXXXX, XXXXXXX
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,IT_EXLM ,IT_AT ,IT_LCBR ,IT_RCBR ,IT_PIPE ,_______ , _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,IT_SHRP ,IT_DLR ,IT_LBRC ,IT_RBRC ,IT_GRV ,_______ , _______ ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,IT_PERC ,IT_CRC ,IT_LPRN ,IT_RPRN ,IT_TILD ,_______ ,_______ , _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , KC_KP_0 , KC_KP_0 ,KC_PDOT ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
),
-/* Navigation
- * ,------------------------------------------------. ,------------------------------------------------.
- * | | | | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | |MOUS_U| |WHEL_U| | | | | | | | | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | |MOUS_L|MOUS_D|MOUS_R|WHEL_D| | | | | LEFT | DOWN | UP |RIGHT | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | | | | | | | | | | | | |
- * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
- * | | | | |MOUS_1|MOUS_2| | | | | | | | | |
- * `------------------------------------------------' `------------------------------------------------'
- */
[_NAV] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- XXXXXXX, XXXXXXX, KC_MS_U, XXXXXXX, KC_WH_U, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, XXXXXXX, _______, _______, KC_LEFT, KC_DOWN, KC_UP , KC_RIGHT,XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BTN1, KC_BTN2, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BTN1 , KC_BTN2 ,_______ , _______ ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
),
[_ADJUST] = LAYOUT(
- XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX,
- XXXXXXX, RESET , RGB_M_P, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, XXXXXXX, KC_DEL, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,RESET ,RGB_M_P ,RGB_TOG ,RGB_MOD ,RGB_HUD ,RGB_HUI , RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
)
};
-
-#ifdef AUDIO_ENABLE
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-#endif
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
diff --git a/keyboards/redox/keymaps/jeherve/config.h b/keyboards/redox/keymaps/jeherve/config.h
new file mode 100644
index 000000000..b9b67c999
--- /dev/null
+++ b/keyboards/redox/keymaps/jeherve/config.h
@@ -0,0 +1,38 @@
+/*
+Copyright 2018 Jeremy Herve <jeremy@jeremy.hu>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+/* Change the default tapping toggle value (normally 5) */
+#define TAPPING_TOGGLE 2
+
+/* Use I2C or Serial, not both */
+#define USE_SERIAL
+//#define USE_I2C
+
+/* Select hand configuration */
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+#undef RGBLED_NUM
+//#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 14
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_SLEEP
diff --git a/keyboards/redox/keymaps/jeherve/keymap.c b/keyboards/redox/keymaps/jeherve/keymap.c
new file mode 100644
index 000000000..f39b5a438
--- /dev/null
+++ b/keyboards/redox/keymaps/jeherve/keymap.c
@@ -0,0 +1,259 @@
+#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 _COLEMAK 0
+#define _SYMB 1
+#define _NAV 2
+#define _INTER 3
+#define _ADJUST 4
+
+enum custom_keycodes {
+ COLEMAK = SAFE_RANGE,
+ SYMB,
+ NAV,
+ INTER,
+ ADJUST,
+ // These use process_record_user()
+ M_BRACKET_LEFT,
+ M_BRACKET_RIGHT,
+ SHRUG,
+ WAVE,
+ YOSHI,
+ THUMB_UP,
+ NBSP,
+ INV_1P,
+ ALFRED
+};
+
+// Is shift being held? Let's store this in a bool.
+static bool shift_held = false;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case SHRUG:
+ if (record->event.pressed) {
+ send_unicode_hex_string("00AF 005C 005F 0028 30C4 0029 005F 002F 00AF");
+ }
+ return false;
+ break;
+ case INV_1P:
+ if (record->event.pressed) {
+ SEND_STRING(SS_DOWN(X_LGUI)SS_DOWN(X_LALT)SS_TAP(X_BSLASH)SS_UP(X_LGUI)SS_UP(X_LALT));
+ }
+ return false;
+ break;
+ case ALFRED:
+ if (record->event.pressed) {
+ SEND_STRING(SS_DOWN(X_LALT)SS_TAP(X_SPACE)SS_UP(X_LALT));
+ }
+ return false;
+ break;
+ case YOSHI:
+ if (record->event.pressed) {
+ SEND_STRING(":yellow_yoshi:");
+ }
+ return false;
+ break;
+ case THUMB_UP:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LALT("D83D+DC4D"));
+ }
+ return false;
+ break;
+ case WAVE:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LALT("D83D+DC4B"));
+ }
+ return false;
+ break;
+ case NBSP:
+ if (record->event.pressed) {
+ SEND_STRING("&nbsp;");
+ }
+ return false;
+ break;
+ case KC_LSFT:
+ shift_held = record->event.pressed;
+ return true;
+ break;
+ case KC_RSFT:
+ shift_held = record->event.pressed;
+ return true;
+ break;
+ case M_BRACKET_LEFT: {
+ if (record->event.pressed) {
+ if (shift_held) {
+ unregister_code(KC_LSFT);
+ unregister_code(KC_RSFT);
+ register_code(KC_LBRC);
+ } else {
+ register_code(KC_LSFT);
+ register_code(KC_9);
+ }
+ } else { // Release the key
+ unregister_code(KC_LBRC);
+ unregister_code(KC_LSFT);
+ unregister_code(KC_RSFT);
+ unregister_code(KC_9);
+ }
+ return false;
+ break;
+ }
+ case M_BRACKET_RIGHT: {
+ if (record->event.pressed) {
+ if (shift_held) {
+ unregister_code(KC_LSFT);
+ unregister_code(KC_RSFT);
+ register_code(KC_RBRC);
+ } else {
+ register_code(KC_LSFT);
+ register_code(KC_0);
+ }
+ } else { // Release the key
+ unregister_code(KC_RBRC);
+ unregister_code(KC_LSFT);
+ unregister_code(KC_RSFT);
+ unregister_code(KC_0);
+ }
+ return false;
+ break;
+ }
+ }
+ return true;
+};
+
+// Shortcut to make keymap more readable
+#define KC_SYQT LT(_SYMB,KC_QUOT)
+#define SYM_L MO(_SYMB)
+#define MO_INTR MO(_INTER)
+#define TT_ADJ TT(_ADJUST)
+
+#define UC_00E0 UC(0x00E0)
+#define UC_00FC UC(0x00FC)
+#define UC_00E8 UC(0x00E8)
+#define UC_00F6 UC(0x00F6)
+#define UC_00E1 UC(0x00E1)
+#define UC_00F9 UC(0x00F9)
+#define UC_00E9 UC(0x00E9)
+#define UC_00ED UC(0x00ED)
+#define UC_00F3 UC(0x00F3)
+#define UC_00E2 UC(0x00E2)
+#define UC_00E7 UC(0x00E7)
+#define UC_0171 UC(0x0171)
+#define UC_00EA UC(0x00EA)
+#define UC_0151 UC(0x0151)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_COLEMAK] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_GRV ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_EQL ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_F ,KC_P ,KC_G ,KC_ESC , INV_1P ,KC_J ,KC_L ,KC_U ,KC_Y ,KC_SCLN ,KC_BSLS ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ SYM_L ,KC_A ,KC_R ,KC_S ,KC_T ,KC_D ,M_BRACKET_LEFT, M_BRACKET_RIGHT ,KC_H ,KC_N ,KC_E ,KC_I ,KC_O ,KC_SYQT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,TT(_NAV),TT(_SYMB), TT(_SYMB),TT(_NAV),KC_K ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSFT ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ MO_INTR ,KC_LCTL ,KC_HYPR ,KC_LALT , KC_LCMD , KC_BSPC ,KC_LCTL , KC_ENT ,KC_SPC , ALFRED , TT_ADJ ,KC_HYPR ,KC_RCTL ,MO_INTR
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_SYMB] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,_______ , _______ ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC ,KC_LCBR , KC_RCBR ,KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_MINS ,KC_UNDS ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,KC_TILD ,KC_GRV , _______ ,_______ ,_______ , _______ ,_______ ,_______ ,KC_EQL ,KC_PLUS ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , _______ , _______ ,_______ ,_______ ,_______
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_NAV] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,KC_VOLD ,KC_VOLU ,KC_MUTE ,XXXXXXX ,_______ , _______ ,XXXXXXX ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,XXXXXXX , XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_INTER] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,UC_00E0 ,WAVE ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,UC_00FC ,UC_00E8 ,YOSHI ,UC_00F6 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,UC_00E1 ,XXXXXXX ,SHRUG ,THUMB_UP,XXXXXXX ,_______ , _______ ,XXXXXXX ,UC_00F9 ,UC_00E9 ,UC_00ED ,UC_00F3 ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,UC_00E2 ,XXXXXXX ,UC_00E7 ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,UC_0171 ,UC_00EA ,XXXXXXX ,UC_0151 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,_______ , _______ ,NBSP , XXXXXXX , _______ ,XXXXXXX ,XXXXXXX ,_______
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,XXXXXXX ,RGB_VAD ,RGB_VAI ,RGB_TOG ,XXXXXXX ,_______ , _______ ,XXXXXXX ,RESET ,DEBUG ,AU_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 ,_______
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ )
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_colemak[][2] = SONG(ZELDA_TREASURE);
+#endif
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+// Set unicode in Mac OS.
+void eeconfig_init_user(void) {
+ set_unicode_input_mode(UC_OSX);
+};
+
+// Change LED colors depending on the layer.
+uint32_t layer_state_set_user(uint32_t state) {
+ switch (biton32(state)) {
+ case _SYMB:
+ rgblight_setrgb_orange();
+ break;
+ case _NAV:
+ rgblight_setrgb_springgreen();
+ break;
+ case _INTER:
+ rgblight_setrgb_teal();
+ break;
+ case _ADJUST:
+ rgblight_setrgb_red();
+ break;
+ default: // for any other layers, or the default layer
+ rgblight_setrgb_yellow();
+ break;
+ }
+ return state;
+};
diff --git a/keyboards/redox/keymaps/jeherve/readme.md b/keyboards/redox/keymaps/jeherve/readme.md
new file mode 100644
index 000000000..515dcbd62
--- /dev/null
+++ b/keyboards/redox/keymaps/jeherve/readme.md
@@ -0,0 +1,42 @@
+# A Colemak keymap for the Redox keyboard
+
+----
+![jeherve-redox-layout-4](https://user-images.githubusercontent.com/426388/50276398-2664be80-0442-11e9-86b9-fbd0f4275354.png)
+
+----
+
+This keymap is **a work in progress**, and is meant to be used on macOS, with the "Unicode Hex Input" keyboard input.
+
+![macOS keyboard input setting](https://user-images.githubusercontent.com/426388/43962498-1ee9e3fc-9cb8-11e8-88e3-dbb068ec5c67.png)
+
+I may change a lot of the keys over the next few months, and will update this repo when I do so.
+
+[View on KLE](http://www.keyboard-layout-editor.com/#/gists/3d5368842d87a8462c8f95d4382c4a19)
+
+## Layers
+
+My keymap uses 5 layers:
+
+1. The default base layer, using [Colemak](https://colemak.com/).
+2. A Symbol layer, so all symbols can be accessed from the home row. (top right legends)
+3. A Navigation / Media layer, with both sound control and arrows on the home row. (bottom right legends)
+4. An international / Emoji layer so I can type accented characters commonly used in France and in Hungary, as well as a few Emoji I often use. (top center legends)
+5. A keyboard control layer, not pictured above, allowing me to control the LED lighting as well as the keyboard debug functions.
+
+## Changelog
+
+- 2018.12.20
+ - 2 new Macro keys, to invoke [Alfred](https://www.alfredapp.com/) and [1Password](https://1password.com/).
+ - No more Right Command key or Expose key, I didn't use those much.
+ - Updates to use newer QMK function to call ¯\_(ツ)_/¯
+ - Fix: you can now move back to the base layer when double tapping the thumb keys to switch to the Nav layer. 👍
+- 2018.09.06
+ - Initial submission to QMK. It's alive! ⌨️
+
+## Credits
+
+- Redox keyboard design by [Mattia Dal Ben](https://github.com/mattdibi/redox-keyboard).
+- This keymap is based off the default keymap for the Redox keyboard, available [here](https://github.com/qmk/qmk_firmware/tree/master/keyboards/redox) and also build by Mattia Dal Ben (thank you!).
+- This layout uses [QMK keyboard controller firmware](https://github.com/qmk/qmk_firmware/).
+
+I've also read posts by [Gergely Nagy](https://asylum.madhouse-project.org/blog/2016/10/15/multi-purpose-keys/), [Rebecca Le](https://sevenseacat.net/posts/2018/unicode-in-qmk-on-osx/), and [Justin Rogers](https://implementsblog.com/2016/10/16/my-ergodox-ezs-custom-layout/#comments) for inspiration.
diff --git a/keyboards/redox/keymaps/jeherve/rules.mk b/keyboards/redox/keymaps/jeherve/rules.mk
new file mode 100644
index 000000000..ac2496b8c
--- /dev/null
+++ b/keyboards/redox/keymaps/jeherve/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes
+UNICODE_ENABLE = yes
+AUDIO_ENABLE = yes
diff --git a/keyboards/redox/readme.md b/keyboards/redox/readme.md
index 6e1d980a7..d237caf01 100644
--- a/keyboards/redox/readme.md
+++ b/keyboards/redox/readme.md
@@ -10,16 +10,20 @@
**Redox**: the **R**educed **E**rgo**dox** project. More information and building instruction [here](https://github.com/mattdibi/redox-keyboard).
-- Keyboard Maintainer: [Mattia Dal Ben](https://github.com/mattdibi)
-- Hardware Supported: Redox PCB rev1.0 w/ Pro Micro
+- Keyboard Maintainer: [Mattia Dal Ben](https://github.com/mattdibi)
+- Hardware Supported: Redox PCB rev1.0 w/ Pro Micro
- Hardware Availability: [Falbatech](https://falba.tech/product-category/keyboard-parts/redox-parts/)
Make example for this keyboard (after setting up your build environment):
- make redox/rev1:default
+```sh
+make redox/rev1:default
+```
Example of flashing this keyboard:
- make redox/rev1:default:avrdude
+```sh
+make redox/rev1:default:avrdude
+```
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.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/redox/redox.h b/keyboards/redox/redox.h
index 73f5ab85a..2f08bddcc 100644
--- a/keyboards/redox/redox.h
+++ b/keyboards/redox/redox.h
@@ -13,29 +13,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 REDOX_H
-#define REDOX_H
+
+#pragma once
#ifdef KEYBOARD_redox_rev1
#include "rev1.h"
#endif
-// Used to create a keymap using only KC_ prefixed keys
-#define LAYOUT_kc( \
- L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \
- L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \
- L20, L21, L22, L23, L24, L25, L26, R20, R21, R22, R23, R24, R25, R26, \
- L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \
- L40, L41, L42, L43, L44, L45, L46, R40, R41, R42, R43, R44, R45, R46 \
- ) \
- KEYMAP( \
- KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##L06, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, KC_##R06, \
- KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##L16, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, KC_##R16, \
- KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##L26, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, KC_##R26, \
- KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L36, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, KC_##R36, \
- KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##L45, KC_##L46, KC_##R40, KC_##R41, KC_##R42, KC_##R43, KC_##R44, KC_##R45, KC_##R46 \
- )
-
#include "quantum.h"
-
-#endif
diff --git a/keyboards/redox/rev1/config.h b/keyboards/redox/rev1/config.h
index f8041f235..654a84de7 100644
--- a/keyboards/redox/rev1/config.h
+++ b/keyboards/redox/rev1/config.h
@@ -15,8 +15,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef REV1_CONFIG_H
-#define REV1_CONFIG_H
+#pragma once
#include "config_common.h"
@@ -50,6 +49,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
@@ -62,10 +64,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 14 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
@@ -84,5 +84,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_ONESHOT
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/redox/rev1/rev1.h b/keyboards/redox/rev1/rev1.h
index be6224750..1bc1531ee 100644
--- a/keyboards/redox/rev1/rev1.h
+++ b/keyboards/redox/rev1/rev1.h
@@ -1,66 +1,34 @@
-#ifndef REV1_H
-#define REV1_H
+#pragma once
#include "../redox.h"
-//void promicro_bootloader_jmp(bool program);
#include "quantum.h"
#ifdef USE_I2C
#include <stddef.h>
#ifdef __AVR__
- #include <avr/io.h>
- #include <avr/interrupt.h>
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
#endif
#endif
-//void promicro_bootloader_jmp(bool program);
-
-#ifndef FLIP_HALF
-// Standard Keymap
-// (TRRS jack on the left half is to the right, TRRS jack on the right half is to the left)
-#define LAYOUT( \
- L00, L01, L02, L03, L04, L05, 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 } \
- }
-#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 } \
- }
-#endif
-
-#endif
+ k00, k01, k02, k03, k04, k05, k08, k09, k10, k11, k12, k13, \
+ k14, k15, k16, k17, k18, k19, k06, k07, k22, k23, k24, k25, k26, k27, \
+ k28, k29, k30, k31, k32, k33, k20, k21, k36, k37, k38, k39, k40, k41, \
+ k42, k43, k44, k45, k46, k47, k34, k48, k49, k35, k50, k51, k52, k53, k54, k55, \
+ k56, k57, k58, k59, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06 }, \
+ { k14, k15, k16, k17, k18, k19, k20 }, \
+ { k28, k29, k30, k31, k32, k33, k34 }, \
+ { k42, k43, k44, k45, k46, k47, k48 }, \
+ { k56, k57, k58, k59, k60, k61, k62 }, \
+ { k13, k12, k11, k10, k09, k08, k07 }, \
+ { k27, k26, k25, k24, k23, k22, k21 }, \
+ { k41, k40, k39, k38, k37, k36, k35 }, \
+ { k55, k54, k53, k52, k51, k50, k49 }, \
+ { k69, k68, k67, k66, k65, k64, k63 } \
+}
diff --git a/keyboards/redox/rules.mk b/keyboards/redox/rules.mk
index c74a3bda2..c0edb5428 100644
--- a/keyboards/redox/rules.mk
+++ b/keyboards/redox/rules.mk
@@ -66,9 +66,7 @@ UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE = no # Audio output on port C6
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SUBPROJECT_rev1 = yes
-USE_I2C = yes
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SPLIT_KEYBOARD = yes
diff --git a/keyboards/redox_w/config.h b/keyboards/redox_w/config.h
new file mode 100644
index 000000000..810a236d9
--- /dev/null
+++ b/keyboards/redox_w/config.h
@@ -0,0 +1,81 @@
+/* Copyright 2017 Mattia Dal Ben
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 Mattia Dal Ben
+#define PRODUCT Redox_wireless
+#define DESCRIPTION q.m.k. keyboard firmware for Redox-w
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+#define ONESHOT_TIMEOUT 500
+
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+//UART settings for communication with the RF microcontroller
+#define SERIAL_UART_BAUD 1000000
+#define SERIAL_UART_DATA UDR1
+#define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
+#define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
+#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
+#define SERIAL_UART_INIT() do { \
+ /* baud rate */ \
+ UBRR1L = SERIAL_UART_UBRR; \
+ /* baud rate */ \
+ UBRR1H = SERIAL_UART_UBRR >> 8; \
+ /* enable TX and RX */ \
+ UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
+ /* 8-bit data */ \
+ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
+ } while(0)
diff --git a/keyboards/redox_w/info.json b/keyboards/redox_w/info.json
new file mode 100644
index 000000000..5bc65b5d9
--- /dev/null
+++ b/keyboards/redox_w/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Redox Wireless",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.5,
+ "height": 6.25,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"[L2] `", "x":0, "y":0.375, "w":1.25}, {"label":"!", "x":1.25, "y":0.375}, {"label":"@", "x":2.25, "y":0.125}, {"label":"#", "x":3.25, "y":0}, {"label":"$", "x":4.25, "y":0.125}, {"label":"%", "x":5.25, "y":0.25}, {"label":"[L1]", "x":6.25, "y":0.75}, {"label":"[L1]", "x":11.25, "y":0.75}, {"label":"^", "x":12.25, "y":0.25}, {"label":"&", "x":13.25, "y":0.125}, {"label":"*", "x":14.25, "y":0}, {"label":"(", "x":15.25, "y":0.125}, {"label":")", "x":16.25, "y":0.375}, {"label":"[L2] -", "x":17.25, "y":0.375, "w":1.25}, {"label":"Tab", "x":0, "y":1.375, "w":1.25}, {"label":"Q", "x":1.25, "y":1.375}, {"label":"W", "x":2.25, "y":1.125}, {"label":"E", "x":3.25, "y":1}, {"label":"R", "x":4.25, "y":1.125}, {"label":"T", "x":5.25, "y":1.25}, {"label":"[", "x":6.25, "y":1.75, "h":1.5}, {"label":"]", "x":11.25, "y":1.75, "h":1.5}, {"label":"Y", "x":12.25, "y":1.25}, {"label":"U", "x":13.25, "y":1.125}, {"label":"I", "x":14.25, "y":1}, {"label":"O", "x":15.25, "y":1.125}, {"label":"P", "x":16.25, "y":1.375}, {"label":"=", "x":17.25, "y":1.375, "w":1.25}, {"label":"Esc", "x":0, "y":2.375, "w":1.25}, {"label":"A", "x":1.25, "y":2.375}, {"label":"S", "x":2.25, "y":2.125}, {"label":"D", "x":3.25, "y":2}, {"label":"F", "x":4.25, "y":2.125}, {"label":"G", "x":5.25, "y":2.25}, {"label":"PgUp", "x":6.75, "y":3.75}, {"label":"End", "x":10.75, "y":3.75}, {"label":"H", "x":12.25, "y":2.25}, {"label":"J", "x":13.25, "y":2.125}, {"label":"K", "x":14.25, "y":2}, {"label":"L", "x":15.25, "y":2.125}, {"label":":", "x":16.25, "y":2.375}, {"label":"'", "x":17.25, "y":2.375, "w":1.25}, {"label":"Shift", "x":0, "y":3.375, "w":1.25}, {"label":"Z", "x":1.25, "y":3.375}, {"label":"X", "x":2.25, "y":3.125}, {"label":"C", "x":3.25, "y":3}, {"label":"V", "x":4.25, "y":3.125}, {"label":"B", "x":5.25, "y":3.25}, {"label":"PgDn", "x":7.75, "y":3.75}, {"label":"Home", "x":9.75, "y":3.75}, {"label":"N", "x":12.25, "y":3.25}, {"label":"M", "x":13.25, "y":3.125}, {"label":"<", "x":14.25, "y":3}, {"label":">", "x":15.25, "y":3.125}, {"label":"?", "x":16.25, "y":3.375}, {"label":"Shift", "x":17.25, "y":3.375, "w":1.25}, {"label":"GUI", "x":0.25, "y":4.375}, {"label":"+", "x":1.25, "y":4.375}, {"label":"-", "x":2.25, "y":4.125}, {"label":"[Alt] *", "x":3.25, "y":4}, {"label":"[Ctrl] /", "x":5.5, "y":5.25, "w":1.25}, {"label":"Backspace", "x":6.75, "y":4.75, "h":1.5}, {"label":"Del", "x":7.75, "y":4.75, "h":1.5}, {"label":"Enter", "x":9.75, "y":4.75, "h":1.5}, {"label":"Space", "x":10.75, "y":4.75, "h":1.5}, {"label":"Alt", "x":11.75, "y":5.25, "w":1.25}, {"label":"Left", "x":14.25, "y":4}, {"label":"Down", "x":15.25, "y":4.125}, {"label":"Up", "x":16.25, "y":4.375}, {"label":"Right", "x":17.25, "y":4.375}]
+ }
+ }
+}
diff --git a/keyboards/redox_w/keymaps/default/keymap.c b/keyboards/redox_w/keymaps/default/keymap.c
new file mode 100644
index 000000000..9cfc1734e
--- /dev/null
+++ b/keyboards/redox_w/keymaps/default/keymap.c
@@ -0,0 +1,115 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _SYMB 1
+#define _NAV 2
+#define _ADJUST 3
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ SYMB,
+ NAV,
+ ADJUST,
+};
+
+// Shortcut to make keymap more readable
+#define KC_BKSL KC_BSLASH
+#define SYM_L MO(_SYMB)
+
+#define KC_ALAS LALT_T(KC_PAST)
+#define KC_CTPL LCTL_T(KC_PSLS)
+
+#define KC_NAGR LT(_NAV, KC_GRV)
+#define KC_NAMI LT(_NAV, KC_MINS)
+
+#define KC_ADEN LT(_ADJUST, KC_END)
+#define KC_ADPU LT(_ADJUST, KC_PGUP)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_NAGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_NAMI ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,SYM_L , SYM_L ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_EQL ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_ESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_LBRC , KC_RBRC ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_QUOT ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_BKSL ,KC_RSFT ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ KC_LGUI ,KC_PPLS ,KC_PMNS ,KC_ALAS , KC_CTPL , KC_BSPC ,KC_DEL , KC_ENT ,KC_SPC , KC_RALT , KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_SYMB] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_PIPE ,_______ , _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_HASH ,KC_DLR ,KC_LBRC ,KC_RBRC ,KC_GRV ,_______ , _______ ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_PERC ,KC_CIRC ,KC_LPRN ,KC_RPRN ,KC_TILD ,_______ ,_______ , _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , KC_KP_0 , KC_KP_0 ,KC_PDOT ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_NAV] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BTN1 , KC_BTN2 ,_______ , _______ ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,RESET ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ )
+
+};
+
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+
+ switch (layer) {
+ case _QWERTY:
+ set_led_off;
+ break;
+ case _SYMB:
+ set_led_green;
+ break;
+ case _NAV:
+ set_led_blue;
+ break;
+ case _ADJUST:
+ set_led_red;
+ break;
+ default:
+ break;
+ }
+};
+
+
diff --git a/keyboards/redox_w/keymaps/default/readme.md b/keyboards/redox_w/keymaps/default/readme.md
new file mode 100644
index 000000000..32ab1253d
--- /dev/null
+++ b/keyboards/redox_w/keymaps/default/readme.md
@@ -0,0 +1 @@
+# Default keymap for Redox Wireless
diff --git a/keyboards/redox_w/keymaps/italian/keymap.c b/keyboards/redox_w/keymaps/italian/keymap.c
new file mode 100644
index 000000000..6e23a32d4
--- /dev/null
+++ b/keyboards/redox_w/keymaps/italian/keymap.c
@@ -0,0 +1,125 @@
+#include QMK_KEYBOARD_H
+
+#include "keymap_italian.h"
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _SYMB 1
+#define _NAV 2
+#define _ADJUST 3
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ SYMB,
+ NAV,
+ ADJUST,
+};
+
+// Shortcut to make keymap more readable
+#define KC_BKSL KC_BSLASH
+#define SYM_L MO(_SYMB)
+
+#define KC_ALAS LALT_T(KC_PAST)
+#define KC_CTPL LCTL_T(KC_PSLS)
+
+#define KC_NAGR LT(_NAV, KC_GRV)
+#define KC_NAMI LT(_NAV, KC_MINS)
+
+#define KC_ADEN LT(_ADJUST, KC_END)
+#define KC_ADPU LT(_ADJUST, KC_PGUP)
+
+// Italian specific shortcuts
+#define ALT_IACC RALT_T(IT_IACC)
+#define GUI_LESS LGUI_T(IT_LESS)
+
+#define IT_SHSL RSFT_T(KC_SLSH)
+#define IT_GRV RALT(KC_MINS)
+#define IT_TILD RALT(KC_EQL)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_NAGR ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 , KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_NAMI ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,SYM_L , SYM_L ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,IT_EACC ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_ESC ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,IT_LBRC , IT_RBRC ,KC_H ,KC_J ,KC_K ,KC_L ,IT_OACC ,IT_AACC ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,KC_ADPU ,KC_PGDN , KC_HOME ,KC_ADEN ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,IT_UACC ,IT_SHSL ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ GUI_LESS,KC_PPLS ,KC_PMNS ,KC_ALAS , KC_CTPL , KC_BSPC ,KC_DEL , KC_ENT ,KC_SPC , ALT_IACC, KC_LEFT ,KC_DOWN ,KC_UP ,KC_RGHT
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_SYMB] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,IT_EXLM ,IT_AT ,IT_LCBR ,IT_RCBR ,IT_PIPE ,_______ , _______ ,XXXXXXX ,KC_KP_7 ,KC_KP_8 ,KC_KP_9 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,IT_SHRP ,IT_DLR ,IT_LBRC ,IT_RBRC ,IT_GRV ,_______ , _______ ,XXXXXXX ,KC_KP_4 ,KC_KP_5 ,KC_KP_6 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,IT_PERC ,IT_CRC ,IT_LPRN ,IT_RPRN ,IT_TILD ,_______ ,_______ , _______ ,_______ ,XXXXXXX ,KC_KP_1 ,KC_KP_2 ,KC_KP_3 ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ , _______ , _______ ,_______ , _______ ,_______ , KC_KP_0 , KC_KP_0 ,KC_PDOT ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_NAV] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,KC_MS_U ,XXXXXXX ,KC_WH_U ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,KC_MS_L ,KC_MS_D ,KC_MS_R ,KC_WH_D ,XXXXXXX ,_______ , _______ ,KC_LEFT ,KC_DOWN ,KC_UP ,KC_RIGHT,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , KC_BTN1 , KC_BTN2 ,_______ , _______ ,_______ , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ ),
+
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 , KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,RESET ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ ,XXXXXXX , XXXXXXX ,_______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+ //├────────┼────────┼────────┼────────┼────┬───┴────┬───┼────────┼────────┤ ├────────┼────────┼───┬────┴───┬────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX , XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+ //└────────┴────────┴────────┴────────┘ └────────┘ └────────┴────────┘ └────────┴────────┘ └────────┘ └────────┴────────┴────────┴────────┘
+ )
+
+};
+
+void matrix_scan_user(void) {
+ uint8_t layer = biton32(layer_state);
+
+ switch (layer) {
+ case _QWERTY:
+ set_led_off;
+ break;
+ case _SYMB:
+ set_led_green;
+ break;
+ case _NAV:
+ set_led_blue;
+ break;
+ case _ADJUST:
+ set_led_red;
+ break;
+ default:
+ break;
+ }
+};
+
+
diff --git a/keyboards/redox_w/keymaps/italian/readme.md b/keyboards/redox_w/keymaps/italian/readme.md
new file mode 100644
index 000000000..a2b5ef707
--- /dev/null
+++ b/keyboards/redox_w/keymaps/italian/readme.md
@@ -0,0 +1 @@
+# Italian keymap for Redox Wireless
diff --git a/keyboards/redox_w/matrix.c b/keyboards/redox_w/matrix.c
new file mode 100644
index 000000000..5e61103f2
--- /dev/null
+++ b/keyboards/redox_w/matrix.c
@@ -0,0 +1,162 @@
+/* Copyright 2017 Mattia Dal Ben
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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>
+#if defined(__AVR__)
+#include <avr/io.h>
+#endif
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.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
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+
+__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;
+}
+
+void matrix_init(void) {
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ SERIAL_UART_INIT();
+
+ uint32_t timeout = 0;
+
+ //the s character requests the RF slave to send the matrix
+ SERIAL_UART_DATA = 's';
+
+ //trust the external keystates entirely, erase the last data
+ uint8_t uart_data[11] = {0};
+
+ //there are 14 bytes corresponding to 14 columns, and an end byte
+ for (uint8_t i = 0; i < 11; i++) {
+ //wait for the serial data, timeout if it's been too long
+ //this only happened in testing with a loose wire, but does no
+ //harm to leave it in here
+ while(!SERIAL_UART_RXD_PRESENT){
+ timeout++;
+ if (timeout > 10000){
+ break;
+ }
+ }
+ uart_data[i] = SERIAL_UART_DATA;
+ }
+
+ //check for the end packet, the key state bytes use the LSBs, so 0xE0
+ //will only show up here if the correct bytes were recieved
+ if (uart_data[10] == 0xE0)
+ {
+ //shifting and transferring the keystates to the QMK matrix variable
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 7;
+ }
+ }
+
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += matrix_bitpop(i);
+ }
+ return count;
+}
diff --git a/keyboards/redox_w/readme.md b/keyboards/redox_w/readme.md
new file mode 100644
index 000000000..83544a9fc
--- /dev/null
+++ b/keyboards/redox_w/readme.md
@@ -0,0 +1,34 @@
+Redox wireless
+=======
+
+<p align="center">
+<img src="https://github.com/mattdibi/redox-keyboard/raw/master/img/redox-logo.png" alt="Redox logo" width="600"/>
+</p>
+
+**Redox**: the **R**educed **E**rgo**dox** project. More information and building instruction [here](https://github.com/mattdibi/redox-keyboard).
+
+A wireless version of the Redox keyboard.
+
+- Keyboard Maintainer: [@mattdibi](https://github.com/mattdibi)
+- Hardware Supported: Redox-w rev1.0W PCB
+- Hardware Availability: Falbatech
+
+Make example for this keyboard (after setting up your build environment):
+
+```sh
+make redox_w:default
+```
+
+Example of flashing this keyboard:
+
+```sh
+make redox_w/rev1: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).
+
+For nRF51822 firmware upload instruction and development see [the Redox wireless firmware repository](https://github.com/mattdibi/redox-w-firmware).
+
+## Redox-w Notes
+
+These configuration files were based off the [Mitosis](https://github.com/qmk/qmk_firmware/tree/master/keyboards/mitosis) and [Atreus](https://github.com/technomancy/atreus) keyboard. It assumes a Pro Micro is being used, however retains the 'make upload' feature from the Atreus branch. This keyboard uses a completely different 'matrix scan' system to other keyboards, it relies on an external nRF51822 microcontroller maintaining a matrix of keystates received from the keyboard halves. The matrix.c file contains the code to poll the external microcontroller for the key matrix. As long as this file is not changed, all other QMK features are supported.
diff --git a/keyboards/redox_w/redox_w.c b/keyboards/redox_w/redox_w.c
new file mode 100644
index 000000000..75df91066
--- /dev/null
+++ b/keyboards/redox_w/redox_w.c
@@ -0,0 +1,42 @@
+#include "redox_w.h"
+
+void uart_init(void) {
+ SERIAL_UART_INIT();
+}
+
+void led_init(void) {
+ DDRD |= (1<<1);
+ PORTD |= (1<<1);
+ DDRF |= (1<<4) | (1<<5);
+ PORTF |= (1<<4) | (1<<5);
+}
+
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ matrix_init_user();
+ uart_init();
+ led_init();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+ matrix_scan_user();
+}
+
+void led_set_kb(uint8_t usb_led) {
+
+}
+
+#ifdef ONEHAND_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+{{13, 0}, {12, 0}, {11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+{{13, 1}, {12, 1}, {11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+{{13, 2}, {12, 2}, {11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+{{13, 3}, {12, 3}, {11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+{{13, 4}, {12, 4}, {11, 4}, {10, 4}, {9, 4}, {8, 4}, {7, 4}, {6, 4}, {5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
+};
+#endif
diff --git a/keyboards/redox_w/redox_w.h b/keyboards/redox_w/redox_w.h
new file mode 100644
index 000000000..3adcb121d
--- /dev/null
+++ b/keyboards/redox_w/redox_w.h
@@ -0,0 +1,40 @@
+#pragma once
+
+#include "quantum.h"
+#include "matrix.h"
+#include "backlight.h"
+#include <stddef.h>
+
+#define red_led_off PORTF |= (1<<5)
+#define red_led_on PORTF &= ~(1<<5)
+#define blu_led_off PORTF |= (1<<4)
+#define blu_led_on PORTF &= ~(1<<4)
+#define grn_led_off PORTD |= (1<<1)
+#define grn_led_on PORTD &= ~(1<<1)
+
+#define set_led_off red_led_off; grn_led_off; blu_led_off
+#define set_led_red red_led_on; grn_led_off; blu_led_off
+#define set_led_blue red_led_off; grn_led_off; blu_led_on
+#define set_led_green red_led_off; grn_led_on; blu_led_off
+#define set_led_yellow red_led_on; grn_led_on; blu_led_off
+#define set_led_magenta red_led_on; grn_led_off; blu_led_on
+#define set_led_cyan red_led_off; grn_led_on; blu_led_on
+#define set_led_white red_led_on; grn_led_on; blu_led_on
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k08, k09, k10, k11, k12, k13, \
+ k14, k15, k16, k17, k18, k19, k06, k07, k22, k23, k24, k25, k26, k27, \
+ k28, k29, k30, k31, k32, k33, k20, k21, k36, k37, k38, k39, k40, k41, \
+ k42, k43, k44, k45, k46, k47, k34, k48, k49, k35, k50, k51, k52, k53, k54, k55, \
+ k56, k57, k58, k59, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13 }, \
+ { k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27 }, \
+ { k28, k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41 }, \
+ { k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, k54, k55 }, \
+ { k56, k57, k58, k59, k60, k61, k62, k63, k64, k65, k66, k67, k68, k69 } \
+}
diff --git a/keyboards/redox_w/rules.mk b/keyboards/redox_w/rules.mk
new file mode 100644
index 000000000..f2f73d5c5
--- /dev/null
+++ b/keyboards/redox_w/rules.mk
@@ -0,0 +1,76 @@
+
+OPT_DEFS += -DREDOX_W_PROMICRO
+INTERPHASE_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
+ avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
+
+# # project specific files
+SRC = matrix.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
+# comment out to disable the options.
+#
+#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
+# 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
+
+USB = /dev/ttyACM0
+
+# upload: build
+# $(REDOX_W_UPLOAD_COMMAND)
diff --git a/keyboards/roadkit/keymaps/default/rules.mk b/keyboards/roadkit/keymaps/default/rules.mk
deleted file mode 100644
index f4671a9d1..000000000
--- a/keyboards/roadkit/keymaps/default/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/flipphone/rules.mk b/keyboards/roadkit/keymaps/flipphone/rules.mk
deleted file mode 100644
index f4671a9d1..000000000
--- a/keyboards/roadkit/keymaps/flipphone/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/khord/rules.mk b/keyboards/roadkit/keymaps/khord/rules.mk
deleted file mode 100644
index 9f3c958bd..000000000
--- a/keyboards/roadkit/keymaps/khord/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = 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 this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-TAP_DANCE_ENABLE = no # Enable Tap Dance functionality
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/roadkit/keymaps/mjt/rules.mk b/keyboards/roadkit/keymaps/mjt/rules.mk
deleted file mode 100644
index f4671a9d1..000000000
--- a/keyboards/roadkit/keymaps/mjt/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/singles/rules.mk b/keyboards/roadkit/keymaps/singles/rules.mk
deleted file mode 100644
index f4671a9d1..000000000
--- a/keyboards/roadkit/keymaps/singles/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/singlesBrent/rules.mk b/keyboards/roadkit/keymaps/singlesBrent/rules.mk
deleted file mode 100644
index b61d6cca2..000000000
--- a/keyboards/roadkit/keymaps/singlesBrent/rules.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = 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 this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-TAP_DANCE_ENABLE = yes # Enable Tap Dance functionality
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/roadkit/readme.md b/keyboards/roadkit/readme.md
deleted file mode 100644
index 245d5242a..000000000
--- a/keyboards/roadkit/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-roadkit
-=======
-
-A programmable macro pad.
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: Roadkit PCB
-Hardware Availability: https://thevankeyboards.com/collections/catalog/products/road-kit-diy?variant=603645345806
-
-Make example for this keyboard (after setting up your build environment):
-
- make roadkit:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/rorschach/keymaps/insertsnideremarks/config.h b/keyboards/rorschach/keymaps/insertsnideremarks/config.h
new file mode 100644
index 000000000..2048232c9
--- /dev/null
+++ b/keyboards/rorschach/keymaps/insertsnideremarks/config.h
@@ -0,0 +1,23 @@
+#pragma once
+
+/* Use I2C or Serial, not both */
+
+// #define USE_SERIAL
+#define USE_I2C
+
+/* Select hand configuration */
+
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
+
+#define IGNORE_MOD_TAP_INTERRUPT
+#define TAPPING_TERM 175
+#define TAPPING_TOGGLE 2
+
+// #undef RGBLED_NUM
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 12
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/rorschach/keymaps/insertsnideremarks/keymap.c b/keyboards/rorschach/keymaps/insertsnideremarks/keymap.c
new file mode 100644
index 000000000..5d93e2f05
--- /dev/null
+++ b/keyboards/rorschach/keymaps/insertsnideremarks/keymap.c
@@ -0,0 +1,289 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum rorschach_layers {
+ _COLEMAK, // Colemak (default layer)
+ _QWERTY, // Qwerty
+ _NUMBERS, // Numbers & Symbols
+ _NUMBERS2, // Numbers & Function Keys (similar to _NUMBERS; used with _NUMBERS for tri-layer access to _ADJUST)
+ _FUNCTION, // Function
+ _FUNCTION2, // Function 2 (identical as _FUNCTION; used to allow for easier use of space and backspace while using function layer arrows)
+ _NUMPAD, // Numpad
+ _ADJUST, // Adjust layer, accessed via tri-layer feature)
+ _ADJUST2 // Second Adjust layer, accessed outside of tri-layer feature)
+};
+
+enum rorschach_keycodes {
+ COLEMAK = SAFE_RANGE,
+ QWERTY,
+ NUMPAD = TG(_NUMPAD),
+ ADJUST = MO(_ADJUST2),
+ SPCFN = LT(_FUNCTION, KC_SPC),
+ BSPCFN = LT(_FUNCTION2, KC_BSPC),
+ ENTNS = LT(_NUMBERS, KC_ENT),
+ DELNS = LT(_NUMBERS2, KC_DEL),
+ CTLESC = CTL_T(KC_ESC),
+ ALTAPP = ALT_T(KC_APP),
+ NKROTG = MAGIC_TOGGLE_NKRO,
+};
+
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+//Tap Dance Declarations
+enum {
+ ADJ = 0,
+ LBCB,
+ RBCB,
+ EQPL,
+ PLEQ,
+ MNUN,
+ SLAS,
+ GVTL,
+ PPLEQ,
+ PMNUN,
+ PSLPAS
+};
+
+void dance_LAYER_finished(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 2) {
+ layer_on(_ADJUST2);
+ set_oneshot_layer(_ADJUST2, ONESHOT_START);
+ }
+}
+void dance_LAYER_reset(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 2) {
+ layer_off(_ADJUST2);
+ clear_oneshot_layer_state(ONESHOT_PRESSED);
+ }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+[ADJ] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, dance_LAYER_finished, dance_LAYER_reset), // Double-tap to activate Adjust layer via oneshot layer
+[LBCB] = ACTION_TAP_DANCE_DOUBLE(KC_LBRC, KC_LCBR), // Left bracket on a single-tap, left brace on a double-tap
+[RBCB] = ACTION_TAP_DANCE_DOUBLE(KC_RBRC, KC_RCBR), // Right bracket on a single-tap, right brace on a double-tap
+[EQPL] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_PLUS), // Plus sign on a single-tap, equal sign on a double-tap
+[PLEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PLUS, KC_EQL), // Equal sign on a single-tap, plus sign on a double-tap
+[MNUN] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_UNDS), // Minus sign on a single-tap, underscore on a double-tap
+[SLAS] = ACTION_TAP_DANCE_DOUBLE(KC_SLSH, KC_ASTR), // Slash in a single-tap, asterisk in a double-tap
+[GVTL] = ACTION_TAP_DANCE_DOUBLE(KC_GRV, KC_TILD), // Grave on a single-tap, tilde on a double-tap
+[PPLEQ] = ACTION_TAP_DANCE_DOUBLE(KC_PPLS, KC_EQL), // Numpad plus sign on a single-tap, equal sign on a double-tap
+[PMNUN] = ACTION_TAP_DANCE_DOUBLE(KC_PMNS, KC_UNDS), // Numpad minus sign on a single-tap, underscore on a double-tap
+[PSLPAS] = ACTION_TAP_DANCE_DOUBLE(KC_PSLS, KC_PAST) // Numpad slash on a single-tap, numpad asterisk on a double-tap
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Colemak
+* (Defauit layer; keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
+* ,-----------------------------------------------. ,-----------------------------------------------.
+* | Tab | Q | W | F | P | G | | J | L | U | Y | ; | \ |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* |Esc/Ctl| A | R | S | T | D | | H | N | E | I | O | ' |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | SC Sft| Z | X | C | V | B | | K | M | , | . | / | SC Sft|
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------'
+* | Ins | ` | [ | ] |App/Alt| Spc/FN| |Bsp/Fn2| RGUI | Left | Down | Up | Right |
+* `---------------------------------------+-------+-------. ,-------+-------+---------------------------------------'
+* | Ent/NS| Bspc | | Enter |Del/NS2|
+* `---------------' `---------------'
+*/
+[_COLEMAK] = LAYOUT(
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSLS,
+ CTLESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ KC_INS, KC_GRV, KC_LBRC, KC_RBRC, ALTAPP, SPCFN, BSPCFN, KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ ENTNS, KC_BSPC, KC_ENT, DELNS
+),
+
+/* QWERTY
+* (Keys separated by /: tap for first, hold for second; uses Space Cadet Shifts)
+* ,-----------------------------------------------. ,-----------------------------------------------.
+* | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* |Esc/Ctl| A | S | D | F | G | | H | J | K | L | ; | ' |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | SC Sft| Z | X | C | V | B | | N | M | , | . | / | SC Sft|
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------'
+* | Ins | ` | [ | ] |App/Alt| Spc/FN| |Bsp/Fn2| RGUI | Left | Down | Up | Right |
+* `---------------------------------------+-------+-------. ,-------+-------+---------------------------------------'
+* | Ent/NS| Bspc | | Enter |Del/NS2|
+* `---------------' `---------------'
+*/
+[_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_BSLS,
+ CTLESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ KC_INS, KC_GRV, KC_LBRC, KC_RBRC, ALTAPP, SPCFN, BSPCFN, KC_RGUI, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT,
+ ENTNS, KC_BSPC, KC_ENT, DELNS
+),
+
+/* Number/symbol layer
+* (Multiple characters: single-tap for first, double-tap for second)
+* ,-----------------------------------------------. ,-----------------------------------------------.
+* | | 6 | 7 | 8 | 9 | 0 | | ^ | & | * | ( | ) | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | | 1 | 2 | 3 | 4 | 5 | | ! | @ | # | $ | % | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | | | . | / * | - _ | + = | | ` ~ | [ { | ] } | | | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------'
+* | ( | ) | [ { | ] } | | | | | | | | | |
+* `---------------------------------------+-------+-------. ,-------+-------+---------------------------------------'
+* | | | | | |
+* `---------------' `---------------'
+*/
+[_NUMBERS] = LAYOUT(
+ _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______,
+ _______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ), TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
+ KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______
+),
+
+/* Number/Function Key layer
+* (Multiple characters: single-tap for first, double-tap for second)
+* ,-----------------------------------------------. ,-----------------------------------------------.
+* | | 6 | 7 | 8 | 9 | 0 | | F7 | F8 | F9 | F10 | F11 | F12 |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | | 1 | 2 | 3 | 4 | 5 | | F1 | F2 | F3 | F4 | F5 | F6 |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | | | . | / * | - _ | + = | | ` ~ | [ { | ] } | | | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------'
+* | ( | ) | [ { | ] } | | | | | | | | | |
+* `---------------------------------------+-------+-------. ,-------+-------+---------------------------------------'
+* | | | | | |
+* `---------------' `---------------'
+*/
+[_NUMBERS2] = LAYOUT(
+ _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+ _______, _______, KC_DOT, TD(SLAS), TD(MNUN), TD(PLEQ), TD(GVTL), TD(LBCB), TD(RBCB), _______, _______, _______,
+ KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______
+),
+
+/* Function layer
+* ,-----------------------------------------------. ,-----------------------------------------------.
+* | | | | Up | | | | | | Up | Ctrl+Y| | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | | Ctrl+A| Left | Down | Right |C+A+Tab| | PgUp | Right | Down | Left | Home | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | | Ctrl+Z| Ctrl+X| Ctrl+C| Ctrl+V| Bspc | | PgDn | Mute | Vol- | Vol+ | End | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------'
+* | | | | | | | | | | Prev | Play | Next | Stop |
+* `---------------------------------------+-------+-------. ,-------+-------+---------------------------------------'
+* | | | | | |
+* `---------------' `---------------'
+*/
+[_FUNCTION] = LAYOUT(
+ _______, _______, _______, KC_UP, _______, _______, _______, _______, KC_UP, LCTL(KC_Y), _______, _______,
+ _______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB), KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
+ _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
+ _______, _______, _______, _______
+),
+
+[_FUNCTION2] = LAYOUT(
+ _______, _______, _______, KC_UP, _______, _______, _______, _______, KC_UP, LCTL(KC_Y), _______, _______,
+ _______, LCTL(KC_A), KC_LEFT, KC_DOWN, KC_RGHT, LCA(KC_TAB), KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, KC_HOME, _______,
+ _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_BSPC, KC_PGDN, KC_MUTE, KC_VOLD, KC_VOLU, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, KC_MSTP,
+ _______, _______, _______, _______
+),
+
+/* Numpad layer
+* (Left side duplicates layout from the Numbers layer, just with numpad output; right side layout close to PC numpad layout)
+* ,-----------------------------------------------. ,-----------------------------------------------.
+* | | KP 6 | KP 7 | KP 8 | KP 9 | KP 0 | | NumLk | KP 7 | KP 8 | KP 9 | KP / | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | | KP 1 | KP 2 | KP 3 | KP 4 | KP 5 | | Tab | KP 4 | KP 5 | KP 6 | KP * | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | | NumLk | KP . |KP/ KP*| KP- _ | KP+ = | | | KP 1 | KP 2 | KP 3 | KP - | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------'
+* | ( | ) | [ { | ] } | | | | | KP 0 | = | KP . | KP + | |
+* `---------------------------------------+-------+-------. ,-------+-------+---------------------------------------'
+* | | | | KP Ent| |
+* `---------------' `---------------'
+*/
+[_NUMPAD] = LAYOUT(
+ _______, KC_P6, KC_P7, KC_P8, KC_P9, KC_P0, KC_NLCK, KC_P7, KC_P8, KC_P9, KC_PSLS, _______,
+ _______, KC_P1, KC_P2, KC_P3, KC_P4, KC_P5, KC_TAB, KC_P4, KC_P5, KC_P6, KC_PAST, _______,
+ _______, KC_NLCK, KC_PDOT, TD(PSLPAS), TD(PMNUN), TD(PPLEQ), _______, KC_P1, KC_P2, KC_P3, KC_PMNS, _______,
+ KC_LPRN, KC_RPRN, TD(LBCB), TD(RBCB), _______, _______, _______, KC_P0, KC_EQL, KC_PDOT, KC_PPLS, _______,
+ _______, _______, KC_PENT, _______
+),
+
+/* Adjust layer
+* (Enter/Number + Delete/Number2 to access; Numpad is a toggle)
+* ,-----------------------------------------------. ,-----------------------------------------------.
+* | |Colemak| Qwerty| | | | | Numpad| | | Ctrl+Y| | RESET |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | | | | | | | | |NKROTog| | | | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------|
+* | | | | | | | | | | | | | |
+* |-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------'
+* | | | | | | | | | | | | | |
+* `---------------------------------------+-------+-------. ,-------+-------+---------------------------------------'
+* | | | | | |
+* `---------------' `---------------'
+*/
+[_ADJUST] = LAYOUT(
+ _______, COLEMAK, QWERTY, _______, _______, _______, NUMPAD, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, NKROTG, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______
+),
+
+[_ADJUST2] = LAYOUT(
+ _______, COLEMAK, QWERTY, _______, _______, _______, NUMPAD, _______, _______, _______, _______, RESET,
+ _______, _______, _______, _______, _______, _______, _______, NKROTG, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______
+)
+
+};
+
+uint32_t layer_state_set_user(uint32_t state) {
+ return update_tri_layer_state(state, _NUMBERS, _NUMBERS2, _ADJUST);
+}
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case COLEMAK:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL << _COLEMAK);
+ layer_off ( _QWERTY);
+ layer_off ( _NUMBERS);
+ layer_off ( _NUMBERS2);
+ layer_off ( _FUNCTION);
+ layer_off ( _FUNCTION2);
+ layer_off ( _NUMPAD);
+ layer_off ( _ADJUST);
+ layer_off ( _ADJUST2);
+ }
+ return false;
+ break;
+ case QWERTY:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL << _QWERTY);
+ layer_off ( _COLEMAK);
+ layer_off ( _NUMBERS);
+ layer_off ( _NUMBERS2);
+ layer_off ( _FUNCTION);
+ layer_off ( _FUNCTION2);
+ layer_off ( _NUMPAD);
+ layer_off ( _ADJUST);
+ layer_off ( _ADJUST2);
+ }
+ return false;
+ break;
+ }
+ return true;
+} \ No newline at end of file
diff --git a/keyboards/rorschach/keymaps/insertsnideremarks/rules.mk b/keyboards/rorschach/keymaps/insertsnideremarks/rules.mk
new file mode 100644
index 000000000..b9e39c053
--- /dev/null
+++ b/keyboards/rorschach/keymaps/insertsnideremarks/rules.mk
@@ -0,0 +1,19 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = yes # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = yes # Enable Tap Dancing function
diff --git a/keyboards/rorschach/rev1/config.h b/keyboards/rorschach/rev1/config.h
index 1c9ef8276..1ea6dde98 100644
--- a/keyboards/rorschach/rev1/config.h
+++ b/keyboards/rorschach/rev1/config.h
@@ -42,6 +42,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCING_DELAY 5
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/rorschach/rules.mk b/keyboards/rorschach/rules.mk
index 9de068d2f..320125348 100644
--- a/keyboards/rorschach/rules.mk
+++ b/keyboards/rorschach/rules.mk
@@ -17,7 +17,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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/s60_x/keymaps/ansi_qwertz/rules.mk b/keyboards/s60_x/keymaps/ansi_qwertz/rules.mk
index 6a078bcc3..cf5012252 100644
--- a/keyboards/s60_x/keymaps/ansi_qwertz/rules.mk
+++ b/keyboards/s60_x/keymaps/ansi_qwertz/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/s60_x/keymaps/bluebear/config.h b/keyboards/s60_x/keymaps/bluebear/config.h
index 35754b523..10bddf0d3 100644
--- a/keyboards/s60_x/keymaps/bluebear/config.h
+++ b/keyboards/s60_x/keymaps/bluebear/config.h
@@ -105,7 +105,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
// Space Cadet Rollover - if set, allows to tap opposite shift key to cancel erroneous press
#define DISABLE_SPACE_CADET_ROLLOVER
-// Prevent stuck modifiers
-#define PREVENT_STUCK_MODIFIERS
-
#endif
diff --git a/keyboards/s60_x/keymaps/bluebear/rules.mk b/keyboards/s60_x/keymaps/bluebear/rules.mk
index 78d770d26..b7c9a0479 100644
--- a/keyboards/s60_x/keymaps/bluebear/rules.mk
+++ b/keyboards/s60_x/keymaps/bluebear/rules.mk
@@ -9,6 +9,6 @@ MIDI_ENABLE = yes # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = no # Enable tap dancing keys \ No newline at end of file
diff --git a/keyboards/s60_x/readme.md b/keyboards/s60_x/readme.md
index 1a309e4fe..ddb0d4ba6 100644
--- a/keyboards/s60_x/readme.md
+++ b/keyboards/s60_x/readme.md
@@ -2,8 +2,8 @@ S60-x
=====
DIY compact keyboard designed by VinnyCordeiro for Sentraq. Most of the keymaps are based on GH60 code. This is a port from TMK to QMK based on the [original S60-X Repo](https://github.com/VinnyCordeiro/tmk_keyboard).
-Keyboard Maintainer: QMK Community
-Hardware Supported: S60-x PCB
+Keyboard Maintainer: QMK Community
+Hardware Supported: S60-x PCB
Hardware Availability: https://www.massdrop.com/buy/sentraq-60-diy-keyboard-kit?mode=guest_open
There are two versions of this keyboard, an RGB and a non RGB one.
diff --git a/keyboards/s60_x/rgb/config.h b/keyboards/s60_x/rgb/config.h
index ec8b0f49e..d9c26658d 100644
--- a/keyboards/s60_x/rgb/config.h
+++ b/keyboards/s60_x/rgb/config.h
@@ -17,9 +17,6 @@
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN F6
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
@@ -29,4 +26,4 @@
#define RGBLIGHT_VAL_STEP 8
#endif
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/s65_plus/config.h b/keyboards/s65_plus/config.h
index df60e60a8..60512db46 100644
--- a/keyboards/s65_plus/config.h
+++ b/keyboards/s65_plus/config.h
@@ -49,7 +49,4 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#endif
diff --git a/keyboards/s65_plus/info.json b/keyboards/s65_plus/info.json
new file mode 100644
index 000000000..14c5b08d9
--- /dev/null
+++ b/keyboards/s65_plus/info.json
@@ -0,0 +1,92 @@
+{
+ "keyboard_name": "S65-Plus",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ansi": {
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"F2", "x":1, "y":0},
+ {"label":"ESC", "x":2, "y":0},
+ {"label":"1", "x":3, "y":0},
+ {"label":"2", "x":4, "y":0},
+ {"label":"3", "x":5, "y":0},
+ {"label":"4", "x":6, "y":0},
+ {"label":"5", "x":7, "y":0},
+ {"label":"6", "x":8, "y":0},
+ {"label":"7", "x":9, "y":0},
+ {"label":"8", "x":10, "y":0},
+ {"label":"9", "x":11, "y":0},
+ {"label":"0", "x":12, "y":0},
+ {"label":"MINUS", "x":13, "y":0},
+ {"label":"EQUAL", "x":14, "y":0},
+ {"label":"BACKSPACE", "x":15, "y":0, "w":2},
+ {"label":"DELETE", "x":17, "y":0},
+ {"label":"F3", "x":0, "y":1},
+ {"label":"F4", "x":1, "y":1},
+ {"label":"TAB", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"LBRACKET", "x":13.5, "y":1},
+ {"label":"RBRACKET", "x":14.5, "y":1},
+ {"label":"BACKSLASH", "x":15.5, "y":1, "w":1.5},
+ {"label":"PAGEUP", "x":17, "y":1},
+ {"label":"F5", "x":0, "y":2},
+ {"label":"F6", "x":1, "y":2},
+ {"label":"CAPSLOCK", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":"SEMICOLON", "x":12.75, "y":2},
+ {"label":"QUOTE", "x":13.75, "y":2},
+ {"label":"ENTER", "x":14.75, "y":2, "w":2.25},
+ {"label":"PAGEDOWN", "x":17, "y":2},
+ {"label":"F7", "x":0, "y":3},
+ {"label":"F8", "x":1, "y":3},
+ {"label":"LSHIFT", "x":2, "y":3, "w":2.25},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"COMMA", "x":11.25, "y":3},
+ {"label":"PERIOD", "x":12.25, "y":3},
+ {"label":"SLASH", "x":13.25, "y":3},
+ {"label":"RSHIFT", "x":14.25, "y":3, "w":1.75},
+ {"label":"UP", "x":16, "y":3},
+ {"label":"END", "x":17, "y":3},
+ {"label":"F9", "x":0, "y":4},
+ {"label":"F10", "x":1, "y":4},
+ {"label":"LCTRL", "x":2, "y":4, "w":1.25},
+ {"label":"LGUI", "x":3.25, "y":4, "w":1.25},
+ {"label":"LALT", "x":4.5, "y":4, "w":1.25},
+ {"label":"SPACE", "x":5.75, "y":4, "w":6.25},
+ {"label":"RALT", "x":12, "y":4},
+ {"label":"FN", "x":13, "y":4},
+ {"label":"RCTRL", "x":14, "y":4},
+ {"label":"LEFT", "x":15, "y":4},
+ {"label":"DOWN", "x":16, "y":4},
+ {"label":"RIGHT", "x":17, "y":4}
+ ]
+ }
+ }
+}
+
diff --git a/keyboards/s65_plus/s65_plus.h b/keyboards/s65_plus/s65_plus.h
index 2ff445f6c..107557108 100644
--- a/keyboards/s65_plus/s65_plus.h
+++ b/keyboards/s65_plus/s65_plus.h
@@ -1,5 +1,4 @@
-#ifndef S60PLUS_H
-#define S60PLUS_H
+#pragma once
#include "quantum.h"
@@ -20,4 +19,3 @@
void matrix_init_user(void);
void matrix_scan_user(void);
-#endif
diff --git a/keyboards/s65_x/config.h b/keyboards/s65_x/config.h
index 8288ef783..367efc526 100644
--- a/keyboards/s65_x/config.h
+++ b/keyboards/s65_x/config.h
@@ -49,8 +49,4 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#endif
diff --git a/keyboards/s7_elephant/config.h b/keyboards/s7_elephant/config.h
new file mode 100644
index 000000000..55baa4c37
--- /dev/null
+++ b/keyboards/s7_elephant/config.h
@@ -0,0 +1,47 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0007
+#define DEVICE_VER 0x0001
+#define MANUFACTURER jacky
+#define PRODUCT S7 Elephant
+#define DESCRIPTION A high-end 70% custom keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0, B1, B2, B3, B4 }
+#define MATRIX_COL_PINS { B6, D0, D1, D2, D3, D4, D5, D6, D7, C6, C7, F4, F5, F6, F7, F1 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#define RGB_DI_PIN E6
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 2
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#define RGBLIGHT_SLEEP
+#endif
diff --git a/keyboards/s7_elephant/info.json b/keyboards/s7_elephant/info.json
new file mode 100644
index 000000000..972f20ce0
--- /dev/null
+++ b/keyboards/s7_elephant/info.json
@@ -0,0 +1,2348 @@
+{
+ "keyboard_name": "S7 Elephant",
+ "url": "https://geekhack.org/index.php?topic=96434.0",
+ "maintainer": "qmk",
+ "width": 18,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ansi": {
+ "key_count": 72,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":2.25},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_small_lshift": {
+ "key_count": 73,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_small_bspc": {
+ "key_count": 73,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":2.25},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_small_lshift_small_bspc": {
+ "key_count": 74,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_1u": {
+ "key_count": 73,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":2.25},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4},
+ {"label":"Alt", "x":13, "y":4},
+ {"label":"Ctrl", "x":14, "y":4},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_1u_small_lshift": {
+ "key_count": 74,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4},
+ {"label":"Alt", "x":13, "y":4},
+ {"label":"Ctrl", "x":14, "y":4},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_1u_small_bspc": {
+ "key_count": 74,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":2.25},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4},
+ {"label":"Alt", "x":13, "y":4},
+ {"label":"Ctrl", "x":14, "y":4},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_1u_small_lshift_small_bspc": {
+ "key_count": 75,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4},
+ {"label":"Alt", "x":13, "y":4},
+ {"label":"Ctrl", "x":14, "y":4},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_7u": {
+ "key_count": 71,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":2.25},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4, "w":1.5},
+ {"x":5, "y":4, "w":7},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_7u_small_lshift": {
+ "key_count": 72,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4, "w":1.5},
+ {"x":5, "y":4, "w":7},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_7u_small_bspc": {
+ "key_count": 72,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":2.25},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4, "w":1.5},
+ {"x":5, "y":4, "w":7},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_7u_small_lshift_small_bspc": {
+ "key_count": 73,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4, "w":1.5},
+ {"x":5, "y":4, "w":7},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_blocker": {
+ "key_count": 72,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":2.25},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.25, "y":4, "w":1.25},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_small_lshift": {
+ "key_count": 73,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.25, "y":4, "w":1.25},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_small_bspc": {
+ "key_count": 73,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":2.25},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.25, "y":4, "w":1.25},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_small_lshift_small_bspc": {
+ "key_count": 74,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.25, "y":4, "w":1.25},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_7u": {
+ "key_count": 71,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":2.25},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.5},
+ {"x":6, "y":4, "w":6.75},
+ {"label":"Fn", "x":12.75, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_7u_small_lshift": {
+ "key_count": 72,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.5},
+ {"x":6, "y":4, "w":6.75},
+ {"label":"Fn", "x":12.75, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_7u_small_bspc": {
+ "key_count": 72,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":2.25},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.5},
+ {"x":6, "y":4, "w":6.75},
+ {"label":"Fn", "x":12.75, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_ansi_blocker_7u_small_lshift_small_bspc": {
+ "key_count": 73,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"|", "x":15.5, "y":1, "w":1.5},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"Enter", "x":14.75, "y":2, "w":2.25},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.5},
+ {"x":6, "y":4, "w":6.75},
+ {"label":"Fn", "x":12.75, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_iso": {
+ "key_count": 73,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"|", "x":14.75, "y":2},
+ {"label":"Enter", "x":15.75, "y":1, "w":1.25, "h":2},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_iso_small_bspc": {
+ "key_count": 74,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"|", "x":14.75, "y":2},
+ {"label":"Enter", "x":15.75, "y":1, "w":1.25, "h":2},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_iso_1u": {
+ "key_count": 74,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"|", "x":14.75, "y":2},
+ {"label":"Enter", "x":15.75, "y":1, "w":1.25, "h":2},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4},
+ {"label":"Alt", "x":13, "y":4},
+ {"label":"Ctrl", "x":14, "y":4},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_iso_1u_small_bspc": {
+ "key_count": 75,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"|", "x":14.75, "y":2},
+ {"label":"Enter", "x":15.75, "y":1, "w":1.25, "h":2},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4},
+ {"label":"Alt", "x":13, "y":4},
+ {"label":"Ctrl", "x":14, "y":4},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_iso_7u": {
+ "key_count": 72,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"|", "x":14.75, "y":2},
+ {"label":"Enter", "x":15.75, "y":1, "w":1.25, "h":2},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4, "w":1.5},
+ {"x":5, "y":4, "w":7},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_iso_7u_small_bspc": {
+ "key_count": 73,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"|", "x":14.75, "y":2},
+ {"label":"Enter", "x":15.75, "y":1, "w":1.25, "h":2},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4, "w":1.5},
+ {"x":5, "y":4, "w":7},
+ {"label":"Fn", "x":12, "y":4, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_iso_blocker": {
+ "key_count": 73,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"|", "x":14.75, "y":2},
+ {"label":"Enter", "x":15.75, "y":1, "w":1.25, "h":2},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.25, "y":4, "w":1.25},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_iso_blocker_small_bspc": {
+ "key_count": 74,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"|", "x":14.75, "y":2},
+ {"label":"Enter", "x":15.75, "y":1, "w":1.25, "h":2},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.25},
+ {"label":"Win", "x":3.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.25},
+ {"x":5.75, "y":4, "w":6.25},
+ {"label":"Fn", "x":12, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.25, "y":4, "w":1.25},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_iso_blocker_7u": {
+ "key_count": 72,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0, "w":2},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"|", "x":14.75, "y":2},
+ {"label":"Enter", "x":15.75, "y":1, "w":1.25, "h":2},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.5},
+ {"x":6, "y":4, "w":6.75},
+ {"label":"Fn", "x":12.75, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ },
+ "LAYOUT_iso_blocker_7u_small_bspc": {
+ "key_count": 73,
+ "layout": [
+ {"label":"F1", "x":0, "y":0},
+ {"label":"Esc", "x":2, "y":0},
+ {"label":"!", "x":3, "y":0},
+ {"label":"@", "x":4, "y":0},
+ {"label":"#", "x":5, "y":0},
+ {"label":"$", "x":6, "y":0},
+ {"label":"%", "x":7, "y":0},
+ {"label":"^", "x":8, "y":0},
+ {"label":"&", "x":9, "y":0},
+ {"label":"*", "x":10, "y":0},
+ {"label":"(", "x":11, "y":0},
+ {"label":")", "x":12, "y":0},
+ {"label":"_", "x":13, "y":0},
+ {"label":"+", "x":14, "y":0},
+ {"label":"Backspace", "x":15, "y":0},
+ {"x":16, "y":0},
+ {"label":"Home", "x":17, "y":0},
+ {"label":"F2", "x":0, "y":1},
+ {"label":"Tab", "x":2, "y":1, "w":1.5},
+ {"label":"Q", "x":3.5, "y":1},
+ {"label":"W", "x":4.5, "y":1},
+ {"label":"E", "x":5.5, "y":1},
+ {"label":"R", "x":6.5, "y":1},
+ {"label":"T", "x":7.5, "y":1},
+ {"label":"Y", "x":8.5, "y":1},
+ {"label":"U", "x":9.5, "y":1},
+ {"label":"I", "x":10.5, "y":1},
+ {"label":"O", "x":11.5, "y":1},
+ {"label":"P", "x":12.5, "y":1},
+ {"label":"{", "x":13.5, "y":1},
+ {"label":"}", "x":14.5, "y":1},
+ {"label":"End", "x":17, "y":1},
+ {"label":"F3", "x":0, "y":2},
+ {"label":"Caps Lock", "x":2, "y":2, "w":1.75},
+ {"label":"A", "x":3.75, "y":2},
+ {"label":"S", "x":4.75, "y":2},
+ {"label":"D", "x":5.75, "y":2},
+ {"label":"F", "x":6.75, "y":2},
+ {"label":"G", "x":7.75, "y":2},
+ {"label":"H", "x":8.75, "y":2},
+ {"label":"J", "x":9.75, "y":2},
+ {"label":"K", "x":10.75, "y":2},
+ {"label":"L", "x":11.75, "y":2},
+ {"label":":", "x":12.75, "y":2},
+ {"label":"\"", "x":13.75, "y":2},
+ {"label":"|", "x":14.75, "y":2},
+ {"label":"Enter", "x":15.75, "y":1, "w":1.25, "h":2},
+ {"label":"Ins", "x":17, "y":2},
+ {"label":"F4", "x":0, "y":3},
+ {"label":"Shift", "x":2, "y":3, "w":1.25},
+ {"x":3.25, "y":3},
+ {"label":"Z", "x":4.25, "y":3},
+ {"label":"X", "x":5.25, "y":3},
+ {"label":"C", "x":6.25, "y":3},
+ {"label":"V", "x":7.25, "y":3},
+ {"label":"B", "x":8.25, "y":3},
+ {"label":"N", "x":9.25, "y":3},
+ {"label":"M", "x":10.25, "y":3},
+ {"label":"<", "x":11.25, "y":3},
+ {"label":">", "x":12.25, "y":3},
+ {"label":"?", "x":13.25, "y":3},
+ {"label":"Shift", "x":14.25, "y":3, "w":1.75},
+ {"label":"Up", "x":16, "y":3},
+ {"label":"Del", "x":17, "y":3},
+ {"label":"F5", "x":0, "y":4},
+ {"label":"Ctrl", "x":2, "y":4, "w":1.5},
+ {"label":"Win", "x":3.5, "y":4},
+ {"label":"Alt", "x":4.5, "y":4, "w":1.5},
+ {"x":6, "y":4, "w":6.75},
+ {"label":"Fn", "x":12.75, "y":4, "w":1.5},
+ {"label":"Left", "x":15, "y":4},
+ {"label":"Down", "x":16, "y":4},
+ {"label":"Right", "x":17, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/s7_elephant/keymaps/default/config.h b/keyboards/s7_elephant/keymaps/default/config.h
new file mode 100644
index 000000000..85f62371e
--- /dev/null
+++ b/keyboards/s7_elephant/keymaps/default/config.h
@@ -0,0 +1 @@
+#define RGBLIGHT_LIMIT_VAL 80
diff --git a/keyboards/s7_elephant/keymaps/default/keymap.c b/keyboards/s7_elephant/keymaps/default/keymap.c
new file mode 100644
index 000000000..339f2d379
--- /dev/null
+++ b/keyboards/s7_elephant/keymaps/default/keymap.c
@@ -0,0 +1,64 @@
+#include QMK_KEYBOARD_H
+
+enum custom_layers {
+ _QWERTY,
+ _FN
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | F1 | | Esc`~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc |Home |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | F2 | | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | End |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | F3 | | Caps | A | S | D | F | G | H | J | K | L | ; | ' | Enter | Ins |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | F4 | | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | U | Del |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | F5 | | Ctrl | Gui | Alt | Space | FN | RCtrl | L | D | R |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+[_QWERTY] = LAYOUT_ansi(
+KC_F1, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS,
+KC_F2, KC_TAB, KC_Q, KC_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_F3, KC_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_HOME,
+KC_F4, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+KC_F5, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+),
+
+/* FN
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * |Reset | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr | ScrLck |Pause|
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | |Prev |Play |Next | | | | |VolD |Mute |VolU | | |PgUp |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | |PgDn |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * |EEPRST| | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+[_FN] = LAYOUT_ansi(
+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_PSCR, KC_SLCK, KC_PAUS,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+_______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, KC_PGUP,
+_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN,
+EEP_RST, _______, _______, _______, _______, _______, _______, _______, _______, _______
+),
+};
+
+void led_set_user(uint8_t usb_led) {
+ // Turn LEDs On/Off for Caps Lock
+ if (host_keyboard_leds() & (1 << USB_LED_CAPS_LOCK)) {
+ rgblight_enable_noeeprom();
+ rgblight_sethsv_noeeprom(0, 0, 80);
+ } else {
+ rgblight_sethsv_noeeprom(0, 0, 80);
+ rgblight_disable_noeeprom();
+ }
+}
diff --git a/keyboards/s7_elephant/keymaps/default/readme.md b/keyboards/s7_elephant/keymaps/default/readme.md
new file mode 100644
index 000000000..c4fe30acd
--- /dev/null
+++ b/keyboards/s7_elephant/keymaps/default/readme.md
@@ -0,0 +1,35 @@
+# Default keymap for S7 Elephant
+
+**Features**
+
+* LEDs are functioning as Caps-Lock indicators
+
+## QWERTY (Normal) Layer
+```
+,------. ,-------------------------------------------------------------------------------------------------.
+| F1 | | Esc`~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Bkspc |Home |
+|------| |-------------------------------------------------------------------------------------------------|
+| F2 | | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | End |
+|------| |-------------------------------------------------------------------------------------------------|
+| F3 | | Caps | A | S | D | F | G | H | J | K | L | ; | ' | Enter | Ins |
+|------| |-------------------------------------------------------------------------------------------------|
+| F4 | | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | U | Del |
+|------| |-------------------------------------------------------------------------------------------------|
+| F5 | | Ctrl | Gui | Alt | Space | FN | RAlt | RCtrl | L | D | R |
+`------' `-------------------------------------------------------------------------------------------------'
+```
+
+## FN Layer
+```
+,------. ,-------------------------------------------------------------------------------------------------.
+|Reset | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | PScr | ScrLck |Pause|
+|------| |-------------------------------------------------------------------------------------------------|
+| | | | | | | | | | | | | | | | | |
+|------| |-------------------------------------------------------------------------------------------------|
+| | | |Prev |Play |Next | | | | |VolD |Mute |VolU | | |PgUp |
+|------| |-------------------------------------------------------------------------------------------------|
+| | | | | | | | | | | | | | | |PgDn |
+|------| |-------------------------------------------------------------------------------------------------|
+|EPRM | | | | | | | | | | | |
+`------' `-------------------------------------------------------------------------------------------------'
+```
diff --git a/keyboards/s7_elephant/readme.md b/keyboards/s7_elephant/readme.md
new file mode 100644
index 000000000..466e3f731
--- /dev/null
+++ b/keyboards/s7_elephant/readme.md
@@ -0,0 +1,17 @@
+# S7 Elephant
+
+![S7 Elephant](https://i.imgur.com/CaHxKBJ.jpg)
+
+A high-end 70% custom keyboard designed and produced by [jacky](https://geekhack.org/index.php?action=profile;u=63864) from Geekhack.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: S7 Elephant
+Hardware Availability: [The GB has ended with little chance to run again.](https://geekhack.org/index.php?topic=96434.0)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make s7_elephant:default:dfu
+
+To enter the bootloader, either short the pins on the PCB or the RESET button on the FN layer.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/s7_elephant/rules.mk b/keyboards/s7_elephant/rules.mk
new file mode 100644
index 000000000..7f0ad6d3c
--- /dev/null
+++ b/keyboards/s7_elephant/rules.mk
@@ -0,0 +1,52 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard underlight functionality
diff --git a/keyboards/s7_elephant/s7_elephant.c b/keyboards/s7_elephant/s7_elephant.c
new file mode 100644
index 000000000..a869f46db
--- /dev/null
+++ b/keyboards/s7_elephant/s7_elephant.c
@@ -0,0 +1 @@
+#include "s7_elephant.h"
diff --git a/keyboards/s7_elephant/s7_elephant.h b/keyboards/s7_elephant/s7_elephant.h
new file mode 100644
index 000000000..c351ffdb9
--- /dev/null
+++ b/keyboards/s7_elephant/s7_elephant.h
@@ -0,0 +1,855 @@
+#ifndef S7_ELEPHANT_H
+#define S7_ELEPHANT_H
+
+#include "quantum.h"
+
+#define ____ KC_NO
+
+/* ANSI
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, ____, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ANSI with small shift
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi_small_lshift( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ANSI with small backspace
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, ____, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ANSI with small shift and small backspace
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi_small_lshift_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* **************************************************************************************************************************************** */
+/* ANSI with 1u keys in the bottom row
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi_1u( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K412, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, ____, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, K412, K413, K414, K415 } \
+}
+
+/* ANSI with small shift and 1u keys in the bottom row
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi_1u_small_lshift( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K412, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, K412, K413, K414, K415 } \
+}
+
+/* ANSI with small backspace and 1u keys in the bottom row
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi_1u_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K412, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, ____, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, K412, K413, K414, K415 } \
+}
+
+/* ANSI with small shift and small backspace and 1u keys in the bottom row
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi_1u_small_lshift_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K412, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, K412, K413, K414, K415 } \
+}
+
+/* **************************************************************************************************************************************** */
+/* ANSI with 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi_7u( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, ____, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, ____, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ANSI with small shift and 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi_7u_small_lshift( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, ____, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ANSI with small backspace and 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi_7u_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, ____, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, ____, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ANSI with small shift and small backspace and 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_ansi_7u_small_lshift_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, ____, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* **************************************************************************************************************************************** */
+/* ANSI with blocker
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------- -------------------'
+ */
+
+#define LAYOUT_ansi_blocker( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, ____, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ANSI with blocker and small shift
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------- -------------------'
+ */
+
+#define LAYOUT_ansi_blocker_small_lshift( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ANSI with blocker and small backspace
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------- -------------------'
+ */
+
+#define LAYOUT_ansi_blocker_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, ____, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ANSI with blocker and small shift and small backspace
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------- -------------------'
+ */
+
+#define LAYOUT_ansi_blocker_small_lshift_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* **************************************************************************************************************************************** */
+/* ANSI with blocker and 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `--------------------------------------------------------------------------- ------------------'
+ */
+
+#define LAYOUT_ansi_blocker_7u( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, ____, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, ____, ____, K413, K414, K415 } \
+}
+
+/* ANSI with blocker and small shift and 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `--------------------------------------------------------------------------- ------------------'
+ */
+
+#define LAYOUT_ansi_blocker_7u_small_lshift( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, ____, ____, K413, K414, K415 } \
+}
+
+/* ANSI with blocker and small backspace and 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `--------------------------------------------------------------------------- ------------------'
+ */
+
+#define LAYOUT_ansi_blocker_7u_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, ____, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, ____, ____, K413, K414, K415 } \
+}
+
+/* ANSI with blocker and small shift and small backspace and 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `--------------------------------------------------------------------------- ------------------'
+ */
+
+#define LAYOUT_ansi_blocker_7u_small_lshift_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, ____, ____, K413, K414, K415 } \
+}
+
+/* **************************************************************************************************************************************** */
+/* ISO
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |------------------------------------------------------------------------------------ |-----|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_iso( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ISO with small backspace
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |------------------------------------------------------------------------------------ |-----|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_iso_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* **************************************************************************************************************************************** */
+/* ISO with 1u keys in the bottom row
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |------------------------------------------------------------------------------------ |-----|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_iso_1u( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K412, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, K412, K413, K414, K415 } \
+}
+
+/* ISO with small backspace and 1u keys in the bottom row
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |------------------------------------------------------------------------------------ |-----|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_iso_1u_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K412, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, K412, K413, K414, K415 } \
+}
+
+/* **************************************************************************************************************************************** */
+/* ISO with 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |------------------------------------------------------------------------------------ |-----|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_iso_7u( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, ____, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ISO with small backspace and 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |------------------------------------------------------------------------------------ |-----|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------------------------------'
+ */
+
+#define LAYOUT_iso_7u_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, ____, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+/* **************************************************************************************************************************************** */
+/* ISO with blocker
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |------------------------------------------------------------------------------------ |-----|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------- -------------------'
+ */
+
+#define LAYOUT_iso_blocker( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* ISO with blocker and small backspace
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |------------------------------------------------------------------------------------ |-----|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * `------' `-------------------------------------------------------------------------- -------------------'
+ */
+
+#define LAYOUT_iso_blocker_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K411, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, K411, ____, K413, K414, K415 } \
+}
+
+/* **************************************************************************************************************************************** */
+/* ISO with blocker and 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |------------------------------------------------------------------------------------ |-----|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `--------------------------------------------------------------------------- ------------------'
+ */
+
+#define LAYOUT_iso_blocker_7u( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, ____, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, ____, ____, K413, K414, K415 } \
+}
+
+/* ISO with blocker and small backspace and 7u spacebar
+ * ,------. ,-------------------------------------------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ | | | | | | | | | | | | | | | | | |
+ * |------| |------------------------------------------------------------------------------------ |-----|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | | | |
+ * |------| |-------------------------------------------------------------------------------------------------|
+ * | | | | | | | | | | | |
+ * `------' `--------------------------------------------------------------------------- ------------------'
+ */
+
+#define LAYOUT_iso_blocker_7u_small_bspc( \
+K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K013, K214, K015, \
+K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
+K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K114, K213, K215, \
+K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, \
+K400, K401, K402, K403, K407, K410, K413, K414, K415 \
+) { \
+{ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+{ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115 }, \
+{ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215 }, \
+{ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315 }, \
+{ K400, K401, K402, K403, ____, ____, ____, K407, ____, ____, K410, ____, ____, K413, K414, K415 } \
+}
+#endif
diff --git a/keyboards/satan/info.json b/keyboards/satan/info.json
index d0beb723b..2b2e96ed1 100644
--- a/keyboards/satan/info.json
+++ b/keyboards/satan/info.json
@@ -20,8 +20,11 @@
"LAYOUT_60_iso_split_bs_rshift": {
"layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0}, {"label":"k05", "x":5, "y":0}, {"label":"k06", "x":6, "y":0}, {"label":"k07", "x":7, "y":0}, {"label":"k08", "x":8, "y":0}, {"label":"k09", "x":9, "y":0}, {"label":"k0a", "x":10, "y":0}, {"label":"k0b", "x":11, "y":0}, {"label":"k0c", "x":12, "y":0}, {"label":"k0d", "x":13, "y":0}, {"label":"k49", "x":14, "y":0}, {"label":"k10", "x":0, "y":1, "w":1.5}, {"label":"k11", "x":1.5, "y":1}, {"label":"k12", "x":2.5, "y":1}, {"label":"k13", "x":3.5, "y":1}, {"label":"k14", "x":4.5, "y":1}, {"label":"k15", "x":5.5, "y":1}, {"label":"k16", "x":6.5, "y":1}, {"label":"k17", "x":7.5, "y":1}, {"label":"k18", "x":8.5, "y":1}, {"label":"k19", "x":9.5, "y":1}, {"label":"k1a", "x":10.5, "y":1}, {"label":"k1b", "x":11.5, "y":1}, {"label":"k1c", "x":12.5, "y":1}, {"label":"k20", "x":0, "y":2, "w":1.75}, {"label":"k21", "x":1.75, "y":2}, {"label":"k22", "x":2.75, "y":2}, {"label":"k23", "x":3.75, "y":2}, {"label":"k24", "x":4.75, "y":2}, {"label":"k25", "x":5.75, "y":2}, {"label":"k26", "x":6.75, "y":2}, {"label":"k27", "x":7.75, "y":2}, {"label":"k28", "x":8.75, "y":2}, {"label":"k29", "x":9.75, "y":2}, {"label":"k2a", "x":10.75, "y":2}, {"label":"k2b", "x":11.75, "y":2}, {"label":"k2c", "x":12.75, "y":2}, {"label":"k2d", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"k30", "x":0, "y":3, "w":1.25}, {"label":"k31", "x":1.25, "y":3}, {"label":"k32", "x":2.25, "y":3}, {"label":"k33", "x":3.25, "y":3}, {"label":"k34", "x":4.25, "y":3}, {"label":"k35", "x":5.25, "y":3}, {"label":"k36", "x":6.25, "y":3}, {"label":"k37", "x":7.25, "y":3}, {"label":"k38", "x":8.25, "y":3}, {"label":"k39", "x":9.25, "y":3}, {"label":"k3a", "x":10.25, "y":3}, {"label":"k3b", "x":11.25, "y":3}, {"label":"k3d", "x":12.25, "y":3, "w":1.75}, {"label":"k3c", "x":14, "y":3}, {"label":"k40", "x":0, "y":4, "w":1.5}, {"label":"k41", "x":1.5, "y":4}, {"label":"k42", "x":2.5, "y":4, "w":1.5}, {"label":"k45", "x":4, "y":4, "w":6}, {"label":"k4a", "x":10, "y":4, "w":1.5}, {"label":"k4b", "x":11.5, "y":4}, {"label":"k4c", "x":12.5, "y":4}, {"label":"k4d", "x":13.5, "y":4, "w":1.5}]
},
+ "LAYOUT_60_ansi_split_rshift": {
+ "layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0}, {"label":"k05", "x":5, "y":0}, {"label":"k06", "x":6, "y":0}, {"label":"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_60_iso_split_rshift": {
"layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k03", "x":3, "y":0}, {"label":"k04", "x":4, "y":0}, {"label":"k05", "x":5, "y":0}, {"label":"k06", "x":6, "y":0}, {"label":"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":"k20", "x":0, "y":2, "w":1.75}, {"label":"k21", "x":1.75, "y":2}, {"label":"k22", "x":2.75, "y":2}, {"label":"k23", "x":3.75, "y":2}, {"label":"k24", "x":4.75, "y":2}, {"label":"k25", "x":5.75, "y":2}, {"label":"k26", "x":6.75, "y":2}, {"label":"k27", "x":7.75, "y":2}, {"label":"k28", "x":8.75, "y":2}, {"label":"k29", "x":9.75, "y":2}, {"label":"k2a", "x":10.75, "y":2}, {"label":"k2b", "x":11.75, "y":2}, {"label":"k2c", "x":12.75, "y":2}, {"label":"k2d", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"k30", "x":0, "y":3, "w":1.25}, {"label":"k31", "x":1.25, "y":3}, {"label":"k32", "x":2.25, "y":3}, {"label":"k33", "x":3.25, "y":3}, {"label":"k34", "x":4.25, "y":3}, {"label":"k35", "x":5.25, "y":3}, {"label":"k36", "x":6.25, "y":3}, {"label":"k37", "x":7.25, "y":3}, {"label":"k38", "x":8.25, "y":3}, {"label":"k39", "x":9.25, "y":3}, {"label":"k3a", "x":10.25, "y":3}, {"label":"k3b", "x":11.25, "y":3}, {"label":"k3d", "x":12.25, "y":3, "w":1.75}, {"label":"k3c", "x":14, "y":3}, {"label":"k40", "x":0, "y":4, "w":1.25}, {"label":"k41", "x":1.25, "y":4, "w":1.25}, {"label":"k42", "x":2.5, "y":4, "w":1.25}, {"label":"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}]
}
}
-} \ No newline at end of file
+}
diff --git a/keyboards/satan/keymaps/abhixec/keymap.c b/keyboards/satan/keymaps/abhixec/keymap.c
new file mode 100644
index 000000000..59a8c4312
--- /dev/null
+++ b/keyboards/satan/keymaps/abhixec/keymap.c
@@ -0,0 +1,76 @@
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matix 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 _BL 0
+#define _FL 2
+#define _CL 1
+#define _EL 3
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------.
+ * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
+ * |-----------------------------------------------------------|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift| Del|
+ * |-----------------------------------------------------------|
+ * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl |
+ * `-----------------------------------------------------------'
+ */
+[_BL] = LAYOUT_60_ansi_split_rshift(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \
+ LT(_EL, 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, \
+ 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, \
+ KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RALT,KC_RGUI, MO(_FL),KC_RCTL),
+
+/* Keymap _CL: (Colemak Layer)
+ */
+[_CL] = LAYOUT_60_ansi_split_rshift(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_LBRC, KC_RBRC,KC_BSLS, \
+ LT(_EL, KC_BSPC), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O,KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_DEL, \
+ KC_LCTL, KC_LALT,KC_LGUI, KC_SPC, KC_RALT,KC_RGUI, MO(_FL),KC_RCTL),
+
+[_EL] = LAYOUT_60_ansi_split_rshift(
+
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, \
+ _______,KC_LCTL,KC_WH_U,_______,_______,KC_MS_U,KC_PGUP,KC_HOME,KC_UP,KC_END,KC_DEL, KC_GESC, _______,_______, \
+ _______,KC_LALT,KC_WH_D, KC_LSFT,_______,KC_MS_D,KC_PGDOWN,KC_LEFT,KC_DOWN,KC_RIGHT, KC_BSPC,_______,_______, \
+_______,KC_UNDO,KC_CUT,KC_COPY,KC_PASTE, KC_MS_BTN1, KC_MS_BTN3, KC_MS_BTN2,KC_MS_LEFT,KC_MS_RIGHT,_______,_______, _______, \
+ _______,_______,_______, _______, _______,_______,_______,_______),
+
+
+ /* Keymap _FL: Function Layer
+ * ,-----------------------------------------------------------.
+ * | KC_GRV|F1|F2|F3|F4|F5|F6|F7| F8 | F9 |10|F11|F12| |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | | |BL-|BL+|BL |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | |HOME| | |
+ * |-----------------------------------------------------------|
+ * | | | | | | |V_DWN|V_UP|MUTE | END || |_CL |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | |
+ * `-----------------------------------------------------------'
+ */
+
+[_FL] = LAYOUT_60_ansi_split_rshift(
+
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_PSCREEN, BL_DEC, BL_INC,BL_TOGG, \
+ _______,_______,_______,_______,_______,_______,_______,_______,_______,_______,KC_HOME,_______,_______, \
+ _______,_______,_______,_______,_______,_______,KC_AUDIO_VOL_DOWN,KC_AUDIO_VOL_UP,KC_AUDIO_MUTE,KC_END,_______,_______, TG(_CL), \
+ _______,_______,_______, _______, _______,_______,_______,_______)
+
+};
+
diff --git a/keyboards/satan/keymaps/abhixec/readme.md b/keyboards/satan/keymaps/abhixec/readme.md
new file mode 100644
index 000000000..59a95b7fc
--- /dev/null
+++ b/keyboards/satan/keymaps/abhixec/readme.md
@@ -0,0 +1,19 @@
+# default Satan GH60 layout
+
+The layout for this keyboard is:
+![Layout-2](https://i.imgur.com/Eqp8hov.jpg)
+
+Currently there are 3 layers:
+
+1. Base Layer is qwerty
+2. 1st layer is colemak
+3. 2nd layer is function layer
+4. 3rd layer is extend layer
+
+How to use the layers:
+1. Base is default. If you want Colemak then press function key and del next to the right shift (this combination will be used to toggle the layer on and off)
+2. Function layer is accessible by holding down the function key.
+3. Extend layer is accsessible by holding down the capslock.
+ Which when tapped acts like backspace when held triggers the Extend layer capability.
+
+
diff --git a/keyboards/satan/keymaps/abhixec/rules.mk b/keyboards/satan/keymaps/abhixec/rules.mk
new file mode 100644
index 000000000..fdbd25ea8
--- /dev/null
+++ b/keyboards/satan/keymaps/abhixec/rules.mk
@@ -0,0 +1,18 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = 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 this with audio at the same time.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
diff --git a/keyboards/satan/keymaps/addcninblue/rules.mk b/keyboards/satan/keymaps/addcninblue/rules.mk
index c2937fd57..fd7f34300 100644
--- a/keyboards/satan/keymaps/addcninblue/rules.mk
+++ b/keyboards/satan/keymaps/addcninblue/rules.mk
@@ -16,6 +16,6 @@ UNICODEMAP_ENABLE = no # This allows sending unicode symbols using X(<unicod
UNICODE_ENABLE = no # Unicode
UCIS_ENABLE = no # Keep in mind that not all will work (See WinCompose for details on Windows).
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings
diff --git a/keyboards/satan/keymaps/admiralStrokers/rules.mk b/keyboards/satan/keymaps/admiralStrokers/rules.mk
index 61dfedeb8..22908296c 100644
--- a/keyboards/satan/keymaps/admiralStrokers/rules.mk
+++ b/keyboards/satan/keymaps/admiralStrokers/rules.mk
@@ -16,7 +16,7 @@ UNICODEMAP_ENABLE = no # This allows sending unicode symbols using X(<unicode>)
UNICODE_ENABLE =no # Unicode
UCIS_ENABLE = no # Keep in mind that not all will work (See WinCompose for details on Windows).
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no# Breathing sleep LED during USB suspend
API_SYSEX_ENABLE = no # This enables using the Quantum SYSEX API to send strings
ifndef QUANTUM_DIR
diff --git a/keyboards/satan/keymaps/ben_iso/rules.mk b/keyboards/satan/keymaps/ben_iso/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/satan/keymaps/ben_iso/rules.mk
+++ b/keyboards/satan/keymaps/ben_iso/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/satan/keymaps/chaser/rules.mk b/keyboards/satan/keymaps/chaser/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/satan/keymaps/chaser/rules.mk
+++ b/keyboards/satan/keymaps/chaser/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/satan/keymaps/colemak/rules.mk b/keyboards/satan/keymaps/colemak/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/satan/keymaps/colemak/rules.mk
+++ b/keyboards/satan/keymaps/colemak/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/satan/keymaps/default/rules.mk b/keyboards/satan/keymaps/default/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/satan/keymaps/default/rules.mk
+++ b/keyboards/satan/keymaps/default/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/satan/keymaps/dende_iso/keymap.c b/keyboards/satan/keymaps/dende_iso/keymap.c
index 205e9cb77..be1bfd23a 100644
--- a/keyboards/satan/keymaps/dende_iso/keymap.c
+++ b/keyboards/satan/keymaps/dende_iso/keymap.c
@@ -35,7 +35,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, DE_Z, KC_U, KC_I, KC_O, KC_P, DE_UE, DE_PLUS, \
FN_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, DE_OE, DE_AE, DE_HASH, KC_ENT, \
KC_LSFT, DE_LESS, DE_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, DE_MINS, KC_RSFT, KC_DELETE, \
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, DE_ALGR, KC_RGUI, KC_APP, KC_RCTL),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_ALGR, KC_RGUI, KC_APP, KC_RCTL),
/* Keymap _FNK: Function Keys
diff --git a/keyboards/satan/keymaps/dende_iso/rules.mk b/keyboards/satan/keymaps/dende_iso/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/satan/keymaps/dende_iso/rules.mk
+++ b/keyboards/satan/keymaps/dende_iso/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/satan/keymaps/dkrieger/rules.mk b/keyboards/satan/keymaps/dkrieger/rules.mk
index 4c280ceb0..f2434d30e 100644
--- a/keyboards/satan/keymaps/dkrieger/rules.mk
+++ b/keyboards/satan/keymaps/dkrieger/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes
diff --git a/keyboards/satan/keymaps/hhkb_7u/keymap.c b/keyboards/satan/keymaps/hhkb_7u/keymap.c
new file mode 100644
index 000000000..b0bc48b45
--- /dev/null
+++ b/keyboards/satan/keymaps/hhkb_7u/keymap.c
@@ -0,0 +1,56 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+#define _DEFAULT 0
+#define _FN 1
+
+enum planck_keycodes {
+ DEFAULT = SAFE_RANGE
+};
+
+// Fillers to make layering more clear
+#define ______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+/* Qwerty gui/alt/space/alt/gui
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | Bksp |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | RShift | FN |
+ * |-----------------------------------------------------------------------------------------+
+ * |LGUI | LAlt | 7U Space | RAlt |RGUI |
+ * `-----------------------------------------------------------------'
+ */
+ [_DEFAULT] = LAYOUT_60_hhkb( /* Basic 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_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(_FN), \
+ ______, KC_LGUI,KC_LALT, KC_SPC, ______,KC_RALT, KC_RGUI, ______ \
+ ),
+
+/* FN Layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Ins | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | CAPS | | | | | | | | Psc | Slck| Paus| Up | | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Vol-| Vol+| Mute| | | * | / | Home| PgUp| Left|Right| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | BL | BL- | BL+ | | | + | - | End |PgDn| Down| | |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | |
+ * `-----------------------------------------------------------------'
+ */
+ [_FN] = LAYOUT_60_hhkb( /* Layer 1 */
+ ______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS, ______, ______, ______, ______, ______, ______, ______, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, ______, ______, \
+ ______, KC_VOLD,KC_VOLU,KC_MUTE,______, ______, KC_PAST,KC_PSLS,KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, ______, \
+ ______, BL_DEC,BL_INC,BL_TOGG,______, ______, KC_PPLS,KC_PMNS,KC_END, KC_PGDN, KC_DOWN, ______, ______, \
+ ______, ______, ______, ______, ______, ______, ______, ______ \
+ )
+};
diff --git a/keyboards/satan/keymaps/hhkb_7u/readme.md b/keyboards/satan/keymaps/hhkb_7u/readme.md
new file mode 100644
index 000000000..39e71beed
--- /dev/null
+++ b/keyboards/satan/keymaps/hhkb_7u/readme.md
@@ -0,0 +1,9 @@
+# Dbroqua HHKB like Layout
+
+Like the HHKB but with a Satan GH60 PCB :D.
+
+# Programming Instructions:
+Enter into programming mode and run the following command.
+```
+$ sudo KEYMAP=dbroqua_hhkb make dfu
+``` \ No newline at end of file
diff --git a/keyboards/satan/keymaps/isoHHKB/rules.mk b/keyboards/satan/keymaps/isoHHKB/rules.mk
index 026b33c7d..80ce56058 100644
--- a/keyboards/satan/keymaps/isoHHKB/rules.mk
+++ b/keyboards/satan/keymaps/isoHHKB/rules.mk
@@ -13,7 +13,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/satan/keymaps/jarred/keymap.c b/keyboards/satan/keymaps/jarred/keymap.c
new file mode 100644
index 000000000..c6852e4eb
--- /dev/null
+++ b/keyboards/satan/keymaps/jarred/keymap.c
@@ -0,0 +1,22 @@
+#include QMK_KEYBOARD_H
+
+#define _QW 0
+#define _NV 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QW] = LAYOUT_60_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS, \
+ MO(_NV), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL),
+
+[_NV] = LAYOUT_60_ansi(
+ KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_F11 ,KC_F12 ,_______, \
+ _______,_______,_______,_______,KC_DEL ,KC_BSPC,_______,KC_HOME,KC_UP ,KC_END ,KC_INS ,_______,_______,_______, \
+ _______,_______,_______,KC_LSFT,KC_LCTL,KC_ENT ,_______,KC_LEFT,KC_DOWN,KC_RGHT,KC_DEL ,KC_DEL , _______, \
+ _______,_______,_______,_______,_______,_______,_______,KC_PGUP,KC_PGDN,_______,_______,_______, \
+ _______,_______,_______, _______, _______,_______, RESET, _______),
+
+};
diff --git a/keyboards/satan/keymaps/jarred/readme.md b/keyboards/satan/keymaps/jarred/readme.md
new file mode 100644
index 000000000..522cb19b6
--- /dev/null
+++ b/keyboards/satan/keymaps/jarred/readme.md
@@ -0,0 +1 @@
+# Jarred's Satan GH60 layout
diff --git a/keyboards/satan/keymaps/lepa/rules.mk b/keyboards/satan/keymaps/lepa/rules.mk
index 636dd1b1d..72ca00646 100644
--- a/keyboards/satan/keymaps/lepa/rules.mk
+++ b/keyboards/satan/keymaps/lepa/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes
diff --git a/keyboards/satan/keymaps/midi/rules.mk b/keyboards/satan/keymaps/midi/rules.mk
index 89c34b394..d144314de 100644
--- a/keyboards/satan/keymaps/midi/rules.mk
+++ b/keyboards/satan/keymaps/midi/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = yes # MIDI support (+2400 to 4200, depending on config)
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/satan/keymaps/olligranlund_iso/config.h b/keyboards/satan/keymaps/olligranlund_iso/config.h
new file mode 100644
index 000000000..eab4c8e97
--- /dev/null
+++ b/keyboards/satan/keymaps/olligranlund_iso/config.h
@@ -0,0 +1,17 @@
+// Backlight configuration
+#undef BACKLIGHT_LEVELS
+#define BACKLIGHT_LEVELS 10
+
+// Underlight configuration
+#undef RGB_DI_PIN
+#define RGB_DI_PIN B2
+#undef RGBLED_NUM
+#define RGBLED_NUM 16 // Number of LEDs
+#undef RGBLIGHT_HUE_STEP
+#define RGBLIGHT_HUE_STEP 8
+#undef RGBLIGHT_SAT_STEP
+#define RGBLIGHT_SAT_STEP 8
+#undef RGBLIGHT_VAL_STEP
+#define RGBLIGHT_VAL_STEP 8
+
+#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/satan/keymaps/olligranlund_iso/keymap.c b/keyboards/satan/keymaps/olligranlund_iso/keymap.c
new file mode 100644
index 000000000..5016d4377
--- /dev/null
+++ b/keyboards/satan/keymaps/olligranlund_iso/keymap.c
@@ -0,0 +1,99 @@
+#include QMK_KEYBOARD_H
+
+#define BASE 0 // Default layer
+#define MOUSE 1 // Space layer
+#define NUMPAD 2 // Alt layer
+#define CAPS 3 // Caps layer
+
+// General shortenings
+#define ESCA KC_ESC
+#define MINS KC_MINS
+#define EQUL KC_EQL
+#define BSPC KC_BSPC
+#define DELE KC_DEL
+#define LBRC KC_LBRC
+#define RBRC KC_RBRC
+#define ALTR KC_RALT
+#define SCLN KC_SCLN
+#define QUOT KC_QUOT
+#define NUHS KC_NUHS
+#define ENTE KC_ENT
+#define NUBS KC_NUBS // Less/ greater sign
+#define COMM KC_COMM // Comma
+#define FSTO KC_DOT // Full stop
+#define SLSH KC_SLSH
+#define ALTL KC_LALT
+#define GUIL KC_LGUI
+#define GUIR KC_RGUI
+#define MENO KC_MENU
+
+// Special Actions and Media Keys
+#define INSE KC_INS // Insert here
+#define HOME KC_HOME // Go to beginning of line
+#define ENDI KC_END // go to end of line
+#define PSCR KC_PSCR // Print Screen
+#define SLCK KC_SLCK // go to end of line
+#define PGDN KC_PGDN // go to end of line
+#define PGUP KC_PGUP // go to end of line
+#define PLPS KC_MPLY // Play/Pause
+#define PAUS KC_PAUS // Pause button
+#define MUTE KC_MUTE // Mute sound
+#define VOLU KC_VOLU // Volume increase
+#define VOLD KC_VOLD // Volume decrease
+#define MNXT KC_MNXT // next track
+#define MPRV KC_MPRV // prev track
+#define MSTP KC_MSTP // stop playing
+#define MSEL KC_MSEL // Select media (Start playing it)
+#define MAIL KC_MAIL // Open default mail app
+#define CALC KC_CALC // Open default calculator app
+#define MYCM KC_MYCM // Open default file manager
+
+// increase readability
+#define _______ KC_TRNS
+#define XXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Keymap BASE: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------.
+ * |Esc~| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| R |
+ * |-----------------------------------------------------------|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| # | R |
+ * |-----------------------------------------------------------|
+ * |Shft| \ | Z| X| C| V| B| N| M| ,| .| /|Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl|Gui |Alt | Space |Alt |Gui |FN |Ctrl |
+ * `-----------------------------------------------------------|
+ */
+
+[ BASE ] = KEYMAP_ISO_SPLITRSHIFT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, XXXXX, \
+ LT(CAPS, KC_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, XXXXX, \
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, MO(CAPS), TG(NUMPAD), TG(MOUSE)),
+
+[ MOUSE ] = KEYMAP( // Mouse controls
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXX,\
+ _______, _______, _______, _______, _______, _______, _______, KC_MS_BTN1, KC_MS_U, KC_MS_BTN2, _______, _______, _______, _______,\
+ _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______,\
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXX,\
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+[ NUMPAD ] = KEYMAP( //Numpad and alt shortcuts
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXX,\
+ _______, BL_TOGG, BL_DEC, BL_INC, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, _______, _______,\
+ _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, _______,\
+ _______, _______, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, KC_7, KC_8, KC_9, KC_0, _______, _______, XXXXX,\
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+[ CAPS ] = KEYMAP( // Main "function" key, arrows, media control
+ KC_GRAVE, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, XXXXX,\
+ _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, PGDN, KC_UP, PGUP, PSCR, SLCK, PAUS, _______,\
+ _______, KC__VOLDOWN, KC__MUTE, KC__VOLUP, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______,\
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, XXXXX,\
+ _______, _______, _______, _______, _______, _______, _______, _______)
+
+};
diff --git a/keyboards/satan/keymaps/olligranlund_iso/readme.md b/keyboards/satan/keymaps/olligranlund_iso/readme.md
new file mode 100644
index 000000000..e0801ef85
--- /dev/null
+++ b/keyboards/satan/keymaps/olligranlund_iso/readme.md
@@ -0,0 +1,18 @@
+# ISO layout for the Satan GH60
+### Originally by Ben James, forked by Oliver Granlund
+
+![Finished product](https://i.imgur.com/s5HAgr6.jpg)
+
+I've wanted to make this as close to a P0ker as possible, but some macros in
+the P0ker don't make sense...
+
+Some of the features:
+* Caps activates special features when held:
+ * Arrow keys directly under right hand
+ * Volume control
+ * Fn keys on number row
+ * PageUp/PageDn/Home/other general buttons
+* Mouse control
+* Numpad (works so much better if this would be ortho)
+### RGB-strip
+![Behind the scenes](https://i.imgur.com/reHLXrc.jpg)
diff --git a/keyboards/satan/keymaps/olligranlund_iso/rules.mk b/keyboards/satan/keymaps/olligranlund_iso/rules.mk
new file mode 100644
index 000000000..73106b674
--- /dev/null
+++ b/keyboards/satan/keymaps/olligranlund_iso/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/satan/keymaps/sethbc/rules.mk b/keyboards/satan/keymaps/sethbc/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/satan/keymaps/sethbc/rules.mk
+++ b/keyboards/satan/keymaps/sethbc/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/satan/keymaps/smt/rules.mk b/keyboards/satan/keymaps/smt/rules.mk
index 0c9ae824f..806c2cb84 100644
--- a/keyboards/satan/keymaps/smt/rules.mk
+++ b/keyboards/satan/keymaps/smt/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/satan/keymaps/spacemanspiff/keymap.c b/keyboards/satan/keymaps/spacemanspiff/keymap.c
new file mode 100644
index 000000000..7dc1d3d78
--- /dev/null
+++ b/keyboards/satan/keymaps/spacemanspiff/keymap.c
@@ -0,0 +1,77 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+#define _BL 0
+#define _FL 1
+#define _CL 3
+
+// Add names for complex momentary keys, to keep the keymap matrix aligned better.
+#define CTL_ESC MT(MOD_LCTL,KC_ESC)
+#define GUI_ENT MT(MOD_RGUI, KC_ENT)
+
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,-----------------------------------------------------------.
+ * | `| F1| F2| F3| F4| F5| F6| F7| F8| F9| F0| -| =|Del |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |
+ * |-----------------------------------------------------------|
+ * |Ctl/Esc| A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |
+ * |-----------------------------------------------------------|
+ * |Ctrl|Alt |Gui | Space |Gui |Alt |FN |Ctrl |
+ * `-----------------------------------------------------------'
+ */
+[_BL] = LAYOUT_60_ansi(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ CTL_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ MO(_CL), KC_RALT, KC_LGUI, KC_SPC, GUI_ENT, KC_RALT, KC_RCTL, MO(_FL)),
+
+
+ /* Keymap _FL: Function Layer
+ * ,-----------------------------------------------------------.
+ * | `| | | | | | | | | | | | | RESET|
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | |VDN|VUP|MUTE| | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | |
+ * `-----------------------------------------------------------'
+ */
+[_FL] = LAYOUT_60_ansi(
+ KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+ /* Keymap _CL: Control+ Layer
+ * ,-----------------------------------------------------------.
+ * |Esc| F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Del |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | |PGU| | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | |LFT| DN| UP|RGT| | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | |PGD| | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | |
+ * `-----------------------------------------------------------'
+ */
+
+[_CL] = LAYOUT_60_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_TAB, LCTL(KC_Q), LCTL(KC_W), LCTL(KC_E), LCTL(KC_R), LCTL(KC_T), LCTL(KC_Y), LCTL(KC_U), LCTL(KC_I), LCTL(KC_O), KC_PGUP, KC_ESC, LCTL(KC_RBRC), LCTL(KC_BSLS), \
+ _______, LCTL(KC_A), LCTL(KC_S), LCTL(KC_D), LCTL(KC_F), LCTL(KC_G), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, LCTL(KC_SCLN), LCTL(KC_QUOT), LCTL(KC_ENT), \
+ KC_LSFT, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_PGDN, LCTL(KC_N), LCTL(KC_M), LCTL(KC_COMM), LCTL(KC_DOT), LCTL(KC_SLSH), LCTL(KC_RSFT), \
+ _______, LCTL(KC_LALT), LCTL(KC_LGUI), LCTL(KC_SPC), LCTL(KC_RGUI), LCTL(KC_RALT), KC_RCTL, MO(_FL)),
+};
+
diff --git a/keyboards/satan/keymaps/spacemanspiff/readme.md b/keyboards/satan/keymaps/spacemanspiff/readme.md
new file mode 100644
index 000000000..1d592509d
--- /dev/null
+++ b/keyboards/satan/keymaps/spacemanspiff/readme.md
@@ -0,0 +1,34 @@
+# Spaceman Spiff Layout for GH60 Satan
+
+![Keyboard Layout](https://i.imgur.com/M9glFON.png)
+
+<!-- http://www.keyboard-layout-editor.com/#/gists/32feaaa31c29afb8198a8ef591db6ddf -->
+
+Designed specifically to make switching back-n-forth with the Apple's MacBook Pro keyboard intuitive. Has a slight tendency toward readline/vim keybindings.
+
+Caps locks becomes an `Esc` when pressed alone, or a `Ctrl` when pressed with another key.
+
+# Base Layer
+
+As simalar to the Apple keyboard as possible. Notiable exception is `Caps Lock`:
+- `Esc` when pressed alone
+- `Ctrl` when pressed with another key
+
+# Control+ Layer
+
+Left Ctrl key switches to the "Control+ Layer". This layer mostly acts like a control key in most cases, with a few exceptions:
+
+- `Ctl+` + `hjkl` are vim-style motion keys
+- `Ctl+` + `p` and `Ctl+` + `n` are page up and down
+- `Ctl+` + `Backspace` is forward delete
+
+# Fn Layer
+
+Audio Controls:
+- `Fn` + `a` Volume Down
+- `Fn` + `s` Volume Up
+- `Fn` + `d` Mute
+
+To flash this layout you need to press `Fn+Backspace`
+
+
diff --git a/keyboards/satan/keymaps/unxmaal/rules.mk b/keyboards/satan/keymaps/unxmaal/rules.mk
index ee94a67b4..470d621b1 100644
--- a/keyboards/satan/keymaps/unxmaal/rules.mk
+++ b/keyboards/satan/keymaps/unxmaal/rules.mk
@@ -13,7 +13,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/satan/satan.h b/keyboards/satan/satan.h
index 0d9dd96a1..a2a598460 100644
--- a/keyboards/satan/satan.h
+++ b/keyboards/satan/satan.h
@@ -36,6 +36,35 @@
{k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k49, k4a, k4b, k4c, k4d} \
}
+
+/* Satan GH60 ANSI layout-B
+ * ,-----------------------------------------------------------.
+ * | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
+ * |-----------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d |
+ * |-----------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d |
+ * |-----------------------------------------------------------|
+ * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | 3c |
+ * |-----------------------------------------------------------|
+ * | 40 | 41 | 42 | 45 | 4a | 4b | 4c | 4d |
+ * `-----------------------------------------------------------'
+ */
+#define LAYOUT_60_ansi_split_rshift( \
+ 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, 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, XXX, k2d}, \
+ {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d}, \
+ {k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, XXX, k4a, k4b, k4c, k4d} \
+}
+
/* Satan GH60 ANSI layout
* ,-----------------------------------------------------------.
* | 00| 01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0d |
diff --git a/keyboards/scrabblepad/keymaps/random/keymap.c b/keyboards/scrabblepad/keymaps/random/keymap.c
new file mode 100644
index 000000000..8e7825966
--- /dev/null
+++ b/keyboards/scrabblepad/keymaps/random/keymap.c
@@ -0,0 +1,75 @@
+#include "scrabblepad.h"
+#include <stdlib.h>
+
+static uint16_t keystroke;
+static bool shift_pressed;
+
+static int lower = (int) KC_A;
+static int upper = (int) KC_Z;
+
+uint16_t random_keycode(void) {
+ return lower + (rand() % (upper - lower + 1));
+};
+
+enum custom_keycodes {
+ RND_KEY = SAFE_RANGE
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case RND_KEY:
+ if (record->event.pressed) {
+ keystroke = random_keycode();
+ if (rand() % 2 > 0) {
+ shift_pressed = 1;
+ register_code(KC_LSHIFT);
+ }
+ register_code(keystroke);
+ } else {
+ if (shift_pressed > 0) {
+ unregister_code(KC_LSHIFT);
+ }
+ unregister_code(keystroke);
+ }
+
+ return false;
+
+ default:
+ return true;
+ }
+
+ return true;
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT( /* Base */
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RESET, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, \
+ RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY, RND_KEY
+),
+};
+
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/scrabblepad/keymaps/random/readme.md b/keyboards/scrabblepad/keymaps/random/readme.md
new file mode 100644
index 000000000..e719adaeb
--- /dev/null
+++ b/keyboards/scrabblepad/keymaps/random/readme.md
@@ -0,0 +1,5 @@
+# Scrabblepad keymap with every key press random
+
+Every key produces a random key press, except the middle key, which is reserved for resetting the board.
+
+The random key press is selected between KC_A and KC_Z keycodes.
diff --git a/keyboards/scrabblepad/readme.md b/keyboards/scrabblepad/readme.md
index 6b2d2ec5e..e434eef95 100644
--- a/keyboards/scrabblepad/readme.md
+++ b/keyboards/scrabblepad/readme.md
@@ -6,7 +6,7 @@ the XDA Scrabble Board sold by [Novelkeys](https://novelkeys.xyz).
It uses a [Teensy++ 2.0](https://www.pjrc.com/store/teensypp.html)
featuring an at90usb1286 8 bit microcontroller. Usage requires modifying the Teensy by removing the LED on pin D6.
-Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Donut Cables](https://donutcables.com/)
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin), [Donut Cables](https://donutcables.com/)
Hardware Supported: Teensy++ 2.0 and ScrabblePad PCB
Hardware Availability: [Donut Cables](https://donutcables.com/)
diff --git a/keyboards/singa/readme.md b/keyboards/singa/readme.md
index c0325d1a0..7a374db25 100644
--- a/keyboards/singa/readme.md
+++ b/keyboards/singa/readme.md
@@ -7,8 +7,8 @@
A short description of the keyboard/project
-Keyboard Maintainer: [amnesia0287](https://github.com/amnesia0287)
-Hardware Supported: TGR-Elaine v1.0 PCB
+Keyboard Maintainer: [amnesia0287](https://github.com/amnesia0287)
+Hardware Supported: TGR-Elaine v1.0 PCB
Hardware Availability: http://singakbd.com/
@@ -16,4 +16,34 @@ Make example for this keyboard (after setting up your build environment):
make singa:default
+Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+
See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/sixshooter/config.h b/keyboards/sixshooter/config.h
new file mode 100644
index 000000000..163a3ab43
--- /dev/null
+++ b/keyboards/sixshooter/config.h
@@ -0,0 +1,128 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6666
+#define DEVICE_VER 0x0001
+#define MANUFACTURER bpiphany
+#define PRODUCT sixshooter
+#define DESCRIPTION A PCB for the CM Storm switch tester utilizing a Teensy 2.0.
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#define MATRIX_COLS 6
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { }
+#define MATRIX_COL_PINS { F7, F6, F1, F5, F4, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
diff --git a/keyboards/sixshooter/info.json b/keyboards/sixshooter/info.json
new file mode 100644
index 000000000..79044589d
--- /dev/null
+++ b/keyboards/sixshooter/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "SixShooter",
+ "maintainer": "qmk",
+ "url": "https://geekhack.org/index.php?topic=70033.0",
+ "width": 3,
+ "height": 2,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 6,
+ "layout": [{"label":"K00", "x":0, "y":0}, {"label":"K01", "x":1, "y":0}, {"label":"K02", "x":2, "y":0}, {"label":"K03", "x":0, "y":1}, {"label":"K04", "x":1, "y":1}, {"label":"K05", "x":2, "y":1}]
+ }
+ }
+}
diff --git a/keyboards/sixshooter/keymaps/default/keymap.c b/keyboards/sixshooter/keymaps/default/keymap.c
new file mode 100644
index 000000000..51f115d93
--- /dev/null
+++ b/keyboards/sixshooter/keymaps/default/keymap.c
@@ -0,0 +1,73 @@
+/* Copyright 2018 QMK Community
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FN 1
+
+// Define keyboard specific keycodes for controlling on/off for all LEDs as they
+// are all on different pins with this PCB, rather than a single backlight pin
+enum custom_keycodes {
+ SS_LON = SAFE_RANGE,
+ SS_LOFF
+};
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base Layer: Media Keys
+ * ,-----------.
+ * |FN | V-| V+|
+ * |---+---+---|
+ * |Prv|Ply|Nxt|
+ * `-----------'
+ */
+ [_BL] = LAYOUT( /* Base */
+ MO(_FN), KC_VOLD, KC_VOLU, \
+ KC_MPRV, KC_MPLY, KC_MNXT \
+ ),
+ /* FN Layer: LED control
+ * ,-----------.
+ * |FN | V-| V+|
+ * |---+---+---|
+ * |Prv|Ply|Nxt|
+ * `-----------'
+ */
+ [_FN] = LAYOUT(
+ KC_TRNS, SS_LON, SS_LOFF, \
+ KC_NO, KC_NO, KC_NO
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ // Put your per-action keyboard code here.
+ // Runs for every action, just before processing by the firmware.
+ if (record->event.pressed) {
+
+ // Check for custom keycodes for turning on and off LEDs
+ switch(keycode) {
+ case SS_LON:
+ sixshooter_led_all_on();
+ return false;
+ case SS_LOFF:
+ sixshooter_led_all_off();
+ return false;
+ }
+ }
+ return true;
+};
+
+void matrix_init_user(void) {
+ // Default all LEDs to on
+ sixshooter_led_all_on();
+}
diff --git a/keyboards/sixshooter/keymaps/default/readme.md b/keyboards/sixshooter/keymaps/default/readme.md
new file mode 100644
index 000000000..050a6f234
--- /dev/null
+++ b/keyboards/sixshooter/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for sixshooter
diff --git a/keyboards/sixshooter/readme.md b/keyboards/sixshooter/readme.md
new file mode 100644
index 000000000..18229bdbf
--- /dev/null
+++ b/keyboards/sixshooter/readme.md
@@ -0,0 +1,13 @@
+# The Six Shooter
+
+A PCB for the CM Storm switch tester utilizing a Teensy 2.0 designed by Bpiphany. Because the PCB was designed with individual pins for each LED, there are custom keycodes (`SS_LON` and `SS_LOFF`) for turning on and off the backlight LEDs.
+
+Keyboard Maintainer: QMK Community\
+Hardware Supported: Six Shooter PCB, Teensy 2.0\
+Hardware Availability: [GeekHack.org](https://geekhack.org/index.php?topic=70033.0)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make sixshooter:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/sixshooter/rules.mk b/keyboards/sixshooter/rules.mk
new file mode 100644
index 000000000..5bf8d2165
--- /dev/null
+++ b/keyboards/sixshooter/rules.mk
@@ -0,0 +1,64 @@
+# 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
+# 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 = halfkay
+
+
+# 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 = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
diff --git a/keyboards/sixshooter/sixshooter.c b/keyboards/sixshooter/sixshooter.c
new file mode 100644
index 000000000..87a739454
--- /dev/null
+++ b/keyboards/sixshooter/sixshooter.c
@@ -0,0 +1,38 @@
+#include "sixshooter.h"
+
+extern inline void sixshooter_led_0_on(void);
+extern inline void sixshooter_led_1_on(void);
+extern inline void sixshooter_led_2_on(void);
+extern inline void sixshooter_led_3_on(void);
+extern inline void sixshooter_led_4_on(void);
+extern inline void sixshooter_led_5_on(void);
+
+extern inline void sixshooter_led_0_off(void);
+extern inline void sixshooter_led_1_off(void);
+extern inline void sixshooter_led_2_off(void);
+extern inline void sixshooter_led_3_off(void);
+extern inline void sixshooter_led_4_off(void);
+extern inline void sixshooter_led_5_off(void);
+
+extern inline void sixshooter_led_all_on(void);
+extern inline void sixshooter_led_all_off(void);
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/sixshooter/sixshooter.h b/keyboards/sixshooter/sixshooter.h
new file mode 100644
index 000000000..490d562d0
--- /dev/null
+++ b/keyboards/sixshooter/sixshooter.h
@@ -0,0 +1,44 @@
+#ifndef SIXSHOOTER_H
+#define SIXSHOOTER_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K00, K01, K02, \
+ K03, K04, K05 \
+) { \
+ { K00, K01, K02, K03, K04, K05 }, \
+}
+
+inline void sixshooter_led_0_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); }
+inline void sixshooter_led_1_on(void) { DDRC |= (1<<7); PORTC |= (1<<7); }
+inline void sixshooter_led_2_on(void) { DDRD |= (1<<0); PORTD |= (1<<0); }
+inline void sixshooter_led_3_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); }
+inline void sixshooter_led_4_on(void) { DDRD |= (1<<7); PORTD |= (1<<7); }
+inline void sixshooter_led_5_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); }
+
+inline void sixshooter_led_0_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); }
+inline void sixshooter_led_1_off(void) { DDRC &= ~(1<<7); PORTC &= ~(1<<7); }
+inline void sixshooter_led_2_off(void) { DDRD &= ~(1<<0); PORTD &= ~(1<<0); }
+inline void sixshooter_led_3_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); }
+inline void sixshooter_led_4_off(void) { DDRD &= ~(1<<7); PORTD &= ~(1<<7); }
+inline void sixshooter_led_5_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); }
+
+inline void sixshooter_led_all_on(void) {
+ sixshooter_led_0_on();
+ sixshooter_led_1_on();
+ sixshooter_led_2_on();
+ sixshooter_led_3_on();
+ sixshooter_led_4_on();
+ sixshooter_led_5_on();
+}
+inline void sixshooter_led_all_off(void) {
+ sixshooter_led_0_off();
+ sixshooter_led_1_off();
+ sixshooter_led_2_off();
+ sixshooter_led_3_off();
+ sixshooter_led_4_off();
+ sixshooter_led_5_off();
+}
+
+#endif
diff --git a/keyboards/skog/README.md b/keyboards/skog/README.md
new file mode 100644
index 000000000..51a792b6b
--- /dev/null
+++ b/keyboards/skog/README.md
@@ -0,0 +1,61 @@
+Skog TKL by Percent
+==========================
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Skog PCB
+Hardware Availability: https://geekhack.org/index.php?topic=87953.0
+
+Make example for this keyboard (after setting up your build environment):
+
+ make skog:default
+
+## Setting the board to bootloader mode
+
+If you're lucky, the programming script does this automagically for you. If
+however this doesn't work for you, you need to enter the bootloader mode manually
+by plugging the keyboard in while holding the bootloader key. If you did this
+correctly the LEDs will blink and you'll be able to flash your firmware.
+
+The bootloader key is in the top-right (Pause).
+
+## Flashing
+
+ps2avr(GB) boards use an atmega32a microcontroller and a different bootloader. It is not flashable using the regular QMK methods.
+
+Windows:
+1. Download [HIDBootFlash](http://vusb.wikidot.com/project:hidbootflash).
+2. Place your keyboard into reset.
+3. Press the `Find Device` button and ensure that your keyboard is found.
+4. Press the `Open .hex File` button and locate the `.hex` file you created.
+5. Press the `Flash Device` button and wait for the process to complete.
+
+macOS:
+1. Install homebrew by typing the following:
+ ```
+ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
+ ```
+2. Install `crosspack-avr`.
+ ```
+ brew cask install crosspack-avr
+ ```
+3. Install the following packages:
+ ```
+ brew install python
+ brew install pyusb
+ brew install --HEAD`https://raw.githubusercontent.com/robertgzr/homebrew-tap/master/bootloadhid.rb
+
+4. Place your keyboard into reset.
+5. Flash the board by typing `bootloadHID -r` followed by the path to your `.hex` file.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Troubleshooting
+
+From my experience, it's really hard to brick these boards. But these
+tricks have been useful when it got stuck in a weird scenario.
+
+1. Try plugging the board in while holding the bootloader key. This will force
+ it to boot only the bootloader without loading the firmware. Once this is
+ done, just reflash the board with the original firmware.
+2. Sometimes USB hubs can act weird, so try connecting the board directly
+ to your computer or plugging/unplugging the USB hub.
diff --git a/keyboards/skog/backlight.c b/keyboards/skog/backlight.c
new file mode 100644
index 000000000..94e8126d8
--- /dev/null
+++ b/keyboards/skog/backlight.c
@@ -0,0 +1,211 @@
+/**
+ * Backlighting code for PS2AVRGB boards (ATMEGA32A)
+ * Kenneth A. (github.com/krusli | krusli.me)
+ */
+
+#include "backlight.h"
+#include "quantum.h"
+
+#include <avr/pgmspace.h>
+#include <avr/interrupt.h>
+
+#include "backlight_custom.h"
+#include "breathing_custom.h"
+
+// DEBUG
+#include <stdlib.h>
+#include <stdio.h>
+
+// Port D: digital pins of the AVR chipset
+#define NUMLOCK_PORT (1 << 0) // D0
+#define CAPSLOCK_PORT (1 << 1) // D1
+#define BACKLIGHT_PORT (1 << 4) // D4
+#define SCROLLLOCK_PORT (1 << 6) // D6
+
+#define TIMER_CLK_DIV64 0x03 ///< Timer clocked at F_CPU/64
+#define TIMER1PRESCALE TIMER_CLK_DIV64 ///< timer 1 prescaler default
+
+#define TIMER_PRESCALE_MASK 0x07 ///< Timer Prescaler Bit-Mask
+
+#define PWM_MAX 0xFF
+#define TIMER_TOP 255 // 8 bit PWM
+
+extern backlight_config_t backlight_config;
+
+/**
+ * References
+ * Port Registers: https://www.arduino.cc/en/Reference/PortManipulation
+ * TCCR1A: https://electronics.stackexchange.com/questions/92350/what-is-the-difference-between-tccr1a-and-tccr1b
+ * Timers: http://www.avrbeginners.net/architecture/timers/timers.html
+ * 16-bit timer setup: http://sculland.com/ATmega168/Interrupts-And-Timers/16-Bit-Timer-Setup/
+ * PS2AVRGB firmware: https://github.com/showjean/ps2avrU/tree/master/firmware
+ */
+
+// @Override
+// turn LEDs on and off depending on USB caps/num/scroll lock states.
+__attribute__ ((weak))
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+ // turn on
+ DDRD |= NUMLOCK_PORT;
+ PORTD |= NUMLOCK_PORT;
+ } else {
+ // turn off
+ DDRD &= ~NUMLOCK_PORT;
+ PORTD &= ~NUMLOCK_PORT;
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRD |= CAPSLOCK_PORT;
+ PORTD |= CAPSLOCK_PORT;
+ } else {
+ DDRD &= ~CAPSLOCK_PORT;
+ PORTD &= ~CAPSLOCK_PORT;
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ DDRD |= SCROLLLOCK_PORT;
+ PORTD |= SCROLLLOCK_PORT;
+ } else {
+ DDRD &= ~SCROLLLOCK_PORT;
+ PORTD &= ~SCROLLLOCK_PORT;
+ }
+}
+
+#ifdef BACKLIGHT_ENABLE
+
+// sets up Timer 1 for 8-bit PWM
+void timer1PWMSetup(void) { // NOTE ONLY CALL THIS ONCE
+ // default 8 bit mode
+ TCCR1A &= ~(1 << 1); // cbi(TCCR1A,PWM11); <- set PWM11 bit to HIGH
+ TCCR1A |= (1 << 0); // sbi(TCCR1A,PWM10); <- set PWM10 bit to LOW
+
+ // clear output compare value A
+ // outb(OCR1AH, 0);
+ // outb(OCR1AL, 0);
+
+ // clear output comparator registers for B
+ OCR1BH = 0; // outb(OCR1BH, 0);
+ OCR1BL = 0; // outb(OCR1BL, 0);
+}
+
+bool is_init = false;
+void timer1Init(void) {
+ // timer1SetPrescaler(TIMER1PRESCALE)
+ // set to DIV/64
+ (TCCR1B) = ((TCCR1B) & ~TIMER_PRESCALE_MASK) | TIMER1PRESCALE;
+
+ // reset TCNT1
+ TCNT1H = 0; // outb(TCNT1H, 0);
+ TCNT1L = 0; // outb(TCNT1L, 0);
+
+ // TOIE1: Timer Overflow Interrupt Enable (Timer 1);
+ TIMSK |= _BV(TOIE1); // sbi(TIMSK, TOIE1);
+
+ is_init = true;
+}
+
+void timer1UnInit(void) {
+ // set prescaler back to NONE
+ (TCCR1B) = ((TCCR1B) & ~TIMER_PRESCALE_MASK) | 0x00; // TIMERRTC_CLK_STOP
+
+ // disable timer overflow interrupt
+ TIMSK &= ~_BV(TOIE1); // overflow bit?
+
+ setPWM(0);
+
+ is_init = false;
+}
+
+
+// handle TCNT1 overflow
+//! Interrupt handler for tcnt1 overflow interrupt
+ISR(TIMER1_OVF_vect, ISR_NOBLOCK)
+{
+ // sei();
+ // handle breathing here
+ #ifdef BACKLIGHT_BREATHING
+ if (is_breathing()) {
+ custom_breathing_handler();
+ }
+ #endif
+}
+
+// enable timer 1 PWM
+// timer1PWMBOn()
+void timer1PWMBEnable(void) {
+ // turn on channel B (OC1B) PWM output
+ // set OC1B as non-inverted PWM
+ TCCR1A |= _BV(COM1B1);
+ TCCR1A &= ~_BV(COM1B0);
+}
+
+// disable timer 1 PWM
+// timer1PWMBOff()
+void timer1PWMBDisable(void) {
+ TCCR1A &= ~_BV(COM1B1);
+ TCCR1A &= ~_BV(COM1B0);
+}
+
+void enableBacklight(void) {
+ DDRD |= BACKLIGHT_PORT; // set digital pin 4 as output
+ PORTD |= BACKLIGHT_PORT; // set digital pin 4 to high
+}
+
+void disableBacklight(void) {
+ // DDRD &= ~BACKLIGHT_PORT; // set digital pin 4 as input
+ PORTD &= ~BACKLIGHT_PORT; // set digital pin 4 to low
+}
+
+void startPWM(void) {
+ timer1Init();
+ timer1PWMBEnable();
+ enableBacklight();
+}
+
+void stopPWM(void) {
+ timer1UnInit();
+ disableBacklight();
+ timer1PWMBDisable();
+}
+
+void b_led_init_ports(void) {
+ /* turn backlight on/off depending on user preference */
+ #if BACKLIGHT_ON_STATE == 0
+ // DDRx register: sets the direction of Port D
+ // DDRD &= ~BACKLIGHT_PORT; // set digital pin 4 as input
+ PORTD &= ~BACKLIGHT_PORT; // set digital pin 4 to low
+ #else
+ DDRD |= BACKLIGHT_PORT; // set digital pin 4 as output
+ PORTD |= BACKLIGHT_PORT; // set digital pin 4 to high
+ #endif
+
+ timer1PWMSetup();
+ startPWM();
+
+ #ifdef BACKLIGHT_BREATHING
+ breathing_enable();
+ #endif
+}
+
+void b_led_set(uint8_t level) {
+ if (level > BACKLIGHT_LEVELS) {
+ level = BACKLIGHT_LEVELS;
+ }
+
+ setPWM((int)(TIMER_TOP * (float) level / BACKLIGHT_LEVELS));
+}
+
+// called every matrix scan
+void b_led_task(void) {
+ // do nothing for now
+}
+
+void setPWM(uint16_t xValue) {
+ if (xValue > TIMER_TOP) {
+ xValue = TIMER_TOP;
+ }
+ OCR1B = xValue; // timer1PWMBSet(xValue);
+}
+
+#endif // BACKLIGHT_ENABLE
diff --git a/keyboards/skog/backlight_custom.h b/keyboards/skog/backlight_custom.h
new file mode 100644
index 000000000..51365fe3b
--- /dev/null
+++ b/keyboards/skog/backlight_custom.h
@@ -0,0 +1,13 @@
+/**
+ * Backlighting code for PS2AVRGB boards (ATMEGA32A)
+ * Kenneth A. (github.com/krusli | krusli.me)
+ */
+
+#pragma once
+
+#include <avr/pgmspace.h>
+void b_led_init_ports(void);
+void b_led_set(uint8_t level);
+void b_led_task(void);
+void setPWM(uint16_t xValue);
+
diff --git a/keyboards/skog/breathing_custom.h b/keyboards/skog/breathing_custom.h
new file mode 100644
index 000000000..71416b1b4
--- /dev/null
+++ b/keyboards/skog/breathing_custom.h
@@ -0,0 +1,140 @@
+/**
+ * Breathing effect code for PS2AVRGB boards (ATMEGA32A)
+ * Works in conjunction with `backlight.c`.
+ *
+ * Code adapted from `quantum.c` to register with the existing TIMER1 overflow
+ * handler in `backlight.c` instead of setting up its own timer.
+ * Kenneth A. (github.com/krusli | krusli.me)
+ */
+
+#ifdef BACKLIGHT_ENABLE
+#ifdef BACKLIGHT_BREATHING
+
+#include "backlight_custom.h"
+
+#ifndef BREATHING_PERIOD
+#define BREATHING_PERIOD 6
+#endif
+
+#define breathing_min() do {breathing_counter = 0;} while (0)
+#define breathing_max() do {breathing_counter = breathing_period * 244 / 2;} while (0)
+
+// TODO make this share code with quantum.c
+
+#define BREATHING_NO_HALT 0
+#define BREATHING_HALT_OFF 1
+#define BREATHING_HALT_ON 2
+#define BREATHING_STEPS 128
+
+static uint8_t breathing_period = BREATHING_PERIOD;
+static uint8_t breathing_halt = BREATHING_NO_HALT;
+static uint16_t breathing_counter = 0;
+
+static bool breathing = false;
+
+bool is_breathing(void) {
+ return breathing;
+}
+
+// See http://jared.geek.nz/2013/feb/linear-led-pwm
+static uint16_t cie_lightness(uint16_t v) {
+ if (v <= 5243) // if below 8% of max
+ return v / 9; // same as dividing by 900%
+ else {
+ uint32_t y = (((uint32_t) v + 10486) << 8) / (10486 + 0xFFFFUL); // add 16% of max and compare
+ // to get a useful result with integer division, we shift left in the expression above
+ // and revert what we've done again after squaring.
+ y = y * y * y >> 8;
+ if (y > 0xFFFFUL) // prevent overflow
+ return 0xFFFFU;
+ else
+ return (uint16_t) y;
+ }
+}
+
+void breathing_enable(void) {
+ breathing = true;
+ breathing_counter = 0;
+ breathing_halt = BREATHING_NO_HALT;
+ // interrupt already registered
+}
+
+void breathing_pulse(void) {
+ if (get_backlight_level() == 0)
+ breathing_min();
+ else
+ breathing_max();
+ breathing_halt = BREATHING_HALT_ON;
+ // breathing_interrupt_enable();
+ breathing = true;
+}
+
+void breathing_disable(void) {
+ breathing = false;
+ // backlight_set(get_backlight_level());
+ b_led_set(get_backlight_level()); // custom implementation of backlight_set()
+}
+
+void breathing_self_disable(void)
+{
+ if (get_backlight_level() == 0)
+ breathing_halt = BREATHING_HALT_OFF;
+ else
+ breathing_halt = BREATHING_HALT_ON;
+}
+
+void breathing_toggle(void) {
+ if (is_breathing())
+ breathing_disable();
+ else
+ breathing_enable();
+}
+
+void breathing_period_set(uint8_t value)
+{
+ if (!value)
+ value = 1;
+ breathing_period = value;
+}
+
+void breathing_period_default(void) {
+ breathing_period_set(BREATHING_PERIOD);
+}
+
+void breathing_period_inc(void)
+{
+ breathing_period_set(breathing_period+1);
+}
+
+void breathing_period_dec(void)
+{
+ breathing_period_set(breathing_period-1);
+}
+
+/* To generate breathing curve in python:
+ * from math import sin, pi; [int(sin(x/128.0*pi)**4*255) for x in range(128)]
+ */
+static const uint8_t breathing_table[BREATHING_STEPS] PROGMEM = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 17, 20, 24, 28, 32, 36, 41, 46, 51, 57, 63, 70, 76, 83, 91, 98, 106, 113, 121, 129, 138, 146, 154, 162, 170, 178, 185, 193, 200, 207, 213, 220, 225, 231, 235, 240, 244, 247, 250, 252, 253, 254, 255, 254, 253, 252, 250, 247, 244, 240, 235, 231, 225, 220, 213, 207, 200, 193, 185, 178, 170, 162, 154, 146, 138, 129, 121, 113, 106, 98, 91, 83, 76, 70, 63, 57, 51, 46, 41, 36, 32, 28, 24, 20, 17, 15, 12, 10, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
+
+// Use this before the cie_lightness function.
+static inline uint16_t scale_backlight(uint16_t v) {
+ return v / BACKLIGHT_LEVELS * get_backlight_level();
+}
+
+void custom_breathing_handler(void) {
+ uint16_t interval = (uint16_t) breathing_period * 244 / BREATHING_STEPS;
+ // resetting after one period to prevent ugly reset at overflow.
+ breathing_counter = (breathing_counter + 1) % (breathing_period * 244);
+ uint8_t index = breathing_counter / interval % BREATHING_STEPS;
+
+ if (((breathing_halt == BREATHING_HALT_ON) && (index == BREATHING_STEPS / 2)) ||
+ ((breathing_halt == BREATHING_HALT_OFF) && (index == BREATHING_STEPS - 1)))
+ {
+ // breathing_interrupt_disable();
+ }
+
+ setPWM(cie_lightness(scale_backlight((uint16_t) pgm_read_byte(&breathing_table[index]) * 0x0101U)));
+}
+
+#endif // BACKLIGHT_BREATHING
+#endif // BACKLIGHT_ENABLE
diff --git a/keyboards/skog/config.h b/keyboards/skog/config.h
new file mode 100644
index 000000000..dea3e28e8
--- /dev/null
+++ b/keyboards/skog/config.h
@@ -0,0 +1,42 @@
+/*
+Copyright 2018 Jumail Mundekkat / MxBlue
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#define VENDOR_ID 0x20A0
+#define PRODUCT_ID 0x422D
+
+#define MANUFACTURER Percent
+#define PRODUCT Skog TKL
+
+/* matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 14
+
+#define RGBLED_NUM 2
+#define RGBLIGHT_ANIMATIONS
+
+#define BACKLIGHT_LEVELS 5
+
+#define NO_UART 1
+#define BOOTLOADHID_BOOTLOADER 1
+
+/* key combination for command */
+#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
+#endif
diff --git a/keyboards/skog/i2c.c b/keyboards/skog/i2c.c
new file mode 100644
index 000000000..a4f952135
--- /dev/null
+++ b/keyboards/skog/i2c.c
@@ -0,0 +1,106 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Please do not modify this file
+
+#include <avr/io.h>
+#include <util/twi.h>
+
+#include "i2c.h"
+
+void i2c_set_bitrate(uint16_t bitrate_khz) {
+ uint8_t bitrate_div = ((F_CPU / 1000l) / bitrate_khz);
+ if (bitrate_div >= 16) {
+ bitrate_div = (bitrate_div - 16) / 2;
+ }
+ TWBR = bitrate_div;
+}
+
+void i2c_init(void) {
+ // set pull-up resistors on I2C bus pins
+ PORTC |= 0b11;
+
+ i2c_set_bitrate(400);
+
+ // enable TWI (two-wire interface)
+ TWCR |= (1 << TWEN);
+
+ // enable TWI interrupt and slave address ACK
+ TWCR |= (1 << TWIE);
+ TWCR |= (1 << TWEA);
+}
+
+uint8_t i2c_start(uint8_t address) {
+ // reset TWI control register
+ TWCR = 0;
+
+ // begin transmission and wait for it to end
+ TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ // check if the start condition was successfully transmitted
+ if ((TWSR & 0xF8) != TW_START) {
+ return 1;
+ }
+
+ // transmit address and wait
+ TWDR = address;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ // check if the device has acknowledged the READ / WRITE mode
+ uint8_t twst = TW_STATUS & 0xF8;
+ if ((twst != TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK)) {
+ return 1;
+ }
+
+ return 0;
+}
+
+void i2c_stop(void) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+}
+
+uint8_t i2c_write(uint8_t data) {
+ TWDR = data;
+
+ // transmit data and wait
+ TWCR = (1<<TWINT) | (1<<TWEN);
+ while (!(TWCR & (1<<TWINT)));
+
+ if ((TWSR & 0xF8) != TW_MT_DATA_ACK) {
+ return 1;
+ }
+
+ return 0;
+}
+
+uint8_t i2c_send(uint8_t address, uint8_t *data, uint16_t length) {
+ if (i2c_start(address)) {
+ return 1;
+ }
+
+ for (uint16_t i = 0; i < length; i++) {
+ if (i2c_write(data[i])) {
+ return 1;
+ }
+ }
+
+ i2c_stop();
+
+ return 0;
+}
diff --git a/keyboards/skog/i2c.h b/keyboards/skog/i2c.h
new file mode 100644
index 000000000..ada8cc7bf
--- /dev/null
+++ b/keyboards/skog/i2c.h
@@ -0,0 +1,25 @@
+/*
+Copyright 2016 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+// Please do not modify this file
+
+#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);
+
diff --git a/keyboards/skog/info.json b/keyboards/skog/info.json
new file mode 100644
index 000000000..06fad3a74
--- /dev/null
+++ b/keyboards/skog/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "skog",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":15.25, "y":0}, {"x":16.25, "y":0}, {"x":17.25, "y":0}, {"x":0, "y":1.5}, {"x":1, "y":1.5}, {"x":2, "y":1.5}, {"x":3, "y":1.5}, {"x":4, "y":1.5}, {"x":5, "y":1.5}, {"x":6, "y":1.5}, {"x":7, "y":1.5}, {"x":8, "y":1.5}, {"x":9, "y":1.5}, {"x":10, "y":1.5}, {"x":11, "y":1.5}, {"x":12, "y":1.5}, {"x":13, "y":1.5, "w":2}, {"x":15.25, "y":1.5}, {"x":16.25, "y":1.5}, {"x":17.25, "y":1.5}, {"x":0, "y":2.5, "w":1.5}, {"x":1.5, "y":2.5}, {"x":2.5, "y":2.5}, {"x":3.5, "y":2.5}, {"x":4.5, "y":2.5}, {"x":5.5, "y":2.5}, {"x":6.5, "y":2.5}, {"x":7.5, "y":2.5}, {"x":8.5, "y":2.5}, {"x":9.5, "y":2.5}, {"x":10.5, "y":2.5}, {"x":11.5, "y":2.5}, {"x":12.5, "y":2.5}, {"x":13.5, "y":2.5, "w":1.5}, {"x":15.25, "y":2.5}, {"x":16.25, "y":2.5}, {"x":17.25, "y":2.5}, {"x":0, "y":3.5, "w":1.75}, {"x":1.75, "y":3.5}, {"x":2.75, "y":3.5}, {"x":3.75, "y":3.5}, {"x":4.75, "y":3.5}, {"x":5.75, "y":3.5}, {"x":6.75, "y":3.5}, {"x":7.75, "y":3.5}, {"x":8.75, "y":3.5}, {"x":9.75, "y":3.5}, {"x":10.75, "y":3.5}, {"x":11.75, "y":3.5}, {"x":12.75, "y":3.5, "w":2.25}, {"x":0, "y":4.5, "w":2.25}, {"x":2.25, "y":4.5}, {"x":3.25, "y":4.5}, {"x":4.25, "y":4.5}, {"x":5.25, "y":4.5}, {"x":6.25, "y":4.5}, {"x":7.25, "y":4.5}, {"x":8.25, "y":4.5}, {"x":9.25, "y":4.5}, {"x":10.25, "y":4.5}, {"x":11.25, "y":4.5}, {"x":12.25, "y":4.5, "w":1.75}, {"x":14, "y":4.5}, {"x":16.25, "y":4.5}, {"x":0, "y":5.5, "w":1.25}, {"x":1.25, "y":5.5, "w":1.25}, {"x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"x":10, "y":5.5, "w":1.25}, {"x":11.25, "y":5.5, "w":1.25}, {"x":12.5, "y":5.5, "w":1.25}, {"x":13.75, "y":5.5, "w":1.25}, {"x":15.25, "y":5.5}, {"x":16.25, "y":5.5}, {"x":17.25, "y":5.5}]
+ }
+ }
+}
diff --git a/keyboards/skog/keymaps/default/keymap.c b/keyboards/skog/keymaps/default/keymap.c
new file mode 100644
index 000000000..eefc24cb0
--- /dev/null
+++ b/keyboards/skog/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/*
+Copyright 2018 Jumail Mundekkat / MxBlue
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_LSFT, KC_TRNS, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
diff --git a/keyboards/skog/matrix.c b/keyboards/skog/matrix.c
new file mode 100644
index 000000000..245813dfd
--- /dev/null
+++ b/keyboards/skog/matrix.c
@@ -0,0 +1,112 @@
+/*
+Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <avr/io.h>
+#include <util/delay.h>
+
+#include "matrix.h"
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+static uint8_t debouncing = DEBOUNCE;
+
+static matrix_row_t matrix[MATRIX_ROWS];
+static matrix_row_t matrix_debouncing[MATRIX_ROWS];
+
+void matrix_set_row_status(uint8_t row);
+uint8_t bit_reverse(uint8_t x);
+
+void matrix_init(void) {
+ // all outputs for rows high
+ DDRB = 0xFF;
+ PORTB = 0xFF;
+ // all inputs for columns
+ DDRA = 0x00;
+ DDRC &= ~(0x111111<<2);
+ DDRD &= ~(1<<PIND7);
+ // all columns are pulled-up
+ PORTA = 0xFF;
+ PORTC |= (0b111111<<2);
+ PORTD |= (1<<PIND7);
+
+ // initialize matrix state: all keys off
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix[row] = 0x00;
+ matrix_debouncing[row] = 0x00;
+ }
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void) {
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ matrix_set_row_status(row);
+ _delay_us(5);
+
+ matrix_row_t cols = (
+ // cols 0..7, PORTA 0 -> 7
+ (~PINA) & 0xFF
+ ) | (
+ // cols 8..13, PORTC 7 -> 0
+ bit_reverse((~PINC) & 0xFF) << 8
+ ) | (
+ // col 14, PORTD 7
+ ((~PIND) & (1 << PIND7)) << 7
+ );
+
+ if (matrix_debouncing[row] != cols) {
+ matrix_debouncing[row] = cols;
+ debouncing = DEBOUNCE;
+ }
+ }
+
+ if (debouncing) {
+ if (--debouncing) {
+ _delay_ms(1);
+ } else {
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = matrix_debouncing[i];
+ }
+ }
+ }
+
+ matrix_scan_quantum();
+
+ return 1;
+}
+
+// declarations
+void matrix_set_row_status(uint8_t row) {
+ DDRB = (1 << row);
+ PORTB = ~(1 << row);
+}
+
+uint8_t bit_reverse(uint8_t x) {
+ x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
+ x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
+ x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
+ return x;
+}
+
+inline matrix_row_t matrix_get_row(uint8_t row) {
+ return matrix[row];
+}
+
+void matrix_print(void) {
+}
diff --git a/keyboards/skog/rules.mk b/keyboards/skog/rules.mk
new file mode 100644
index 000000000..bce0c442a
--- /dev/null
+++ b/keyboards/skog/rules.mk
@@ -0,0 +1,55 @@
+# Copyright 2018 Jumail Mundekkat / MxBlue
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# MCU name
+MCU = atmega32a
+PROTOCOL = VUSB
+
+# unsupported features for now
+NO_UART = yes
+NO_SUSPEND_POWER_DOWN = yes
+
+# processor frequency
+F_CPU = 12000000
+
+# Bootloader
+# This definition is optional, and if your keyboard supports multiple bootloaders of
+# different sizes, comment this out, and the correct address will be loaded
+# automatically (+60). See bootloader.mk for all options.
+BOOTLOADER = bootloadHID
+
+# build options
+BOOTMAGIC_ENABLE = full
+MOUSEKEY_ENABLE = no
+EXTRAKEY_ENABLE = yes
+CONSOLE_ENABLE = yes
+COMMAND_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+
+BACKLIGHT_CUSTOM_DRIVER = yes
+RGBLIGHT_CUSTOM_DRIVER = yes
+
+OPT_DEFS = -DDEBUG_LEVEL=0
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+# custom matrix setup
+CUSTOM_MATRIX = yes
+SRC = matrix.c i2c.c backlight.c
+
+# programming options
+PROGRAM_CMD = ./util/atmega32a_program.py $(TARGET).hex
diff --git a/keyboards/skog/skog.c b/keyboards/skog/skog.c
new file mode 100644
index 000000000..3d1eb0e1a
--- /dev/null
+++ b/keyboards/skog/skog.c
@@ -0,0 +1,98 @@
+/*
+Copyright 2018 Jumail Mundekkat / MxBlue
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ps2avrGB support code by Kenneth A. (bminiex/.[ch])
+*/
+
+#include "skog.h"
+
+#include "rgblight.h"
+
+#include <avr/pgmspace.h>
+
+#include "action_layer.h"
+#include "i2c.h"
+#include "quantum.h"
+
+#include "backlight.h"
+#include "backlight_custom.h"
+
+// for keyboard subdirectory level init functions
+// @Override
+void matrix_init_kb(void) {
+ // call user level keymaps, if any
+ matrix_init_user();
+}
+
+#ifdef BACKLIGHT_ENABLE
+/// Overrides functions in `quantum.c`
+void backlight_init_ports(void) {
+ b_led_init_ports();
+}
+
+void backlight_task(void) {
+ b_led_task();
+}
+
+void backlight_set(uint8_t level) {
+ b_led_set(level);
+}
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+extern rgblight_config_t rgblight_config;
+
+// custom RGB driver
+void rgblight_set(void) {
+ if (!rgblight_config.enable) {
+ for (uint8_t i=0; i<RGBLED_NUM; i++) {
+ led[i].r = 0;
+ led[i].g = 0;
+ led[i].b = 0;
+ }
+ }
+
+ i2c_init();
+ i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+}
+
+bool rgb_init = false;
+
+void matrix_scan_kb(void) {
+ // if LEDs were previously on before poweroff, turn them back on
+ if (rgb_init == false && rgblight_config.enable) {
+ i2c_init();
+ i2c_send(0xb0, (uint8_t*)led, 3 * RGBLED_NUM);
+ rgb_init = true;
+ }
+
+ rgblight_task();
+#else
+void matrix_scan_kb(void) {
+#endif
+ matrix_scan_user();
+ /* Nothing else for now. */
+}
+
+__attribute__((weak)) // overridable
+void matrix_init_user(void) {
+
+}
+
+__attribute__((weak)) // overridable
+void matrix_scan_user(void) {
+
+}
diff --git a/keyboards/skog/skog.h b/keyboards/skog/skog.h
new file mode 100644
index 000000000..17be94621
--- /dev/null
+++ b/keyboards/skog/skog.h
@@ -0,0 +1,39 @@
+/*
+Copyright 2018 Jumail Mundekkat / MxBlue
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K11, K31, K41, K51, K61, K81, K91, KA1, KB1, KC1, K01, KD1, K21, K20, K30, K00, \
+ \
+ K12, K22, K32, K42, K52, K62, K72, K82, K92, KA2, KB2, KC2, K02, KD2 , K70, K60, K50, \
+ K13 , K23, K33, K43, K53, K63, K73, K83, K93, KA3, KB3, KC3, K03, KD3 , KD0, K90, K80, \
+ K15 , K25, K35, K45, K55, K65, K75, K85, K95, KA5, KB5, KC5, K05 , \
+ K16 , K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6 , K06, KD6, \
+ K17 , K27 , K37 , K57 , K97 , KA7 , KB7 , KC7 , K07, KD7, K87 \
+){ \
+ { K00, KC_NO, K20, K30, KC_NO, K50, K60, K70, K80, K90, KC_NO, KC_NO, KC_NO, KD0 }, \
+ { K01, K11, K21, K31, K41, K51, K61, KC_NO, K81, K91, KA1, KB1, KC1, KD1 }, \
+ { K02, K12, K22, K32, K42, K52, K62, K72, K82, K92, KA2, KB2, KC2, KD2 }, \
+ { K03, K13, K23, K33, K43, K53, K63, K73, K83, K93, KA3, KB3, KC3, KD3 }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
+ { K05, K15, K25, K35, K45, K55, K65, K75, K85, K95, KA5, KB5, KC5, KC_NO }, \
+ { K06, K16, K26, K36, K46, K56, K66, K76, K86, K96, KA6, KB6, KC6, KD6 }, \
+ { K07, K17, K27, K37, KC_NO, K57, KC_NO, KC_NO, K87, K97, KA7, KB7, KC7, KD7 } \
+}
diff --git a/keyboards/skog/usbconfig.h b/keyboards/skog/usbconfig.h
new file mode 100644
index 000000000..481d7c0b1
--- /dev/null
+++ b/keyboards/skog/usbconfig.h
@@ -0,0 +1,396 @@
+/* Name: usbconfig.h
+ * Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
+ * Author: Christian Starkjohann
+ * Creation Date: 2005-04-01
+ * Tabsize: 4
+ * Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
+ * License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
+ * This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
+ */
+
+#ifndef __usbconfig_h_included__
+#define __usbconfig_h_included__
+
+#include "config.h"
+
+/*
+General Description:
+This file is an example configuration (with inline documentation) for the USB
+driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
+also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
+wire the lines to any other port, as long as D+ is also wired to INT0 (or any
+other hardware interrupt, as long as it is the highest level interrupt, see
+section at the end of this file).
+*/
+
+/* ---------------------------- Hardware Config ---------------------------- */
+
+#define USB_CFG_IOPORTNAME D
+/* This is the port where the USB bus is connected. When you configure it to
+ * "B", the registers PORTB, PINB and DDRB will be used.
+ */
+#define USB_CFG_DMINUS_BIT 3
+/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
+ * This may be any bit in the port.
+ */
+#define USB_CFG_DPLUS_BIT 2
+/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
+ * This may be any bit in the port. Please note that D+ must also be connected
+ * to interrupt pin INT0! [You can also use other interrupts, see section
+ * "Optional MCU Description" below, or you can connect D- to the interrupt, as
+ * it is required if you use the USB_COUNT_SOF feature. If you use D- for the
+ * interrupt, the USB interrupt will also be triggered at Start-Of-Frame
+ * markers every millisecond.]
+ */
+#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
+/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
+ * 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
+ * require no crystal, they tolerate +/- 1% deviation from the nominal
+ * frequency. All other rates require a precision of 2000 ppm and thus a
+ * crystal!
+ * Since F_CPU should be defined to your actual clock rate anyway, you should
+ * not need to modify this setting.
+ */
+#define USB_CFG_CHECK_CRC 0
+/* Define this to 1 if you want that the driver checks integrity of incoming
+ * data packets (CRC checks). CRC checks cost quite a bit of code size and are
+ * currently only available for 18 MHz crystal clock. You must choose
+ * USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
+ */
+
+/* ----------------------- Optional Hardware Config ------------------------ */
+
+/* #define USB_CFG_PULLUP_IOPORTNAME D */
+/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
+ * V+, you can connect and disconnect the device from firmware by calling
+ * the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
+ * This constant defines the port on which the pullup resistor is connected.
+ */
+/* #define USB_CFG_PULLUP_BIT 4 */
+/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
+ * above) where the 1.5k pullup resistor is connected. See description
+ * above for details.
+ */
+
+/* --------------------------- Functional Range ---------------------------- */
+
+#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
+/* Define this to 1 if you want to compile a version with two endpoints: The
+ * default control endpoint 0 and an interrupt-in endpoint (any other endpoint
+ * number).
+ */
+#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1
+/* Define this to 1 if you want to compile a version with three endpoints: The
+ * default control endpoint 0, an interrupt-in endpoint 3 (or the number
+ * configured below) and a catch-all default interrupt-in endpoint as above.
+ * You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
+ */
+#define USB_CFG_EP3_NUMBER 3
+/* If the so-called endpoint 3 is used, it can now be configured to any other
+ * endpoint number (except 0) with this macro. Default if undefined is 3.
+ */
+/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
+/* The above macro defines the startup condition for data toggling on the
+ * interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
+ * Since the token is toggled BEFORE sending any data, the first packet is
+ * sent with the oposite value of this configuration!
+ */
+#define USB_CFG_IMPLEMENT_HALT 0
+/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
+ * for endpoint 1 (interrupt endpoint). Although you may not need this feature,
+ * it is required by the standard. We have made it a config option because it
+ * bloats the code considerably.
+ */
+#define USB_CFG_SUPPRESS_INTR_CODE 0
+/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
+ * want to send any data over them. If this macro is defined to 1, functions
+ * usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
+ * you need the interrupt-in endpoints in order to comply to an interface
+ * (e.g. HID), but never want to send any data. This option saves a couple
+ * of bytes in flash memory and the transmit buffers in RAM.
+ */
+#define USB_CFG_INTR_POLL_INTERVAL 1
+/* If you compile a version with endpoint 1 (interrupt-in), this is the poll
+ * interval. The value is in milliseconds and must not be less than 10 ms for
+ * low speed devices.
+ */
+#define USB_CFG_IS_SELF_POWERED 0
+/* Define this to 1 if the device has its own power supply. Set it to 0 if the
+ * device is powered from the USB bus.
+ */
+#define USB_CFG_MAX_BUS_POWER 500
+/* Set this variable to the maximum USB bus power consumption of your device.
+ * The value is in milliamperes. [It will be divided by two since USB
+ * communicates power requirements in units of 2 mA.]
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITE 1
+/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
+ * transfers. Set it to 0 if you don't need it and want to save a couple of
+ * bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_READ 0
+/* Set this to 1 if you need to send control replies which are generated
+ * "on the fly" when usbFunctionRead() is called. If you only want to send
+ * data from a static buffer, set it to 0 and return the data from
+ * usbFunctionSetup(). This saves a couple of bytes.
+ */
+#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
+/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
+ * You must implement the function usbFunctionWriteOut() which receives all
+ * interrupt/bulk data sent to any endpoint other than 0. The endpoint number
+ * can be found in 'usbRxToken'.
+ */
+#define USB_CFG_HAVE_FLOWCONTROL 0
+/* Define this to 1 if you want flowcontrol over USB data. See the definition
+ * of the macros usbDisableAllRequests() and usbEnableAllRequests() in
+ * usbdrv.h.
+ */
+#define USB_CFG_DRIVER_FLASH_PAGE 0
+/* If the device has more than 64 kBytes of flash, define this to the 64 k page
+ * where the driver's constants (descriptors) are located. Or in other words:
+ * Define this to 1 for boot loaders on the ATMega128.
+ */
+#define USB_CFG_LONG_TRANSFERS 0
+/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
+ * in a single control-in or control-out transfer. Note that the capability
+ * for long transfers increases the driver size.
+ */
+/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
+/* This macro is a hook if you want to do unconventional things. If it is
+ * defined, it's inserted at the beginning of received message processing.
+ * If you eat the received message and don't want default processing to
+ * proceed, do a return after doing your things. One possible application
+ * (besides debugging) is to flash a status LED on each packet.
+ */
+/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
+/* This macro is a hook if you need to know when an USB RESET occurs. It has
+ * one parameter which distinguishes between the start of RESET state and its
+ * end.
+ */
+/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
+/* This macro (if defined) is executed when a USB SET_ADDRESS request was
+ * received.
+ */
+#define USB_COUNT_SOF 1
+/* define this macro to 1 if you need the global variable "usbSofCount" which
+ * counts SOF packets. This feature requires that the hardware interrupt is
+ * connected to D- instead of D+.
+ */
+/* #ifdef __ASSEMBLER__
+ * macro myAssemblerMacro
+ * in YL, TCNT0
+ * sts timer0Snapshot, YL
+ * endm
+ * #endif
+ * #define USB_SOF_HOOK myAssemblerMacro
+ * This macro (if defined) is executed in the assembler module when a
+ * Start Of Frame condition is detected. It is recommended to define it to
+ * the name of an assembler macro which is defined here as well so that more
+ * than one assembler instruction can be used. The macro may use the register
+ * YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
+ * immediately after an SOF pulse may be lost and must be retried by the host.
+ * What can you do with this hook? Since the SOF signal occurs exactly every
+ * 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
+ * designs running on the internal RC oscillator.
+ * Please note that Start Of Frame detection works only if D- is wired to the
+ * interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
+ */
+#define USB_CFG_CHECK_DATA_TOGGLING 0
+/* define this macro to 1 if you want to filter out duplicate data packets
+ * sent by the host. Duplicates occur only as a consequence of communication
+ * errors, when the host does not receive an ACK. Please note that you need to
+ * implement the filtering yourself in usbFunctionWriteOut() and
+ * usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
+ * for each control- and out-endpoint to check for duplicate packets.
+ */
+#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
+/* define this macro to 1 if you want the function usbMeasureFrameLength()
+ * compiled in. This function can be used to calibrate the AVR's RC oscillator.
+ */
+#define USB_USE_FAST_CRC 0
+/* The assembler module has two implementations for the CRC algorithm. One is
+ * faster, the other is smaller. This CRC routine is only used for transmitted
+ * messages where timing is not critical. The faster routine needs 31 cycles
+ * per byte while the smaller one needs 61 to 69 cycles. The faster routine
+ * may be worth the 32 bytes bigger code size if you transmit lots of data and
+ * run the AVR close to its limit.
+ */
+
+/* -------------------------- Device Description --------------------------- */
+
+#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
+/* USB vendor ID for the device, low byte first. If you have registered your
+ * own Vendor ID, define it here. Otherwise you may use one of obdev's free
+ * shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
+/* This is the ID of the product, low byte first. It is interpreted in the
+ * scope of the vendor ID. If you have registered your own VID with usb.org
+ * or if you have licensed a PID from somebody else, define it here. Otherwise
+ * you may use one of obdev's free shared VID/PID pairs. See the file
+ * USB-IDs-for-free.txt for details!
+ * *** IMPORTANT NOTE ***
+ * This template uses obdev's shared VID/PID pair for Vendor Class devices
+ * with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
+ * the implications!
+ */
+#define USB_CFG_DEVICE_VERSION 0x00, 0x02
+/* Version number of the device: Minor number first, then major number.
+ */
+#define USB_CFG_VENDOR_NAME 'P','e','r','c','e','n','t'
+#define USB_CFG_VENDOR_NAME_LEN 7
+/* 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 'S','k','o','g',' ','T','K','L'
+#define USB_CFG_DEVICE_NAME_LEN 8
+/* Same as above for the device name. If you don't want a device name, undefine
+ * the macros. See the file USB-IDs-for-free.txt before you assign a name if
+ * you use a shared VID/PID.
+ */
+/*#define USB_CFG_SERIAL_NUMBER 'N', 'o', 'n', 'e' */
+/*#define USB_CFG_SERIAL_NUMBER_LEN 0 */
+/* Same as above for the serial number. If you don't want a serial number,
+ * undefine the macros.
+ * It may be useful to provide the serial number through other means than at
+ * compile time. See the section about descriptor properties below for how
+ * to fine tune control over USB descriptors such as the string descriptor
+ * for the serial number.
+ */
+#define USB_CFG_DEVICE_CLASS 0
+#define USB_CFG_DEVICE_SUBCLASS 0
+/* See USB specification if you want to conform to an existing device class.
+ * Class 0xff is "vendor specific".
+ */
+#define USB_CFG_INTERFACE_CLASS 3 /* HID */
+#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
+#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
+/* See USB specification if you want to conform to an existing device class or
+ * protocol. The following classes must be set at interface level:
+ * HID class is 3, no subclass and protocol required (but may be useful!)
+ * CDC class is 2, use subclass 2 and protocol 1 for ACM
+ */
+#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
+/* Define this to the length of the HID report descriptor, if you implement
+ * an HID device. Otherwise don't define it or define it to 0.
+ * If you use this define, you must add a PROGMEM character array named
+ * "usbHidReportDescriptor" to your code which contains the report descriptor.
+ * Don't forget to keep the array and this define in sync!
+ */
+
+/* #define USB_PUBLIC static */
+/* Use the define above if you #include usbdrv.c instead of linking against it.
+ * This technique saves a couple of bytes in flash memory.
+ */
+
+/* ------------------- Fine Control over USB Descriptors ------------------- */
+/* If you don't want to use the driver's default USB descriptors, you can
+ * provide our own. These can be provided as (1) fixed length static data in
+ * flash memory, (2) fixed length static data in RAM or (3) dynamically at
+ * runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
+ * information about this function.
+ * Descriptor handling is configured through the descriptor's properties. If
+ * no properties are defined or if they are 0, the default descriptor is used.
+ * Possible properties are:
+ * + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
+ * at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
+ * used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
+ * you want RAM pointers.
+ * + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
+ * in static memory is in RAM, not in flash memory.
+ * + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
+ * the driver must know the descriptor's length. The descriptor itself is
+ * found at the address of a well known identifier (see below).
+ * List of static descriptor names (must be declared PROGMEM if in flash):
+ * char usbDescriptorDevice[];
+ * char usbDescriptorConfiguration[];
+ * char usbDescriptorHidReport[];
+ * char usbDescriptorString0[];
+ * int usbDescriptorStringVendor[];
+ * int usbDescriptorStringDevice[];
+ * int usbDescriptorStringSerialNumber[];
+ * Other descriptors can't be provided statically, they must be provided
+ * dynamically at runtime.
+ *
+ * Descriptor properties are or-ed or added together, e.g.:
+ * #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
+ *
+ * The following descriptors are defined:
+ * USB_CFG_DESCR_PROPS_DEVICE
+ * USB_CFG_DESCR_PROPS_CONFIGURATION
+ * USB_CFG_DESCR_PROPS_STRINGS
+ * USB_CFG_DESCR_PROPS_STRING_0
+ * USB_CFG_DESCR_PROPS_STRING_VENDOR
+ * USB_CFG_DESCR_PROPS_STRING_PRODUCT
+ * USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
+ * USB_CFG_DESCR_PROPS_HID
+ * USB_CFG_DESCR_PROPS_HID_REPORT
+ * USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
+ *
+ * Note about string descriptors: String descriptors are not just strings, they
+ * are Unicode strings prefixed with a 2 byte header. Example:
+ * int serialNumberDescriptor[] = {
+ * USB_STRING_DESCRIPTOR_HEADER(6),
+ * 'S', 'e', 'r', 'i', 'a', 'l'
+ * };
+ */
+
+#define USB_CFG_DESCR_PROPS_DEVICE 0
+#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
+//#define USB_CFG_DESCR_PROPS_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/snagpad/config.h b/keyboards/snagpad/config.h
new file mode 100644
index 000000000..a14ead67f
--- /dev/null
+++ b/keyboards/snagpad/config.h
@@ -0,0 +1,56 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Flehrad
+#define PRODUCT Snagpad
+#define DESCRIPTION A Pro Micro-Powered 5x4 macropad/numpad
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 4
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D1, D0, D4, C6, D7 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 3
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* prevent stuck modifiers */
+//#define STRICT_LAYER_RELEASE
+
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 0
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
diff --git a/keyboards/snagpad/info.json b/keyboards/snagpad/info.json
new file mode 100644
index 000000000..ffaa5c0a7
--- /dev/null
+++ b/keyboards/snagpad/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "Snagpad",
+ "url": "",
+ "maintainer": "Flehrad",
+
+ "width": 4,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ortho_5x4": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":0, "y":4}, {"x":1, "y":4}, {"x":2, "y":4}, {"x":3, "y":4}]
+ },
+ "LAYOUT_numpad_5x4": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":1, "h":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":0, "y":4, "w":2}, {"x":2, "y":4}, {"x":3, "y":3, "h":2}]
+ }
+ }
+}
diff --git a/keyboards/snagpad/keymaps/default/keymap.c b/keyboards/snagpad/keymaps/default/keymap.c
new file mode 100644
index 000000000..7645b435c
--- /dev/null
+++ b/keyboards/snagpad/keymaps/default/keymap.c
@@ -0,0 +1,63 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_ortho_5x4(
+ KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_P0, KC_P0, KC_PDOT, KC_PENT),
+
+ LAYOUT_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) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_COMPOSE)) {
+
+ } else {
+
+ }
+
+ if (usb_led & (1 << USB_LED_KANA)) {
+
+ } else {
+
+ }
+
+}
diff --git a/keyboards/snagpad/license b/keyboards/snagpad/license
new file mode 100644
index 000000000..261eeb9e9
--- /dev/null
+++ b/keyboards/snagpad/license
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/keyboards/snagpad/readme.md b/keyboards/snagpad/readme.md
new file mode 100644
index 000000000..eeafceba9
--- /dev/null
+++ b/keyboards/snagpad/readme.md
@@ -0,0 +1,21 @@
+# Snagpad
+QMK for Snagpad
+
+This PCB can be used as a standard numpad, or a ortho 5x4 macropad.
+
+For QMK Configurator, the info.json is utilised.
+- For 2U keys on numpad, the first 1u row/column key assignment is the same as the 2u position.
+
+Build requires a pro micro.
+
+Can be built as single PCB with custom case, or as two PCB style with standoffs.
+
+If you like this simple PCB and want to make a donation, you can at https://paypal.me/theboardpodcast
+
+Check out our:
+
+YouTube (https://www.youtube.com/channel/UCg98oJZNffR9nDLJNkorjqw)
+
+Podcast (www.libsyn.com/theboardpodcast)
+
+Patreon (www.patreon.com/theboardpodcast)
diff --git a/keyboards/snagpad/rules.mk b/keyboards/snagpad/rules.mk
new file mode 100644
index 000000000..624ed262e
--- /dev/null
+++ b/keyboards/snagpad/rules.mk
@@ -0,0 +1,65 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = caterina
+
+# Boot Section Size in *bytes*
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no
+LAYOUTS = ortho_5x4 numpad_5x4
diff --git a/keyboards/snagpad/snagpad.c b/keyboards/snagpad/snagpad.c
new file mode 100644
index 000000000..ce7e50b38
--- /dev/null
+++ b/keyboards/snagpad/snagpad.c
@@ -0,0 +1 @@
+#include "snagpad.h"
diff --git a/keyboards/snagpad/snagpad.h b/keyboards/snagpad/snagpad.h
new file mode 100644
index 000000000..d6a62ddf7
--- /dev/null
+++ b/keyboards/snagpad/snagpad.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#include "quantum.h"
+
+#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 } \
+}
+#define LAYOUT_numpad_5x4( \
+ K00, K01, K02, K03, \
+ K10, K11, K12, \
+ K20, K21, K22, K13, \
+ K30, K31, K32, \
+ K40, K42, K33 \
+) { \
+ { K00, K01, K02, K03 }, \
+ { K10, K11, K12, K13 }, \
+ { K20, K21, K22, KC_NO }, \
+ { K30, K31, K32, K33 }, \
+ { K40, KC_NO, K42, KC_NO } \
+}
diff --git a/keyboards/sol/common/glcdfont.c b/keyboards/sol/common/glcdfont.c
new file mode 100644
index 000000000..89665ba07
--- /dev/null
+++ b/keyboards/sol/common/glcdfont.c
@@ -0,0 +1,244 @@
+// This is the 'classic' fixed-space bitmap font for Adafruit_GFX since 1.0.
+// See gfxfont.h for newer custom bitmap font info.
+
+#ifndef FONT5X7_H
+#define FONT5X7_H
+
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/pgmspace.h>
+#elif defined(ESP8266)
+ #include <pgmspace.h>
+#else
+ #define PROGMEM
+#endif
+
+// Standard ASCII 5x7 font
+
+static const unsigned char font[] PROGMEM = {
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
+ 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
+ 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
+ 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
+ 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
+ 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
+ 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
+ 0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
+ 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
+ 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
+ 0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
+ 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
+ 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
+ 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
+ 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
+ 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
+ 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
+ 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
+ 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
+ 0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
+ 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
+ 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
+ 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
+ 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
+ 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
+ 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
+ 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
+ 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
+ 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
+ 0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
+ 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
+ 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
+ 0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
+ 0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
+ 0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
+ 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
+ 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
+ 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
+ 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
+ 0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
+ 0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
+ 0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
+ 0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
+ 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
+ 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
+ 0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
+ 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
+ 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
+ 0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
+ 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
+ 0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
+ 0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
+ 0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
+ 0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
+ 0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
+ 0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
+ 0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
+ 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
+ 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
+ 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
+ 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
+ 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
+ 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
+ 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
+ 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
+ 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
+ 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
+ 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
+ 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
+ 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
+ 0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
+ 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
+ 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
+ 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
+ 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
+ 0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
+ 0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
+ 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
+ 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
+ 0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
+ 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
+ 0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
+ 0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
+ 0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
+ 0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
+ 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
+ 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
+ 0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
+ 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
+ 0x18, 0xA4, 0xA4, 0x9C, 0x78, 0x00,
+ 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
+ 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
+ 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
+ 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
+ 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
+ 0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
+ 0xFC, 0x18, 0x24, 0x24, 0x18, 0x00,
+ 0x18, 0x24, 0x24, 0x18, 0xFC, 0x00,
+ 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
+ 0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
+ 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
+ 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
+ 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
+ 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
+ 0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
+ 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
+ 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
+ 0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
+ 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
+ 0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
+ 0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
+ 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
+ 0x03, 0x07, 0x1F, 0x7F, 0xFF, 0xFF,
+ 0xFE, 0xF8, 0xF0, 0xC0, 0x20, 0xF8,
+ 0xFE, 0xFF, 0xFE, 0x79, 0x27, 0x1F,
+ 0x7F, 0xFF, 0xFF, 0xFE, 0xF8, 0xF0,
+ 0xC0, 0x20, 0xF8, 0xFE, 0xFF, 0xFF,
+ 0x7F, 0x3F, 0x3F, 0x7F, 0xFF, 0xFE,
+ 0xF8, 0xF0, 0xC0, 0x00, 0x00, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xFF, 0x7F, 0x7F, 0x7F,
+ 0xBF, 0xBF, 0xC0, 0xC0, 0xC0, 0xE0,
+ 0xE0, 0xE0, 0xE0, 0xF0, 0xF0, 0xF0,
+ 0xF8, 0x78, 0x78, 0x7C, 0x3C, 0x3C,
+ 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
+ 0xBF, 0xBF, 0xDF, 0xDF, 0xEF, 0xEF,
+ 0x00, 0x03, 0x07, 0x1F, 0x7F, 0xFF,
+ 0xFF, 0xFF, 0xFE, 0xF8, 0xE0, 0xC0,
+ 0xE0, 0xF8, 0xFE, 0xFF, 0xFF, 0xFF,
+ 0x7F, 0x1F, 0x07, 0x03, 0x00, 0x00,
+ 0xE0, 0xF0, 0xF0, 0xF0, 0xE0, 0xEC,
+ 0xEE, 0xF7, 0xF3, 0x70, 0x20, 0x00,
+ 0x7C, 0x7C, 0x7C, 0x7E, 0x00, 0x7E,
+ 0x7E, 0x7E, 0x7F, 0x7F, 0x7F, 0x00,
+ 0x00, 0x80, 0xC0, 0xE0, 0x7E, 0x5B,
+ 0x4F, 0x5B, 0xFE, 0xC0, 0x00, 0x00,
+ 0xC0, 0x00, 0xDC, 0xD7, 0xDE, 0xDE,
+ 0xDE, 0xD7, 0xDC, 0x00, 0xC0, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xC1, 0xF3,
+ 0xCF, 0xBF, 0x7F, 0xFF, 0xFF, 0xFC,
+ 0xFB, 0xE7, 0x81, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0xE3, 0xCF, 0x3F, 0xFF,
+ 0xFF, 0xFF, 0xFC, 0xFB, 0xE7, 0x81,
+ 0x00, 0x00, 0x00, 0x00, 0x81, 0xE7,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, 0x00,
+ 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xF8, 0xF8, 0xFC, 0x7C, 0x7E,
+ 0x7E, 0x3E, 0xFE, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xF7, 0xF7, 0xF7, 0xFB,
+ 0xFB, 0x7D, 0x7D, 0x7D, 0xBE, 0xBE,
+ 0xBE, 0xDF, 0xDF, 0xE0, 0xE0, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0xFC, 0xFC, 0x7C, 0x7E, 0x7E,
+ 0x3E, 0x3E, 0x1F, 0x1F, 0x1F, 0x0F,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x81,
+ 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0x81,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x7F,
+ 0x7F, 0x7F, 0x3F, 0x1E, 0x0C, 0x00,
+ 0x1F, 0x1F, 0x1F, 0x3F, 0x00, 0x3F,
+ 0x3F, 0x3F, 0x7F, 0x7F, 0x7F, 0x00,
+ 0x30, 0x7B, 0x7F, 0x78, 0x30, 0x20,
+ 0x20, 0x30, 0x78, 0x7F, 0x3B, 0x00,
+ 0x03, 0x00, 0x0F, 0x7F, 0x0F, 0x0F,
+ 0x0F, 0x7F, 0x0F, 0x00, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x70, 0x7C, 0x7F, 0x7F, 0x7F,
+ 0x7F, 0x1F, 0x06, 0x01, 0x03, 0x0F,
+ 0x3F, 0x7F, 0x7F, 0x7E, 0x7C, 0x7C,
+ 0x7E, 0x7F, 0x7F, 0x7F, 0x1F, 0x06,
+ 0x01, 0x07, 0x0F, 0x3F, 0x7F, 0x7F,
+ 0x7E, 0x7C, 0x7C, 0x7E, 0x7F, 0x7F,
+ 0x3F, 0x0F, 0x03, 0x00, 0x00, 0x00,
+ 0x00, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+ 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x7F, 0x7F, 0x7F, 0x7F,
+ 0x7F, 0x7F, 0x7D, 0x7D, 0x3D, 0x3E,
+ 0x1E, 0x1F, 0x1F, 0x1F, 0x0F, 0x0F,
+ 0x07, 0x07, 0x07, 0x03, 0x03, 0x00,
+ 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+ 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x7C,
+ 0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00,
+ 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F,
+ 0x00, 0x40, 0x70, 0x78, 0x7E, 0x7F,
+ 0x7F, 0x7F, 0x3F, 0x0F, 0x03, 0x01,
+ 0x03, 0x0F, 0x3F, 0x7F, 0x7F, 0x7F,
+ 0x7E, 0x78, 0x70, 0x40, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+#endif // FONT5X7_H
diff --git a/keyboards/sol/common/knob_v2.c b/keyboards/sol/common/knob_v2.c
new file mode 100644
index 000000000..f22f7c5d8
--- /dev/null
+++ b/keyboards/sol/common/knob_v2.c
@@ -0,0 +1,71 @@
+#include "knob_v2.h"
+
+bool knob_prev_a = false;
+static knob_report_t knob_report = {.dir = 0, .phase = 0};
+
+void knob_init(void) {
+ // I use pins D1 (ISR1) & D4 for a knob.
+
+ // Set pin mode for D4 as input.
+ DDRD &= ~(0UL << ENCODER_PIN_2);
+
+ // Enable internal pull-up for D4.
+ // This is done by "writing" 1 to a pin that has its mode set to input.
+ PORTD |= (1 << ENCODER_PIN_2);
+
+ // Enable interrupt for D1
+ // For more info on the below flags see this awesome section 11.1 (pages 89-90) here:
+ // https://cdn-shop.adafruit.com/datasheets/atmel-7766-8-bit-avr-atmega16u4-32u4_datasheet.pdf
+ // Set pin mode & pull-up.
+ DDRD &= ~(0UL << ENCODER_PIN_1);
+ PORTD |= (1UL << ENCODER_PIN_1);
+
+ // INT: 33221100
+ EICRA |= 0b00010000; // 0b01 - any edge
+ // INT: 6 3210
+ EIMSK |= 0b00000100;
+}
+
+ISR(ENCODER_INT) {
+ bool a = PIND & (1 << ENCODER_PIN_1);
+
+ if (knob_prev_a != a) {
+ // "A" channel has REALLY changed.
+ knob_report.phase = a;
+ knob_prev_a = a;
+ bool b = PIND & (1 << ENCODER_PIN_2);
+ if (a == b) {
+ // Halfway through CCW rotation (A == B)
+ //
+ // +---YOU ARE HERE (A=1, B=1)
+ // | +---OR HERE (A=0, B=0)
+ // | |
+ // v v
+ // A: _____/^^^^^\__
+ // B: __/^^^^^\_____
+ knob_report.dir++;
+ } else {
+ // Halfway through CW rotation (A != B)
+ //
+ // +---YOU ARE HERE (A=1, B=0)
+ // | +---OR HERE (A=0, B=1)
+ // | |
+ // v v
+ // A: _____/^^^^^\_____
+ // B: ________/^^^^^\__
+ knob_report.dir--;
+ }
+ }
+}
+
+knob_report_t knob_report_read(void) {
+ // Return knob report.
+ return knob_report;
+}
+
+void knob_report_reset(void) {
+ // Call this ASAP once you've processed the previous knob report.
+ // TODO: This should probably be called within `knob_report_read`.
+ knob_report.dir = 0;
+ knob_report.phase = 0;
+}
diff --git a/keyboards/sol/common/knob_v2.h b/keyboards/sol/common/knob_v2.h
new file mode 100644
index 000000000..45196eb1a
--- /dev/null
+++ b/keyboards/sol/common/knob_v2.h
@@ -0,0 +1,28 @@
+// Rotary knob implementation - Version 2.
+// Uses 2 digital pins - D2 (via interrupt) & D6.
+// #include "rev1.h"
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <stdbool.h>
+
+#ifndef ENCODER_PIN_1
+ #define ENCODER_PIN_1 PD2
+#endif
+#ifndef ENCODER_PIN_2
+ #define ENCODER_PIN_2 PD6
+#endif
+#ifndef ENCODER_INT
+ #define ENCODER_INT INT2_vect
+#endif
+
+typedef struct knob_report_t {
+ int8_t dir; // Contains number of rotations that happened
+ int8_t phase; // Contains 0 if last rotation happened on 90 degrees, 1 if on 270
+} knob_report_t;
+
+void knob_init(void);
+knob_report_t knob_report_read(void);
+void knob_report_reset(void);
+
+bool knob_prev_a;
+int8_t knob_dir;
diff --git a/keyboards/sol/common/ssd1306.c b/keyboards/sol/common/ssd1306.c
new file mode 100644
index 000000000..b3e55a67c
--- /dev/null
+++ b/keyboards/sol/common/ssd1306.c
@@ -0,0 +1,329 @@
+#ifdef SSD1306OLED
+
+#include "ssd1306.h"
+#include "i2c.h"
+#include <string.h>
+#include "print.h"
+#ifndef LOCAL_GLCDFONT
+#include "common/glcdfont.c"
+#else
+#include <helixfont.h>
+#endif
+#ifdef ADAFRUIT_BLE_ENABLE
+#include "adafruit_ble.h"
+#endif
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#endif
+#include "sendchar.h"
+#include "timer.h"
+
+// Set this to 1 to help diagnose early startup problems
+// when testing power-on with ble. Turn it off otherwise,
+// as the latency of printing most of the debug info messes
+// with the matrix scan, causing keys to drop.
+#define DEBUG_TO_SCREEN 0
+
+//static uint16_t last_battery_update;
+//static uint32_t vbat;
+//#define BatteryUpdateInterval 10000 /* milliseconds */
+#define ScreenOffInterval 300000 /* milliseconds */
+#if DEBUG_TO_SCREEN
+static uint8_t displaying;
+#endif
+static uint16_t last_flush;
+
+// Write command sequence.
+// Returns true on success.
+static inline bool _send_cmd1(uint8_t cmd) {
+ bool res = false;
+
+ if (i2c_start_write(SSD1306_ADDRESS)) {
+ xprintf("failed to start write to %d\n", SSD1306_ADDRESS);
+ goto done;
+ }
+
+ if (i2c_master_write(0x0 /* command byte follows */)) {
+ print("failed to write control byte\n");
+
+ goto done;
+ }
+
+ if (i2c_master_write(cmd)) {
+ xprintf("failed to write command %d\n", cmd);
+ goto done;
+ }
+ res = true;
+done:
+ i2c_master_stop();
+ return res;
+}
+
+// Write 2-byte command sequence.
+// Returns true on success
+static inline bool _send_cmd2(uint8_t cmd, uint8_t opr) {
+ if (!_send_cmd1(cmd)) {
+ return false;
+ }
+ return _send_cmd1(opr);
+}
+
+// Write 3-byte command sequence.
+// Returns true on success
+static inline bool _send_cmd3(uint8_t cmd, uint8_t opr1, uint8_t opr2) {
+ if (!_send_cmd1(cmd)) {
+ return false;
+ }
+ if (!_send_cmd1(opr1)) {
+ return false;
+ }
+ return _send_cmd1(opr2);
+}
+
+#define send_cmd1(c) if (!_send_cmd1(c)) {goto done;}
+#define send_cmd2(c,o) if (!_send_cmd2(c,o)) {goto done;}
+#define send_cmd3(c,o1,o2) if (!_send_cmd3(c,o1,o2)) {goto done;}
+
+static void clear_display(void) {
+ matrix_clear(&display);
+
+ // Clear all of the display bits (there can be random noise
+ // in the RAM on startup)
+ send_cmd3(PageAddr, 0, (DisplayHeight / 8) - 1);
+ send_cmd3(ColumnAddr, 0, DisplayWidth - 1);
+
+ if (i2c_start_write(SSD1306_ADDRESS)) {
+ goto done;
+ }
+ if (i2c_master_write(0x40)) {
+ // Data mode
+ goto done;
+ }
+ for (uint8_t row = 0; row < MatrixRows; ++row) {
+ for (uint8_t col = 0; col < DisplayWidth; ++col) {
+ i2c_master_write(0);
+ }
+ }
+
+ display.dirty = false;
+
+done:
+ i2c_master_stop();
+}
+
+#if DEBUG_TO_SCREEN
+#undef sendchar
+static int8_t capture_sendchar(uint8_t c) {
+ sendchar(c);
+ iota_gfx_write_char(c);
+
+ if (!displaying) {
+ iota_gfx_flush();
+ }
+ return 0;
+}
+#endif
+
+bool iota_gfx_init(bool rotate) {
+ bool success = false;
+
+ i2c_master_init();
+ send_cmd1(DisplayOff);
+ send_cmd2(SetDisplayClockDiv, 0x80);
+ send_cmd2(SetMultiPlex, DisplayHeight - 1);
+
+ send_cmd2(SetDisplayOffset, 0);
+
+
+ send_cmd1(SetStartLine | 0x0);
+ send_cmd2(SetChargePump, 0x14 /* Enable */);
+ send_cmd2(SetMemoryMode, 0 /* horizontal addressing */);
+
+ if(rotate){
+ // the following Flip the display orientation 180 degrees
+ send_cmd1(SegRemap);
+ send_cmd1(ComScanInc);
+ }else{
+ // Flips the display orientation 0 degrees
+ send_cmd1(SegRemap | 0x1);
+ send_cmd1(ComScanDec);
+ }
+
+ send_cmd2(SetComPins, 0x2);
+ send_cmd2(SetContrast, 0x8f);
+ send_cmd2(SetPreCharge, 0xf1);
+ send_cmd2(SetVComDetect, 0x40);
+ send_cmd1(DisplayAllOnResume);
+ send_cmd1(NormalDisplay);
+ send_cmd1(DeActivateScroll);
+ send_cmd1(DisplayOn);
+
+ send_cmd2(SetContrast, 0); // Dim
+
+ clear_display();
+
+ success = true;
+
+ iota_gfx_flush();
+
+#if DEBUG_TO_SCREEN
+ print_set_sendchar(capture_sendchar);
+#endif
+
+done:
+ return success;
+}
+
+bool iota_gfx_off(void) {
+ bool success = false;
+
+ send_cmd1(DisplayOff);
+ success = true;
+
+done:
+ return success;
+}
+
+bool iota_gfx_on(void) {
+ bool success = false;
+
+ send_cmd1(DisplayOn);
+ success = true;
+
+done:
+ return success;
+}
+
+void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c) {
+ *matrix->cursor = c;
+ ++matrix->cursor;
+
+ if (matrix->cursor - &matrix->display[0][0] == sizeof(matrix->display)) {
+ // We went off the end; scroll the display upwards by one line
+ memmove(&matrix->display[0], &matrix->display[1],
+ MatrixCols * (MatrixRows - 1));
+ matrix->cursor = &matrix->display[MatrixRows - 1][0];
+ memset(matrix->cursor, ' ', MatrixCols);
+ }
+}
+
+void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c) {
+ matrix->dirty = true;
+
+ if (c == '\n') {
+ // Clear to end of line from the cursor and then move to the
+ // start of the next line
+ uint8_t cursor_col = (matrix->cursor - &matrix->display[0][0]) % MatrixCols;
+
+ while (cursor_col++ < MatrixCols) {
+ matrix_write_char_inner(matrix, ' ');
+ }
+ return;
+ }
+
+ matrix_write_char_inner(matrix, c);
+}
+
+void iota_gfx_write_char(uint8_t c) {
+ matrix_write_char(&display, c);
+}
+
+void matrix_write(struct CharacterMatrix *matrix, const char *data) {
+ const char *end = data + strlen(data);
+ while (data < end) {
+ matrix_write_char(matrix, *data);
+ ++data;
+ }
+}
+
+void iota_gfx_write(const char *data) {
+ matrix_write(&display, data);
+}
+
+void matrix_write_P(struct CharacterMatrix *matrix, const char *data) {
+ while (true) {
+ uint8_t c = pgm_read_byte(data);
+ if (c == 0) {
+ return;
+ }
+ matrix_write_char(matrix, c);
+ ++data;
+ }
+}
+
+void iota_gfx_write_P(const char *data) {
+ matrix_write_P(&display, data);
+}
+
+void matrix_clear(struct CharacterMatrix *matrix) {
+ memset(matrix->display, ' ', sizeof(matrix->display));
+ matrix->cursor = &matrix->display[0][0];
+ matrix->dirty = true;
+}
+
+void iota_gfx_clear_screen(void) {
+ matrix_clear(&display);
+}
+
+void matrix_render(struct CharacterMatrix *matrix) {
+ last_flush = timer_read();
+ iota_gfx_on();
+#if DEBUG_TO_SCREEN
+ ++displaying;
+#endif
+
+ // Move to the home position
+ send_cmd3(PageAddr, 0, MatrixRows - 1);
+ send_cmd3(ColumnAddr, 0, (MatrixCols * FontWidth) - 1);
+
+ if (i2c_start_write(SSD1306_ADDRESS)) {
+ goto done;
+ }
+ if (i2c_master_write(0x40)) {
+ // Data mode
+ goto done;
+ }
+
+ for (uint8_t row = 0; row < MatrixRows; ++row) {
+ for (uint8_t col = 0; col < MatrixCols; ++col) {
+ const uint8_t *glyph = font + (matrix->display[row][col] * FontWidth);
+
+ for (uint8_t glyphCol = 0; glyphCol < FontWidth; ++glyphCol) {
+ uint8_t colBits = pgm_read_byte(glyph + glyphCol);
+ i2c_master_write(colBits);
+ }
+
+ // 1 column of space between chars (it's not included in the glyph)
+ //i2c_master_write(0);
+ }
+ }
+
+ matrix->dirty = false;
+
+done:
+ i2c_master_stop();
+#if DEBUG_TO_SCREEN
+ --displaying;
+#endif
+}
+
+void iota_gfx_flush(void) {
+ matrix_render(&display);
+}
+
+__attribute__ ((weak))
+void iota_gfx_task_user(void) {
+}
+
+void iota_gfx_task(void) {
+ iota_gfx_task_user();
+
+ if (display.dirty) {
+ iota_gfx_flush();
+ }
+
+ if (timer_elapsed(last_flush) > ScreenOffInterval) {
+ iota_gfx_off();
+ }
+}
+#endif
diff --git a/keyboards/sol/common/ssd1306.h b/keyboards/sol/common/ssd1306.h
new file mode 100644
index 000000000..77ce7c211
--- /dev/null
+++ b/keyboards/sol/common/ssd1306.h
@@ -0,0 +1,92 @@
+#ifndef SSD1306_H
+#define SSD1306_H
+
+#include <stdbool.h>
+#include <stdio.h>
+#include "pincontrol.h"
+
+enum ssd1306_cmds {
+ DisplayOff = 0xAE,
+ DisplayOn = 0xAF,
+
+ SetContrast = 0x81,
+ DisplayAllOnResume = 0xA4,
+
+ DisplayAllOn = 0xA5,
+ NormalDisplay = 0xA6,
+ InvertDisplay = 0xA7,
+ SetDisplayOffset = 0xD3,
+ SetComPins = 0xda,
+ SetVComDetect = 0xdb,
+ SetDisplayClockDiv = 0xD5,
+ SetPreCharge = 0xd9,
+ SetMultiPlex = 0xa8,
+ SetLowColumn = 0x00,
+ SetHighColumn = 0x10,
+ SetStartLine = 0x40,
+
+ SetMemoryMode = 0x20,
+ ColumnAddr = 0x21,
+ PageAddr = 0x22,
+
+ ComScanInc = 0xc0,
+ ComScanDec = 0xc8,
+ SegRemap = 0xa0,
+ SetChargePump = 0x8d,
+ ExternalVcc = 0x01,
+ SwitchCapVcc = 0x02,
+
+ ActivateScroll = 0x2f,
+ DeActivateScroll = 0x2e,
+ SetVerticalScrollArea = 0xa3,
+ RightHorizontalScroll = 0x26,
+ LeftHorizontalScroll = 0x27,
+ VerticalAndRightHorizontalScroll = 0x29,
+ VerticalAndLeftHorizontalScroll = 0x2a,
+};
+
+// Controls the SSD1306 128x32 OLED display via i2c
+
+#ifndef SSD1306_ADDRESS
+#define SSD1306_ADDRESS 0x3C
+#endif
+
+#define DisplayHeight 32
+#define DisplayWidth 128
+
+#define FontHeight 8
+#define FontWidth 6
+
+#define MatrixRows (DisplayHeight / FontHeight)
+#define MatrixCols (DisplayWidth / FontWidth)
+
+struct CharacterMatrix {
+ uint8_t display[MatrixRows][MatrixCols];
+ uint8_t *cursor;
+ bool dirty;
+};
+
+struct CharacterMatrix display;
+
+bool iota_gfx_init(bool rotate);
+void iota_gfx_task(void);
+bool iota_gfx_off(void);
+bool iota_gfx_on(void);
+void iota_gfx_flush(void);
+void iota_gfx_write_char(uint8_t c);
+void iota_gfx_write(const char *data);
+void iota_gfx_write_P(const char *data);
+void iota_gfx_clear_screen(void);
+
+void iota_gfx_task_user(void);
+
+void matrix_clear(struct CharacterMatrix *matrix);
+void matrix_write_char_inner(struct CharacterMatrix *matrix, uint8_t c);
+void matrix_write_char(struct CharacterMatrix *matrix, uint8_t c);
+void matrix_write(struct CharacterMatrix *matrix, const char *data);
+void matrix_write_P(struct CharacterMatrix *matrix, const char *data);
+void matrix_render(struct CharacterMatrix *matrix);
+
+
+
+#endif
diff --git a/keyboards/sol/config.h b/keyboards/sol/config.h
new file mode 100644
index 000000000..93fd2261b
--- /dev/null
+++ b/keyboards/sol/config.h
@@ -0,0 +1,22 @@
+/*
+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"
+
diff --git a/keyboards/sol/i2c.c b/keyboards/sol/i2c.c
new file mode 100644
index 000000000..4bee5c639
--- /dev/null
+++ b/keyboards/sol/i2c.c
@@ -0,0 +1,162 @@
+#include <util/twi.h>
+#include <avr/io.h>
+#include <stdlib.h>
+#include <avr/interrupt.h>
+#include <util/twi.h>
+#include <stdbool.h>
+#include "i2c.h"
+
+#ifdef USE_I2C
+
+// Limits the amount of we wait for any one i2c transaction.
+// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
+// 9 bits, a single transaction will take around 90μs to complete.
+//
+// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
+// poll loop takes at least 8 clock cycles to execute
+#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
+
+#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
+
+volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
+
+static volatile uint8_t slave_buffer_pos;
+static volatile bool slave_has_register_set = false;
+
+// Wait for an i2c operation to finish
+inline static
+void i2c_delay(void) {
+ uint16_t lim = 0;
+ while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
+ lim++;
+
+ // easier way, but will wait slightly longer
+ // _delay_us(100);
+}
+
+// Setup twi to run at 100kHz or 400kHz (see ./i2c.h SCL_CLOCK)
+void i2c_master_init(void) {
+ // no prescaler
+ TWSR = 0;
+ // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
+ // Check datasheets for more info.
+ TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
+}
+
+// Start a transaction with the given i2c slave address. The direction of the
+// transfer is set with I2C_READ and I2C_WRITE.
+// returns: 0 => success
+// 1 => error
+uint8_t i2c_master_start(uint8_t address) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
+
+ i2c_delay();
+
+ // check that we started successfully
+ if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
+ return 1;
+
+ TWDR = address;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+
+ i2c_delay();
+
+ if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
+ return 1; // slave did not acknowledge
+ else
+ return 0; // success
+}
+
+
+// Finish the i2c transaction.
+void i2c_master_stop(void) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+
+ uint16_t lim = 0;
+ while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
+ lim++;
+}
+
+// Write one byte to the i2c slave.
+// returns 0 => slave ACK
+// 1 => slave NACK
+uint8_t i2c_master_write(uint8_t data) {
+ TWDR = data;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+
+ i2c_delay();
+
+ // check if the slave acknowledged us
+ return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
+}
+
+// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
+// if ack=0 the acknowledge bit is not set.
+// returns: byte read from i2c device
+uint8_t i2c_master_read(int ack) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
+
+ i2c_delay();
+ return TWDR;
+}
+
+void i2c_reset_state(void) {
+ TWCR = 0;
+}
+
+void i2c_slave_init(uint8_t address) {
+ TWAR = address << 0; // slave i2c address
+ // TWEN - twi enable
+ // TWEA - enable address acknowledgement
+ // TWINT - twi interrupt flag
+ // TWIE - enable the twi interrupt
+ TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
+}
+
+ISR(TWI_vect);
+
+ISR(TWI_vect) {
+ uint8_t ack = 1;
+ switch(TW_STATUS) {
+ case TW_SR_SLA_ACK:
+ // this device has been addressed as a slave receiver
+ slave_has_register_set = false;
+ break;
+
+ case TW_SR_DATA_ACK:
+ // this device has received data as a slave receiver
+ // The first byte that we receive in this transaction sets the location
+ // of the read/write location of the slaves memory that it exposes over
+ // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
+ // slave_buffer_pos after each write.
+ if(!slave_has_register_set) {
+ slave_buffer_pos = TWDR;
+ // don't acknowledge the master if this memory loctaion is out of bounds
+ if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
+ ack = 0;
+ slave_buffer_pos = 0;
+ }
+ slave_has_register_set = true;
+ } else {
+ i2c_slave_buffer[slave_buffer_pos] = TWDR;
+ BUFFER_POS_INC();
+ }
+ break;
+
+ case TW_ST_SLA_ACK:
+ case TW_ST_DATA_ACK:
+ // master has addressed this device as a slave transmitter and is
+ // requesting data.
+ TWDR = i2c_slave_buffer[slave_buffer_pos];
+ BUFFER_POS_INC();
+ break;
+
+ case TW_BUS_ERROR: // something went wrong, reset twi state
+ TWCR = 0;
+ default:
+ break;
+ }
+ // Reset everything, so we are ready for the next TWI interrupt
+ TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
+}
+#endif
diff --git a/keyboards/sol/i2c.h b/keyboards/sol/i2c.h
new file mode 100644
index 000000000..47cf6bd1b
--- /dev/null
+++ b/keyboards/sol/i2c.h
@@ -0,0 +1,49 @@
+#ifndef I2C_H
+#define I2C_H
+
+#include <stdint.h>
+
+#ifndef F_CPU
+#define F_CPU 16000000UL
+#endif
+
+#define I2C_READ 1
+#define I2C_WRITE 0
+
+#define I2C_ACK 1
+#define I2C_NACK 0
+
+#define SLAVE_BUFFER_SIZE 0x10
+
+// i2c SCL clock frequency 400kHz
+#define SCL_CLOCK 400000L
+
+extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
+
+void i2c_master_init(void);
+uint8_t i2c_master_start(uint8_t address);
+void i2c_master_stop(void);
+uint8_t i2c_master_write(uint8_t data);
+uint8_t i2c_master_read(int);
+void i2c_reset_state(void);
+void i2c_slave_init(uint8_t address);
+
+
+static inline unsigned char i2c_start_read(unsigned char addr) {
+ return i2c_master_start((addr << 1) | I2C_READ);
+}
+
+static inline unsigned char i2c_start_write(unsigned char addr) {
+ return i2c_master_start((addr << 1) | I2C_WRITE);
+}
+
+// from SSD1306 scrips
+extern unsigned char i2c_rep_start(unsigned char addr);
+extern void i2c_start_wait(unsigned char addr);
+extern unsigned char i2c_readAck(void);
+extern unsigned char i2c_readNak(void);
+extern unsigned char i2c_read(unsigned char ack);
+
+#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
+
+#endif
diff --git a/keyboards/sol/keymaps/brianweyer/config.h b/keyboards/sol/keymaps/brianweyer/config.h
new file mode 100755
index 000000000..87b7dd2ac
--- /dev/null
+++ b/keyboards/sol/keymaps/brianweyer/config.h
@@ -0,0 +1,27 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#define SSD1306OLED
+
+
+// place overrides here
+
diff --git a/keyboards/sol/keymaps/brianweyer/keymap.c b/keyboards/sol/keymaps/brianweyer/keymap.c
new file mode 100755
index 000000000..2259e246d
--- /dev/null
+++ b/keyboards/sol/keymaps/brianweyer/keymap.c
@@ -0,0 +1,291 @@
+#include QMK_KEYBOARD_H
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "common/ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+extern rgblight_config_t rgblight_config;
+#endif
+
+extern uint8_t is_master;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_number {
+ _QWERTY = 0,
+ _FN,
+ _ADJ
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ FN,
+ ADJ,
+ RGBRST
+};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* QWERTY
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | Bspc |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | [ | | ] | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | Esc | A | S | D | F | G | | | | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | | | N | M | , | . | / | Shift|
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | Alt | FN | LGui | RGB | Spc | Del | | Bspc | Spc | Adj | LGui | FN | Alt | Ctrl |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Spc | Ent | | Ent | Spc |
+ * `-------------' `-------------'
+ */
+ [_QWERTY] = LAYOUT_kc( \
+ //,--------+--------+--------+--------+--------+--------+--+--------+. ,--------+--+--------+--------+--------+--------+--------+--------+
+ GRV, 1, 2, 3, 4, 5, MINS, EQL, 6, 7, 8, 9, 0, BSPC,
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ TAB, Q, W, E, R, T, LBRC, RBRC, Y, U, I, O, P, BSLS,
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ ESC, A, S, D, F, G, _______, _______, H, J, K, L, SCLN, QUOT,
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ LSPO, Z, X, C, V, B, _______, _______, N, M, COMM, DOT, SLSH, RSPC,
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ LCTL, LALT, FN, LGUI, RGB_MOD, SPC, DEL, BSPC, SPC, ADJ, LGUI, FN, LALT, LCTL,
+ //|--------+--------+--------+--------+--------+--+--------+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ VOLD, VOLU, SPC, ENT, ENT, SPC, DOWN, UP
+ // Rotary Left |--------+--------| |--------+-----------+ Rotary Right
+ ),
+
+ /* FN
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | | | Up | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | | Left | Down | Right| | | | | Play | Next | Mute | V-Up |V-Down| |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | |
+ * `-------------' `-------------'
+ */
+ [_FN] = LAYOUT_kc( \
+ //,--------+--------+--------+--------+--------+--------+--+--------+. ,--------+--+--------+--------+--------+--------+--------+--------+
+ F1, F2, F3, F4, F5, F6, _______, _______, F7, F8, F9, F10, F11, F12,
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ _______, _______, LEFT, DOWN, RGHT, _______, _______, _______, MPLY, MNXT, MUTE, VOLD, VOLU, _______,
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //|--------+--------+--------+--------+--------+--+--------+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ VOLD, VOLU, _______, _______, _______, _______, UP, DOWN
+ // Rotary Left |--------+--------| |--------+-----------+ Rotary Right
+ ),
+
+ /* ADJ
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | Sat+ | Val+ | Hue+ |Speed+|Toggle| | | | | | | | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | Sat- | Val- | Hue- |Speed-|Reset | | | | |QWERTY| COLE | | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | |
+ * `-------------' `-------------'
+ */
+
+ [_ADJ] = LAYOUT( \
+ //,--------+--------+--------+--------+--------+--------+--+--------+. ,--------+--+--------+--------+--------+--------+--------+--------+
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, \
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ _______, RGB_SAI, RGB_VAI, RGB_HUI, RGB_SPI, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, \
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ _______, RGB_SAD, RGB_VAD, RGB_HUD, RGB_SPD, RGBRST, _______, _______, _______, _______, _______, _______, _______, _______, \
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ //|--------+--------+--------+--------+--------+--------+--+--------| |--------+--+--------+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ //|--------+--------+--------+--------+--------+--+--------+--------| |--------+--------+--+--------+--------+--------+--------+--------|
+ _______, _______, _______, _______, _______, _______, _______, _______ \
+ // Rotary Left |--------+--------| |--------+--------+ Rotary Right
+ )
+};
+
+
+// define variables for reactive RGB
+bool TOG_STATUS = false;
+int RGB_current_mode;
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case FN:
+ if (record->event.pressed) {
+ layer_on(_FN);
+ } else {
+ layer_off(_FN);
+ }
+ return false;
+ break;
+ case ADJ:
+ if (record->event.pressed) {
+ layer_on(_ADJ);
+ } else {
+ layer_off(_ADJ);
+ }
+ return false;
+ break;
+ //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+void matrix_scan_user(void) {
+ #ifdef SSD1306OLED
+ // led_test_init();
+ iota_gfx_task(); // this is what updates the display continuously
+ #endif
+}
+
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// hook point for 'led_test' keymap
+// 'default' keymap's led_test_init() is empty function, do nothing
+// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(35);
+__attribute__ ((weak))
+void led_test_init(void) {}
+
+void matrix_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+//assign the right code to your layers for OLED display
+#define L_BASE 0
+#define L_FN (1<<_FN)
+#define L_ADJ (1<<_ADJ)
+#define L_ADJ_TRI (L_ADJ|L_FN)
+
+static void render_logo(struct CharacterMatrix *matrix) {
+
+ static char logo[]={
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
+ 0};
+ matrix_write(matrix, logo);
+}
+
+
+
+void render_status(struct CharacterMatrix *matrix) {
+
+ // Render to mode icon
+ static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
+ if(keymap_config.swap_lalt_lgui==false){
+ matrix_write(matrix, logo[0][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[0][1]);
+ }else{
+ matrix_write(matrix, logo[1][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[1][1]);
+ }
+
+ // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
+ char buf[40];
+ snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
+ matrix_write_P(matrix, PSTR("\nLayer: "));
+ switch (layer_state) {
+ case L_BASE:
+ matrix_write_P(matrix, PSTR("Laser"));
+ break;
+ case L_FN:
+ matrix_write_P(matrix, PSTR("Function"));
+ break;
+ case L_ADJ:
+ case L_ADJ_TRI:
+ matrix_write_P(matrix, PSTR("Adjustment"));
+ break;
+ default:
+ matrix_write(matrix, buf);
+ }
+
+ // Host Keyboard LED Status
+ char led[40];
+ snprintf(led, sizeof(led), "\n%s %s %s",
+ (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
+ matrix_write(matrix, led);
+}
+
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+
+#if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+#endif
+
+ matrix_clear(&matrix);
+ if(is_master){
+ render_status(&matrix);
+ }else{
+ render_logo(&matrix);
+ }
+ matrix_update(&display, &matrix);
+}
+
+#endif
diff --git a/keyboards/sol/keymaps/brianweyer/rules.mk b/keyboards/sol/keymaps/brianweyer/rules.mk
new file mode 100755
index 000000000..d53ebe34d
--- /dev/null
+++ b/keyboards/sol/keymaps/brianweyer/rules.mk
@@ -0,0 +1,46 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE = yes # Enable global lighting effects. Do not enable with RGB Matrix
+LED_ANIMATIONS = yes # LED animations
+LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
+RGB_MATRIX_ENABLE = no # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500)
+RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects. Can be very laggy (+1500)
+RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness. Otherwise, limited to a safe level for a normal USB-A port
+UNICODE_ENABLE = no # Unicode
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+ENCODER_ENABLE_CUSTOM = yes # Enable rotary encoder (+90)
+OLED_ENABLE = yes # OLED_ENABLE (+5000)
+IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
+
+# Do not edit past here
+
+ifeq ($(strip $(OLED_ENABLE)), yes)
+ OPT_DEFS += -DOLED_ENABLE
+endif
+
+ifeq ($(strip $(ENCODER_ENABLE_CUSTOM)), yes)
+ OPT_DEFS += -DENCODER_ENABLE_CUSTOM
+ SRC += common/knob_v2.c
+endif
+
+ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+else ifeq ($(strip $(RGBLIGHT_FULL_POWER)), yes)
+ OPT_DEFS += -DRGBLIGHT_FULL_POWER
+endif
+
+ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes)
+ OPT_DEFS += -DRGB_MATRIX_KEYPRESSES
+endif
+
+ifeq ($(strip $(LED_MIRRORED)), yes)
+ OPT_DEFS += -DLED_MIRRORED
+endif
diff --git a/keyboards/sol/keymaps/danielhklein/config.h b/keyboards/sol/keymaps/danielhklein/config.h
new file mode 100644
index 000000000..452cdda82
--- /dev/null
+++ b/keyboards/sol/keymaps/danielhklein/config.h
@@ -0,0 +1,25 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+
+// place overrides here
+
diff --git a/keyboards/sol/keymaps/danielhklein/keymap.c b/keyboards/sol/keymaps/danielhklein/keymap.c
new file mode 100644
index 000000000..883b41826
--- /dev/null
+++ b/keyboards/sol/keymaps/danielhklein/keymap.c
@@ -0,0 +1,354 @@
+#include QMK_KEYBOARD_H
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "common/ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+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,
+ _COLEMAK,
+ _FN,
+ _ADJ
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ FN,
+ ADJ,
+ BACKLIT,
+ RGBRST
+};
+
+enum macro_keycodes {
+ KC_SAMPLEMACRO,
+};
+
+// Define your non-alpha grouping in this define's LAYOUT, and all your BASE_LAYERS will share the same mod/macro columns
+ /* Base Layout
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | Esc | 1 | 2 | 3 | 4 | 5 | - | | = | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | Tab | | | | | | [ | | ] | | | | | | Enter|
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | Caps | | | | | | { | | } | | | | | | ' |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * |Shift | | | | | | ` | | \ | | | | | |Shift |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Left | Down | Ctrl | Alt | Gui | Bspc | FN | | ADJ | Space| Gui | Alt | Ctrl | Up |Right |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | Bspc | FN | | ADJ | Space|
+ * `-------------' `-------------'
+ */
+#define BASE_LAYOUT( \
+ _00, _01, _02, _03, _04, _05, _06, _07, _08, _09, \
+ _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, \
+ _20, _21, _22, _23, _24, _25, _26, _27, _28, _29 \
+) \
+LAYOUT( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ KC_TAB, _00, _01, _02, _03, _04, KC_LBRC, KC_RBRC, _05, _06, _07, _08, _09, KC_ENT, \
+ KC_CAPS, _10, _11, _12, _13, _14, KC_LCBR, KC_RCBR, _15, _16, _17, _18, _19, KC_QUOT, \
+ KC_LSFT, _20, _21, _22, _23, _24, KC_GRV, KC_BSLS, _25, _26, _27, _28, _29, KC_RSFT, \
+ KC_LEFT, KC_DOWN, KC_LCTRL, KC_LALT, KC_LGUI, KC_BSPC, FN, ADJ, KC_SPC, KC_RGUI, KC_RALT, KC_RCTRL, KC_UP, KC_RIGHT, \
+ KC_VOLU, KC_VOLD, KC_BSPC, FN, ADJ, KC_SPC, KC_VOLU, KC_VOLD \
+)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Qwerty
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | Q | W | E | R | T | | | | Y | U | I | O | P | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | A | S | D | F | G | | | | H | J | K | L | ; | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | Z | X | C | V | B | | | | N | M | , | . | / | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `-------------'
+ */
+ [_QWERTY] = BASE_LAYOUT( \
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH \
+ ),
+
+ /* Colemak
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | Q | W | F | P | G | | | | J | L | U | Y | ; | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | A | R | S | T | D | | | | H | N | E | I | O | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | Z | X | C | V | B | | | | K | M | , | . | / | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `--------=----'
+ */
+ [_COLEMAK] = BASE_LAYOUT( \
+ KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, \
+ KC_A, KC_R, KC_S, KC_T, KC_G, KC_K, KC_N, KC_E, KC_I, KC_O, \
+ KC_Z, KC_X, KC_C, KC_D, KC_V, KC_M, KC_H, KC_COMM, KC_DOT, KC_SLSH \
+ ),
+
+
+ /* FN
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | | | | | | | | | | PGDN | UP | PGUP | PRINT| HOME |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | | | | | | | | | | LEFT | DOWN | RIGHT|INSERT| END |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * |Shift | | | | | | | | | PLAY | MUTE | VOL- | VOL+ | LAST | NEXT |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | Gui | | | | | | | | | | |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `-------------'
+ */
+ [_FN] = LAYOUT( \
+ XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, KC_UP, KC_PGUP, KC_PSCR, KC_HOME, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_END, \
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MPLY, KC_MUTE, KC_VOLD, KC_VOLU, KC_MRWD, KC_MFFD, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX \
+ ),
+
+ /* ADJ
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * |RESET | F1 | F2 | F3 | F4 | F5 | F6 | | | = | / | * | - | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | | 7 | 8 | 9 | + | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | HUI | VAI | SAI | | |COLEMK| | | 4 | 5 | 6 | Enter| | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | HUD | VAD | SAD | | |QWERTY| | | 1 | 2 | 3 | Space| | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | |RGBRST|RGBTOG|RGBMOD|RGBSMD| | | | | | 0 | . | Bspc | | |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `-------------'
+ */
+
+ [_ADJ] = LAYOUT( \
+ RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_PEQL, KC_PSLS, KC_PAST, KC_PMNS, XXXXXXX, XXXXXXX, \
+ XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_P7, KC_P8, KC_P9, KC_PPLS, XXXXXXX, XXXXXXX, \
+ XXXXXXX, RGB_SAD, RGB_VAI, RGB_SAI, XXXXXXX, XXXXXXX, COLEMAK, XXXXXXX, KC_P4, KC_P5, KC_P6, KC_PENT, XXXXXXX, XXXXXXX, \
+ XXXXXXX, RGB_HUD, RGB_VAD, RGB_HUI, XXXXXXX, XXXXXXX, QWERTY, XXXXXXX, KC_P1, KC_P2, KC_P3, KC_SPC, XXXXXXX, XXXXXXX, \
+ XXXXXXX, RGBRST, RGB_TOG, RGB_MOD, RGB_RMOD, XXXXXXX, XXXXXXX, _______, XXXXXXX, KC_P0, KC_PDOT, KC_BSPC, XXXXXXX, XXXXXXX, \
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX \
+ )
+};
+
+// define variables for reactive RGB
+bool TOG_STATUS = false;
+int RGB_current_mode;
+
+// Setting ADJ layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGB_current_mode);
+ #endif
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ //uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if(record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case FN:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(15);
+ #endif
+ }
+ layer_on(_FN);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ layer_off(_FN);
+ TOG_STATUS = false;
+ }
+ return false;
+ break;
+ case ADJ:
+ if (record->event.pressed) {
+ layer_on(_ADJ);
+ } else {
+ layer_off(_ADJ);
+ }
+ return false;
+ break;
+ //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// hook point for 'led_test' keymap
+// 'default' keymap's led_test_init() is empty function, do nothing
+// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(35);
+__attribute__ ((weak))
+void led_test_init(void) {}
+
+void matrix_scan_user(void) {
+ led_test_init();
+ iota_gfx_task(); // this is what updates the display continuously
+}
+
+void matrix_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+//assign the right code to your layers for OLED display
+#define L_BASE 0
+#define L_FN (1<<_FN)
+#define L_ADJ (1<<_ADJ)
+
+static void render_logo(struct CharacterMatrix *matrix) {
+
+ static char logo[]={
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
+ 0};
+ matrix_write(matrix, logo);
+ //matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
+}
+
+
+
+void render_status(struct CharacterMatrix *matrix) {
+
+ // Render to mode icon
+ static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
+ if(keymap_config.swap_lalt_lgui==false){
+ matrix_write(matrix, logo[0][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[0][1]);
+ }else{
+ matrix_write(matrix, logo[1][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[1][1]);
+ }
+
+ // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
+ char buf[40];
+ snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
+ matrix_write_P(matrix, PSTR("\nLayer: "));
+ switch (layer_state) {
+ case L_BASE:
+ matrix_write_P(matrix, PSTR("Default"));
+ break;
+ case L_FN:
+ matrix_write_P(matrix, PSTR("FN"));
+ break;
+ case L_ADJ:
+ case L_ADJ_TRI:
+ matrix_write_P(matrix, PSTR("ADJ"));
+ break;
+ default:
+ matrix_write(matrix, buf);
+ }
+
+ // Host Keyboard LED Status
+ char led[40];
+ snprintf(led, sizeof(led), "\n%s %s %s",
+ (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
+ matrix_write(matrix, led);
+}
+
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+
+#if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+#endif
+
+ matrix_clear(&matrix);
+ if(is_master){
+ render_status(&matrix);
+ }else{
+ render_logo(&matrix);
+ }
+ matrix_update(&display, &matrix);
+}
+
+#endif
diff --git a/keyboards/sol/keymaps/danielhklein/rules.mk b/keyboards/sol/keymaps/danielhklein/rules.mk
new file mode 100644
index 000000000..199dad6fc
--- /dev/null
+++ b/keyboards/sol/keymaps/danielhklein/rules.mk
@@ -0,0 +1,50 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = 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
+RGBLIGHT_ENABLE = yes # Enable global lighting effects. Do not enable with RGB Matrix
+RGBLIGHT_ANIMATIONS = yes # LED animations
+LED_MIRRORED = yes # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
+RGB_MATRIX_ENABLE = no # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500)
+RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects. Can be very laggy (+1500)
+RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness. Otherwise, limited to a safe level for a normal USB-A port
+UNICODE_ENABLE = no # Unicode
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+ENCODER_ENABLE_CUSTOM = yes # Enable rotary encoder (+90)
+
+OLED_ENABLE = no # OLED_ENABLE (+5000)
+IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
+
+# Do not edit past here
+
+ifeq ($(strip $(OLED_ENABLE)), yes)
+ OPT_DEFS += -DOLED_ENABLE
+endif
+
+ifeq ($(strip $(ENCODER_ENABLE_CUSTOM)), yes)
+ OPT_DEFS += -DENCODER_ENABLE_CUSTOM
+ SRC += common/knob_v2.c
+
+endif
+
+ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+
+else ifeq ($(strip $(RGBLIGHT_FULL_POWER)), yes)
+ OPT_DEFS += -DRGBLIGHT_FULL_POWER
+endif
+
+ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes)
+ OPT_DEFS += -DRGB_MATRIX_KEYPRESSES
+endif
+
+ifeq ($(strip $(LED_MIRRORED)), yes)
+ OPT_DEFS += -DLED_MIRRORED
+endif
diff --git a/keyboards/sol/keymaps/default/config.h b/keyboards/sol/keymaps/default/config.h
new file mode 100644
index 000000000..452cdda82
--- /dev/null
+++ b/keyboards/sol/keymaps/default/config.h
@@ -0,0 +1,25 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+
+// place overrides here
+
diff --git a/keyboards/sol/keymaps/default/keymap.c b/keyboards/sol/keymaps/default/keymap.c
new file mode 100644
index 000000000..799507f66
--- /dev/null
+++ b/keyboards/sol/keymaps/default/keymap.c
@@ -0,0 +1,362 @@
+#include QMK_KEYBOARD_H
+#include "bootloader.h"
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
+#ifdef SSD1306OLED
+ #include "common/ssd1306.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+#ifdef RGBLIGHT_ENABLE
+//Following line allows macro to read current RGB settings
+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,
+ _COLEMAK,
+ _FN,
+ _ADJ
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ FN,
+ ADJ,
+ BACKLIT,
+ RGBRST
+};
+
+enum macro_keycodes {
+ KC_SAMPLEMACRO,
+};
+
+
+
+#define FN_ESC LT(_FN, KC_ESC)
+#define FN_CAPS LT(_FN, KC_CAPS)
+
+// Define your non-alpha grouping in this define's LAYOUT, and all your BASE_LAYERS will share the same mod/macro columns
+ /* Base Layout
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | GESC | | | | | | - | | = | | | | | | BkSp |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | Tab | | | | | | [ | | ] | | | | | | \ |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * |FN(CAPS)| | | | | | ( | | ) | | | | | | ' |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * |Shift | | | | | | { | | } | | | | | |Shift |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | Win | Alt | RGB | ADJ | Space| DEL | | Enter| Space| FN | Left | Down | Up |Right |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | Space| DEL | | Enter| Space|
+ * `-------------' `-------------'
+ */
+#define BASE_LAYOUT( \
+ _00, _01, _02, _03, _04, _05, _06, _07, _08, _09, \
+ _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, \
+ _20, _21, _22, _23, _24, _25, _26, _27, _28, _29 \
+) \
+LAYOUT( \
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, _00, _01, _02, _03, _04, KC_LBRC, KC_RBRC, _05, _06, _07, _08, _09, KC_BSLS, \
+ FN_CAPS, _10, _11, _12, _13, _14, KC_LPRN, KC_RPRN, _15, _16, _17, _18, _19, KC_QUOT, \
+ KC_LSFT, _20, _21, _22, _23, _24, KC_LCBR, KC_RCBR, _25, _26, _27, _28, _29, KC_ENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, RGB_TOG, ADJ, KC_SPC, KC_DEL, KC_ENT, KC_SPC, FN, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, \
+ KC_VOLU, KC_VOLD, KC_SPC, KC_DEL, KC_ENT, KC_SPC, KC_VOLU, KC_VOLD \
+)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Qwerty
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | Q | W | E | R | T | | | | Y | U | I | O | P | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | A | S | D | F | G | | | | H | J | K | L | ; | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | Z | X | C | V | B | | | | N | M | , | . | / | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `--------=----'
+ */
+ [_QWERTY] = BASE_LAYOUT( \
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, \
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, \
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH \
+ ),
+
+ /* Colemak
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | Q | W | F | P | G | | | | J | L | U | Y | ; | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | A | R | S | T | D | | | | H | N | E | I | O | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | Z | X | C | V | B | | | | K | M | , | . | / | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `--------=----'
+ */
+ [_COLEMAK] = BASE_LAYOUT( \
+ KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, \
+ KC_A, KC_R, KC_S, KC_T, KC_G, KC_K, KC_N, KC_E, KC_I, KC_O, \
+ KC_Z, KC_X, KC_C, KC_D, KC_V, KC_M, KC_H, KC_COMM, KC_DOT, KC_SLSH \
+ ),
+
+
+ /* FN
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | PGDN | UP | PGUP | | | | | | | PGDN | UP | PGUP | PRINT| HOME |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | LEFT | DOWN | RIGHT| | | | | | | LEFT | DOWN | RIGHT|INSERT| END |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | |RGBMOD| | | | | | | PLAY | NEXT | MUTE | VOL- | VOL+ |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `-------------'
+ */
+ [_FN] = LAYOUT( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, KC_PSCR, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, KC_PGDN, KC_UP, KC_PGUP, _______, _______, _______, _______, _______, KC_PGDN, KC_UP, KC_PGUP, KC_PSCR, KC_HOME, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, KC_END, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, \
+ KC_VOLU, KC_VOLD, _______, _______, _______, _______, KC_VOLU, KC_VOLD \
+ ),
+
+ /* ADJ
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | SAD | VAI | SAI | RESET| | | | | | | | | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | HUD | VAD | HUI |RGBRST| | | | | |QWERTY|COLEMK| | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |RGBTOG| HUI | SAI | VAI |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | |RGBMOD(| | | | | | | |RGBRMOD| HUD | SAD | VAD |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `-------------'
+ */
+
+ [_ADJ] = LAYOUT( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, RGB_SAD, RGB_VAI, RGB_SAI, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, RGB_HUD, RGB_VAD, RGB_HUI, RGBRST, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, \
+ _______, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, _______, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, \
+ KC_VOLU, KC_VOLD, _______, _______, _______, _______, KC_VOLU, KC_VOLD \
+ )
+};
+
+
+
+// define variables for reactive RGB
+bool TOG_STATUS = false;
+int RGB_current_mode;
+
+// Setting ADJ layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGB_current_mode);
+ #endif
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ //uint8_t shifted = get_mods() & (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT));
+
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if(record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case FN:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(15);
+ #endif
+ }
+ layer_on(_FN);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ //rgblight_mode(RGB_current_mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ layer_off(_FN);
+ TOG_STATUS = false;
+ }
+ return false;
+ break;
+ case ADJ:
+ if (record->event.pressed) {
+ layer_on(_ADJ);
+ } else {
+ layer_off(_ADJ);
+ }
+ return false;
+ break;
+ //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_mode = rgblight_config.mode;
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ RGB_current_mode = rgblight_config.mode;
+ #endif
+ //SSD1306 OLED init, make sure to add #define SSD1306OLED in config.h
+ #ifdef SSD1306OLED
+ iota_gfx_init(!has_usb()); // turns on the display
+ #endif
+}
+
+
+//SSD1306 OLED update loop, make sure to add #define SSD1306OLED in config.h
+#ifdef SSD1306OLED
+
+// hook point for 'led_test' keymap
+// 'default' keymap's led_test_init() is empty function, do nothing
+// 'led_test' keymap's led_test_init() force rgblight_mode_noeeprom(35);
+__attribute__ ((weak))
+void led_test_init(void) {}
+
+void matrix_scan_user(void) {
+ led_test_init();
+ iota_gfx_task(); // this is what updates the display continuously
+}
+
+void matrix_update(struct CharacterMatrix *dest,
+ const struct CharacterMatrix *source) {
+ if (memcmp(dest->display, source->display, sizeof(dest->display))) {
+ memcpy(dest->display, source->display, sizeof(dest->display));
+ dest->dirty = true;
+ }
+}
+
+//assign the right code to your layers for OLED display
+#define L_BASE 0
+#define L_FN (1<<_FN)
+#define L_ADJ (1<<_ADJ)
+
+static void render_logo(struct CharacterMatrix *matrix) {
+
+ static char logo[]={
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,
+ 0};
+ matrix_write(matrix, logo);
+ //matrix_write_P(&matrix, PSTR(" Split keyboard kit"));
+}
+
+
+
+void render_status(struct CharacterMatrix *matrix) {
+
+ // Render to mode icon
+ static char logo[][2][3]={{{0x95,0x96,0},{0xb5,0xb6,0}},{{0x97,0x98,0},{0xb7,0xb8,0}}};
+ if(keymap_config.swap_lalt_lgui==false){
+ matrix_write(matrix, logo[0][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[0][1]);
+ }else{
+ matrix_write(matrix, logo[1][0]);
+ matrix_write_P(matrix, PSTR("\n"));
+ matrix_write(matrix, logo[1][1]);
+ }
+
+ // Define layers here, Have not worked out how to have text displayed for each layer. Copy down the number you see and add a case for it below
+ char buf[40];
+ snprintf(buf,sizeof(buf), "Undef-%ld", layer_state);
+ matrix_write_P(matrix, PSTR("\nLayer: "));
+ switch (layer_state) {
+ case L_BASE:
+ matrix_write_P(matrix, PSTR("Default"));
+ break;
+ case L_FN:
+ matrix_write_P(matrix, PSTR("FN"));
+ break;
+ case L_ADJ:
+ case L_ADJ_TRI:
+ matrix_write_P(matrix, PSTR("ADJ"));
+ break;
+ default:
+ matrix_write(matrix, buf);
+ }
+
+ // Host Keyboard LED Status
+ char led[40];
+ snprintf(led, sizeof(led), "\n%s %s %s",
+ (host_keyboard_leds() & (1<<USB_LED_NUM_LOCK)) ? "NUMLOCK" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_CAPS_LOCK)) ? "CAPS" : " ",
+ (host_keyboard_leds() & (1<<USB_LED_SCROLL_LOCK)) ? "SCLK" : " ");
+ matrix_write(matrix, led);
+}
+
+
+void iota_gfx_task_user(void) {
+ struct CharacterMatrix matrix;
+
+#if DEBUG_TO_SCREEN
+ if (debug_enable) {
+ return;
+ }
+#endif
+
+ matrix_clear(&matrix);
+ if(is_master){
+ render_status(&matrix);
+ }else{
+ render_logo(&matrix);
+ }
+ matrix_update(&display, &matrix);
+}
+
+#endif
diff --git a/keyboards/sol/keymaps/default/readme.md b/keyboards/sol/keymaps/default/readme.md
new file mode 100644
index 000000000..f5f384555
--- /dev/null
+++ b/keyboards/sol/keymaps/default/readme.md
@@ -0,0 +1,133 @@
+# The Default Sol Layout
+## Layout
+
+### Base modifier layout
+```
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | GESC | | | | | | - | | = | | | | | | BkSp |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | Tab | | | | | | [ | | ] | | | | | | \ |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * |FN(CAPS)| | | | | | ( | | ) | | | | | | ' |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * |Shift | | | | | | { | | } | | | | | |Shift |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | Win | Alt | RGB | ADJ | Space| DEL | | Enter| Space| FN | Left | Down | Up |Right |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | Space| DEL | | Enter| Space|
+ * `-------------' `-------------'
+```
+
+### Qwerty alphas
+```
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | Q | W | E | R | T | | | | Y | U | I | O | P | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | A | S | D | F | G | | | | H | J | K | L | ; | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | Z | X | C | V | B | | | | N | M | , | . | / | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `-------------'
+```
+
+### Colemak alphas
+```
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | Q | W | F | P | B | | | | J | L | U | Y | ; | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | A | R | S | T | G | | | | K | N | E | I | O | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | Z | X | C | D | V | | | | M | H | , | . | / | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `-------------'
+```
+
+### Function (FN)
+```
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | PGDN | UP | PGUP | | | | | | | PGDN | UP | PGUP | PRINT| HOME |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | LEFT | DOWN | RIGHT| | | | | | | LEFT | DOWN | RIGHT|INSERT| END |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | |RGBMOD| | | | | | | PLAY | NEXT | MUTE | VOL- | VOL+ |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `-------------'
+```
+
+### Adjust (ADJ)
+```
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | SAD | VAI | SAI | RESET| | | | | | | | | | |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | | HUD | VAD | HUI |RGBRST| | | | | |QWERTY|COLEMK| | | |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |RGBTOG| HUI | SAI | VAI |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | | | |RGBMOD| | | | | | | |RGBSMOD| HUD | SAD | VAD |
+ * `------+------+------+------+------+------+------| |------+------+------+------+------+------+------'
+ * | | | | | |
+ * `-------------' `-------------'
+```
+
+## Customize
+
+see `qmk_firmware/keyboards/sol/rev1/keymaps/default/rules.mk`
+
+```
+
+# Variables you can set for SOL
+
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+RGBLIGHT_ENABLE = yes # Enable global lighting effects. Do not enable with RGB Matrix
+LED_ANIMATIONS = yes # LED animations
+LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
+RGB_MATRIX_ENABLE = no # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500)
+RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects. Can be very laggy (+1500)
+RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness. Otherwise, limited to a safe level for a normal USB-A port
+UNICODE_ENABLE = no # Unicode
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+ENCODER_ENABLE_CUSTOM = yes # Enable rotary encoder (+90)
+
+OLED_ENABLE = no # OLED_ENABLE (+5000)
+IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
+
+
+```
+## Compile
+
+go to qmk top directory.
+```
+$ cd qmk_firmware
+```
+
+build
+```
+$ make sol:default
+```
+
+After the initial flash with AVRdudess, you should be able to flash using this:
+```
+$ make sol:default:dfu
+```
diff --git a/keyboards/sol/keymaps/default/rules.mk b/keyboards/sol/keymaps/default/rules.mk
new file mode 100644
index 000000000..a098cfd78
--- /dev/null
+++ b/keyboards/sol/keymaps/default/rules.mk
@@ -0,0 +1,50 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = 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
+RGBLIGHT_ENABLE = yes # Enable global lighting effects. Do not enable with RGB Matrix
+RGBLIGHT_ANIMATIONS = yes # LED animations
+LED_MIRRORED = yes # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
+RGB_MATRIX_ENABLE = no # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500)
+RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects. Can be very laggy (+1500)
+RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness. Otherwise, limited to a safe level for a normal USB-A port
+UNICODE_ENABLE = no # Unicode
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+ENCODER_ENABLE_CUSTOM = yes # Enable rotary encoder (+90)
+
+OLED_ENABLE = no # OLED_ENABLE (+5000)
+IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
+
+# Do not edit past here
+
+ifeq ($(strip $(OLED_ENABLE)), yes)
+ OPT_DEFS += -DOLED_ENABLE
+endif
+
+ifeq ($(strip $(ENCODER_ENABLE_CUSTOM)), yes)
+ OPT_DEFS += -DENCODER_ENABLE_CUSTOM
+ SRC += common/knob_v2.c
+
+endif
+
+ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+
+else ifeq ($(strip $(RGBLIGHT_FULL_POWER)), yes)
+ OPT_DEFS += -DRGBLIGHT_FULL_POWER
+endif
+
+ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes)
+ OPT_DEFS += -DRGB_MATRIX_KEYPRESSES
+endif
+
+ifeq ($(strip $(LED_MIRRORED)), yes)
+ OPT_DEFS += -DLED_MIRRORED
+endif \ No newline at end of file
diff --git a/keyboards/sol/keymaps/kageurufu/keymap.c b/keyboards/sol/keymaps/kageurufu/keymap.c
new file mode 100644
index 000000000..9ea89db05
--- /dev/null
+++ b/keyboards/sol/keymaps/kageurufu/keymap.c
@@ -0,0 +1,79 @@
+#include QMK_KEYBOARD_H
+#include "kageurufu.h"
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
+
+extern keymap_config_t keymap_config;
+extern uint8_t is_master;
+
+/* Base Layout
+ * ,------------------------------------------------. ,------------------------------------------------.
+ * | ` | | | | | | | | | | | | | | BkSp |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | Tab | | | | | | | | | | | | | | \ |
+ * |------+------+------+------+------+------|------| |------|------+------+------+------+------+------|
+ * | Esc | | | | | | | | | | | | | | ' |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Sft( | | | | | | | | | | | | | | Sft) |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Ctrl | Win | Win | Alt | FN | Space| RGB | | FN | FN | - | = | Down | PgUp | PgDn |
+ * |------+------+------+------+------+------+------| |------+------+------+------+------+------+------|
+ * | Space| Bksp | | Enter| Space|
+ * `-------------' `--------=----'
+ */
+#define EXPAND_LAYOUT(...) LAYOUT(__VA_ARGS__)
+#define _BASE_LAYOUT( \
+ _00, _01, _02, _03, _04, _05, _06, _07, _08, _09, \
+ _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, \
+ _20, _21, _22, _23, _24, _25, _26, _27, _28, _29 \
+) \
+EXPAND_LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, RGB_MOD, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, _00, _01, _02, _03, _04, KC_LBRC, KC_RBRC, _05, _06, _07, _08, _09, KC_BSLS, \
+ FN_ESC, _10, _11, _12, _13, _14, RGB_SAI, RGB_VAI, _15, _16, _17, _18, _19, KC_QUOT, \
+ KC_LSPO, _20, _21, _22, _23, _24, RGB_SAD, RGB_VAD, _25, _26, _27, _28, _29, KC_RSPC, \
+ KC_LCTL, KC_LGUI, KC_LGUI, KC_LALT, FN, KC_SPC, FN, FN, KC_SPC, KC_MINS, KC_EQL, KC_DOWN, KC_PGUP, KC_PGDN, \
+ KC_VOLD, KC_VOLU, KC_SPC, KC_BSPC, KC_ENT, KC_SPC, KC_VOLD, KC_VOLU \
+)
+#define BASE_LAYOUT(...) _BASE_LAYOUT(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = BASE_LAYOUT( \
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, \
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, \
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ \
+ ),
+
+ [_COLEMAK] = BASE_LAYOUT( \
+ _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, \
+ _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, \
+ _________________COLEMAK_L3________________, _________________COLEMAK_R3________________ \
+ ),
+
+ [_COLEMAK_DH] = BASE_LAYOUT( \
+ ______________COLEMAK_MOD_DH_L1____________, ______________COLEMAK_MOD_DH_R1____________, \
+ ______________COLEMAK_MOD_DH_L2____________, ______________COLEMAK_MOD_DH_R2____________, \
+ ______________COLEMAK_MOD_DH_L3____________, ______________COLEMAK_MOD_DH_R3____________ \
+ ),
+
+ [_FN] = EXPAND_LAYOUT( \
+ ________________FUNCTION_L1________________, _______, KC_PSCR, ________________FUNCTION_R1________________, \
+ ________________FUNCTION_L2________________, _______, _______, ________________FUNCTION_R2________________, \
+ ________________FUNCTION_L3________________, _______, _______, ________________FUNCTION_R3________________, \
+ ________________FUNCTION_L4________________, _______, _______, ________________FUNCTION_R4________________, \
+ ________________FUNCTION_L5________________, ADJ, ADJ, ________________FUNCTION_R5________________, \
+ KC_VOLD, KC_VOLU, _______, KC_DEL, _______, _______, KC_VOLD, KC_VOLU \
+ ),
+
+ [_ADJ] = EXPAND_LAYOUT( \
+ _________________ADJUST_L1_________________, _______, _______, _________________ADJUST_R1_________________, \
+ _________________ADJUST_L2_________________, _______, _______, _________________ADJUST_R2_________________, \
+ _________________ADJUST_L3_________________, _______, _______, _________________ADJUST_R3_________________, \
+ _________________ADJUST_L4_________________, _______, _______, _________________ADJUST_R4_________________, \
+ _________________ADJUST_L5_________________, _______, _______, _________________ADJUST_R5_________________, \
+ KC_VOLD, KC_VOLU, _______, _______, _______, _______, KC_VOLD, KC_VOLU \
+ )
+};
diff --git a/keyboards/sol/keymaps/kageurufu/rules.mk b/keyboards/sol/keymaps/kageurufu/rules.mk
new file mode 100644
index 000000000..d098168fd
--- /dev/null
+++ b/keyboards/sol/keymaps/kageurufu/rules.mk
@@ -0,0 +1,46 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = 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
+RGBLIGHT_ENABLE = yes # Enable global lighting effects. Do not enable with RGB Matrix
+LED_ANIMATIONS = yes # LED animations
+LED_MIRRORED = no # Mirror LEDs across halves (enable DIP 1 on slave, and DIP 2 and 3 on master)
+RGB_MATRIX_ENABLE = no # Enable per-key coordinate based RGB effects. Do not enable with RGBlight (+8500)
+RGB_MATRIX_KEYPRESSES = no # Enable reactive per-key effects. Can be very laggy (+1500)
+RGBLIGHT_FULL_POWER = no # Allow maximum RGB brightness. Otherwise, limited to a safe level for a normal USB-A port
+UNICODE_ENABLE = no # Unicode
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+ENCODER_ENABLE_CUSTOM = yes # Enable rotary encoder (+90)
+OLED_ENABLE = no # OLED_ENABLE (+5000)
+IOS_DEVICE_ENABLE = no # Limit max brightness to connect to IOS device (iPad,iPhone)
+
+# Do not edit past here
+
+ifeq ($(strip $(OLED_ENABLE)), yes)
+ OPT_DEFS += -DOLED_ENABLE
+endif
+
+ifeq ($(strip $(ENCODER_ENABLE_CUSTOM)), yes)
+ OPT_DEFS += -DENCODER_ENABLE_CUSTOM
+ SRC += common/knob_v2.c
+endif
+
+ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+else ifeq ($(strip $(RGBLIGHT_FULL_POWER)), yes)
+ OPT_DEFS += -DRGBLIGHT_FULL_POWER
+endif
+
+ifeq ($(strip $(RGB_MATRIX_KEYPRESSES)), yes)
+ OPT_DEFS += -DRGB_MATRIX_KEYPRESSES
+endif
+
+ifeq ($(strip $(LED_MIRRORED)), yes)
+ OPT_DEFS += -DLED_MIRRORED
+endif
diff --git a/keyboards/sol/readme.md b/keyboards/sol/readme.md
new file mode 100644
index 000000000..65e89ff63
--- /dev/null
+++ b/keyboards/sol/readme.md
@@ -0,0 +1,15 @@
+# Sol
+
+![Sol](https://cdn.shopify.com/s/files/1/0008/8827/5005/products/CqdJAno_2048x2048.jpg?v=1533825028)
+
+Sol is a split ergonomic keyboard with ortholinear alphas and several modifier layouts. It can use up to 88 RGB LEDs, with per-key backlighting and underglow. The boards have presoldered components, including type C ports and ATmega32U4. Sol, when used with dual power supplies, is the brightest keyboard on earth.
+
+Keyboard Maintainer: [Legonut](https://github.com/Legonut)
+Hardware Supported: Sol PCB R1.0, R1.1
+Hardware Availability: [RGBKB](https://www.rgbkb.net)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make sol: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/sol/rev1/config.h b/keyboards/sol/rev1/config.h
new file mode 100644
index 000000000..fc91b8d49
--- /dev/null
+++ b/keyboards/sol/rev1/config.h
@@ -0,0 +1,155 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef REV1_CONFIG_H
+#define REV1_CONFIG_H
+
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x3060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER RGBKB
+#define PRODUCT Sol
+#define DESCRIPTION "An RGB, split, ortho-esque keyboard"
+
+
+#define PREVENT_STUCK_MODIFIERS
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 150
+
+#define USE_I2C
+#define USE_SERIAL
+#define USE_SERIAL_PD3
+
+/* Select hand configuration */
+#define MASTER_LEFT
+// #define MASTER_RIGHT
+// #define EE_HANDS
+
+// Helix keyboard OLED support
+// see ./rules.mk: OLED_ENABLE=yes or no
+#ifdef OLED_ENABLE
+ #define SSD1306OLED
+#endif
+
+/* Select rows configuration */
+// Rows are 4 or 5
+// #define HELIX_ROWS 5 see ./rules.mk
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 12
+#define MATRIX_ROW_PINS { C6, B6, B5, B4, D7, E6}
+
+// wiring of each half
+#define MATRIX_COLS 7
+#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7 }
+// #define MATRIX_COL_PINS { 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 DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN B3
+#define RGBLIGHT_TIMER
+//#define RGBLED_NUM 12 // Number of LEDs. see ./keymaps/default/config.h
+#define ws2812_PORTREG PORTD
+#define ws2812_DDRREG DDRD
+
+#define DRIVER_COUNT 2
+#define DRIVER_LED_TOTAL 70
+// #define RGB_MATRIX_KEYPRESSES
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_LEVELS 5
+
+#ifdef LED_MIRRORED
+ #define RGBLED_NUM 35
+#else
+ #define RGBLED_NUM 70
+#endif
+
+#define RGBLIGHT_RAINBOW_SWIRL_RANGE 1950
+
+#ifdef IOS_DEVICE_ENABLE
+ #define RGBLIGHT_LIMIT_VAL 40
+ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 40
+#elif RGBLIGHT_FULL_POWER
+ #define RGBLIGHT_LIMIT_VAL 255
+ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 255
+#else
+ #define RGBLIGHT_LIMIT_VAL 120
+ #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 120
+#endif
+
+#define RGBLIGHT_VAL_STEP (RGBLIGHT_LIMIT_VAL / 10)
+#define RGBLIGHT_HUE_STEP 10
+#define RGBLIGHT_SAT_STEP 17
+
+#define RGBLIGHT_ANIMATIONS
+
+#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
+// USB_MAX_POWER_CONSUMPTION value for Helix keyboard
+// 120 RGBoff, OLEDoff
+// 120 OLED
+// 330 RGB 6
+// 300 RGB 32
+// 310 OLED & RGB 32
+ #define USB_MAX_POWER_CONSUMPTION 500
+#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
+
+
+#endif
diff --git a/keyboards/sol/rev1/info.json b/keyboards/sol/rev1/info.json
new file mode 100644
index 000000000..40bc01f7f
--- /dev/null
+++ b/keyboards/sol/rev1/info.json
@@ -0,0 +1,91 @@
+{
+ "keyboard_name": "Sol",
+ "url": "",
+ "maintainer": "Legonut",
+ "width": 17,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"L00", "x":0, "y":0, "w":1.5},
+ {"label":"L01", "x":1.5, "y":0},
+ {"label":"L02", "x":2.5, "y":0},
+ {"label":"L03", "x":3.5, "y":0},
+ {"label":"L04", "x":4.5, "y":0},
+ {"label":"L05", "x":5.5, "y":0},
+ {"label":"L06", "x":6.75, "y":0},
+ {"label":"R06", "x":9.25, "y":0},
+ {"label":"R00", "x":10.5, "y":0},
+ {"label":"R01", "x":11.5, "y":0},
+ {"label":"R02", "x":12.5, "y":0},
+ {"label":"R03", "x":13.5, "y":0},
+ {"label":"R04", "x":14.5, "y":0},
+ {"label":"R05", "x":15.5, "y":0, "w":1.5},
+ {"label":"L10", "x":0, "y":1, "w":1.5},
+ {"label":"L11", "x":1.5, "y":1},
+ {"label":"L12", "x":2.5, "y":1},
+ {"label":"L13", "x":3.5, "y":1},
+ {"label":"L14", "x":4.5, "y":1},
+ {"label":"L15", "x":5.5, "y":1},
+ {"label":"L16", "x":6.75, "y":1},
+ {"label":"R16", "x":9.25, "y":1},
+ {"label":"R10", "x":10.5, "y":1},
+ {"label":"R11", "x":11.5, "y":1},
+ {"label":"R12", "x":12.5, "y":1},
+ {"label":"R13", "x":13.5, "y":1},
+ {"label":"R14", "x":14.5, "y":1},
+ {"label":"R15", "x":15.5, "y":1, "w":1.5},
+ {"label":"L20", "x":0, "y":2, "w":1.5},
+ {"label":"L21", "x":1.5, "y":2},
+ {"label":"L22", "x":2.5, "y":2},
+ {"label":"L23", "x":3.5, "y":2},
+ {"label":"L24", "x":4.5, "y":2},
+ {"label":"L25", "x":5.5, "y":2},
+ {"label":"L26", "x":6.75, "y":2},
+ {"label":"R26", "x":9.25, "y":2},
+ {"label":"R20", "x":10.5, "y":2},
+ {"label":"R21", "x":11.5, "y":2},
+ {"label":"R22", "x":12.5, "y":2},
+ {"label":"R23", "x":13.5, "y":2},
+ {"label":"R24", "x":14.5, "y":2},
+ {"label":"R25", "x":15.5, "y":2, "w":1.5},
+ {"label":"L30", "x":0, "y":3, "w":1.5},
+ {"label":"L31", "x":1.5, "y":3},
+ {"label":"L32", "x":2.5, "y":3},
+ {"label":"L33", "x":3.5, "y":3},
+ {"label":"L34", "x":4.5, "y":3},
+ {"label":"L35", "x":5.5, "y":3},
+ {"label":"L36", "x":6.75, "y":3},
+ {"label":"R36", "x":9.25, "y":3},
+ {"label":"R30", "x":10.5, "y":3},
+ {"label":"R31", "x":11.5, "y":3},
+ {"label":"R32", "x":12.5, "y":3},
+ {"label":"R33", "x":13.5, "y":3},
+ {"label":"R34", "x":14.5, "y":3},
+ {"label":"R35", "x":15.5, "y":3, "w":1.5},
+ {"label":"L40", "x":0, "y":4, "w":1.5},
+ {"label":"L41", "x":1.5, "y":4},
+ {"label":"L42", "x":2.5, "y":4},
+ {"label":"L43", "x":3.5, "y":4},
+ {"label":"L44", "x":4.5, "y":4},
+ {"label":"L45", "x":6, "y":4.5},
+ {"label":"L46", "x":7, "y":4.5},
+ {"label":"R46", "x":9, "y":4.5},
+ {"label":"R40", "x":10, "y":4.5},
+ {"label":"R41", "x":11.5, "y":4},
+ {"label":"R42", "x":12.5, "y":4},
+ {"label":"R43", "x":13.5, "y":4},
+ {"label":"R44", "x":14.5, "y":4},
+ {"label":"R45", "x":15.5, "y":4, "w":1.5},
+ {"label":"Left Encoder, Counter-Clockwise", "x":2.5, "y":5.5},
+ {"label":"Left Encoder, Clockwise", "x":3.5, "y":5.5},
+ {"label":"L55", "x":6, "y":5.5},
+ {"label":"L56", "x":7, "y":5.5},
+ {"label":"R56", "x":9, "y":5.5},
+ {"label":"R50", "x":10, "y":5.5},
+ {"label":"Right Encoder, Counter-Clockwise", "x":12.5, "y":5.5},
+ {"label":"Right Encoder, Clockwise", "x":13.5, "y":5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/sol/rev1/matrix.c b/keyboards/sol/rev1/matrix.c
new file mode 100644
index 000000000..804d8b980
--- /dev/null
+++ b/keyboards/sol/rev1/matrix.c
@@ -0,0 +1,304 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/*
+ * scan matrix
+ */
+#include <stdint.h>
+#include <stdbool.h>
+#include <avr/io.h>
+#include <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 <drivers/avr/pro_micro.h>
+
+#include "serial.h"
+
+#ifndef DEBOUNCE
+# define DEBOUNCE 5
+#endif
+
+#ifdef ENCODER_ENABLE_CUSTOM
+ #include "common/knob_v2.h"
+#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;
+
+ // 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();
+
+ #ifdef ENCODER_ENABLE_CUSTOM
+ knob_init(); //FOR ENCODER
+ #endif
+ 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];
+ }
+ }
+ }
+
+ #ifdef ENCODER_ENABLE_CUSTOM
+ knob_report_t knob_report = knob_report_read();
+
+ knob_report_reset();
+
+ matrix[5 + offset] &= 0b11111100;
+ if (knob_report.phase) { // I check for phase to avoid handling the rotation twice (on 90 and 270 degrees).
+ if (knob_report.dir > 0) {
+ matrix[5 + offset] |= 0b00000001;
+ } else if (knob_report.dir < 0) {
+ matrix[5 + offset] |= 0b00000010;
+ }
+ }
+ #endif
+
+ return 1;
+}
+
+int serial_transaction(void) {
+ int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
+ int ret=serial_update_buffers();
+ if (ret ) {
+ return 1;
+ }
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[slaveOffset+i] = serial_slave_buffer[i];
+ }
+ return 0;
+}
+
+uint8_t matrix_scan(void)
+{
+ if (is_master) {
+ matrix_master_scan();
+ }else{
+ matrix_slave_scan();
+
+ int offset = (isLeftHand) ? ROWS_PER_HAND : 0;
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ matrix[offset+i] = serial_master_buffer[i];
+ }
+
+ matrix_scan_quantum();
+ }
+ return 1;
+}
+
+
+uint8_t matrix_master_scan(void) {
+
+ int ret = _matrix_scan();
+
+ int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ serial_master_buffer[i] = matrix[offset+i];
+ }
+
+ if( serial_transaction() ) {
+ // 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;
+
+ for (int i = 0; i < ROWS_PER_HAND; ++i) {
+ serial_slave_buffer[i] = matrix[offset+i];
+ }
+}
+
+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/sol/rev1/rev1.c b/keyboards/sol/rev1/rev1.c
new file mode 100644
index 000000000..01ab577d4
--- /dev/null
+++ b/keyboards/sol/rev1/rev1.c
@@ -0,0 +1,15 @@
+#include "sol.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/sol/rev1/rev1.h b/keyboards/sol/rev1/rev1.h
new file mode 100644
index 000000000..27b5ac896
--- /dev/null
+++ b/keyboards/sol/rev1/rev1.h
@@ -0,0 +1,70 @@
+#ifndef REV1_H
+#define REV1_H
+
+#include "sol.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+#ifdef RGBLIGHT_ENABLE
+//rgb led driver
+#include "ws2812.h"
+#endif
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+// LEL/LER/REL/RER are
+// LeftEncoderLeft, LeftEncoderRight, RightEncoderLeft, and RightEncoderRight
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, L06, R06, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, L16, R16, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, L26, R26, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35, \
+ L40, L41, L42, L43, L44, L45, L46, R46, R40, R41, R42, R43, R44, R45, \
+ LEL, LER, L55, L56, R56, R50, REL, RER \
+ ) \
+ { \
+ { 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 }, \
+ { LEL, LER, KC_NO, KC_NO, KC_NO, L55, L56 }, \
+ { R05, R04, R03, R02, R01, R00, R06 }, \
+ { R15, R14, R13, R12, R11, R10, R16 }, \
+ { R25, R24, R23, R22, R21, R20, R26 }, \
+ { R35, R34, R33, R32, R31, R30, R36 }, \
+ { R45, R44, R43, R42, R41, R40, R46 }, \
+ { REL, RER, KC_NO, KC_NO, KC_NO, R50, R56 } \
+ }
+
+#define KC________ KC_TRNS
+#define KC_RGB_MOD RGB_MOD
+#define KC_FN FN
+#define KC_ADJ ADJ
+#define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, L06, R06, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, L16, R16, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, L26, R26, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, L36, R36, R30, R31, R32, R33, R34, R35, \
+ L40, L41, L42, L43, L44, L45, L46, R46, R40, R41, R42, R43, R44, R45, \
+ LEL, LER, L55, L56, R56, R50, REL, RER \
+ ) \
+ LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##L06, KC_##R06, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##L16, KC_##R16, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##L26, KC_##R26, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##L36, KC_##R36, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, \
+ KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##L45, KC_##L46, KC_##R46, KC_##R40, KC_##R41, KC_##R42, KC_##R43, KC_##R44, KC_##R45, \
+ KC_##LEL, KC_##LER, KC_##L55, KC_##L56, KC_##R56, KC_##R50, KC_##REL, KC_##RER \
+ )
+
+#endif
diff --git a/keyboards/sol/rev1/rules.mk b/keyboards/sol/rev1/rules.mk
new file mode 100644
index 000000000..99f4dd896
--- /dev/null
+++ b/keyboards/sol/rev1/rules.mk
@@ -0,0 +1,2 @@
+SRC += rev1/matrix.c \
+ rev1/split_util.c
diff --git a/keyboards/sol/rev1/split_util.c b/keyboards/sol/rev1/split_util.c
new file mode 100644
index 000000000..c645bbdfe
--- /dev/null
+++ b/keyboards/sol/rev1/split_util.c
@@ -0,0 +1,54 @@
+#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"
+#include "serial.h"
+
+volatile bool isLeftHand = true;
+
+static void setup_handedness(void) {
+ #ifdef EE_HANDS
+ isLeftHand = eeprom_read_byte(EECONFIG_HANDEDNESS);
+ #else
+ #if defined(MASTER_RIGHT)
+ isLeftHand = !has_usb();
+ #else
+ isLeftHand = has_usb();
+ #endif
+ #endif
+}
+
+static void keyboard_master_setup(void) {
+ serial_master_init();
+}
+
+static void keyboard_slave_setup(void) {
+ serial_slave_init();
+}
+
+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/sol/rev1/split_util.h b/keyboards/sol/rev1/split_util.h
new file mode 100644
index 000000000..59b362415
--- /dev/null
+++ b/keyboards/sol/rev1/split_util.h
@@ -0,0 +1,17 @@
+#ifndef SPLIT_KEYBOARD_UTIL_H
+#define SPLIT_KEYBOARD_UTIL_H
+
+#include <stdbool.h>
+#include "eeconfig.h"
+
+extern volatile bool isLeftHand;
+
+// slave version of matix scan, defined in matrix.c
+void matrix_slave_scan(void);
+
+void split_keyboard_setup(void);
+bool has_usb(void);
+
+void matrix_master_OLED_init (void);
+
+#endif
diff --git a/keyboards/sol/rules.mk b/keyboards/sol/rules.mk
new file mode 100644
index 000000000..aa18721b6
--- /dev/null
+++ b/keyboards/sol/rules.mk
@@ -0,0 +1,66 @@
+SRC += i2c.c \
+ serial.c \
+ common/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 = qmk-dfu
+
+# 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 = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+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 this with audio at the same time.
+
+CUSTOM_MATRIX = yes
+
+DEFAULT_FOLDER = sol/rev1
diff --git a/keyboards/sol/serial.c b/keyboards/sol/serial.c
new file mode 100644
index 000000000..169b4b176
--- /dev/null
+++ b/keyboards/sol/serial.c
@@ -0,0 +1,288 @@
+/*
+ * WARNING: be careful changing this code, it is very timing dependent
+ */
+
+#ifndef F_CPU
+#define F_CPU 16000000
+#endif
+
+#include <avr/io.h>
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <stdbool.h>
+#include "serial.h"
+
+#ifdef USE_SERIAL
+
+#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
+
+// Serial pulse period in microseconds.
+#define SELECT_SERIAL_SPEED 1
+#if SELECT_SERIAL_SPEED == 0
+ // Very High speed
+ #define SERIAL_DELAY 4 // micro sec
+ #define READ_WRITE_START_ADJUST 30 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 1
+ // High speed
+ #define SERIAL_DELAY 6 // micro sec
+ #define READ_WRITE_START_ADJUST 23 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 2
+ // Middle speed
+ #define SERIAL_DELAY 12 // micro sec
+ #define READ_WRITE_START_ADJUST 25 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 3
+ // Low speed
+ #define SERIAL_DELAY 24 // micro sec
+ #define READ_WRITE_START_ADJUST 25 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#elif SELECT_SERIAL_SPEED == 4
+ // Very Low speed
+ #define SERIAL_DELAY 50 // micro sec
+ #define READ_WRITE_START_ADJUST 25 // cycles
+ #define READ_WRITE_WIDTH_ADJUST 10 // cycles
+#else
+#error Illegal Serial Speed
+#endif
+
+
+#define SERIAL_DELAY_HALF1 (SERIAL_DELAY/2)
+#define SERIAL_DELAY_HALF2 (SERIAL_DELAY - SERIAL_DELAY/2)
+
+#define SLAVE_INT_WIDTH 1
+#define SLAVE_INT_RESPONSE_TIME SERIAL_DELAY
+
+uint8_t volatile serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH] = {0};
+uint8_t volatile serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH] = {0};
+
+#define SLAVE_DATA_CORRUPT (1<<0)
+volatile uint8_t status = 0;
+
+inline static
+void serial_delay(void) {
+ _delay_us(SERIAL_DELAY);
+}
+
+inline static
+void serial_delay_half1(void) {
+ _delay_us(SERIAL_DELAY_HALF1);
+}
+
+inline static
+void serial_delay_half2(void) {
+ _delay_us(SERIAL_DELAY_HALF2);
+}
+
+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) {
+ SERIAL_PIN_DDR &= ~SERIAL_PIN_MASK;
+ SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+inline static
+uint8_t serial_read_pin(void) {
+ return !!(SERIAL_PIN_INPUT & SERIAL_PIN_MASK);
+}
+
+inline static
+void serial_low(void) {
+ SERIAL_PIN_PORT &= ~SERIAL_PIN_MASK;
+}
+
+inline static
+void serial_high(void) {
+ SERIAL_PIN_PORT |= SERIAL_PIN_MASK;
+}
+
+void serial_master_init(void) {
+ serial_output();
+ serial_high();
+}
+
+void serial_slave_init(void) {
+ serial_input_with_pullup();
+
+
+// Enable INT3
+EIMSK |= _BV(INT3);
+// Trigger on falling edge of INT3
+EICRA &= ~(_BV(ISC30) | _BV(ISC31));
+
+}
+
+// Used by the sender to synchronize timing with the reciver.
+static
+void sync_recv(void) {
+ for (int i = 0; i < SERIAL_DELAY*5 && serial_read_pin(); i++ ) {
+ }
+ // This shouldn't hang if the slave disconnects because the
+ // serial line will float to high if the slave does disconnect.
+ while (!serial_read_pin());
+}
+
+// Used by the reciver to send a synchronization signal to the sender.
+static
+void sync_send(void) {
+ serial_low();
+ serial_delay();
+ serial_high();
+}
+
+// Reads a byte from the serial line
+static
+uint8_t serial_read_byte(void) {
+ uint8_t byte = 0;
+ _delay_sub_us(READ_WRITE_START_ADJUST);
+ for ( uint8_t i = 0; i < 8; ++i) {
+ serial_delay_half1(); // read the middle of pulses
+ byte = (byte << 1) | serial_read_pin();
+ _delay_sub_us(READ_WRITE_WIDTH_ADJUST);
+ serial_delay_half2();
+ }
+ return byte;
+}
+
+// Sends a byte with MSB ordering
+static
+void serial_write_byte(uint8_t data) {
+ uint8_t b = 1<<7;
+ while( b ) {
+ if(data & b) {
+ serial_high();
+ } else {
+ serial_low();
+ }
+ b >>= 1;
+ serial_delay();
+ }
+ serial_low(); // sync_send() / senc_recv() need raise edge
+}
+
+// interrupt handle to be used by the slave device
+ISR(SERIAL_PIN_INTERRUPT) {
+ serial_output();
+
+ // slave send phase
+ uint8_t checksum = 0;
+ for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
+ sync_send();
+ serial_write_byte(serial_slave_buffer[i]);
+ checksum += serial_slave_buffer[i];
+ }
+ sync_send();
+ serial_write_byte(checksum);
+
+ // slave switch to input
+ sync_send(); //0
+ serial_delay_half1(); //1
+ serial_low(); //2
+ serial_input_with_pullup(); //2
+ serial_delay_half1(); //3
+
+ // slave recive phase
+ uint8_t checksum_computed = 0;
+ for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
+ sync_recv();
+ serial_master_buffer[i] = serial_read_byte();
+ checksum_computed += serial_master_buffer[i];
+ }
+ sync_recv();
+ uint8_t checksum_received = serial_read_byte();
+
+ if ( checksum_computed != checksum_received ) {
+ status |= SLAVE_DATA_CORRUPT;
+ } else {
+ status &= ~SLAVE_DATA_CORRUPT;
+ }
+
+ sync_recv(); //weit master output to high
+}
+
+inline
+bool serial_slave_DATA_CORRUPT(void) {
+ return status & SLAVE_DATA_CORRUPT;
+}
+
+// Copies the serial_slave_buffer to the master and sends the
+// serial_master_buffer to the slave.
+//
+// Returns:
+// 0 => no error
+// 1 => slave did not respond
+// 2 => checksum error
+int serial_update_buffers(void) {
+ // this code is very time dependent, so we need to disable interrupts
+ cli();
+
+ // signal to the slave that we want to start a transaction
+ serial_output();
+ serial_low();
+ _delay_us(SLAVE_INT_WIDTH);
+
+ // wait for the slaves response
+ serial_input_with_pullup();
+ _delay_us(SLAVE_INT_RESPONSE_TIME);
+
+ // check if the slave is present
+ if (serial_read_pin()) {
+ // slave failed to pull the line low, assume not present
+ serial_output();
+ serial_high();
+ sei();
+ return 1;
+ }
+
+ // master recive phase
+ // if the slave is present syncronize with it
+
+ uint8_t checksum_computed = 0;
+ // receive data from the slave
+ for (int i = 0; i < SERIAL_SLAVE_BUFFER_LENGTH; ++i) {
+ sync_recv();
+ serial_slave_buffer[i] = serial_read_byte();
+ checksum_computed += serial_slave_buffer[i];
+ }
+ sync_recv();
+ uint8_t checksum_received = serial_read_byte();
+
+ if (checksum_computed != checksum_received) {
+ serial_output();
+ serial_high();
+ sei();
+ return 2;
+ }
+
+ // master switch to output
+ sync_recv(); //0
+ serial_delay(); //1
+ serial_low(); //3
+ serial_output(); // 3
+ serial_delay_half1(); //4
+
+ // master send phase
+ uint8_t checksum = 0;
+
+ for (int i = 0; i < SERIAL_MASTER_BUFFER_LENGTH; ++i) {
+ sync_send();
+ serial_write_byte(serial_master_buffer[i]);
+ checksum += serial_master_buffer[i];
+ }
+ sync_send();
+ serial_write_byte(checksum);
+
+ // always, release the line when not in use
+ sync_send();
+
+ sei();
+ return 0;
+}
+
+#endif
diff --git a/keyboards/sol/serial.h b/keyboards/sol/serial.h
new file mode 100644
index 000000000..cd6bcc76b
--- /dev/null
+++ b/keyboards/sol/serial.h
@@ -0,0 +1,26 @@
+#ifndef MY_SERIAL_H
+#define MY_SERIAL_H
+
+#include <stdbool.h>
+
+/* TODO: some defines for interrupt setup */
+#define SERIAL_PIN_DDR DDRD
+#define SERIAL_PIN_PORT PORTD
+#define SERIAL_PIN_INPUT PIND
+#define SERIAL_PIN_MASK _BV(PD3) //SErial pin goes here, D0-D3
+#define SERIAL_PIN_INTERRUPT INT3_vect //"INT#" of your serial pin
+
+
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+// Buffers for master - slave communication
+extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
+extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+
+void serial_master_init(void);
+void serial_slave_init(void);
+int serial_update_buffers(void);
+bool serial_slave_data_corrupt(void);
+
+#endif
diff --git a/keyboards/sol/sol.c b/keyboards/sol/sol.c
new file mode 100644
index 000000000..5945cc60a
--- /dev/null
+++ b/keyboards/sol/sol.c
@@ -0,0 +1 @@
+#include "sol.h"
diff --git a/keyboards/sol/sol.h b/keyboards/sol/sol.h
new file mode 100644
index 000000000..8f451ce56
--- /dev/null
+++ b/keyboards/sol/sol.h
@@ -0,0 +1,7 @@
+#ifndef SOL_H
+#define SOL_H
+
+#include "rev1.h"
+#include "quantum.h"
+
+#endif
diff --git a/keyboards/sweet16/config.h b/keyboards/sweet16/config.h
deleted file mode 100644
index 77d9e276d..000000000
--- a/keyboards/sweet16/config.h
+++ /dev/null
@@ -1,58 +0,0 @@
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x2010
-#define DEVICE_VER 0x0001
-#define MANUFACTURER 1up Keyboards
-#define PRODUCT Sweet16
-#define DESCRIPTION 4x4 grid
-
-/* key matrix size */
-#define MATRIX_ROWS 4
-#define MATRIX_COLS 4
-
-/* key matrix pins */
-#define MATRIX_ROW_PINS { F4, F5, F6, F7 }
-#define MATRIX_COL_PINS { D1, D0, D4, C6 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* number of backlight levels */
-
-#ifdef BACKLIGHT_PIN
-#define BACKLIGHT_LEVELS 3
-#endif
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-#define RGB_DI_PIN B1
-#ifdef RGB_DI_PIN
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 1
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-#endif
-
-#endif \ No newline at end of file
diff --git a/keyboards/sweet16/readme.md b/keyboards/sweet16/readme.md
deleted file mode 100644
index 435aed68c..000000000
--- a/keyboards/sweet16/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-Sweet16
-===
-
-A 4x4 numpad/macro pad sold by 1up Keyboards - designed by Bishop Keyboards
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: Sweet16 Keyboard PCB
-Hardware Availability: [1up Keyboards](https://1upkeyboards.com/)
-
-Make example for this keyboard (after setting up your build environment):
-
- make sweet16:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information. \ No newline at end of file
diff --git a/keyboards/sx60/config.h b/keyboards/sx60/config.h
index f22fbe8be..52a1cc7a1 100755
--- a/keyboards/sx60/config.h
+++ b/keyboards/sx60/config.h
@@ -46,10 +46,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 0
diff --git a/keyboards/sx60/readme.md b/keyboards/sx60/readme.md
index 40f33ada2..4b7f9e74a 100644
--- a/keyboards/sx60/readme.md
+++ b/keyboards/sx60/readme.md
@@ -5,8 +5,8 @@ SX60
![SX60](https://i.imgur.com/hZZHrRr.jpg)
-Keyboard Maintainer: [amnobis](https://github.com/amnobis)
-Hardware Supported: SX60
+Keyboard Maintainer: [amnobis](https://github.com/amnobis)
+Hardware Supported: SX60
Hardware Availability: [geekhack.org/index.php?topic=93665.0](https://geekhack.org/index.php?topic=93665.0)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/tada68/keymaps/abishalom/config.h b/keyboards/tada68/keymaps/abishalom/config.h
new file mode 100644
index 000000000..af01528b4
--- /dev/null
+++ b/keyboards/tada68/keymaps/abishalom/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define BACKLIGHT_BREATHING
diff --git a/keyboards/tada68/keymaps/abishalom/keymap.c b/keyboards/tada68/keymaps/abishalom/keymap.c
new file mode 100644
index 000000000..94217948e
--- /dev/null
+++ b/keyboards/tada68/keymaps/abishalom/keymap.c
@@ -0,0 +1,96 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL 1
+#define _NL 2
+
+#define SEMI_FN LT(_FL, KC_SCLN)
+
+//Tap Dance Declarations
+enum {
+ TD_WIN_LOCK = 0
+};
+
+//BL_BRTG - breathing mode. Would like to put in.
+
+//Tap Dance Definitions
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_WIN_LOCK] = ACTION_TAP_DANCE_DOUBLE(MAGIC_NO_GUI, MAGIC_UNNO_GUI)
+};
+
+//
+////In Layer declaration, add tap dance item in place of a key code
+//TD(TD_WIN_LOCK)
+
+// Double Tap Fn button to get caps. FN + Tab to get to number layer -> Maybe switch to FN + space?.
+// Press fn+GUI once to lock, double tap to unlock.
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del |
+ * |----------------------------------------------------------------|
+ * |FNCAP| A| S| D| F| G| H| J| K| L| ;| '|Enter |PgUp |
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+[_BL] = LAYOUT_ansi(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSLS,KC_DEL, \
+ LT(_FL, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, SEMI_FN,KC_QUOT, KC_ENT,KC_PGUP, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,KC_UP,KC_PGDN, \
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,MO(_FL),KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ * ,----------------------------------------------------------------.
+ * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del | |
+ * |----------------------------------------------------------------|
+ * |#PAD |Pre| U |NXT| | | |PGD| U |PGU|PSC| | | |Ins |
+ * |----------------------------------------------------------------|
+ * | |L | D | R |PPl| | | L | D | R | | | |Home|
+ * |----------------------------------------------------------------|
+ * | CAPS |MUT|VU-|VU+| | | |BRG|BL-|BL+|BLT| |Stp|End |
+ * |----------------------------------------------------------------|
+ * | |WTOG| | | | | |Pre|PPl|Nxt |
+ * `----------------------------------------------------------------'
+ */
+[_FL] = LAYOUT_ansi(
+ _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______ , \
+ TO(_NL),KC_MPRV, KC_UP ,KC_MNXT,_______, _______,_______,KC_PGDN,KC_UP,KC_PGUP,KC_PSCR,_______,_______, _______,KC_INSERT, \
+ _______,KC_LEFT,KC_DOWN,KC_RGHT,KC_MPLY,_______,_______,KC_LEFT,KC_DOWN,KC_RGHT,_______,_______, _______,KC_HOME, \
+ _______,KC_MUTE,KC_VOLD,KC_VOLU, _______,_______, _______,BL_BRTG,BL_DEC,BL_INC,BL_TOGG,_______, KC_STOP, KC_END, \
+ _______,TD(TD_WIN_LOCK),_______, _______, _______,KC_TRNS,_______,KC_MPRV,KC_MPLY, KC_MNXT),
+
+
+//Press either of function keys to get back to base layer.
+
+ /* Keymap _NL: Number Layer
+ * ,----------------------------------------------------------------.
+ * |ESC| F1 | F2| F3| F4| |#L | 7 | 8 | 9 | - | | = | | |
+ * |----------------------------------------------------------------|
+ * | TAB | | UP| | | | / | 4 | 5 | 6 | + | | | | DEL|
+ * |----------------------------------------------------------------|
+ * | _BL |LFT|DWN|RGT| | | * | 1 | 2 | 3 |ENT| | ENT |PgUp|
+ * |----------------------------------------------------------------|
+ * | SHIFT | | | | | | 0 | 0 | , | . |BKS| SHIFT| U |PgDn|
+ * |----------------------------------------------------------------|
+ * |CTRL|WIN |ALT | |ALT| _BL |CTRL| L | D | R|
+ * `----------------------------------------------------------------'
+ */
+[_NL] = LAYOUT_ansi(
+ _______, KC_F1 ,KC_F2, KC_F3, KC_F4, _______, KC_NLCK, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_PEQL, KC_PEQL, _______, _______ , \
+ KC_TAB,_______, KC_UP,_______,_______, _______,KC_PSLS,KC_P4,KC_P5,KC_P6,KC_PPLS,_______,_______, _______,KC_DEL, \
+ TO(_BL),KC_LEFT,KC_DOWN,KC_RGHT,_______,_______,KC_PAST,KC_P1,KC_P2,KC_P3,KC_PENT,_______, KC_ENT,KC_PGUP, \
+ KC_LSFT,_______,_______,_______, _______,_______, KC_P0,KC_P0,KC_PCMM,KC_PDOT,KC_BSPC,KC_RSFT, KC_UP, KC_PGDN, \
+ KC_LCTRL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,TO(_BL),KC_RCTRL,KC_LEFT,KC_DOWN, KC_RGHT),
+
+};
diff --git a/keyboards/tada68/keymaps/abishalom/readme.md b/keyboards/tada68/keymaps/abishalom/readme.md
new file mode 100644
index 000000000..511704223
--- /dev/null
+++ b/keyboards/tada68/keymaps/abishalom/readme.md
@@ -0,0 +1,6 @@
+# Godolphins13 Tada68
+
+My Tada68 layout.
+Caps lock acts as a function key when held, otherwise just caps lock.
+In the function layer, arrow keys mapped to both wasd and ijkl, as I haven't really decided which I like best.
+
diff --git a/keyboards/tada68/keymaps/abishalom/rules.mk b/keyboards/tada68/keymaps/abishalom/rules.mk
new file mode 100644
index 000000000..b3eaa6215
--- /dev/null
+++ b/keyboards/tada68/keymaps/abishalom/rules.mk
@@ -0,0 +1,18 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = 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 this with audio at the same time.
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = yes # Tappa Dance Bitch
diff --git a/keyboards/tada68/keymaps/ardakilic/rules.mk b/keyboards/tada68/keymaps/ardakilic/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/tada68/keymaps/ardakilic/rules.mk
+++ b/keyboards/tada68/keymaps/ardakilic/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/bazooka/rules.mk b/keyboards/tada68/keymaps/bazooka/rules.mk
index 1915481bf..b2789a78a 100644
--- a/keyboards/tada68/keymaps/bazooka/rules.mk
+++ b/keyboards/tada68/keymaps/bazooka/rules.mk
@@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/tada68/keymaps/cheese/keymap.c b/keyboards/tada68/keymaps/cheese/keymap.c
new file mode 100755
index 000000000..b2395282c
--- /dev/null
+++ b/keyboards/tada68/keymaps/cheese/keymap.c
@@ -0,0 +1,107 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL 1
+#define _CL 2
+#define _AL 3
+
+enum custom_keycodes {
+ SPX4 = SAFE_RANGE
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case SPX4:
+ SEND_STRING(" ");
+ return false;
+ }
+ }
+ return true;
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |PgUp|
+ * |----------------------------------------------------------------|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgDn|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|Del |
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Win | Space |Win| FN|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+[_BL] = LAYOUT_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_PGUP, \
+ MO(_CL), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, KC_PGDN, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, \
+ KC_LCTL, KC_LALT,LM(_AL,0x08), KC_SPC, LM(_AL,0x18),MO(_FL),KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ * ,----------------------------------------------------------------.
+ * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |` ~ |
+ * |----------------------------------------------------------------|
+ * | | |Up | | | | | | | | | | | |Hme |
+ * |----------------------------------------------------------------|
+ * | |<- |Dn | ->| | | | | | | | | |End |
+ * |----------------------------------------------------------------|
+ * | | | |Bl-|BL |BL+| |MUT|VU-|VU+| | | | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `----------------------------------------------------------------'
+ */
+[_FL] = LAYOUT_ansi(
+ _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_GRV, \
+ SPX4,_______, KC_UP,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,KC_HOME, \
+ _______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______, _______,KC_END, \
+ _______,_______,_______,BL_DEC, BL_TOGG,BL_INC, _______,KC_MUTE,KC_VOLD,KC_VOLU,_______,_______, _______, _______, \
+ _______,_______,_______, _______, _______,_______,_______,_______,_______, _______),
+
+ /* Keymap _CL: Caps Layer
+ * ,----------------------------------------------------------------.
+ * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |` ~ |
+ * |----------------------------------------------------------------|
+ * | | |Up | | | | | | | | | | | |Hme |
+ * |----------------------------------------------------------------|
+ * | |<- |Dn | ->| | | | | | | | | |End |
+ * |----------------------------------------------------------------|
+ * | | | |Bl-|BL |BL+| |MUT|VU-|VU+| | McL|MsU|McR |
+ * |----------------------------------------------------------------|
+ * | | | | | | | |MsL|MsD|MsR |
+ * `----------------------------------------------------------------'
+ */
+[_CL] = LAYOUT_ansi(
+ _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_GRV , \
+ _______,_______, KC_UP,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,KC_HOME, \
+ _______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______, _______,KC_END, \
+ _______,_______,_______,BL_DEC, BL_TOGG,BL_INC, _______,KC_MUTE,KC_VOLD,KC_VOLU,_______,KC_BTN1, KC_MS_U, KC_BTN2, \
+ _______,_______,_______, _______, _______,_______,_______,KC_MS_L,KC_MS_D, KC_MS_R),
+
+ /* Keymap _AL: ALT Layer
+ * ,----------------------------------------------------------------.
+ * |` ~| | | | | | | | | | | | | | ` ~|
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `----------------------------------------------------------------'
+ */
+[_AL] = LAYOUT_ansi(
+ KC_GRV, _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_GRV , \
+ _______,_______, _______, _______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \
+ _______,_______, _______, _______,_______,_______,_______,_______,_______,_______,_______,_______, _______,_______, \
+ _______,_______,_______, _______, _______, _______, _______, _______, _______, _______,_______, _______, _______, _______, \
+ _______,_______,_______, _______, _______,_______,_______, _______, _______, _______),
+};
diff --git a/keyboards/tada68/keymaps/cheese/readme.md b/keyboards/tada68/keymaps/cheese/readme.md
new file mode 100755
index 000000000..8374e469b
--- /dev/null
+++ b/keyboards/tada68/keymaps/cheese/readme.md
@@ -0,0 +1,20 @@
+# pgillan's Cheese TADA68 layout
+
+A collection of tweaks to make the keyboard more mac friendly and increase personal usability,
+based on the default keymap.
+
+* Turned the caps-lock into an additional function key so I didn't have to try to hit the
+ the keys on the right with one hand.
+* Moved the arrow/mouse controls to the caps-lock layer from the function layer.
+* Swapped the Windows key and Alt keys, I didn't have to do it in OS X.
+* Made the escape key work as a backtick when "Alt" is depressed, so I can 1) reverse
+ direction when I Alt-Tab through current applications, and Alt-Backtick through
+ open windows.
+* Turned the backtick/tilde key into another backspace key, so I can just go all the way
+ up to the corner without overshooting.
+* Adjusted the volume controles so M is "mute", the "," ( or "<") is "down", and "." (or ">")
+ is "up". It just makes a ton more sense, I have no idea why it would have been done any
+ differently.
+* Moved PageUp/PageDown up above the delete key, and made the Home and End on the capslock
+ and function layers.
+* Made the tab key on the function layer output 4 spaces instead of a tab character.
diff --git a/keyboards/tada68/keymaps/cheese/rules.mk b/keyboards/tada68/keymaps/cheese/rules.mk
new file mode 100644
index 000000000..b2789a78a
--- /dev/null
+++ b/keyboards/tada68/keymaps/cheese/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/tada68/keymaps/default/rules.mk b/keyboards/tada68/keymaps/default/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/tada68/keymaps/default/rules.mk
+++ b/keyboards/tada68/keymaps/default/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/dlg/config.h b/keyboards/tada68/keymaps/dlg/config.h
new file mode 100644
index 000000000..e1a6eb1a2
--- /dev/null
+++ b/keyboards/tada68/keymaps/dlg/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define GRAVE_ESC_ALT_OVERRIDE
diff --git a/keyboards/tada68/keymaps/dlg/keymap.c b/keyboards/tada68/keymaps/dlg/keymap.c
new file mode 100755
index 000000000..9cd6cb2f1
--- /dev/null
+++ b/keyboards/tada68/keymaps/dlg/keymap.c
@@ -0,0 +1,76 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FL 1
+#define _MAC 2
+
+// investigate later - use lctl / lsft as up/down.
+// https://github.com/qmk/qmk_firmware/tree/master/keyboards/tada68/keymaps/fakb
+#define LCTL_MA LCTL_T(KC_UP)
+#define LSFT_MA LSFT_T(KC_DOWN)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del |
+ * |----------------------------------------------------------------|
+ * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt|Fn |Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ *
+ * Note: Shift + Esc = ~
+ * Win + Esc = `
+ */
+[_BL] = LAYOUT_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP, KC_PGDN, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ * ,----------------------------------------------------------------.
+ * |`swp|F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| Del |`swp|
+ * |----------------------------------------------------------------|
+ * | |BL |BL-|BL+|Brt| | | |mac| |PSc| | | |Ins |
+ * |----------------------------------------------------------------|
+ * | | | | | | |<- |Dn |Up | ->| | | |Hme |
+ * |----------------------------------------------------------------|
+ * | | | | | | | |MUT|V- |V+ | | |PUp|End |
+ * |----------------------------------------------------------------|
+ * | | | | | | | |Hme|PDn|End |
+ * `----------------------------------------------------------------'
+ */
+[_FL] = LAYOUT_ansi(
+ MAGIC_UNSWAP_GRAVE_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, MAGIC_SWAP_GRAVE_ESC, \
+ _______, BL_TOGG, BL_DEC, BL_INC , BL_BRTG, _______, _______, _______, TG(_MAC),_______, KC_PSCR, _______, _______, _______, KC_INS, \
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______, _______, KC_HOME, \
+ _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, KC_PGUP, KC_END , \
+ _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END ),
+
+ /* Keymap _MAC: Mac Layer
+ * ,----------------------------------------------------------------.
+ * | | | | | | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | | | | | |
+ * |----------------------------------------------------------------|
+ * |Ctrl|Alt |Win | |Win | |Alt| | | |
+ * `----------------------------------------------------------------'
+ */
+[_MAC] = LAYOUT_ansi(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_LCTL, KC_LALT, KC_LGUI, _______, KC_RGUI, _______, KC_RALT, _______, _______, _______),
+
+};
diff --git a/keyboards/tada68/keymaps/dlg/readme.md b/keyboards/tada68/keymaps/dlg/readme.md
new file mode 100755
index 000000000..1f1ae1867
--- /dev/null
+++ b/keyboards/tada68/keymaps/dlg/readme.md
@@ -0,0 +1,54 @@
+# dlg's layout
+
+[tshack's layout](https://github.com/qmk/qmk_firmware/tree/master/keyboards/tada68/keymaps/tshack), with:
+ + Mac layer
+ + Press Fn-I to align the bottom row to mac standards
+ + volume controls moved to Fn+ M<>
+ + [Space Cadet Shift](https://docs.qmk.fm/#/feature_space_cadet_shift) enabled
+ + Fn+R for LED breathing
+ + Fn+Del for Insert
+ + `GRAVE_ESC_ALT_OVERRIDE` so cmd-opt-esc still works (thx [mattdicarlo](https://github.com/qmk/qmk_firmware/tree/master/keyboards/tada68/keymaps/mattdicarlo))
+
+```
+ Base Layer
+,----------------------------------------------------------------.
+|Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+|----------------------------------------------------------------|
+|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del |
+|----------------------------------------------------------------|
+|Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+|----------------------------------------------------------------|
+|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift |Up |PgDn|
+|----------------------------------------------------------------|
+|Ctrl|Win |Alt | Space |Alt|Fn |Ctrl|<- |Dn | -> |
+`----------------------------------------------------------------'
+Note: Shift + Esc = ~ (tilde)
+ Win + Esc = ` (grave)
+
+
+ Fn Layer
+,----------------------------------------------------------------.
+| |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| Del | |
+|----------------------------------------------------------------|
+| |BL |BL-|BL+|Brt| | | |mac| |PSc| | | |Ins |
+|----------------------------------------------------------------|
+| | | | | | |<- |Dn |Up | ->| | | |Hme |
+|----------------------------------------------------------------|
+| | | | | | | |MUT|V- |V+ | | |PUp|End |
+|----------------------------------------------------------------|
+| | | | | | | |Hme|PDn|End |
+`----------------------------------------------------------------'
+
+Mac Layer
+,----------------------------------------------------------------.
+| | | | | | | | | | | | | | | |
+|----------------------------------------------------------------|
+| | | | | | | | | | | | | | | |
+|----------------------------------------------------------------|
+| | | | | | | | | | | | | | |
+|----------------------------------------------------------------|
+| | | | | | | | | | | | | | |
+|----------------------------------------------------------------|
+|Ctrl|Alt |Win | |Win | |Alt| | | |
+`----------------------------------------------------------------'
+```
diff --git a/keyboards/tada68/keymaps/dlg/rules.mk b/keyboards/tada68/keymaps/dlg/rules.mk
new file mode 100644
index 000000000..2e0f1a661
--- /dev/null
+++ b/keyboards/tada68/keymaps/dlg/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = full # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/tada68/keymaps/fakb/rules.mk b/keyboards/tada68/keymaps/fakb/rules.mk
index 54b79fc9d..642e16de5 100644
--- a/keyboards/tada68/keymaps/fakb/rules.mk
+++ b/keyboards/tada68/keymaps/fakb/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/fezzant/rules.mk b/keyboards/tada68/keymaps/fezzant/rules.mk
index f2439cc7d..8df84ae95 100644
--- a/keyboards/tada68/keymaps/fezzant/rules.mk
+++ b/keyboards/tada68/keymaps/fezzant/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = yes # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/iso-nor/config.h b/keyboards/tada68/keymaps/iso-nor/config.h
new file mode 100644
index 000000000..6f70f09be
--- /dev/null
+++ b/keyboards/tada68/keymaps/iso-nor/config.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/keyboards/tada68/keymaps/iso-nor/keymap.c b/keyboards/tada68/keymaps/iso-nor/keymap.c
new file mode 100644
index 000000000..c26932b0e
--- /dev/null
+++ b/keyboards/tada68/keymaps/iso-nor/keymap.c
@@ -0,0 +1,51 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FL 1
+
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| +| '|Backspa | ´|
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| Å| ¨| Ent-|Del |
+ * |-------------------------------------------------------| er|----|
+ * |CAPS | A| S| D| F| G| H| J| K| L| Ø| Æ| @ | |PgUp|
+ * |----------------------------------------------------------------|
+ * |Shif| <>| Z| X| C| V| B| N| M| ,| .| -| Shift| Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Ctrl|Alt |Cmd | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_iso(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_GRV, KC_BSPC, KC_EQL, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap _FL1: Function Layer
+ * ,----------------------------------------------------------------.
+ * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| RESET|PSCR|
+ * |----------------------------------------------------------------|
+ * | | | Up| | | | | | | | |BL-|BL+|BL | INS|
+ * |----------------------------------------------------------------|
+ * | |Lef|Dow|Rig| | | | | | PP|PLA| PN| | |HOME|
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | V-| MV| V+| | | END|
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `----------------------------------------------------------------'
+ */
+ [_FL] = LAYOUT_iso(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RESET, KC_PSCR, \
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, BL_DEC, BL_INC, BL_TOGG, _______, KC_INS, \
+ _______, KC_LEFT, KC_DOWN,KC_RIGHT, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_HOME, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, KC_END, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+};
diff --git a/keyboards/tada68/keymaps/iso-nor/readme.md b/keyboards/tada68/keymaps/iso-nor/readme.md
new file mode 100644
index 000000000..5ade71ab4
--- /dev/null
+++ b/keyboards/tada68/keymaps/iso-nor/readme.md
@@ -0,0 +1,17 @@
+# TADA68 layout for ISO-NOR
+
+> An ISO-style layout for Norwegian keyboards.
+
+This layout was specifically made for Norwegian keyboards (i.e. includes `Æ`, `Ø` and `Å`), and is tested on a TADA68 purchased from [kbdfans](https://kbdfans.cn/) in September 2018.
+
+### Specifics
+
+As it's an ISO style keymap, it works with the fat double-row `Enter` key and the narrower left `Shift` and `<>` key. In addition, it switches the `'` key and the `´` key since the latter one is less common in Norwegian, and the first one normally is placed where the `Escape` key is located on a TADA68.
+
+## Installation
+
+Please see the [tada68 readme](../../readme.md) using the following command
+
+```
+make tada68:iso-nor:bin
+```
diff --git a/keyboards/tada68/keymaps/iso-nor/rules.mk b/keyboards/tada68/keymaps/iso-nor/rules.mk
new file mode 100644
index 000000000..baaca071c
--- /dev/null
+++ b/keyboards/tada68/keymaps/iso-nor/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/tada68/keymaps/iso-uk/keymap.c b/keyboards/tada68/keymaps/iso-uk/keymap.c
index d59f610f7..c843595dc 100644
--- a/keyboards/tada68/keymaps/iso-uk/keymap.c
+++ b/keyboards/tada68/keymaps/iso-uk/keymap.c
@@ -21,8 +21,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_BL] = LAYOUT_iso(
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NUHS, KC_DEL, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_PGUP, \
KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
@@ -42,8 +42,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
*/
[_FL] = LAYOUT_iso(
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS, \
- _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, \
- _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, \
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, \
_______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, KC_BTN1, KC_MS_U, KC_BTN2, \
_______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
),
diff --git a/keyboards/tada68/keymaps/iso-uk/rules.mk b/keyboards/tada68/keymaps/iso-uk/rules.mk
index 4deca710b..baaca071c 100644
--- a/keyboards/tada68/keymaps/iso-uk/rules.mk
+++ b/keyboards/tada68/keymaps/iso-uk/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/isoish/rules.mk b/keyboards/tada68/keymaps/isoish/rules.mk
index 4deca710b..baaca071c 100644
--- a/keyboards/tada68/keymaps/isoish/rules.mk
+++ b/keyboards/tada68/keymaps/isoish/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/laas/config.h b/keyboards/tada68/keymaps/laas/config.h
new file mode 100755
index 000000000..6f70f09be
--- /dev/null
+++ b/keyboards/tada68/keymaps/laas/config.h
@@ -0,0 +1 @@
+#pragma once
diff --git a/keyboards/tada68/keymaps/laas/keymap.c b/keyboards/tada68/keymaps/laas/keymap.c
new file mode 100755
index 000000000..25b990a72
--- /dev/null
+++ b/keyboards/tada68/keymaps/laas/keymap.c
@@ -0,0 +1,53 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL 1
+#define _______ KC_TRNS
+
+LEADER_EXTERNS();
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del |
+ * |----------------------------------------------------------------|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(_FL), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ * ,----------------------------------------------------------------.
+ * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |Ins |
+ * |----------------------------------------------------------------|
+ * | | |Up | | | | | | | | | | | |VMU |
+ * |----------------------------------------------------------------|
+ * | |<- |Dn | ->| | | | | | | | | |Hme |
+ * |----------------------------------------------------------------|
+ * | | | |Bl-|BL |BL+| | | | | | | |VU-|End |
+ * |----------------------------------------------------------------|
+ * | | | | Play/Pause | | | |Rwd|VU+|Fwd |
+ * `----------------------------------------------------------------'
+ */
+ [_FL] = LAYOUT_ansi(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME,
+ _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, _______, _______, _______, _______, _______, KC_VOLU, KC_END,
+ _______, _______, _______, KC_MPLY, _______, _______, _______, KC_MPRV, KC_VOLD, KC_MNXT),
+};
diff --git a/keyboards/tada68/keymaps/laas/readme.md b/keyboards/tada68/keymaps/laas/readme.md
new file mode 100755
index 000000000..48497062c
--- /dev/null
+++ b/keyboards/tada68/keymaps/laas/readme.md
@@ -0,0 +1,12 @@
+# laas' TADA68 layout
+
+* Disabled mouse controls
+* Fn + PgUp -> Home
+* Fn + PgDown -> End
+* Media control for Windows:
+ * Fn + Left: Previous track
+ * Fn + Right: Next track
+ * Fn + Up: Volume up
+ * Fn + Down: Volume down
+ * Fn + Delete: Mute
+ * Fn + Space: Play/pause
diff --git a/keyboards/tada68/keymaps/laas/rules.mk b/keyboards/tada68/keymaps/laas/rules.mk
new file mode 100755
index 000000000..dbaa9045e
--- /dev/null
+++ b/keyboards/tada68/keymaps/laas/rules.mk
@@ -0,0 +1,5 @@
+# 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
+#
+CONSOLE_ENABLE = no # Console for debug(+400)
diff --git a/keyboards/tada68/keymaps/mattdicarlo/rules.mk b/keyboards/tada68/keymaps/mattdicarlo/rules.mk
index c92000665..ac92f99f4 100644
--- a/keyboards/tada68/keymaps/mattdicarlo/rules.mk
+++ b/keyboards/tada68/keymaps/mattdicarlo/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/mlechner/rules.mk b/keyboards/tada68/keymaps/mlechner/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/tada68/keymaps/mlechner/rules.mk
+++ b/keyboards/tada68/keymaps/mlechner/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/mtdjr/rules.mk b/keyboards/tada68/keymaps/mtdjr/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/tada68/keymaps/mtdjr/rules.mk
+++ b/keyboards/tada68/keymaps/mtdjr/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/pascamel/readme.md b/keyboards/tada68/keymaps/pascamel/readme.md
index 640ca2734..a829133fc 100755
--- a/keyboards/tada68/keymaps/pascamel/readme.md
+++ b/keyboards/tada68/keymaps/pascamel/readme.md
@@ -1,3 +1,11 @@
# pascamel's TADA68 layout
-A layout based on raylas' layout with some updates on the fn layer especially around media keys. \ No newline at end of file
+A layout based on raylas' layout with some updates on the fn layer especially around media keys.
+
+### Main layer
+
+![Imgur](https://i.imgur.com/UColvfc.png)
+
+### Fn layer
+
+![Imgur](https://i.imgur.com/pDQFoCQ.png)
diff --git a/keyboards/tada68/keymaps/pascamel/rules.mk b/keyboards/tada68/keymaps/pascamel/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/tada68/keymaps/pascamel/rules.mk
+++ b/keyboards/tada68/keymaps/pascamel/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/raylas/rules.mk b/keyboards/tada68/keymaps/raylas/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/tada68/keymaps/raylas/rules.mk
+++ b/keyboards/tada68/keymaps/raylas/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/rbong/rules.mk b/keyboards/tada68/keymaps/rbong/rules.mk
index 1915481bf..b2789a78a 100644
--- a/keyboards/tada68/keymaps/rbong/rules.mk
+++ b/keyboards/tada68/keymaps/rbong/rules.mk
@@ -13,5 +13,5 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/tada68/keymaps/rgb/rules.mk b/keyboards/tada68/keymaps/rgb/rules.mk
index ee94a67b4..470d621b1 100644
--- a/keyboards/tada68/keymaps/rgb/rules.mk
+++ b/keyboards/tada68/keymaps/rgb/rules.mk
@@ -13,7 +13,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/rys/keymap.c b/keyboards/tada68/keymaps/rys/keymap.c
new file mode 100644
index 000000000..6f32b092d
--- /dev/null
+++ b/keyboards/tada68/keymaps/rys/keymap.c
@@ -0,0 +1,50 @@
+#include QMK_KEYBOARD_H
+
+#define _BL 0
+#define _FL 1
+
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| |Del |
+ * |------------------------------------------------------- -----|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '| #|Entr|PgUp|
+ * |----------------------------------------------------------------|
+ * |Shift| \ | Z| X| C| V| B| N| M| ,| .| /|Rshift|Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+ [_BL] = LAYOUT_iso(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_NUHS, KC_DEL, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ /* Keymap _FL1: Function Layer 1
+ * ,----------------------------------------------------------------.
+ * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Delete| Ins|
+ * |----------------------------------------------------------------|
+ * | | | ↑ | | | | | | | | | | | |Home|
+ * |------------------------------------------------------- -----|
+ * | | ← | ↓ | → | | | | | | | | | | | End|
+ * |----------------------------------------------------------------|
+ * | | | | | L+|LED| L-| | V+| V-|Mut| | MsBtn|Up|MsBn|
+ * |----------------------------------------------------------------|
+ * | | | | | | | | Lt| Dn| Rt |
+ * `----------------------------------------------------------------'
+ */
+ [_FL] = LAYOUT_iso(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, \
+ _______, KC_BTN1, KC_UP, KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, \
+ _______, _______, _______, _______, BL_DEC, BL_TOGG, BL_INC, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, _______, KC_MS_U, KC_END, \
+ _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
+ ),
+};
diff --git a/keyboards/tada68/keymaps/rys/readme.md b/keyboards/tada68/keymaps/rys/readme.md
new file mode 100644
index 000000000..a9425bf06
--- /dev/null
+++ b/keyboards/tada68/keymaps/rys/readme.md
@@ -0,0 +1,15 @@
+# Custom Tada68 layout for ISO UK with Apple-y tweaks
+
+This layout is based on the [ISO UK](../iso-uk) layout, with the following
+changes:
+
+Swap Win and Alt on the left side (Option and Command on macOS)
+
+## Installation
+
+Please see the [Tada68 readme](../../readme.md). Make the firmware wih the
+following command:
+
+```
+make tada68:rys:bin
+```
diff --git a/keyboards/tada68/keymaps/rys/rules.mk b/keyboards/tada68/keymaps/rys/rules.mk
new file mode 100644
index 000000000..b2789a78a
--- /dev/null
+++ b/keyboards/tada68/keymaps/rys/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/tada68/keymaps/shalzz/config.h b/keyboards/tada68/keymaps/shalzz/config.h
new file mode 100644
index 000000000..3214a33fb
--- /dev/null
+++ b/keyboards/tada68/keymaps/shalzz/config.h
@@ -0,0 +1,4 @@
+#pragma once
+
+#define DISABLE_SPACE_CADET_ROLLOVER
+#define GRAVE_ESC_ALT_OVERRIDE
diff --git a/keyboards/tada68/keymaps/shalzz/keymap.c b/keyboards/tada68/keymaps/shalzz/keymap.c
new file mode 100644
index 000000000..e2b4c170e
--- /dev/null
+++ b/keyboards/tada68/keymaps/shalzz/keymap.c
@@ -0,0 +1,53 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del |
+ * |----------------------------------------------------------------|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |FN |Alt|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ *
+ * Note: Shift + Esc = ~
+ * Win + Esc = `
+ */
+[_BL] = LAYOUT_ansi(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_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_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSPC,KC_UP,KC_PGDN, \
+ KC_LCTL, KC_LGUI,KC_LALT, LT(_BL, KC_SPC), MO(_FL),KC_RALT,KC_RCTRL, KC_LEFT,KC_DOWN,KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ * ,----------------------------------------------------------------.
+ * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |PRSC|
+ * |----------------------------------------------------------------|
+ * | | |Up | | | | | | | | | | | |Ins |
+ * |----------------------------------------------------------------|
+ * | |<- |Dn | ->| | |<- |Dn |Up | ->| | | |Hme |
+ * |----------------------------------------------------------------|
+ * | ( | | |Bl-|BL |BL+| | |VU-|VU+|MUT| ) | |End |
+ * |----------------------------------------------------------------|
+ * | | | | | | | | | | |
+ * `----------------------------------------------------------------'
+ */
+[_FL] = LAYOUT_ansi(
+ _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_PSCR, \
+ _______,_______, KC_UP,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,KC_INS, \
+ _______,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,KC_LEFT,KC_DOWN,KC_UP,KC_RGHT,_______,_______, _______,KC_HOME, \
+ KC_LPRN,_______,_______,BL_DEC, BL_TOGG,BL_INC, _______,_______,KC_VOLD,KC_VOLU,KC_MUTE,KC_RPRN, _______, KC_END, \
+ _______,_______,_______, _______, _______,_______,_______,_______,_______, _______),
+};
diff --git a/keyboards/tada68/keymaps/shalzz/readme.md b/keyboards/tada68/keymaps/shalzz/readme.md
new file mode 100644
index 000000000..3e4cf6067
--- /dev/null
+++ b/keyboards/tada68/keymaps/shalzz/readme.md
@@ -0,0 +1,43 @@
+# Shalzz's Unix layout
+
+This layout is based on the Unix Layout with a few changes.
+
+```
+ Base Layer
+,----------------------------------------------------------------.
+|Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp |~ ` |
+|----------------------------------------------------------------|
+|Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \ |Del |
+|----------------------------------------------------------------|
+|CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+|----------------------------------------------------------------|
+|Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
+|----------------------------------------------------------------|
+|Ctrl|Win |Alt | Space |Alt| FN|Ctrl|Lef|Dow|Rig |
+`----------------------------------------------------------------'
+Note: Shift + Esc = ~
+ Win + Esc = `
+ Fn + LShift = (
+ Fn + RShift = )
+
+ Fn Layer
+,----------------------------------------------------------------.
+| | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Del |PRSC|
+|----------------------------------------------------------------|
+| | |Up | | | | | | | | | | | |Ins |
+|----------------------------------------------------------------|
+| |<- |Dn | ->| | |<- |Dn |Up | ->| | | |Hme |
+|----------------------------------------------------------------|
+| ( | | |Bl-|BL |BL+| | |VU-|VU+|MUT| ) | |End |
+|----------------------------------------------------------------|
+| | | | | | | | | | |
+`----------------------------------------------------------------'
+
+```
+
+The changes that were applied over the Unix layout:
+
+* Left and Right Shift when pressed alone emit `(` and `)` respectively. Hold shift for normal behaviour.
+* Fn + Left and Right Shift also act as actual `(` and `)` keys respectively.
+* Changed PrintSc to `Fn+``
+* Fixed Holding down space activating the function layer instead of the lower layer.
diff --git a/keyboards/tada68/keymaps/shalzz/rules.mk b/keyboards/tada68/keymaps/shalzz/rules.mk
new file mode 100644
index 000000000..4595aa8c2
--- /dev/null
+++ b/keyboards/tada68/keymaps/shalzz/rules.mk
@@ -0,0 +1,12 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+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
+AUDIO_ENABLE = no # Audio output on port C6
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
diff --git a/keyboards/tada68/keymaps/sm0g/config.h b/keyboards/tada68/keymaps/sm0g/config.h
new file mode 100644
index 000000000..3a2370b62
--- /dev/null
+++ b/keyboards/tada68/keymaps/sm0g/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define BACKLIGHT_BREATHING \ No newline at end of file
diff --git a/keyboards/tada68/keymaps/sm0g/keymap.c b/keyboards/tada68/keymaps/sm0g/keymap.c
new file mode 100644
index 000000000..25312cd98
--- /dev/null
+++ b/keyboards/tada68/keymaps/sm0g/keymap.c
@@ -0,0 +1,100 @@
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _BL 0
+#define _FL 1
+#define _GM 2
+#define _GF 3
+
+
+// Tap dance declarations (These must go above the keymaps)
+enum {
+ TD_F1 = 0,
+ TD_F2,
+ TD_F3,
+ TD_F4,
+ TD_F5,
+ TD_F6,
+ TD_F7,
+ TD_F8,
+ TD_F9,
+ TD_F10,
+ TD_F11,
+ TD_F12,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ |~ ` |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]|Bksp |Del |
+ * |----------------------------------------------------------------|
+ * |Ctrl | A| S| D| F| G| H| J| K| L| ;| '|Return |PgUp|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|PgDn|
+ * |----------------------------------------------------------------|
+ * |Caps|Win |Alt | Space |Alt|Ctrl| FN|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+[_BL] = LAYOUT_ansi(
+ KC_ESC, TD(TD_F1), TD(TD_F2), TD(TD_F3), TD(TD_F4), TD(TD_F5), TD(TD_F6), TD(TD_F7), TD(TD_F8), TD(TD_F9), TD(TD_F10), TD(TD_F11), TD(TD_F12), KC_BSLS,KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSPC,KC_DEL, \
+ CTL_T(KC_ESC), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,KC_PGUP, \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSPC,KC_UP,KC_PGDN, \
+ KC_CAPS, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,MO(_FL), KC_LEFT,KC_DOWN,KC_RGHT),
+
+ /* Keymap _FL: Function Layer
+ * ,----------------------------------------------------------------.
+ * | | F1|F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12| |Ins |
+ * |----------------------------------------------------------------|
+ * | | |Up | | | | | | | | | | | |Hme |
+ * |----------------------------------------------------------------|
+ * | Caps |<- |Dn | ->| | | | | | | | | |End |
+ * |----------------------------------------------------------------|
+ * | | | |Bl-|BL |BL+| |VU-|VU+|MUT| | McL|MsU|McR |
+ * |----------------------------------------------------------------|
+ * | | | | | | | |Prev|P/P|Next|
+ * `----------------------------------------------------------------'
+ */
+[_FL] = LAYOUT_ansi(
+ _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TG(_GM), KC_INS , \
+ _______,_______, KC_UP,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,KC_HOME, \
+ KC_CAPS,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______, _______,KC_END, \
+ _______,_______,_______,BL_DEC, BL_TOGG,BL_INC, BL_BRTG,KC_VOLD,KC_VOLU,KC_MUTE,_______,_______, _______, _______, \
+ _______,_______,_______, _______, _______,_______,_______,KC_MPRV,KC_MPLY, KC_MNXT),
+
+[_GM] = LAYOUT_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, _______,KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,KC_BSPC,KC_DEL, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT,KC_PGUP, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT,KC_UP,KC_PGDN, \
+ KC_CAPS, KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RCTL,MO(_GF), KC_LEFT,KC_DOWN,KC_RGHT),
+
+[_GF] = LAYOUT_ansi(
+ _______, KC_F1 ,KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, TG(_GM), KC_INS , \
+ _______,_______, KC_UP,_______,_______, _______,_______,_______,_______,_______,_______,_______,_______, _______,KC_HOME, \
+ KC_CAPS,KC_LEFT,KC_DOWN,KC_RIGHT,_______,_______,_______,_______,_______,_______,_______,_______, _______,KC_END, \
+ _______,_______,_______,BL_DEC, BL_TOGG,BL_INC, BL_BRTG,KC_VOLD,KC_VOLU,KC_MUTE,_______,_______, _______, _______, \
+ _______,_______,_______, _______, _______,_______,_______,KC_MPRV,KC_MPLY, KC_MNXT),
+
+};
+
+// Tapdance definitions. Tap Dance F Keys.
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_F1] = ACTION_TAP_DANCE_DOUBLE(KC_1, KC_F1),
+ [TD_F2] = ACTION_TAP_DANCE_DOUBLE(KC_2, KC_F2),
+ [TD_F3] = ACTION_TAP_DANCE_DOUBLE(KC_3, KC_F3),
+ [TD_F4] = ACTION_TAP_DANCE_DOUBLE(KC_4, KC_F4),
+ [TD_F5] = ACTION_TAP_DANCE_DOUBLE(KC_5, KC_F5),
+ [TD_F6] = ACTION_TAP_DANCE_DOUBLE(KC_6, KC_F6),
+ [TD_F7] = ACTION_TAP_DANCE_DOUBLE(KC_7, KC_F7),
+ [TD_F8] = ACTION_TAP_DANCE_DOUBLE(KC_8, KC_F8),
+ [TD_F9] = ACTION_TAP_DANCE_DOUBLE(KC_9, KC_F9),
+ [TD_F10] = ACTION_TAP_DANCE_DOUBLE(KC_0, KC_F10),
+ [TD_F11] = ACTION_TAP_DANCE_DOUBLE(KC_MINS, KC_F11),
+ [TD_F12] = ACTION_TAP_DANCE_DOUBLE(KC_EQL, KC_F12),
+};
diff --git a/keyboards/tada68/keymaps/sm0g/readme.md b/keyboards/tada68/keymaps/sm0g/readme.md
new file mode 100644
index 000000000..9916dcabd
--- /dev/null
+++ b/keyboards/tada68/keymaps/sm0g/readme.md
@@ -0,0 +1,15 @@
+```
+ ______ __ __ ______ ______
+.-----.--------.| |.-----. | |_.---.-.--| |.---.-.| __| __ |
+|__ --| || -- || _ | | _| _ | _ || _ || __ | __ |
+|_____|__|__|__||______||___ | |____|___._|_____||___._||______|______|
+ |_____|
+```
+
+Just my simple layout for the Tada68.
+Space [Cadet Shift](https://docs.qmk.fm/#/feature_space_cadet_shift) is enabled.
+LCTRL and Caps have been swapped and the new CTRL also acts as ESC when tapped and CTRL when held.
+This is helpful for me as a VIM user.
+Some other changes.
+
+Tap Dance for the F Row.. i.e double tap 1 and get F1 instead.
diff --git a/keyboards/tada68/keymaps/sm0g/rules.mk b/keyboards/tada68/keymaps/sm0g/rules.mk
new file mode 100644
index 000000000..0826db755
--- /dev/null
+++ b/keyboards/tada68/keymaps/sm0g/rules.mk
@@ -0,0 +1,18 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = 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.
+SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = yes # Tappa Dance \ No newline at end of file
diff --git a/keyboards/tada68/keymaps/stephengrier/rules.mk b/keyboards/tada68/keymaps/stephengrier/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/tada68/keymaps/stephengrier/rules.mk
+++ b/keyboards/tada68/keymaps/stephengrier/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/trashcat/rules.mk b/keyboards/tada68/keymaps/trashcat/rules.mk
index 644b6a814..6fb496919 100644
--- a/keyboards/tada68/keymaps/trashcat/rules.mk
+++ b/keyboards/tada68/keymaps/trashcat/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # Tappa Dance Bitch
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/tshack/rules.mk b/keyboards/tada68/keymaps/tshack/rules.mk
index 061907d3a..86d22dd3f 100644
--- a/keyboards/tada68/keymaps/tshack/rules.mk
+++ b/keyboards/tada68/keymaps/tshack/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/unix/rules.mk b/keyboards/tada68/keymaps/unix/rules.mk
index 46f0b65a9..aade51459 100644
--- a/keyboards/tada68/keymaps/unix/rules.mk
+++ b/keyboards/tada68/keymaps/unix/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/keymaps/wamsm_tada/rules.mk b/keyboards/tada68/keymaps/wamsm_tada/rules.mk
index 2a7ff2779..bb535beb3 100644
--- a/keyboards/tada68/keymaps/wamsm_tada/rules.mk
+++ b/keyboards/tada68/keymaps/wamsm_tada/rules.mk
@@ -13,7 +13,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/tada68/readme.md b/keyboards/tada68/readme.md
index 25b054ba1..a2dbd92de 100755
--- a/keyboards/tada68/readme.md
+++ b/keyboards/tada68/readme.md
@@ -9,10 +9,14 @@ Hardware Availability: [kbdfans](https://kbdfans.myshopify.com/products/tada68-m
Make example for this keyboard (after setting up your build environment):
- make tada68:default:bin
+ make tada68:default
See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+## Firmware Format
+
+Out of the box the tada68 uses a .bin firmware file instead of a .hex like other custom keyboards. By default QMK will build and copy the correct .bin file for you. If for some reason you need a hex file instead, you can add `:hex` to your make command, or look inside `qmk_firmware/.build` to find the hex file.
+
## Flashing Instructions (Win)
*Read all the instructions, there are a few warnings of things to avoid doing to avoid bricking your Tada68. __It is much too easy to do!__*
@@ -66,7 +70,7 @@ $ make tada68:default:flashbin
$ make tada68:default:flashbin
```
-2) Connect your keyboard to Windows computer, hit the reset button on the TADA, the lights will start flashing.
+2) Connect your keyboard to the computer, hit the reset button on the TADA, the lights will start flashing.
3) A new entry should appear at `/dev/sd*`. Mount the board using this command:
diff --git a/keyboards/tada68/rules.mk b/keyboards/tada68/rules.mk
index dd5b2bbe0..2af733b6b 100755
--- a/keyboards/tada68/rules.mk
+++ b/keyboards/tada68/rules.mk
@@ -48,6 +48,8 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
+# Mass storage bootloader on the tada68 uses bin files
+FIRMWARE_FORMAT=bin
# Build Options
# comment out to disable the options.
diff --git a/keyboards/tada68/tada68.h b/keyboards/tada68/tada68.h
index 608f52e44..670b0e6c1 100755
--- a/keyboards/tada68/tada68.h
+++ b/keyboards/tada68/tada68.h
@@ -55,8 +55,8 @@
#define LAYOUT_iso( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
- k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k2c, k1e, \
- k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
k40, k41, k42, k45, k49, k4a, k4b, k4c, k4d, k4e \
) \
@@ -102,4 +102,4 @@
void matrix_init_user(void);
void matrix_scan_user(void);
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/telophase/config.h b/keyboards/telophase/config.h
new file mode 100644
index 000000000..be0a36977
--- /dev/null
+++ b/keyboards/telophase/config.h
@@ -0,0 +1,85 @@
+/*
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER unknown
+#define PRODUCT Telophase
+#define DESCRIPTION q.m.k. keyboard firmware for Telophase
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+//#define BACKLIGHT_LEVELS 3
+
+#define ONESHOT_TIMEOUT 500
+
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+//UART settings for communication with the RF microcontroller
+#define SERIAL_UART_BAUD 1000000
+#define SERIAL_UART_DATA UDR1
+#define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
+#define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
+#define SERIAL_UART_RXD_PRESENT (UCSR1A & _BV(RXC1))
+#define SERIAL_UART_INIT() do { \
+ /* baud rate */ \
+ UBRR1L = SERIAL_UART_UBRR; \
+ /* baud rate */ \
+ UBRR1H = SERIAL_UART_UBRR >> 8; \
+ /* enable TX and RX */ \
+ UCSR1B = _BV(TXEN1) | _BV(RXEN1); \
+ /* 8-bit data */ \
+ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
+ } while(0)
+
+#endif
diff --git a/keyboards/telophase/keymaps/default/keymap.c b/keyboards/telophase/keymaps/default/keymap.c
new file mode 100644
index 000000000..1e692ba12
--- /dev/null
+++ b/keyboards/telophase/keymaps/default/keymap.c
@@ -0,0 +1,104 @@
+// this is the style you want to emulate.
+// This is the canonical layout file for the Quantum project. If you want to add another keyboard,
+
+#include "telophase.h"
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum telophase_layers
+{
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+enum telophase_keycodes
+{
+ LOWER = SAFE_RANGE,
+ RAISE,
+ ADJUST
+};
+
+#define LONGPRESS_DELAY 150
+#define LAYER_TOGGLE_DELAY 300
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = { /*QWERTY*/
+ {KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC },
+ {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, ADJUST, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT }
+},
+
+
+[_LOWER] = { /*Lower*/
+ {KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL },
+ {KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE },
+ {_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,S(KC_NUHS),S(KC_NUBS),_______, _______, _______ },
+ {_______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY }
+},
+
+
+
+[_RAISE] = { /*Raise*/
+ {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] = { /*Adjust*/
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ {_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
+
+},
+};
+
+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;
+
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+
+ }
+ return true;
+}
+
+void matrix_scan_user(void) {
+ return;
+};
+
diff --git a/keyboards/telophase/matrix.c b/keyboards/telophase/matrix.c
new file mode 100644
index 000000000..b3544453e
--- /dev/null
+++ b/keyboards/telophase/matrix.c
@@ -0,0 +1,164 @@
+/*
+Copyright 2012 Jun Wako
+Copyright 2014 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 <stdint.h>
+#include <stdbool.h>
+#if defined(__AVR__)
+#include <avr/io.h>
+#endif
+#include "wait.h"
+#include "print.h"
+#include "debug.h"
+#include "util.h"
+#include "matrix.h"
+#include "timer.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
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS];
+
+__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;
+}
+
+void matrix_init(void) {
+
+ matrix_init_quantum();
+}
+
+uint8_t matrix_scan(void)
+{
+ SERIAL_UART_INIT();
+
+ uint32_t timeout = 0;
+
+ //the s character requests the RF slave to send the matrix
+ SERIAL_UART_DATA = 's';
+
+ //trust the external keystates entirely, erase the last data
+ uint8_t uart_data[13] = {0};
+
+ //there are 12 bytes corresponding to 12 columns, and an end byte
+ for (uint8_t i = 0; i < 13; i++) {
+ //wait for the serial data, timeout if it's been too long
+ //this only happened in testing with a loose wire, but does no
+ //harm to leave it in here
+ while(!SERIAL_UART_RXD_PRESENT){
+ timeout++;
+ if (timeout > 10000){
+ break;
+ }
+ }
+ uart_data[i] = SERIAL_UART_DATA;
+ }
+
+ //check for the end packet, the key state bytes use the LSBs, so 0xE0
+ //will only show up here if the correct bytes were recieved
+ if (uart_data[11] == 0xE0)
+ {
+ //shifting and transferring the keystates to the QMK matrix variable
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = (uint16_t) uart_data[i*2] | (uint16_t) uart_data[i*2+1] << 6;
+ }
+ }
+
+
+ matrix_scan_quantum();
+ return 1;
+}
+
+inline
+bool matrix_is_on(uint8_t row, uint8_t col)
+{
+ return (matrix[row] & ((matrix_row_t)1<col));
+}
+
+inline
+matrix_row_t matrix_get_row(uint8_t row)
+{
+ return matrix[row];
+}
+
+void matrix_print(void)
+{
+ print_matrix_header();
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ phex(row); print(": ");
+ print_matrix_row(row);
+ print("\n");
+ }
+}
+
+uint8_t matrix_key_count(void)
+{
+ uint8_t count = 0;
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ count += matrix_bitpop(i);
+ }
+ return count;
+}
diff --git a/keyboards/telophase/readme.md b/keyboards/telophase/readme.md
new file mode 100644
index 000000000..86b29d01d
--- /dev/null
+++ b/keyboards/telophase/readme.md
@@ -0,0 +1,16 @@
+Telophase
+=========
+
+A wireless split compact keyboard.
+
+Hardware Supported: Telophase PCB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make telophase:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+## Mitosis Notes
+
+These configuration files were based off the Atreus keyboard. It assumes a Pro Micro is being used, however retains the 'make upload' feature from the Atreus branch. This keyboard uses a completely different 'matrix scan' system to other keyboards, it relies on an external nRF51822 microcontroller maintaining a matrix of keystates received from the keyboard halves. The matrix.c file contains the code to poll the external microcontroller for the key matrix. As long as this file is not changed, all other QMK features are supported.
diff --git a/keyboards/telophase/rules.mk b/keyboards/telophase/rules.mk
new file mode 100644
index 000000000..cfaf58e3d
--- /dev/null
+++ b/keyboards/telophase/rules.mk
@@ -0,0 +1,75 @@
+
+OPT_DEFS += -DMITOSIS_PROMICRO
+MITOSIS_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \
+ avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB)
+
+# # project specific files
+SRC = matrix.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
+# comment out to disable the options.
+#
+#BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+CUSTOM_MATRIX = yes # Remote matrix from the wireless bridge
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+# SLEEP_LED_ENABLE = yes # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - not yet supported in LUFA
+# 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
+LAYOUTS = ortho_4x12
+USB = /dev/ttyACM0
+
+# upload: build
+# $(MITOSIS_UPLOAD_COMMAND)
diff --git a/keyboards/telophase/telophase.c b/keyboards/telophase/telophase.c
new file mode 100644
index 000000000..c77a43389
--- /dev/null
+++ b/keyboards/telophase/telophase.c
@@ -0,0 +1,41 @@
+#include "telophase.h"
+
+void uart_init(void) {
+ SERIAL_UART_INIT();
+}
+
+void led_init(void) {
+ DDRD |= (1<<1);
+ PORTD |= (1<<1);
+ DDRF |= (1<<4) | (1<<5);
+ PORTF |= (1<<4) | (1<<5);
+}
+
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+ matrix_init_user();
+ uart_init();
+ led_init();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+ matrix_scan_user();
+}
+
+void led_set_kb(uint8_t usb_led) {
+
+}
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+{{12, 0}, {11, 0}, {10, 0}, {9, 0}, {8, 0}, {7, 0}, {6, 0}, {5, 0}, {4, 0}, {3, 0}, {2, 0}, {1, 0}, {0, 0}},
+{{12, 1}, {11, 1}, {10, 1}, {9, 1}, {8, 1}, {7, 1}, {6, 1}, {5, 1}, {4, 1}, {3, 1}, {2, 1}, {1, 1}, {0, 1}},
+{{12, 2}, {11, 2}, {10, 2}, {9, 2}, {8, 2}, {7, 2}, {6, 2}, {5, 2}, {4, 2}, {3, 2}, {2, 2}, {1, 2}, {0, 2}},
+{{12, 3}, {11, 3}, {10, 3}, {9, 3}, {8, 3}, {7, 3}, {6, 3}, {5, 3}, {4, 3}, {3, 3}, {2, 3}, {1, 3}, {0, 3}},
+};
+#endif
diff --git a/keyboards/telophase/telophase.h b/keyboards/telophase/telophase.h
new file mode 100644
index 000000000..aae4fc3d4
--- /dev/null
+++ b/keyboards/telophase/telophase.h
@@ -0,0 +1,67 @@
+#ifndef TELOPHASE_H
+#define TELOPHASE_H
+
+#include "quantum.h"
+#include "matrix.h"
+#include "backlight.h"
+#include <stddef.h>
+
+#define red_led_off PORTF |= (1<<5)
+#define red_led_on PORTF &= ~(1<<5)
+#define blu_led_off PORTF |= (1<<4)
+#define blu_led_on PORTF &= ~(1<<4)
+#define grn_led_off PORTD |= (1<<1)
+#define grn_led_on PORTD &= ~(1<<1)
+
+#define set_led_off red_led_off; grn_led_off; blu_led_off
+#define set_led_red red_led_on; grn_led_off; blu_led_off
+#define set_led_blue red_led_off; grn_led_off; blu_led_on
+#define set_led_green red_led_off; grn_led_on; blu_led_off
+#define set_led_yellow red_led_on; grn_led_on; blu_led_off
+#define set_led_magenta red_led_on; grn_led_off; blu_led_on
+#define set_led_cyan red_led_off; grn_led_on; blu_led_on
+#define set_led_white red_led_on; grn_led_on; blu_led_on
+
+/*
+#define LED_B 5
+#define LED_R 6
+#define LED_G 7
+
+#define all_leds_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
+
+#define red_led_on PORTF |= (1<<LED_R)
+#define red_led_off PORTF &= ~(1<<LED_R)
+#define grn_led_on PORTF |= (1<<LED_G)
+#define grn_led_off PORTF &= ~(1<<LED_G)
+#define blu_led_on PORTF |= (1<<LED_B)
+#define blu_led_off PORTF &= ~(1<<LED_B)
+
+#define set_led_off PORTF &= ~(1<<LED_B) & ~(1<<LED_R) & ~(1<<LED_G)
+#define set_led_red PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_G) | (1<<LED_R)
+#define set_led_blue PORTF = PORTF & ~(1<<LED_G) & ~(1<<LED_R) | (1<<LED_B)
+#define set_led_green PORTF = PORTF & ~(1<<LED_B) & ~(1<<LED_R) | (1<<LED_G)
+#define set_led_yellow PORTF = PORTF & ~(1<<LED_B) | (1<<LED_R) | (1<<LED_G)
+#define set_led_magenta PORTF = PORTF & ~(1<<LED_G) | (1<<LED_R) | (1<<LED_B)
+#define set_led_cyan PORTF = PORTF & ~(1<<LED_R) | (1<<LED_B) | (1<<LED_G)
+#define set_led_white PORTF |= (1<<LED_B) | (1<<LED_R) | (1<<LED_G)
+*/
+
+// This a shortcut to help you visually see your layout.
+// The first section contains all of the arguements
+// The second converts the arguments into a two-dimensional array
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, \
+ k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, \
+ k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35, \
+ k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 \
+) \
+{ \
+ { k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11 }, \
+ { k12, k13, k14, k15, k16, k17, k18, k19, k20, k21, k22, k23 }, \
+ { k24, k25, k26, k27, k28, k29, k30, k31, k32, k33, k34, k35 }, \
+ { k36, k37, k38, k39, k40, k41, k42, k43, k44, k45, k46, k47 }, \
+}
+
+#define LAYOUT_ortho_4x12 LAYOUT
+
+#endif
diff --git a/keyboards/tetris/config.h b/keyboards/tetris/config.h
index 9c7f525a7..c2e552449 100644
--- a/keyboards/tetris/config.h
+++ b/keyboards/tetris/config.h
@@ -1,5 +1,4 @@
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
@@ -10,6 +9,7 @@
#define MANUFACTURER Fengz
#define PRODUCT Tetris
#define DESCRIPTION Planck mit
+
#define QMK_ESC_OUTPUT B0
#define QMK_ESC_INPUT D7
#define QMK_LED B7
@@ -41,11 +41,10 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
+#define NO_ACTION_MACRO
+#define NO_ACTION_FUNCTION
#define TAPPING_TERM 200
-#define PERMISSIVE_HOLD
#ifdef AUDIO_ENABLE
#define B5_AUDIO
@@ -53,13 +52,11 @@
#define NO_MUSIC_MODE
#endif
+#if RGBLIGHT_ENABLE
#define RGB_DI_PIN F5
-#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_SLEEP
#define RGBLED_NUM 47
#define RGBLIGHT_EFFECT_KNIGHT_LED_NUM 12
//#define RGBLIGHT_LIMIT_VAL 128
#endif
-
-#endif \ No newline at end of file
diff --git a/keyboards/tetris/keymaps/default/keymap.c b/keyboards/tetris/keymaps/default/keymap.c
index 61f2961b4..5f48bd07a 100644
--- a/keyboards/tetris/keymaps/default/keymap.c
+++ b/keyboards/tetris/keymaps/default/keymap.c
@@ -286,7 +286,7 @@ static uint16_t Type_Hue=270;
void matrix_init_user( void )
{
- _delay_ms( 200 );
+ wait_ms( 200 );
/* Encoder init */
encoder_state = PIND & 0x3;
@@ -368,27 +368,22 @@ void matrix_scan_user( void )
switch ( layer )
{
case 0:
- register_code( KC_VOLD );
- unregister_code( KC_VOLD );
+ tap_code( KC_VOLD );
break;
case _CODE:
- register_code( KC_LEFT );
- unregister_code( KC_LEFT );
+ tap_code( KC_LEFT );
break;
case _RGB:
rgblight_decrease_val();
break;
case _NUMB:
- register_code( KC_LEFT );
- unregister_code( KC_LEFT );
+ tap_code( KC_LEFT );
break;
case _MARO:
- register_code( KC_UP );
- unregister_code( KC_UP );
+ tap_code( KC_UP );
break;
default:
- register_code( KC_VOLD );
- unregister_code( KC_VOLD );
+ tap_code( KC_VOLD );
}
/* End of Set Encoder Keycode */
@@ -441,27 +436,22 @@ void matrix_scan_user( void )
switch ( layer )
{
case 0:
- register_code( KC_VOLU );
- unregister_code( KC_VOLU );
+ tap_code( KC_VOLU );
break;
case _CODE:
- register_code( KC_RGHT );
- unregister_code( KC_RGHT );
+ tap_code( KC_RGHT );
break;
case _RGB:
rgblight_increase_val();
break;
case _NUMB:
- register_code( KC_RGHT );
- unregister_code( KC_RGHT );
+ tap_code( KC_RGHT );
break;
case _MARO:
- register_code( KC_DOWN );
- unregister_code( KC_DOWN );
+ tap_code( KC_DOWN );
break;
default:
- register_code( KC_VOLU );
- unregister_code( KC_VOLU );
+ tap_code( KC_VOLU );
}
/* End of Set Encoder Keycode */
@@ -739,11 +729,8 @@ bool process_record_user( uint16_t keycode, keyrecord_t *record ){
if (record->event.pressed) {
// Do something when pressed
} else {
- register_code( KC_0 ); // send 0
- unregister_code( KC_0 );
-
- register_code( KC_0 ); // send 0 twice without macro
- unregister_code( KC_0 );
+ tap_code( KC_0 ); // send 0
+ tap_code( KC_0 ); // send 0 twice without macro
}
return false; // Skip all further processing of this key
@@ -818,7 +805,7 @@ bool process_record_user( uint16_t keycode, keyrecord_t *record ){
void led_set_user( uint8_t usb_led )
{
static uint8_t old_usb_led = 0;
- _delay_ms( 10 ); /* gets rid of tick */
+ wait_ms( 10 ); /* gets rid of tick */
if ( (usb_led & (1 << USB_LED_CAPS_LOCK) ) && !(old_usb_led & (1 << USB_LED_CAPS_LOCK) ) ) {
/* CAPS on */
@@ -844,4 +831,3 @@ void led_set_user( uint8_t usb_led )
}
old_usb_led = usb_led;
} // End of led_set_user
-
diff --git a/keyboards/tetris/rules.mk b/keyboards/tetris/rules.mk
index 784f6e462..4741c162b 100644
--- a/keyboards/tetris/rules.mk
+++ b/keyboards/tetris/rules.mk
@@ -44,17 +44,18 @@ BOOTLOADER =qmk-dfu
# Build Options
# comment out to disable the options.
#
-BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
-EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
-CONSOLE_ENABLE ?= no # Console for debug(+400)
-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 ?= yes
-RGBLIGHT_ENABLE ?= yes
+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
+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 = yes
+RGBLIGHT_ENABLE = yes
TAP_DANCE_ENABLE = no
+
EXTRAFLAGS += -flto # Make the hex smaller
LAYOUTS = planck_mit
diff --git a/keyboards/the_ruler/config.h b/keyboards/the_ruler/config.h
index 16135bbd1..e72875c76 100644
--- a/keyboards/the_ruler/config.h
+++ b/keyboards/the_ruler/config.h
@@ -155,9 +155,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
//#define NO_ACTION_MACRO
//#define NO_ACTION_FUNCTION
-#define RGBLIGHT_TIMER
+
#define RGB_DI_PIN E6 // The pin your RGB strip is wired to
-#define RGBLIGHT_TIMER // Require for fancier stuff (not compatible with audio)
#define RGBLED_NUM 1 // Number of LEDs
#define RGBLIGHT_ANIMATIONS
#define RGBLIGHT_HUE_STEP 10
diff --git a/keyboards/the_ruler/keymaps/default/rules.mk b/keyboards/the_ruler/keymaps/default/rules.mk
index fac9327db..b491f5b3f 100644
--- a/keyboards/the_ruler/keymaps/default/rules.mk
+++ b/keyboards/the_ruler/keymaps/default/rules.mk
@@ -13,7 +13,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/the_ruler/readme.md b/keyboards/the_ruler/readme.md
index cc1f817de..3573514b6 100644
--- a/keyboards/the_ruler/readme.md
+++ b/keyboards/the_ruler/readme.md
@@ -3,8 +3,8 @@ The Ruler PCB
A custom keyboard PCB ruler, that can also function as a macro pad
-Keyboard Maintainer: Maple Computing
-Hardware Supported: PCB Ruler V1 by That-Canadian and Bishop Keyboards
+Keyboard Maintainer: Maple Computing
+Hardware Supported: PCB Ruler V1 by That-Canadian and Bishop Keyboards
Hardware Availability: https://www.maple-computing.com/products/pcb-ruler-v1-1
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/the_ruler/rules.mk b/keyboards/the_ruler/rules.mk
index 30d76a3c9..6362176fe 100644
--- a/keyboards/the_ruler/rules.mk
+++ b/keyboards/the_ruler/rules.mk
@@ -65,4 +65,4 @@ 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
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
diff --git a/keyboards/thevankeyboards/bananasplit/README.md b/keyboards/thevankeyboards/bananasplit/README.md
new file mode 100644
index 000000000..41d0d407d
--- /dev/null
+++ b/keyboards/thevankeyboards/bananasplit/README.md
@@ -0,0 +1,14 @@
+# BananaSplit60
+
+A 60% PCB featuring a split spacebar.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: BananaSplit60 PCB
+Hardware Availability: https://thevankeyboards.com/products/gb-bananasplit-60-keyboard-kit?variant=42149104910
+
+Make example for this keyboard (after setting up your build environment):
+
+ make thevankeyboards/bananasplit: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/bananasplit/bananasplit.c b/keyboards/thevankeyboards/bananasplit/bananasplit.c
index 1aa8fb174..1aa8fb174 100644
--- a/keyboards/bananasplit/bananasplit.c
+++ b/keyboards/thevankeyboards/bananasplit/bananasplit.c
diff --git a/keyboards/bananasplit/bananasplit.h b/keyboards/thevankeyboards/bananasplit/bananasplit.h
index 8d545c1f9..8d545c1f9 100644
--- a/keyboards/bananasplit/bananasplit.h
+++ b/keyboards/thevankeyboards/bananasplit/bananasplit.h
diff --git a/keyboards/bananasplit/config.h b/keyboards/thevankeyboards/bananasplit/config.h
index 5649ab4aa..5649ab4aa 100644
--- a/keyboards/bananasplit/config.h
+++ b/keyboards/thevankeyboards/bananasplit/config.h
diff --git a/keyboards/bananasplit/info.json b/keyboards/thevankeyboards/bananasplit/info.json
index 6741c6cdb..6741c6cdb 100644
--- a/keyboards/bananasplit/info.json
+++ b/keyboards/thevankeyboards/bananasplit/info.json
diff --git a/keyboards/bananasplit/keymaps/0010/config.h b/keyboards/thevankeyboards/bananasplit/keymaps/0010/config.h
index 060f5922f..060f5922f 100644
--- a/keyboards/bananasplit/keymaps/0010/config.h
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/0010/config.h
diff --git a/keyboards/bananasplit/keymaps/0010/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/0010/keymap.c
index 617812149..617812149 100644
--- a/keyboards/bananasplit/keymaps/0010/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/0010/keymap.c
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk
new file mode 100644
index 000000000..159fd7dc6
--- /dev/null
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/0010/rules.mk
@@ -0,0 +1,37 @@
+# Copyright 2017 Balz Guenat
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# QMK Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+# MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+# EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+# CONSOLE_ENABLE = no # Console for debug(+400)
+# COMMAND_ENABLE = yes # Commands for debug and configuration
+# NKRO_ENABLE = yes # 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 support (+2400 to 4200, depending on config)
+# 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
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/bananasplit/keymaps/coloneljesus/config.h b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/config.h
index 92a67f647..92a67f647 100644
--- a/keyboards/bananasplit/keymaps/coloneljesus/config.h
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/config.h
diff --git a/keyboards/bananasplit/keymaps/coloneljesus/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/keymap.c
index 275bfe32a..275bfe32a 100644
--- a/keyboards/bananasplit/keymaps/coloneljesus/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/keymap.c
diff --git a/keyboards/bananasplit/keymaps/coloneljesus/readme.md b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/readme.md
index b9ce5f44a..b9ce5f44a 100644
--- a/keyboards/bananasplit/keymaps/coloneljesus/readme.md
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/readme.md
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk
new file mode 100644
index 000000000..159fd7dc6
--- /dev/null
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/coloneljesus/rules.mk
@@ -0,0 +1,37 @@
+# Copyright 2017 Balz Guenat
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# QMK Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+# MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+# EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+# CONSOLE_ENABLE = no # Console for debug(+400)
+# COMMAND_ENABLE = yes # Commands for debug and configuration
+# NKRO_ENABLE = yes # 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 support (+2400 to 4200, depending on config)
+# 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
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/bananasplit/keymaps/default/config.h b/keyboards/thevankeyboards/bananasplit/keymaps/default/config.h
index 060f5922f..060f5922f 100644
--- a/keyboards/bananasplit/keymaps/default/config.h
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/default/config.h
diff --git a/keyboards/bananasplit/keymaps/default/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/default/keymap.c
index dcef38bca..dcef38bca 100644
--- a/keyboards/bananasplit/keymaps/default/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/default/keymap.c
diff --git a/keyboards/bananasplit/keymaps/default/readme.md b/keyboards/thevankeyboards/bananasplit/keymaps/default/readme.md
index aaf6daa08..aaf6daa08 100644
--- a/keyboards/bananasplit/keymaps/default/readme.md
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/default/readme.md
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk
new file mode 100644
index 000000000..159fd7dc6
--- /dev/null
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/default/rules.mk
@@ -0,0 +1,37 @@
+# Copyright 2017 Balz Guenat
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# QMK Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+# MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+# EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+# CONSOLE_ENABLE = no # Console for debug(+400)
+# COMMAND_ENABLE = yes # Commands for debug and configuration
+# NKRO_ENABLE = yes # 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 support (+2400 to 4200, depending on config)
+# 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
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/bananasplit/keymaps/hhkbanana/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/hhkbanana/keymap.c
index f2f829f93..f2f829f93 100644
--- a/keyboards/bananasplit/keymaps/hhkbanana/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/hhkbanana/keymap.c
diff --git a/keyboards/bananasplit/keymaps/jockyxu1122_ansi/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_ansi/keymap.c
index 89e275daf..89e275daf 100644
--- a/keyboards/bananasplit/keymaps/jockyxu1122_ansi/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_ansi/keymap.c
diff --git a/keyboards/bananasplit/keymaps/jockyxu1122_ansi/readme.md b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_ansi/readme.md
index 664a0a048..664a0a048 100644
--- a/keyboards/bananasplit/keymaps/jockyxu1122_ansi/readme.md
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_ansi/readme.md
diff --git a/keyboards/bananasplit/keymaps/jockyxu1122_iso/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_iso/keymap.c
index 859944991..859944991 100644
--- a/keyboards/bananasplit/keymaps/jockyxu1122_iso/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_iso/keymap.c
diff --git a/keyboards/bananasplit/keymaps/jockyxu1122_iso/readme.md b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_iso/readme.md
index e135f73e3..e135f73e3 100644
--- a/keyboards/bananasplit/keymaps/jockyxu1122_iso/readme.md
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/jockyxu1122_iso/readme.md
diff --git a/keyboards/bananasplit/keymaps/kamon/config.h b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/config.h
index af6cf8ef1..af6cf8ef1 100644
--- a/keyboards/bananasplit/keymaps/kamon/config.h
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/config.h
diff --git a/keyboards/bananasplit/keymaps/kamon/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/keymap.c
index 34306e183..34306e183 100644
--- a/keyboards/bananasplit/keymaps/kamon/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/keymap.c
diff --git a/keyboards/bananasplit/keymaps/kamon/readme.md b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/readme.md
index a08bea519..a08bea519 100644
--- a/keyboards/bananasplit/keymaps/kamon/readme.md
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/readme.md
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk
new file mode 100644
index 000000000..159fd7dc6
--- /dev/null
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/kamon/rules.mk
@@ -0,0 +1,37 @@
+# Copyright 2017 Balz Guenat
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# QMK Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+# BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+# MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+# EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+# CONSOLE_ENABLE = no # Console for debug(+400)
+# COMMAND_ENABLE = yes # Commands for debug and configuration
+# NKRO_ENABLE = yes # 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 support (+2400 to 4200, depending on config)
+# 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
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/bananasplit/keymaps/nic/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/nic/keymap.c
index 5ed1c65e9..5ed1c65e9 100644
--- a/keyboards/bananasplit/keymaps/nic/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/nic/keymap.c
diff --git a/keyboards/bananasplit/keymaps/rask/README.md b/keyboards/thevankeyboards/bananasplit/keymaps/rask/README.md
index ec19d3935..ec19d3935 100644
--- a/keyboards/bananasplit/keymaps/rask/README.md
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/rask/README.md
diff --git a/keyboards/bananasplit/keymaps/rask/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/rask/keymap.c
index 6c7544cc8..6c7544cc8 100644
--- a/keyboards/bananasplit/keymaps/rask/keymap.c
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/rask/keymap.c
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/talljoe/config.h b/keyboards/thevankeyboards/bananasplit/keymaps/talljoe/config.h
new file mode 100644
index 000000000..fc9bd3d61
--- /dev/null
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/talljoe/config.h
@@ -0,0 +1,22 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include QMK_KEYBOARD_CONFIG_H
+
+#define SPACE_COUNT 3
+
+#define TEMPLATE( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
+) { \
+ { 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, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, K44, K45, K46, KC_NO, K48, K49, KC_NO, K4B, K4C, KC_NO }\
+}
+
+#endif
diff --git a/keyboards/thevankeyboards/bananasplit/keymaps/talljoe/keymap.c b/keyboards/thevankeyboards/bananasplit/keymaps/talljoe/keymap.c
new file mode 100644
index 000000000..7812add81
--- /dev/null
+++ b/keyboards/thevankeyboards/bananasplit/keymaps/talljoe/keymap.c
@@ -0,0 +1 @@
+// This space intentionally left blank
diff --git a/keyboards/bananasplit/rules.mk b/keyboards/thevankeyboards/bananasplit/rules.mk
index 81570c493..81570c493 100644
--- a/keyboards/bananasplit/rules.mk
+++ b/keyboards/thevankeyboards/bananasplit/rules.mk
diff --git a/keyboards/thevankeyboards/minivan/config.h b/keyboards/thevankeyboards/minivan/config.h
new file mode 100644
index 000000000..726768e0e
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/config.h
@@ -0,0 +1,162 @@
+/*
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEAE
+#define PRODUCT_ID 0x8844
+#define DEVICE_VER 0x0002
+#define MANUFACTURER Evan Sailer
+#define PRODUCT Minivan
+#define DESCRIPTION keyboard firmware for Minivan
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D7, B5, F7, D4 }
+#define MATRIX_COL_PINS { D2, D3, D5, D6, B4, B6, F6, F5, F4, F1, F0, B3 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#endif
diff --git a/keyboards/tv44/info.json b/keyboards/thevankeyboards/minivan/info.json
index 355701fee..355701fee 100644
--- a/keyboards/tv44/info.json
+++ b/keyboards/thevankeyboards/minivan/info.json
diff --git a/keyboards/tv44/keymaps/belak/config.h b/keyboards/thevankeyboards/minivan/keymaps/belak/config.h
index 47d96a29d..47d96a29d 100644
--- a/keyboards/tv44/keymaps/belak/config.h
+++ b/keyboards/thevankeyboards/minivan/keymaps/belak/config.h
diff --git a/keyboards/thevankeyboards/minivan/keymaps/belak/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/belak/keymap.c
new file mode 100644
index 000000000..19051574a
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/belak/keymap.c
@@ -0,0 +1,102 @@
+#include QMK_KEYBOARD_H
+
+// Layer names. We stick to 3 letters if possible so MO(NAME) fits in 7
+// characters and doesn't mess with the grid.
+#define _QW 0
+#define _L1 1
+#define _L2 2
+#define _L3 3
+
+// Curly braces have their own keys. These are defined so they don't mess up the
+// grid in layer 2.
+#define L_CURBR LSFT(KC_LBRC)
+#define R_CURBR LSFT(KC_RBRC)
+
+#define L1_TAB LT(_L1, KC_TAB)
+#define L2_ESC LT(_L2, KC_ESC)
+#define L2_SLSH LT(_L2, KC_SLSH)
+#define L3_QUOT LT(_L3, KC_QUOT)
+
+// Tap dance magic
+#define TD_LGUI TD(BE_TD_GUI)
+#define TD_LCTL TD(BE_TD_CTL)
+#define TD_LALT TD(BE_TD_ALT)
+
+enum belak_td {
+ BE_TD_GUI = 0,
+ BE_TD_CTL,
+ BE_TD_ALT,
+};
+
+void mod_tap_fn(qk_tap_dance_state_t *state, void *user_data);
+void mod_reset_fn(qk_tap_dance_state_t *state, void *user_data);
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [BE_TD_GUI] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
+ [BE_TD_CTL] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
+ [BE_TD_ALT] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
+};
+
+uint16_t tap_dance_keys[] = {
+ [BE_TD_GUI] = KC_LGUI,
+ [BE_TD_CTL] = KC_LCTL,
+ [BE_TD_ALT] = KC_LALT,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QW] = LAYOUT_arrow_command( /* Qwerty */
+ L2_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ L1_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, L2_SLSH,
+ TD_LCTL, MO(_L3), TD_LALT, TD_LGUI, KC_SPC, KC_SPC, MO(_L1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [_L1] = LAYOUT_arrow_command( /* LAYER 1 */
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ _______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, KC_QUOT,
+ _______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT,
+ _______, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [_L2] = LAYOUT_arrow_command( /* LAYER 2 */
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, L_CURBR, R_CURBR, KC_4, KC_5, KC_6, KC_VOLU, _______,
+ _______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______,
+ _______, _______, _______, _______, _______, _______, KC_RALT, _______, _______, _______
+ ),
+ [_L3] = LAYOUT_arrow_command( /* LAYER 3 */
+ _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______,
+ KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_F9, KC_F10, KC_F11, KC_F12, KC_RSFT,
+ _______, _______, _______, _______, _______, _______, KC_RALT, _______, _______, _______
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {};
+
+// Tap dance functions
+void mod_tap_fn(qk_tap_dance_state_t *state, void *user_data) {
+ switch (state->count) {
+ case 1:
+ register_mods(MOD_BIT(tap_dance_keys[state->keycode - QK_TAP_DANCE]));
+ send_keyboard_report();
+ break;
+ case 2:
+ layer_on(_L2);
+ break;
+ case 3:
+ layer_off(_L2);
+ layer_on(_L1);
+ break;
+ default:
+ reset_tap_dance(state);
+ }
+}
+
+void mod_reset_fn(qk_tap_dance_state_t *state, void *user_data) {
+ layer_off(_L1);
+ layer_off(_L2);
+ unregister_mods(MOD_BIT(tap_dance_keys[state->keycode - QK_TAP_DANCE]));
+ send_keyboard_report();
+}
diff --git a/keyboards/tv44/keymaps/belak/readme.md b/keyboards/thevankeyboards/minivan/keymaps/belak/readme.md
index b0a505c4a..b0a505c4a 100644
--- a/keyboards/tv44/keymaps/belak/readme.md
+++ b/keyboards/thevankeyboards/minivan/keymaps/belak/readme.md
diff --git a/keyboards/tv44/keymaps/belak/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/belak/rules.mk
index 611241124..611241124 100644
--- a/keyboards/tv44/keymaps/belak/rules.mk
+++ b/keyboards/thevankeyboards/minivan/keymaps/belak/rules.mk
diff --git a/keyboards/tv44/keymaps/budi/config.h b/keyboards/thevankeyboards/minivan/keymaps/budi/config.h
index 67bcf3546..67bcf3546 100644
--- a/keyboards/tv44/keymaps/budi/config.h
+++ b/keyboards/thevankeyboards/minivan/keymaps/budi/config.h
diff --git a/keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c
new file mode 100644
index 000000000..baa266e63
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/budi/keymap.c
@@ -0,0 +1,229 @@
+#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 _DV 0
+#define _NM 1
+#define _NV 2
+#define _MN 3
+#define _FN 4
+
+// Requires KC_TRNS/_______ for the trigger key in the destination layer
+#define NM_SP LT(_NM, KC_SPC)
+#define NV_SP LT(_NV, KC_SPC)
+#define MN_EN LT(_MN, KC_ENT)
+#define FN_EX LT(_FN, KC_ESC)
+
+// Curly braces have their own keys. These are defined to make them not mess up
+// the grid in layer 2.
+#define L_CURB LSFT(KC_LBRC)
+#define R_CURB LSFT(KC_RBRC)
+
+// Hypers
+#define HYP0 HYPR(KC_0)
+#define HYP1 HYPR(KC_1)
+#define HYP2 HYPR(KC_2)
+#define HYP3 HYPR(KC_3)
+#define HYP4 HYPR(KC_4)
+#define HYP5 HYPR(KC_5)
+#define HYP6 HYPR(KC_6)
+#define HYP7 HYPR(KC_7)
+#define HYP8 HYPR(KC_8)
+#define HYP9 HYPR(KC_9)
+
+// MEH
+#define MEH0 MEH(KC_0)
+#define MEH1 MEH(KC_1)
+#define MEH2 MEH(KC_2)
+#define MEH3 MEH(KC_3)
+#define MEH4 MEH(KC_4)
+#define MEH5 MEH(KC_5)
+#define MEH6 MEH(KC_6)
+#define MEH7 MEH(KC_7)
+#define MEH8 MEH(KC_8)
+#define MEH9 MEH(KC_9)
+
+// CAG
+#define CAG0 LCAG(KC_0)
+#define CAG1 LCAG(KC_1)
+#define CAG2 LCAG(KC_2)
+#define CAG3 LCAG(KC_3)
+#define CAG4 LCAG(KC_4)
+#define CAG5 LCAG(KC_5)
+#define CAG6 LCAG(KC_6)
+#define CAG7 LCAG(KC_7)
+#define CAG8 LCAG(KC_8)
+#define CAG9 LCAG(KC_9)
+
+// ALTS
+#define ALT0 LALT(KC_0)
+#define ALT1 LALT(KC_1)
+#define ALT2 LALT(KC_2)
+#define ALT3 LALT(KC_3)
+#define ALT4 LALT(KC_4)
+#define ALT5 LALT(KC_5)
+#define ALT6 LALT(KC_6)
+#define ALT7 LALT(KC_7)
+#define ALT8 LALT(KC_8)
+#define ALT9 LALT(KC_9)
+#define ALTX LALT(KC_GRV)
+#define ALTL LALT(KC_LEFT)
+#define ALTR LALT(KC_RIGHT)
+#define ALTESC LALT(KC_ESC)
+#define ALTEQL LALT(KC_EQL)
+#define ALTMIN LALT(KC_MINS)
+
+// BACK AND FORWARD
+#define XBACK LGUI(LALT(KC_LEFT))
+#define XFFWD LGUI(LALT(KC_RIGHT))
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define xxxxxxx KC_NO
+
+enum custom_keycodes {
+ PLACEHOLDER = SAFE_RANGE, // can always be here
+ SWTCH
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+
+/* DVORAK
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
+ * | TAB | ' | , | . | P | Y | F | G | C | R | L | BACKSPACE |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | LCTL | A | O | E | U | I | D | H | T | N | S | MN/ENTER |
+ * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
+ * | LSHFT | ; | Q | J | K | X | B | M | W | V | Z | RSHFT |
+ * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
+ * | FN EX | GUI | ALT | NM / SPACE | NV / SPACE | RALT | - | = | ESC |
+ * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
+ */
+ [_DV] = LAYOUT_arrow(
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MN_EN,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
+ FN_EX, KC_LGUI, KC_LALT, NM_SP, NV_SP, KC_RALT, KC_MINS, KC_EQL, KC_ESC
+ ),
+
+
+
+/* NUMBERS
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | DELETE |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | LCTL | ! | @ | [ | { | ( | ) | } | ] | | | ? | ENTER |
+ * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
+ * | LSFT | ` | ~ | # | $ | % | ^ | & | * | _ | + | = |
+ * | LSFT | ` | ~ | # | $ | % | ^ | & | * | _ | + | / |
+ * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
+ * | | GUI | LALT |-----TRNS-----| SPACE | RALT | - | = | \ |
+ * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
+ */
+ [_NM] = LAYOUT_arrow(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
+ _______, KC_EXLM, KC_AT, KC_LBRC, L_CURB, KC_LPRN, KC_RPRN, R_CURB, KC_RBRC, KC_PIPE, KC_QUES, _______,
+ _______, KC_GRV, KC_TILD, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_UNDS, KC_PLUS, KC_SLSH,
+ _______, _______, _______, _______, KC_SPC, _______, KC_MINS, KC_EQL, KC_BSLS
+ ),
+
+
+
+/* NAVIGATION
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
+ * | ESC | MWU | MWL | MU | MWR | MPRV | MNXT | HOME | UP | END | PGUP | DELETE |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | LCTL | MWD | ML | MD | MR | MRWD | MFFD | LEFT | DOWN | RIGHT| PGDN | MB2 |
+ * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
+ * | LSFT | HYP1 | HYP2 | HYP3 | HYP4 | HYP5 | HYP6 | HYP7 | HYP8 | HYP9 | HYP0 | VOLUP |
+ * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
+ * | | GUI | LALT | MB1 |----TRNS----| MUTE | PLAY | STOP | VOLDN |
+ * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
+ */
+ [_NV] = LAYOUT_arrow(
+ KC_ESC, KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, KC_MPRV, KC_MNXT, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_DEL,
+ _______, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_MRWD, KC_MFFD, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_BTN2,
+ _______, HYP1, HYP2, HYP3, HYP4, HYP5, HYP6, HYP7, HYP8, HYP9, HYP0, KC_VOLU,
+ _______, _______, _______, KC_BTN1, _______, KC_MUTE, KC_MPLY, KC_MSTP, KC_VOLD
+ ),
+
+
+
+/* MODIFIED NUMBERS
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
+ * | ALTESC | CAG1 | CAG2 | CAG3 | CAG4 | CAG5 | CAG6 | CAG7 | CAG8 | CAG9 | CAG0 | SWTCH |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | ALT ` | ALT1 | ALT2 | ALT3 | ALT4 | ALT5 | ALT6 | ALT7 | ALT8 | ALT9 | ALT0 |----TRNS---|
+ * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
+ * | ALT = | MEH1 | MEH2 | MEH3 | MEH4 | MEH5 | MEH6 | MEH7 | MEH8 | MEH9 | MEH0 | |
+ * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
+ * | ALT - | | XBACK | ALT LEFT | ALT RIGHT | XFFWD | | | |
+ * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
+ */
+ [_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
+ ),
+
+
+
+/* FUNCTIONS
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
+ * | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | DELETE |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | LCTL | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | |
+ * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
+ * | LSFT | | | | | | | | | | | |
+ * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
+ * |---TRNS---| CAPS | LALT | | SWTCH | RALT | | RESET |--TRNS-|
+ * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
+ */
+ [_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, _______
+ )
+
+
+
+/* Transparent placeholder for more layers
+ * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
+ * | | | | | | | | | | | | |
+ * |---------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | | | | | | | | | | | | |
+ * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
+ * | | | | | | | | | | | | |
+ * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
+ * | | | | | | | | | |
+ * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
+ */
+// [_TR] = LAYOUT_arrow(
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+// _______, _______, _______, _______, _______, _______, _______, _______, _______
+// )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch (keycode) {
+ case SWTCH:
+ SEND_STRING(SS_DOWN(X_LGUI));
+ SEND_STRING(SS_DOWN(X_LSHIFT));
+ SEND_STRING(SS_TAP(X_ENTER));
+ SEND_STRING(SS_UP(X_LSHIFT));
+ SEND_STRING(SS_UP(X_LGUI));
+ return false;
+ }
+ }
+ return true;
+}
diff --git a/keyboards/thevankeyboards/minivan/keymaps/budi/readme.md b/keyboards/thevankeyboards/minivan/keymaps/budi/readme.md
new file mode 100644
index 000000000..e5de86ef8
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/budi/readme.md
@@ -0,0 +1,17 @@
+# Budi's TV44 Arrow layout
+
+- Dvorak main layer
+- Somewhat easy bracket access for easy devs, happy :)
+- Dedicated gaming layers cuz u don't wanna mess with apm
+- Mainly for windows, but with translated alt/cmd on os, it's good to go
+
+ASCII graphics shamelessly stolen from tong92's layout :)
+
+Updates August 2018:
+- Escape both ways
+- Only include QMK_KEYBOARD_H
+
+Updates July 2018:
+- I guess I don't play games that much anymore
+- SUGDW modifiers
+- Somehow LALT(LSFT(KC_RET)) does not register correctly on my mac
diff --git a/keyboards/thevankeyboards/minivan/keymaps/core/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/core/keymap.c
new file mode 100644
index 000000000..cf1e0d3f5
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/core/keymap.c
@@ -0,0 +1,32 @@
+#include QMK_KEYBOARD_H
+
+#define _QW 0
+#define _L1 1
+#define _L2 2
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QW] = LAYOUT( /* Qwerty */
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_L2),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, MO(_L1), KC_RALT, KC_RCTL
+ ),
+ [_L1] = LAYOUT( /* LAYER 1 */
+ KC_GRV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_PAUS,
+ KC_TAB, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, _______,
+ _______, _______, _______, _______, _______, _______, KC_END, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [_L2] = LAYOUT( /* LAYER 2 */
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_UNDS, KC_PLUS,
+ _______, _______, _______, _______, _______, KC_COMM, KC_SLSH, KC_RBRC, KC_LBRC, KC_BSLS, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
diff --git a/keyboards/tv44/keymaps/core/readme.md b/keyboards/thevankeyboards/minivan/keymaps/core/readme.md
index 3ec503b21..3ec503b21 100644
--- a/keyboards/tv44/keymaps/core/readme.md
+++ b/keyboards/thevankeyboards/minivan/keymaps/core/readme.md
diff --git a/keyboards/ergo42/keymaps/default-illustrator/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/core/rules.mk
index 457a3d01d..457a3d01d 100644
--- a/keyboards/ergo42/keymaps/default-illustrator/rules.mk
+++ b/keyboards/thevankeyboards/minivan/keymaps/core/rules.mk
diff --git a/keyboards/roadkit/keymaps/default/config.h b/keyboards/thevankeyboards/minivan/keymaps/default/config.h
index df06a2620..df06a2620 100644
--- a/keyboards/roadkit/keymaps/default/config.h
+++ b/keyboards/thevankeyboards/minivan/keymaps/default/config.h
diff --git a/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c
new file mode 100644
index 000000000..90b188b55
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/default/keymap.c
@@ -0,0 +1,99 @@
+#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 _QW 0
+#define _DV 1
+#define _CM 2
+#define _L1 3
+#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)
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+
+
+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,
+ MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2),
+ KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, KC_SPC, KC_RALT, KC_ESC, TG(_L3)
+ ),
+ [_DV] = LAYOUT( /* Dvorak */
+ KC_TAB, KC_SLSH, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
+ MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1),
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2),
+ KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, KC_SPC, KC_RALT, KC_ESC, TG(_L3)
+ ),
+ [_CM] = LAYOUT( /* Colemak */
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1),
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2),
+ KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, KC_SPC, KC_RALT, KC_ESC, TG(_L3)
+ ),
+ [_L1] = LAYOUT( /* LAYER 1 */
+ KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
+ _______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______,
+ _______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT,
+ _______, KC_LGUI, _______, _______, _______, _______, _______, _______
+ ),
+ [_L2] = LAYOUT( /* LAYER 2 */
+ _______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______,
+ KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, L_CURBR, R_CURBR, KC_4, KC_5, KC_6, KC_VOLU, KC_ENT,
+ _______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [_L3] = LAYOUT( /* LAYER 3 */
+ _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______,
+ KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______,
+ KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______,
+ _______, KC_LSFT, KC_B, KC_SPC, KC_C, _______, _______, _______
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case _DV:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_DV);
+ }
+ break;
+ case _QW:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_QW);
+ }
+ break;
+ case _CM:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_CM);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
diff --git a/keyboards/tv44/keymaps/default/readme.md b/keyboards/thevankeyboards/minivan/keymaps/default/readme.md
index ac84c08cf..ac84c08cf 100644
--- a/keyboards/tv44/keymaps/default/readme.md
+++ b/keyboards/thevankeyboards/minivan/keymaps/default/readme.md
diff --git a/keyboards/thevankeyboards/minivan/keymaps/default/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/default/rules.mk
new file mode 100644
index 000000000..3ff147725
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/default/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/minivan/keymaps/jeebak/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/jeebak/keymap.c
new file mode 100644
index 000000000..0ec9485c7
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/jeebak/keymap.c
@@ -0,0 +1,423 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _PLOVER 5
+#define _TOUCHCURSOR 6
+#define _MOUSECURSOR 7
+#define _ADJUST 16
+
+// Keycodes
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ PLOVER,
+ LOWER,
+ RAISE,
+ BACKLIT,
+ EXT_PLV
+};
+
+enum macro_keycodes {
+ KC_ALT_TAB,
+ KC_CMD_TAB,
+ KC_CTL_TAB,
+ KC_CMD_SLSH,
+ KC_AG_FIND,
+ KC_AG_AGAIN,
+ KC_AG_UNDO,
+ KC_AG_CUT,
+ KC_AG_COPY,
+ KC_AG_PASTE,
+ KC_AG_DESK_L,
+ KC_AG_DESK_R,
+ KC_AG_TAB_C,
+ KC_AG_TAB_N,
+ KC_AG_TAB_R,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Custom macros
+#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper
+#define GUI_SEM GUI_T(KC_SCLN) // Tap for Semicolon, hold for GUI
+#define ALT_QUO ALT_T(KC_QUOT) // Tap for Quote, hold for Alt
+// Requires KC_TRNS/_______ for the trigger key in the destination layer
+#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor
+#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor
+#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab
+#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab
+#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab
+#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
+#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
+#define AG_AGAIN M(KC_AG_AGAIN)
+#define AG_UNDO M(KC_AG_UNDO)
+#define AG_CUT M(KC_AG_CUT)
+#define AG_COPY M(KC_AG_COPY)
+#define AG_PASTE M(KC_AG_PASTE)
+#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and
+#define AG_D_R M(KC_AG_DESK_R) // Right
+#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close,
+#define AG_T_N M(KC_AG_TAB_N) // Tab New, and
+#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ *
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | / | Sft/Ent |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_QWERTY] = LAYOUT(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ CTL_ESC , KC_A, KC_S,LT_MC(KC_D), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Colemak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | Ctrl/Esc | A | R | MC/S | T | D | H | N | E | I | O | " |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift | Z | X | C | V | B | K | M | , | . | / | Sft/Ent |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_COLEMAK] = LAYOUT(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ CTL_ESC , KC_A, KC_R,LT_MC(KC_S), KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Dvorak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * |Hyper/Tab| " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | Ctrl/Esc | A | O | MC/E | U | I | D | H | T | N | S | / |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Sft/Ent |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_DVORAK] = LAYOUT(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ CTL_ESC , KC_A, KC_O,LT_MC(KC_E), KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Lower
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite | | | | | | Vol- | Mute |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_LOWER] = LAYOUT(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ KC_TILD,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ KC_LBRC , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_RBRC , KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ BACKLIT , _______ , _______ , _______ , _______ , _______ , KC_VOLD , KC_MUTE ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Raise
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Brite | | | | | | Vol- | Mute |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_RAISE] = LAYOUT(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ KC_DLR , KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_EQL , KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_DOT, KC_1, KC_2, KC_3, KC_SLSH, KC_BSLS ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ BACKLIT , _______ , _______ , _______ , _______ , _______ , KC_VOLD , KC_MUTE ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | AltTab |CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L| Desk_R |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | | | | | | | | |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ *
+ * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
+ * seem to work on Mac. Presumably they'll work under Windows.
+ */
+
+[_TOUCHCURSOR] = LAYOUT(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______ ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ _______ ,KC_LALT, KC_SPC, AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ _______ ,AG_UNDO, AG_CUT, AG_COPY,AG_PASTE, KC_GRV, KC_PGDN, KC_DEL, AG_T_N, AG_T_R,CMD_SLSH, _______ ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Mouse Layer
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | | | | | | | | |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+
+[_MOUSECURSOR] = LAYOUT(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ _______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______ ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ _______ ,KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5 ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ _______ ,_______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______ ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Plover layer (http://opensteno.org)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | # | # | # | # | # | # | # | # | # | # | # | # |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | | S | T | P | H | * | * | F | P | L | T | D |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | TogOut | S | K | W | R | * | * | R | B | G | S | Z |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | Exit | A | O | | | E | U | |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+
+[_PLOVER] = LAYOUT(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ KC_1 , KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ XXXXXXX , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ XXXXXXX , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ EXT_PLV , KC_C , KC_V , XXXXXXX , XXXXXXX , KC_N , KC_M , XXXXXXX ),
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+
+/* Adjust (Lower + Raise)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
+ * | | | | | | | | | | | | Del |
+ * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
+ * | | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
+ * |----------`------`------`------`------`------`------`------`------`------`------`------------|
+ * | | | | | | | | | | | | |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
+ * | | | | | | | | Reset |
+ * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
+ */
+[_ADJUST] = LAYOUT(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______ ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ _______ , _______ , _______ , _______ , _______ , _______ , _______ , RESET )
+/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ case PLOVER:
+ if (record->event.pressed) {
+ layer_off(_RAISE);
+ layer_off(_LOWER);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ if (!eeconfig_is_enabled()) {
+ eeconfig_init();
+ }
+ keymap_config.raw = eeconfig_read_keymap();
+ keymap_config.nkro = 1;
+ eeconfig_update_keymap(keymap_config.raw);
+ }
+ return false;
+ break;
+ case EXT_PLV:
+ if (record->event.pressed) {
+ layer_off(_PLOVER);
+ }
+ 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();
+ }
+
+ bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
+ // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
+ // quantum/quantum.c
+ if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) {
+ use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
+ }
+
+ switch (id) {
+ case KC_ALT_TAB:
+ if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); }
+ else { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); }
+ case KC_CMD_TAB:
+ if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); }
+ else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); }
+
+ case KC_CTL_TAB:
+ return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END ));
+ case KC_CMD_SLSH:
+ return (record->event.pressed ? MACRO( D(LGUI), D(SLSH),END ) : MACRO( U(SLSH),END ));
+
+ case KC_AG_FIND:
+ return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END );
+ case KC_AG_AGAIN:
+ return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END );
+ case KC_AG_UNDO:
+ return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END );
+ case KC_AG_CUT:
+ return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END );
+ case KC_AG_COPY:
+ return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END );
+ case KC_AG_PASTE:
+ return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END );
+
+ case KC_AG_DESK_L:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END );
+ case KC_AG_DESK_R:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END );
+
+ case KC_AG_TAB_C:
+ return use_cmd ? MACRODOWN( D(LGUI), T(W), END ) : MACRODOWN( D(LCTRL), T(W), END );
+ case KC_AG_TAB_N:
+ return use_cmd ? MACRODOWN( D(LGUI), T(T), END ) : MACRODOWN( D(LCTRL), T(T), END );
+ case KC_AG_TAB_R:
+ return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END );
+ }
+
+ return MACRO_NONE;
+}
diff --git a/keyboards/tv44/keymaps/jeebak/readme.md b/keyboards/thevankeyboards/minivan/keymaps/jeebak/readme.md
index f781d5555..f781d5555 100644
--- a/keyboards/tv44/keymaps/jeebak/readme.md
+++ b/keyboards/thevankeyboards/minivan/keymaps/jeebak/readme.md
diff --git a/keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk
new file mode 100644
index 000000000..3ff147725
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/jeebak/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/jetpacktuxedo/config.h b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/config.h
index 5f5872bec..5f5872bec 100644
--- a/keyboards/tv44/keymaps/jetpacktuxedo/config.h
+++ b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/config.h
diff --git a/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/keymap.c
new file mode 100644
index 000000000..02ba68421
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/keymap.c
@@ -0,0 +1,39 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_arrow_command( /* Qwerty */
+ KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ 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, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, MT(MOD_RSFT, KC_SLSH),
+ KC_LCTL, KC_LGUI, KC_LALT, MO(3), LT(1, KC_SPC), LT(1, KC_SPC), MO(4), KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+ [1] = LAYOUT_arrow_command( /* LAYER 2 */
+ 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_MINS, KC_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_QUOT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_PGUP, KC_BSLS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+ ),
+ [2] = LAYOUT_arrow_command( /* LAYER 1 */
+ 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_UNDS, KC_PLUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_DQUO, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_PGUP, KC_PIPE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
+ ),
+ [3] = LAYOUT_arrow_command( /* LAYER 3 */
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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
+ ),
+ [4] = LAYOUT_arrow_command( /* Gaming Layer*/
+ KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_U, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
+ KC_TAB, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPACE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+};
diff --git a/keyboards/tv44/keymaps/jetpacktuxedo/readme.md b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/readme.md
index fd95b56ab..fd95b56ab 100644
--- a/keyboards/tv44/keymaps/jetpacktuxedo/readme.md
+++ b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/readme.md
diff --git a/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/rules.mk
new file mode 100644
index 000000000..d7ca73ac5
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/jetpacktuxedo/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/thevankeyboards/minivan/keymaps/lexworth/config.h b/keyboards/thevankeyboards/minivan/keymaps/lexworth/config.h
new file mode 100644
index 000000000..36062c47b
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/lexworth/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+// place overrides here
+#define BACKLIGHT_PIN B7
+#define BACKLIGHT_LEVELS 5 \ No newline at end of file
diff --git a/keyboards/thevankeyboards/minivan/keymaps/lexworth/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/lexworth/keymap.c
new file mode 100644
index 000000000..1824f3cf3
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/lexworth/keymap.c
@@ -0,0 +1,29 @@
+#include QMK_KEYBOARD_H
+
+// Helpful defines
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT
+ (KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ LT(1,KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LT(1,KC_QUOT),
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_ENT, KC_SPC, TG(2), LT(3,KC_APP), KC_DEL),
+
+ [1] = LAYOUT
+ (KC_CAPS, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, KC_UNDS, KC_P7, KC_P8, KC_P9, KC_EQL, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, KC_PMNS, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_TRNS,
+ KC_MUTE, KC_VOLD, KC_VOLU, KC_MPLY, KC_MPRV, KC_MNXT, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_NLCK,
+ KC_TRNS, KC_TRNS, KC_MSTP, KC_PENT, KC_P0, KC_PDOT, KC_APP, KC_TRNS),
+
+ [2] = LAYOUT
+ (KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
+ KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TILD, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_F11, KC_F12),
+
+ [3] = LAYOUT
+ (KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, 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_PIPE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LPRN, KC_RPRN, KC_TRNS,
+ BL_TOGG, BL_DEC, BL_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET)
+};
diff --git a/keyboards/thevankeyboards/minivan/keymaps/lexworth/readme.md b/keyboards/thevankeyboards/minivan/keymaps/lexworth/readme.md
new file mode 100644
index 000000000..5ac3aafdc
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/lexworth/readme.md
@@ -0,0 +1,7 @@
+# Minivan
+
+![Layout Image](https://drive.google.com/file/d/1rDbtoOBvw5lxfvUBLYmjTt6MJPoeXngr/view?usp=sharing)
+
+# Custom keymap for the minivan with backlight enabled and 5 backlight levels.
+# Hardware Supported: Minivan
+# Hardware Availability: [thevankeyboards.com](https://thevankeyboards.com/) \ No newline at end of file
diff --git a/keyboards/thevankeyboards/minivan/keymaps/lexworth/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/lexworth/rules.mk
new file mode 100644
index 000000000..9c7dc2e12
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/lexworth/rules.mk
@@ -0,0 +1,5 @@
+# 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
+
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
diff --git a/keyboards/tv44/keymaps/mjt/config.h b/keyboards/thevankeyboards/minivan/keymaps/mjt/config.h
index e89a3ea12..e89a3ea12 100644
--- a/keyboards/tv44/keymaps/mjt/config.h
+++ b/keyboards/thevankeyboards/minivan/keymaps/mjt/config.h
diff --git a/keyboards/thevankeyboards/minivan/keymaps/mjt/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/mjt/keymap.c
new file mode 100644
index 000000000..8f0fba11d
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/mjt/keymap.c
@@ -0,0 +1,197 @@
+//Author: mike terhar
+#include QMK_KEYBOARD_H
+
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+enum minivan_layers {
+ _QWERTY,
+ _NUMSYM,
+ _FKEYS,
+ _FKEYGRV,
+ _PLOVER,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ DYNKEY,
+ DYNAMIC_MACRO_RANGE,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define FKEYS F(_FKEYS)
+#define NUMSYM F(_NUMSYM)
+#define FKEYGRV F(_FKEYGRV)
+#define MACSLEEP M(5)
+#define PLOVER M(6)
+#define LAYERRESET M(7)
+#define BACKLIT M(8)
+#define ADJUST M(9)
+#define XXXXXXX KC_NO
+
+#include "dynamic_macro.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[_QWERTY] = {
+ {FKEYS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
+ {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT},
+ {KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT,KC_SLSH,SFT_T(KC_ENT) },
+ {KC_LCTL,KC_LALT,KC_LGUI, KC_SPC,XXXXXXX,XXXXXXX,XXXXXXX,NUMSYM,KC_LEFT,KC_DOWN,KC_UP ,KC_RIGHT}
+},
+[_NUMSYM] = {
+ {FKEYGRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______},
+ {KC_DEL,KC_EXLM, KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN, ADJUST },
+ { _______, KC_UNDS,KC_PLUS, KC_LCBR,KC_RCBR,KC_PIPE , KC_MINS,KC_EQL,KC_LBRC, KC_RBRC, KC_BSLS, _______},
+ {_______,_______,_______,_______,XXXXXXX,XXXXXXX,XXXXXXX,_______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
+},
+[_FKEYS] ={
+ {_______, 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, _______, _______, _______, MACSLEEP, DYN_REC_START1, DYN_REC_START2 },
+ {KC_CAPS, _______, _______, _______, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2,_______,DYN_REC_STOP},
+ {_______,_______,_______,LAYERRESET,XXXXXXX,XXXXXXX,XXXXXXX,LAYERRESET, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
+},
+[_PLOVER] = {
+ {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
+ {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
+ {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
+ {LAYERRESET, XXXXXXX, KC_C, KC_V, XXXXXXX , XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
+},
+[_ADJUST] = {
+ {_______ , RESET, _______, _______, _______, _______, _______, _______, KC_SLCK, KC_PAUS, KC_PSCR, KC_DEL },
+ {_______ , _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, _______, MACSLEEP, PLOVER, _______},
+ {_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {BACKLIT, _______, _______, LAYERRESET, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______}
+}
+};
+
+#ifdef AUDIO_ENABLE
+
+float tone_startup[][2] = SONG(STARTUP_SOUND);
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dyn_macro_rec[][2] = SONG(DVORAK_SOUND);
+float tone_dyn_macro_play[][2] = SONG(COLEMAK_SOUND);
+float tone_plover[][2] = SONG(PLOVER_SOUND);
+float tone_adjust[][2] = SONG(PLOVER_GOODBYE_SOUND);
+float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
+
+float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
+#endif
+
+void persistant_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+const uint16_t PROGMEM fn_actions[] = {
+ [_FKEYS] = ACTION_LAYER_TAP_KEY(_FKEYS, KC_TAB),
+ [_FKEYGRV] = ACTION_LAYER_TAP_KEY(_FKEYS, KC_GRV),
+ [_NUMSYM] = ACTION_LAYER_TAP_TOGGLE(_NUMSYM),
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch(id) {
+ case 5: // MACSLEEP
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ register_code(KC_RCTL);
+ register_code(KC_POWER);
+ unregister_code(KC_POWER);
+ unregister_code(KC_RCTL);
+ unregister_code(KC_RSFT);
+ }
+ break;
+ case 6: // PLOVER
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_NOTE_ARRAY(tone_plover, false, 0);
+ #endif
+ layer_off(_NUMSYM);
+ layer_off(_FKEYS);
+ layer_off(_ADJUST);
+ layer_on(_PLOVER);
+ }
+ break;
+ case 7: // LAYERRESET
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
+ #endif
+ layer_off(_NUMSYM);
+ layer_off(_FKEYS);
+ layer_off(_PLOVER);
+ layer_off(_ADJUST);
+ }
+ break;
+ case 8: // BACKLIT
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ case 9: // ADJUST
+ if(record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ stop_all_notes();
+ PLAY_NOTE_ARRAY(tone_adjust, false, 0);
+ #endif
+ layer_off(_NUMSYM);
+ layer_off(_FKEYS);
+ layer_off(_PLOVER);
+ layer_on(_ADJUST);
+ }
+ }
+ return MACRO_NONE;
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t macro_kc = keycode;
+ if (keycode == FKEYS || keycode == ADJUST || keycode == FKEYGRV ){
+ macro_kc = DYN_REC_STOP;
+ }
+ if (!process_record_dynamic_macro(macro_kc, record)) {
+ return false;
+ }
+
+ return true;
+}
+
+void matrix_init_user(void) {
+ #ifdef AUDIO_ENABLE
+ startup_user();
+ #endif
+}
+
+#ifdef AUDIO_ENABLE
+
+void startup_user()
+{
+ _delay_ms(20); // gets rid of tick
+ PLAY_NOTE_ARRAY(tone_startup, false, 0);
+}
+
+void shutdown_user()
+{
+ PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
+ _delay_ms(150);
+ stop_all_notes();
+}
+
+void music_on_user(void)
+{
+ music_scale_user();
+}
+
+void music_scale_user(void)
+{
+ PLAY_NOTE_ARRAY(music_scale, false, 0);
+}
+#endif
diff --git a/keyboards/tv44/keymaps/mjt/readme.md b/keyboards/thevankeyboards/minivan/keymaps/mjt/readme.md
index c86985f6c..c86985f6c 100644
--- a/keyboards/tv44/keymaps/mjt/readme.md
+++ b/keyboards/thevankeyboards/minivan/keymaps/mjt/readme.md
diff --git a/keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk
new file mode 100644
index 000000000..b2c421c4d
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/mjt/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/thevankeyboards/minivan/keymaps/smt/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/smt/keymap.c
new file mode 100644
index 000000000..ee117e47b
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/smt/keymap.c
@@ -0,0 +1,230 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+// Keycodes
+enum planck_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ BACKLIT
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Custom macros
+#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
+#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
+#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift)
+#define ALT_GRV ALT_T(KC_GRV) // Tap for Backtick, hold for Alt (Ctrl+Alt+Shift)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Qwerty
+ *
+ * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
+ * |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`---------|
+ * | Ctrl/Esc | A | S | D | F | G | H | J | K | L | ; | ' |
+ * |----------`------`------`------`------`------`------`------`------`------`------`--------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent|
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
+ * | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
+ * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
+ */
+[_QWERTY] = LAYOUT_arrow(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ CTL_ESC , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ ALT_GRV , KC_LGUI , LOWER , KC_SPC , KC_SPC , RAISE , KC_RGUI, KC_RALT, KC_RCTL ),
+/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
+
+/* Colemak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
+ * |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`---------|
+ * | Ctrl/Esc | A | R | S | T | D | H | N | E | I | O | ' |
+ * |----------`------`------`------`------`------`------`------`------`------`------`--------|
+ * | Shift | Z | X | C | V | B | K | M | , | . | / |Sft/Ent|
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
+ * | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
+ * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
+ */
+[_COLEMAK] = LAYOUT_arrow(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ CTL_ESC , KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ ALT_GRV , KC_LGUI , LOWER , KC_SPC , KC_SPC , RAISE , KC_RGUI, KC_RALT, KC_RCTL ),
+/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
+
+/* Dvorak
+ * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
+ * |Hyper/Tab| ' | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |---------`------`------`------`------`------`------`------`------`------`------`---------|
+ * | Ctrl/Esc | A | O | E | U | I | D | H | T | N | S | - |
+ * |----------`------`------`------`------`------`------`------`------`------`------`--------|
+ * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Sft/Ent|
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
+ * | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
+ * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
+ */
+[_DVORAK] = LAYOUT_arrow(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ CTL_ESC , KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ KC_LSFT , KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ ALT_GRV , KC_LGUI , LOWER , KC_SPC , KC_SPC , RAISE , KC_RGUI, KC_RALT, KC_RCTL ),
+/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
+
+/* Lower
+ * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
+ * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
+ * |---------`------`------`------`------`------`------`------`------`------`------`---------|
+ * | $ | 4 | 5 | 6 | . | + | * | 4 | 5 | 6 | . | PageUp |
+ * |----------`------`------`------`------`------`------`------`------`------`------`--------|
+ * | = | 7 | 8 | 9 | 0 | - | / | 1 | 2 | 3 | Up |PageDn |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
+ * | Brite | | | Home | End | | Left | Down | Right |
+ * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
+ */
+[_LOWER] = LAYOUT_arrow(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ALL_T(KC_0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+CTL_T(KC_DLR), KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_ASTR, KC_4, KC_5, KC_6, KC_DOT, KC_PGUP ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+SFT_T(KC_EQL), KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_SLSH, KC_1, KC_2, KC_3, KC_UP, SFT_T(KC_PGDN),
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ALT_T(BACKLIT), _______ , _______ , KC_HOME , KC_END , _______ , KC_LEFT, KC_DOWN, KC_RGHT ),
+/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
+
+/* Raise
+ * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
+ * |---------`------`------`------`------`------`------`------`------`------`------`---------|
+ * | F1 | F2 | F3 | F4 | F5 | F6 | _ | ? | + | { | } | |
+ * |----------`------`------`------`------`------`------`------`------`------`------`--------|
+ * | F7 | F8 | F9 | F10 | F11 | F12 | - | / | = | [ | ] | |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
+ * | Brite | | | Play | Next | | Mute | Vol- | Vol+ |
+ * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
+ */
+[_RAISE] = LAYOUT_arrow(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ALL_T(KC_TILD),KC_EXLM,KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+CTL_T(KC_F1), KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ SFT_T(KC_F7), KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, SFT_T(KC_BSLS),
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ALT_T(BACKLIT), _______ , _______ , KC_MPLY , KC_MNXT , _______ , KC_MUTE, KC_VOLD, KC_VOLU ),
+/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
+
+/* Adjust (Lower + Raise)
+ * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
+ * | | Reset| | | | | | | | | | Reset |
+ * |---------`------`------`------`------`------`------`------`------`------`------`---------|
+ * | | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |----------`------`------`------`------`------`------`------`------`------`------`--------|
+ * | | | | | | | | | | | | |
+ * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
+ * | | | | | | | | | |
+ * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
+ */
+[_ADJUST] = LAYOUT_arrow(
+/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
+ _______, RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET ,
+/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
+ _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______ ,
+/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
+ _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
+/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
+ _______ , _______ , _______ , _______ , _______ , _______ , _______, _______, _______ ),
+/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/tv44/keymaps/smt/readme.md b/keyboards/thevankeyboards/minivan/keymaps/smt/readme.md
index 059fd1bbd..059fd1bbd 100644
--- a/keyboards/tv44/keymaps/smt/readme.md
+++ b/keyboards/thevankeyboards/minivan/keymaps/smt/readme.md
diff --git a/keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk
new file mode 100644
index 000000000..3ff147725
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/smt/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/config.h b/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/config.h
new file mode 100644
index 000000000..26d5e207e
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/config.h
@@ -0,0 +1,53 @@
+#ifndef CONFIG_USER_H
+#define CONFIG_USER_H
+
+#include QMK_KEYBOARD_CONFIG_H
+
+#define SPACE_COUNT 2
+
+#define TEMPLATE( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
+) LAYOUT_arrow( \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K0D, \
+ K41, K49, K42, K44, K45, K3C, K0B, K00, K3D \
+)
+
+#define TEMPLATE_ALT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
+) LAYOUT_arrow( \
+ K00, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
+ K41, K49, K42, K44, K45, K48, K49, K4B, K4C \
+)
+
+#define TEMPLATE_ADJUST( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K44, K45, K46, K48, K49, K4B, K4C \
+) LAYOUT_arrow( \
+ K00, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K2D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
+ K40, K41, K42, K44, K45, K48, K0B, K0C, K4C \
+)
+
+#define TEMPLATE_RESET LAYOUT_arrow( \
+ RESET, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET, \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, \
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, RESET)
+
+#endif
diff --git a/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/keymap.c
new file mode 100644
index 000000000..7812add81
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/keymap.c
@@ -0,0 +1 @@
+// This space intentionally left blank
diff --git a/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/rules.mk
new file mode 100644
index 000000000..a4e40d0ba
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/talljoe-minivan/rules.mk
@@ -0,0 +1,3 @@
+USER_NAME := talljoe
+
+COMMAND_ENABLE = no # Commands for debug and configuration
diff --git a/keyboards/tv44/keymaps/tong92/config.h b/keyboards/thevankeyboards/minivan/keymaps/tong92/config.h
index be959a823..be959a823 100644
--- a/keyboards/tv44/keymaps/tong92/config.h
+++ b/keyboards/thevankeyboards/minivan/keymaps/tong92/config.h
diff --git a/keyboards/thevankeyboards/minivan/keymaps/tong92/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/tong92/keymap.c
new file mode 100644
index 000000000..220cc8c61
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/tong92/keymap.c
@@ -0,0 +1,203 @@
+//Author: tong92 <tong92power@gmail.com>
+#include QMK_KEYBOARD_H
+
+#ifdef BACKLIGHT_ENABLE
+ #include "backlight.h"
+#endif
+
+extern keymap_config_t keymap_config;
+
+enum tv44_layers {
+ _WINDOW,
+ _MAC,
+ _LOWER,
+ _RAISE,
+ _WINDOW_SHORTCUT,
+ _MAC_SHORTCUT,
+ _MOUSE
+};
+
+enum tv44_keycodes {
+ WINDOW = SAFE_RANGE,
+ MAC,
+ MOUSE,
+ BACKLIT,
+ EXT_MOUSE
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define LOWER F(_LOWER)
+#define RAISE F(_RAISE)
+#define XXXXXXX KC_NO
+#define WINDOW_SHORTCUT MO(_WINDOW_SHORTCUT)
+#define MAC_SHORTCUT MO(_MAC_SHORTCUT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* Window - Qwerty
+ * ,--------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+ * | Ctrl | A | S | D | F | G | H | J | K | L | ; | Enter|
+ * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Shift|
+ * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+ * | Ft | GUI | Alt | Space/LOWER | Space/RAISE | ' | [ | ] | Alt |
+ * `--------------------------------------------------------------------------'
+ */
+[_WINDOW] = LAYOUT_arrow(
+KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT,
+KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,
+WINDOW_SHORTCUT, KC_LGUI,KC_LALT, LOWER, RAISE, KC_QUOT,KC_LBRC,KC_RBRC,KC_RALT
+),
+/* Mac - Qwerty
+ * ,--------------------------------------------------------------------------.
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
+ * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+ * | Cmd | A | S | D | F | G | H | J | K | L | ; | Enter|
+ * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+ * | Shift | Z | X | C | V | B | N | M | , | . | / |Shift|
+ * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+ * | Ft | Alt | Ctrl | Space/LOWER | Space/RAISE | ' | [ | ] | Alt |
+ * `--------------------------------------------------------------------------'
+ */
+[_MAC] = LAYOUT_arrow(
+KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+KC_LGUI,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT,
+KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,
+MAC_SHORTCUT, KC_LALT, KC_LCTRL, LOWER, RAISE, KC_QUOT,KC_LBRC,KC_RBRC,KC_RALT
+),
+/* LOWER
+ * ,--------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
+ * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | \ |
+ * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo|
+ * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+ * | | | | | | END | LEFT| Down|RIGHT|
+ * `--------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_arrow(
+KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS,KC_PLUS,KC_LBRC,KC_RBRC,KC_BSLS,
+_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN,
+XXXXXXX,_______,_______, _______,XXXXXXX, KC_END, KC_LEFT,KC_DOWN,KC_RIGHT
+),
+/* RAISE
+ * ,--------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
+ * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+ * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | | |
+ * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo|
+ * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+ * | | | | | | END | LEFT| Down|RIGHT|
+ * `--------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_arrow(
+KC_TILD,KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,_______,
+_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS,KC_EQL, KC_LCBR,KC_RCBR,KC_PIPE,
+_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN,
+XXXXXXX,_______,_______, _______,_______, KC_END, KC_LEFT,KC_DOWN,KC_RIGHT
+),
+/* Window Shortcut
+ * ,--------------------------------------------------------------------------.
+ * | ESC |WinOf|WinUp| | |Sh+Ca| | PgUp| UP | PgDo|PrtSc| DELET |
+ * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+ * | |WinLe|WinDo|WinRi| |Al+Ca|CapsL| LEFT| DOWN|RIGHT| | |
+ * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+ * | |WinLW|WinRW| | |Ct+Ca|ScroL| HOME| | END | | Ctrl|
+ * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+ * | | DeskL | DeskR| Task Manager| DeskX | MOUSE| | | LED |
+ * `--------------------------------------------------------------------------'
+ */
+[_WINDOW_SHORTCUT] = LAYOUT_arrow(
+KC_ESC ,LALT(KC_F4) ,LGUI(KC_UP) ,XXXXXXX ,XXXXXXX,S(KC_CAPS) ,XXXXXXX ,KC_PGUP,KC_UP ,KC_PGDN ,KC_PSCR,KC_DELT,
+_______,LGUI(KC_LEFT) ,LGUI(KC_DOWN) ,LGUI(KC_RIGHT),XXXXXXX,LALT(KC_CAPS) ,KC_CAPS ,KC_LEFT,KC_DOWN,KC_RIGHT,XXXXXXX,XXXXXXX,
+_______,LGUI(LSFT(KC_LEFT)),LGUI(LSFT(KC_RIGHT)),XXXXXXX ,XXXXXXX,LCTL(KC_CAPS) ,KC_SLCK ,KC_HOME,XXXXXXX,KC_END ,XXXXXXX,KC_RCTL,
+_______,LGUI(LCTL(KC_LEFT)),LGUI(LCTL(KC_RIGHT)), LCTL(LALT(KC_DELT)),LGUI(LCTL(KC_F4)), MOUSE ,XXXXXXX ,XXXXXXX,BACKLIT
+),
+/* Mac Shortcut
+ * ,--------------------------------------------------------------------------.
+ * | ESC |CmdUp|CmdDo| | | | | PgUp| UP | PgDo|PrtSc| DELET |
+ * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+ * | |WBlkL|WBlkR| |ScrFu| |CapsL| LEFT| DOWN|RIGHT| | |
+ * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+ * | |BlckL|BlckR| | | | | HOME| | END | | Ctrl|
+ * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+ * | | | | | | MOUSE| | | LED |
+ * `--------------------------------------------------------------------------'
+ */
+[_MAC_SHORTCUT] = LAYOUT_arrow(
+KC_ESC ,LGUI(KC_UP) ,LGUI(KC_DOWN) ,XXXXXXX ,XXXXXXX,XXXXXXX ,XXXXXXX ,KC_PGUP,KC_UP ,KC_PGDN ,KC_PSCR,KC_DELT,
+_______,LALT(LSFT(KC_LEFT)) ,LALT(LSFT(KC_RIGHT)) ,XXXXXXX,LGUI(LCTL(KC_F)),XXXXXXX ,KC_CAPS ,KC_LEFT,KC_DOWN,KC_RIGHT,XXXXXXX,XXXXXXX,
+_______,LGUI(LSFT(KC_LEFT)),LGUI(LSFT(KC_RIGHT)),XXXXXXX ,XXXXXXX,XXXXXXX ,XXXXXXX ,KC_HOME,XXXXXXX,KC_END ,XXXXXXX,KC_RCTL,
+_______,_______,_______, _______,_______, MOUSE ,XXXXXXX ,XXXXXXX,BACKLIT
+),
+/* MOUSE
+ * ,--------------------------------------------------------------------------.
+ * | | | |Mo_Up| | | |M_WhL|M_WhU|M_WhR| | RESET |
+ * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
+ * | | |Mo_Le|Mo_Do|Mo_Ri| | |M_Bt1|M_WhD|M_Bt2| | |
+ * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
+ * | | | | | | | |M_AC0|M_AC1|M_AC2| |WINDO|
+ * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
+ * | | | | GO_DEFAULT | GO_DEFAULT | | | | MAC |
+ * `--------------------------------------------------------------------------'
+ */
+[_MOUSE] = LAYOUT_arrow(
+XXXXXXX,XXXXXXX,XXXXXXX,KC_MS_U,XXXXXXX,XXXXXXX,XXXXXXX,KC_WH_L,KC_WH_U,KC_WH_R,XXXXXXX,RESET,
+XXXXXXX,XXXXXXX,KC_MS_L,KC_MS_D,KC_MS_R,XXXXXXX,XXXXXXX,KC_BTN1,KC_WH_D,KC_BTN2,XXXXXXX,XXXXXXX,
+XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,KC_ACL0,KC_ACL1,KC_ACL2,XXXXXXX,WINDOW,
+XXXXXXX,XXXXXXX,XXXXXXX, EXT_MOUSE,EXT_MOUSE, XXXXXXX,XXXXXXX,XXXXXXX,MAC
+)
+};
+
+const uint16_t PROGMEM fn_actions[] = {
+ [_LOWER] = ACTION_LAYER_TAP_KEY(_LOWER, KC_SPC),
+ [_RAISE] = ACTION_LAYER_TAP_KEY(_RAISE, KC_SPC)
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch(keycode) {
+ case WINDOW:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_WINDOW);
+ }
+ return false;
+ break;
+ case MAC:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_MAC);
+ }
+ return false;
+ break;
+ case BACKLIT:
+ if (record->event.pressed) {
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ }
+ return false;
+ break;
+ case MOUSE:
+ if (record->event.pressed) {
+ layer_on(_MOUSE);
+ }
+ return false;
+ break;
+ case EXT_MOUSE:
+ if (record->event.pressed) {
+ layer_off(_MOUSE);
+ layer_off(_WINDOW_SHORTCUT);
+ layer_off(_MAC_SHORTCUT);
+ }
+ return false;
+ break;
+ }
+ return true;
+};
+
diff --git a/keyboards/tv44/keymaps/tong92/readme.md b/keyboards/thevankeyboards/minivan/keymaps/tong92/readme.md
index 820857256..820857256 100644
--- a/keyboards/tv44/keymaps/tong92/readme.md
+++ b/keyboards/thevankeyboards/minivan/keymaps/tong92/readme.md
diff --git a/keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk
new file mode 100644
index 000000000..1e006e947
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/tong92/rules.mk
@@ -0,0 +1,21 @@
+# 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 = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/flipphone/config.h b/keyboards/thevankeyboards/minivan/keymaps/xyverz/config.h
index df06a2620..df06a2620 100644
--- a/keyboards/roadkit/keymaps/flipphone/config.h
+++ b/keyboards/thevankeyboards/minivan/keymaps/xyverz/config.h
diff --git a/keyboards/thevankeyboards/minivan/keymaps/xyverz/keymap.c b/keyboards/thevankeyboards/minivan/keymaps/xyverz/keymap.c
new file mode 100644
index 000000000..ec0d27007
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/xyverz/keymap.c
@@ -0,0 +1,124 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+enum planck_layers {
+ _QWERTY,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum planck_keycodes {
+ DVORAK = SAFE_RANGE,
+ QWERTY,
+ COLEMAK,
+ LOWER,
+ RAISE,
+ ADJUST
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Aliases for some other things I want to try out
+#define RAI_ESC LT(_RAISE, KC_ESC)
+#define LOW_QUQ LT(_LOWER, KC_QUOT)
+#define LOW_MIN LT(_LOWER, KC_MINS) // Same as above, but for Dvorak layer
+#define GUIBSPC GUI_T(KC_BSPC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_DVORAK] = LAYOUT( /* 0: Dvorak */
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
+ RAI_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, LOW_MIN,
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
+ KC_LCTL, KC_LALT, LOWER, GUIBSPC, KC_SPC, RAISE, KC_LGUI, KC_ENT
+ ),
+
+ [_QWERTY] = LAYOUT( /* 1: 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,
+ RAI_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LOW_QUQ,
+ 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, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LGUI, KC_ENT
+ ),
+
+ [_COLEMAK] = LAYOUT( /* 2: Colemak */
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
+ RAI_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, LOW_QUQ,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LALT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LGUI, KC_ENT
+ ),
+
+ [_LOWER] = LAYOUT( /* 1: FN 1 */
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
+ _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
+ KC_LEFT, KC_RGHT, _______, KC_DEL, KC_INS, _______, KC_UP, KC_DOWN
+ ),
+
+ [_RAISE] = LAYOUT( /* 2: FN 2 */
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
+ _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______,
+ KC_LEFT, KC_RGHT, _______, KC_DEL, KC_INS, _______, KC_UP, KC_DOWN
+ ),
+
+ [_ADJUST] = LAYOUT(
+ KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
+ _______, RESET, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_HOME, KC_END, _______, _______, _______, _______, KC_PGUP, KC_PGDN
+ )
+};
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ persistent_default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/tv44/keymaps/xyverz/readme.md b/keyboards/thevankeyboards/minivan/keymaps/xyverz/readme.md
index ac84c08cf..ac84c08cf 100644
--- a/keyboards/tv44/keymaps/xyverz/readme.md
+++ b/keyboards/thevankeyboards/minivan/keymaps/xyverz/readme.md
diff --git a/keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk b/keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk
new file mode 100644
index 000000000..3ff147725
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/keymaps/xyverz/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/minivan/minivan.c b/keyboards/thevankeyboards/minivan/minivan.c
new file mode 100644
index 000000000..b260195ce
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/minivan.c
@@ -0,0 +1,28 @@
+#include "minivan.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/thevankeyboards/minivan/minivan.h b/keyboards/thevankeyboards/minivan/minivan.h
new file mode 100644
index 000000000..27a358365
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/minivan.h
@@ -0,0 +1,67 @@
+#ifndef MINIVAN_H
+#define MINIVAN_H
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+// There are a number of variations depending on the layout of your bottom row.
+// The arrow variant adds an additional key on the bottom-right, while the
+// command variant adds an additional key on the bottom-left. arrow-command is a
+// combination of both of those, having an additional key on both sides.
+//
+// Please note that the numbering of the macro arguments are based on the
+// numbers of the keys on the PCB.
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
+ K30, K31, K32, K33, K37, K38, K39, 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, KC_NO, KC_NO, KC_NO, K37, K38, K39, KC_NO, K3B } \
+}
+
+#define LAYOUT_arrow( \
+ 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, 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, KC_NO, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \
+}
+
+#define LAYOUT_command( \
+ 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 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
+ { K30, K31, K32, K33, K34, KC_NO, KC_NO, K37, K38, K39, KC_NO, K3B } \
+}
+
+#define LAYOUT_arrow_command( \
+ 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 \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
+ { K30, K31, K32, K33, K34, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \
+}
+
+#endif
diff --git a/keyboards/thevankeyboards/minivan/readme.md b/keyboards/thevankeyboards/minivan/readme.md
new file mode 100644
index 000000000..03a868a16
--- /dev/null
+++ b/keyboards/thevankeyboards/minivan/readme.md
@@ -0,0 +1,13 @@
+# Minivan (tv44)
+
+A compact 44% keyboard.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Minivan PCB
+Hardware Availability: https://thevankeyboards.com/collections/catalog/products/minivan-diy?variant=609138376718
+
+Make example for this keyboard (after setting up your build environment):
+
+ make thevankeyboards/minivan: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/tv44/rules.mk b/keyboards/thevankeyboards/minivan/rules.mk
index 786c9dc3e..786c9dc3e 100644
--- a/keyboards/tv44/rules.mk
+++ b/keyboards/thevankeyboards/minivan/rules.mk
diff --git a/keyboards/thevankeyboards/readme.md b/keyboards/thevankeyboards/readme.md
new file mode 100644
index 000000000..5dfd74e57
--- /dev/null
+++ b/keyboards/thevankeyboards/readme.md
@@ -0,0 +1,3 @@
+# TheVan Keyboards
+
+[TheVan Keyboards](https://thevankeyboards.com/) is based in the United States and is responsible for boards such as the minivan. \ No newline at end of file
diff --git a/keyboards/roadkit/config.h b/keyboards/thevankeyboards/roadkit/config.h
index 9596f7f3b..9596f7f3b 100644
--- a/keyboards/roadkit/config.h
+++ b/keyboards/thevankeyboards/roadkit/config.h
diff --git a/keyboards/roadkit/info.json b/keyboards/thevankeyboards/roadkit/info.json
index 839ac73fb..839ac73fb 100644
--- a/keyboards/roadkit/info.json
+++ b/keyboards/thevankeyboards/roadkit/info.json
diff --git a/keyboards/roadkit/keymaps/mjt/config.h b/keyboards/thevankeyboards/roadkit/keymaps/default/config.h
index df06a2620..df06a2620 100644
--- a/keyboards/roadkit/keymaps/mjt/config.h
+++ b/keyboards/thevankeyboards/roadkit/keymaps/default/config.h
diff --git a/keyboards/roadkit/keymaps/default/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c
index 4ec0f6cfd..4ec0f6cfd 100644
--- a/keyboards/roadkit/keymaps/default/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/default/keymap.c
diff --git a/keyboards/roadkit/keymaps/default/readme.md b/keyboards/thevankeyboards/roadkit/keymaps/default/readme.md
index 5984a71d1..5984a71d1 100644
--- a/keyboards/roadkit/keymaps/default/readme.md
+++ b/keyboards/thevankeyboards/roadkit/keymaps/default/readme.md
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk
new file mode 100644
index 000000000..3ff147725
--- /dev/null
+++ b/keyboards/thevankeyboards/roadkit/keymaps/default/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/singles/config.h b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/config.h
index df06a2620..df06a2620 100644
--- a/keyboards/roadkit/keymaps/singles/config.h
+++ b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/config.h
diff --git a/keyboards/roadkit/keymaps/flipphone/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/keymap.c
index fed9d0270..fed9d0270 100644
--- a/keyboards/roadkit/keymaps/flipphone/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/keymap.c
diff --git a/keyboards/roadkit/keymaps/flipphone/readme.md b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/readme.md
index ad630be19..ad630be19 100644
--- a/keyboards/roadkit/keymaps/flipphone/readme.md
+++ b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/readme.md
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk
new file mode 100644
index 000000000..3ff147725
--- /dev/null
+++ b/keyboards/thevankeyboards/roadkit/keymaps/flipphone/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/khord/config.h b/keyboards/thevankeyboards/roadkit/keymaps/khord/config.h
index da6ed7189..da6ed7189 100644
--- a/keyboards/roadkit/keymaps/khord/config.h
+++ b/keyboards/thevankeyboards/roadkit/keymaps/khord/config.h
diff --git a/keyboards/roadkit/keymaps/khord/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/khord/keymap.c
index 9111f4f89..9111f4f89 100644
--- a/keyboards/roadkit/keymaps/khord/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/khord/keymap.c
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/khord/rules.mk
new file mode 100644
index 000000000..ba4b4fec0
--- /dev/null
+++ b/keyboards/thevankeyboards/roadkit/keymaps/khord/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 = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = no # Enable Tap Dance functionality
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
diff --git a/keyboards/tv44/keymaps/default/config.h b/keyboards/thevankeyboards/roadkit/keymaps/mjt/config.h
index df06a2620..df06a2620 100644
--- a/keyboards/tv44/keymaps/default/config.h
+++ b/keyboards/thevankeyboards/roadkit/keymaps/mjt/config.h
diff --git a/keyboards/roadkit/keymaps/mjt/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/mjt/keymap.c
index a1af5b1f2..a1af5b1f2 100644
--- a/keyboards/roadkit/keymaps/mjt/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/mjt/keymap.c
diff --git a/keyboards/roadkit/keymaps/mjt/readme.md b/keyboards/thevankeyboards/roadkit/keymaps/mjt/readme.md
index 80c0e5240..80c0e5240 100644
--- a/keyboards/roadkit/keymaps/mjt/readme.md
+++ b/keyboards/thevankeyboards/roadkit/keymaps/mjt/readme.md
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk
new file mode 100644
index 000000000..3ff147725
--- /dev/null
+++ b/keyboards/thevankeyboards/roadkit/keymaps/mjt/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/xyverz/config.h b/keyboards/thevankeyboards/roadkit/keymaps/singles/config.h
index df06a2620..df06a2620 100644
--- a/keyboards/tv44/keymaps/xyverz/config.h
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singles/config.h
diff --git a/keyboards/roadkit/keymaps/singles/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/singles/keymap.c
index 4c246f513..4c246f513 100644
--- a/keyboards/roadkit/keymaps/singles/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singles/keymap.c
diff --git a/keyboards/roadkit/keymaps/singles/readme.md b/keyboards/thevankeyboards/roadkit/keymaps/singles/readme.md
index 48ea4a8b3..48ea4a8b3 100644
--- a/keyboards/roadkit/keymaps/singles/readme.md
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singles/readme.md
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk
new file mode 100644
index 000000000..3ff147725
--- /dev/null
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singles/rules.mk
@@ -0,0 +1,21 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/roadkit/keymaps/singlesBrent/config.h b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/config.h
index 57468e122..57468e122 100644
--- a/keyboards/roadkit/keymaps/singlesBrent/config.h
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/config.h
diff --git a/keyboards/roadkit/keymaps/singlesBrent/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/keymap.c
index b4da80e28..b4da80e28 100644
--- a/keyboards/roadkit/keymaps/singlesBrent/keymap.c
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/keymap.c
diff --git a/keyboards/roadkit/keymaps/singlesBrent/readme.md b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/readme.md
index 48ea4a8b3..48ea4a8b3 100644
--- a/keyboards/roadkit/keymaps/singlesBrent/readme.md
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/readme.md
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/rules.mk
new file mode 100644
index 000000000..030d27f2a
--- /dev/null
+++ b/keyboards/thevankeyboards/roadkit/keymaps/singlesBrent/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 = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = 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.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+TAP_DANCE_ENABLE = yes # Enable Tap Dance functionality
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif \ No newline at end of file
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/keymap.c b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/keymap.c
new file mode 100644
index 000000000..dfdded8e7
--- /dev/null
+++ b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/keymap.c
@@ -0,0 +1,10 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_4x4(
+ KC_TAB, KC_Q, KC_W, KC_E,
+ KC_ESC, KC_A, KC_S, KC_D,
+ KC_LSFT, KC_Z, KC_X, KC_C,
+ KC_F, KC_LALT, KC_LCTL, KC_SPC
+ ),
+};
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/readme.md b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/readme.md
new file mode 100644
index 000000000..7eeb07ede
--- /dev/null
+++ b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/readme.md
@@ -0,0 +1,35 @@
+![Keymap Diagram](https://i.imgur.com/hRjbhEn.png)
+
+# Gamepad Layout by @wavebeem
+
+The concept behind this layout is the left side of a computer keyboard,
+optimized with essential keys for playing FPS games. It was designed for TheVan
+RoadKit, but it should work for any 4x4 ortholinear keyboard.
+
+I play with my pinky on `Shift`, thumb on `Space`, and the rest of my fingers on
+`W A S D`. I use my thumb for `Control`, `X`, and sometimes `C`. I usually use
+`Z` with my ring finger. It also helps to angle my fingers more perpendicular to
+the board in order to allow my thumb to more easily access the `Z X C` row.
+
+The number keys `1 2 3` are missing for weapon switching, but you can usually
+switch with the mouse wheel or rebind those to `Z X C` or something else.
+
+The key `R` for reloading is missing, but I prefer to use my extra mouse buttons
+for that.
+
+I don't really use `Alt` for games, but I kept it around for `Alt-Tab` in
+Windows.
+
+# Keymap Text Diagram
+
+```
++-------+-------+-------+-------+
+| Tab | Q | W | E |
++-------+-------+-------+-------+
+| Esc | A | S | D |
++-------+-------+-------+-------+
+| Shift | Z | X | C |
++-------+-------+-------+-------+
+| F | Alt | Ctrl | Space |
++-------+-------+-------+-------+
+```
diff --git a/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk
new file mode 100644
index 000000000..d8284e6bd
--- /dev/null
+++ b/keyboards/thevankeyboards/roadkit/keymaps/wavebeem-gamepad/rules.mk
@@ -0,0 +1,17 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/thevankeyboards/roadkit/readme.md b/keyboards/thevankeyboards/roadkit/readme.md
new file mode 100644
index 000000000..e4af2dcc0
--- /dev/null
+++ b/keyboards/thevankeyboards/roadkit/readme.md
@@ -0,0 +1,13 @@
+# Roadkit
+
+A programmable macro pad.
+
+Keyboard Maintainer: QMK Community
+Hardware Supported: Roadkit PCB
+Hardware Availability: https://thevankeyboards.com/collections/catalog/products/road-kit-diy?variant=603645345806
+
+Make example for this keyboard (after setting up your build environment):
+
+ make thevankeyboards/roadkit: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/roadkit/roadkit.c b/keyboards/thevankeyboards/roadkit/roadkit.c
index 26e0c51ec..26e0c51ec 100644
--- a/keyboards/roadkit/roadkit.c
+++ b/keyboards/thevankeyboards/roadkit/roadkit.c
diff --git a/keyboards/roadkit/roadkit.h b/keyboards/thevankeyboards/roadkit/roadkit.h
index 62cfabc5e..62cfabc5e 100644
--- a/keyboards/roadkit/roadkit.h
+++ b/keyboards/thevankeyboards/roadkit/roadkit.h
diff --git a/keyboards/roadkit/rules.mk b/keyboards/thevankeyboards/roadkit/rules.mk
index d15a5541b..d15a5541b 100644
--- a/keyboards/roadkit/rules.mk
+++ b/keyboards/thevankeyboards/roadkit/rules.mk
diff --git a/keyboards/tiger_lily/keymaps/default/config.h b/keyboards/tiger_lily/keymaps/default/config.h
deleted file mode 100644
index 8893d122e..000000000
--- a/keyboards/tiger_lily/keymaps/default/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-// place overrides here
-
-#endif
diff --git a/keyboards/tiger_lily/keymaps/default/rules.mk b/keyboards/tiger_lily/keymaps/default/rules.mk
deleted file mode 100644
index 9d3df5964..000000000
--- a/keyboards/tiger_lily/keymaps/default/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tiger_lily/keymaps/default_ansi/config.h b/keyboards/tiger_lily/keymaps/default_ansi/config.h
deleted file mode 100644
index 8893d122e..000000000
--- a/keyboards/tiger_lily/keymaps/default_ansi/config.h
+++ /dev/null
@@ -1,8 +0,0 @@
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-// place overrides here
-
-#endif
diff --git a/keyboards/tiger_lily/keymaps/default_ansi/rules.mk b/keyboards/tiger_lily/keymaps/default_ansi/rules.mk
deleted file mode 100644
index 9d3df5964..000000000
--- a/keyboards/tiger_lily/keymaps/default_ansi/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tiger_lily/matrix.c b/keyboards/tiger_lily/matrix.c
deleted file mode 100644
index d3a0d7ebd..000000000
--- a/keyboards/tiger_lily/matrix.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- Copyright 2017 Gabriel Young <gabeplaysdrums@live.com>
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-static uint8_t debouncing = DEBOUNCING_DELAY;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-static matrix_row_t scan_col(void) {
- return (
- (PINC&(1<<2) ? 0 : ((matrix_row_t)1<<0)) | \
- (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<1)) | \
- (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<2)) | \
- (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<3)) | \
- (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<4)) | \
- (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<5)) | \
- (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<6)) | \
- (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<7))
- );
-}
-
-static void select_col(uint8_t col) {
- switch (col) {
- case 0: PORTD = (PORTD & ~0b01110111) | 0b01110110; break; \
- case 1: PORTD = (PORTD & ~0b01110111) | 0b01100001; break; \
- case 2: PORTD = (PORTD & ~0b01110111) | 0b01100101; break; \
- case 3: PORTD = (PORTD & ~0b01110111) | 0b00000011; break; \
- case 4: PORTD = (PORTD & ~0b01110111) | 0b00000111; break; \
- case 5: PORTD = (PORTD & ~0b01110111) | 0b00010011; break; \
- case 6: PORTD = (PORTD & ~0b01110111) | 0b00010111; break; \
- case 7: PORTD = (PORTD & ~0b01110111) | 0b00100011; break; \
- case 8: PORTD = (PORTD & ~0b01110111) | 0b00100111; break; \
- case 9: PORTD = (PORTD & ~0b01110111) | 0b00110011; break; \
- case 10: PORTD = (PORTD & ~0b01110111) | 0b01110010; break; \
- case 11: PORTD = (PORTD & ~0b01110111) | 0b01100110; break; \
- case 12: PORTD = (PORTD & ~0b01110111) | 0b01110000; break; \
- case 13: PORTD = (PORTD & ~0b01110111) | 0b01100100; break; \
- case 14: PORTD = (PORTD & ~0b01110111) | 0b01100000; break; \
- case 15: PORTD = (PORTD & ~0b01110111) | 0b01000111; break; \
- case 16: PORTD = (PORTD & ~0b01110111) | 0b01000011; break; \
- case 17: PORTD = (PORTD & ~0b01110111) | 0b00110111; break;
- }
-}
-
-void matrix_init(void) {
- /* Column output pins */ \
- DDRD |= 0b01110111; \
- /* Row input pins */ \
- DDRC &= ~0b10000100; \
- DDRB &= ~0b01111110; \
- PORTC |= 0b10000100; \
- PORTB |= 0b01111110;
-
- for (uint8_t i=0; i < MATRIX_ROWS; i++)
- matrix[i] = matrix_debouncing[i] = 0;
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t col = 0; col < MATRIX_COLS; col++) {
- select_col(col);
- _delay_us(3);
- matrix_row_t col_scan = scan_col();
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
- bool curr_bit = col_scan & (1<<row);
- if (prev_bit != curr_bit) {
- matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
- debouncing = DEBOUNCING_DELAY;
- }
- }
- }
-
- if (debouncing) {
- if (--debouncing)
- _delay_ms(1);
- else
- for (uint8_t i = 0; i < MATRIX_ROWS; i++)
- matrix[i] = matrix_debouncing[i];
- }
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
- #ifndef NO_PRINT
- print("\nr\\c ABCDEFGHIJKLMNOPQR\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_row_t matrix_row = matrix_get_row(row);
- xprintf("%02X: ", row);
- for (uint8_t col = 0; col < MATRIX_COLS; col++) {
- bool curr_bit = matrix_row & (1<<col);
- xprintf("%c", curr_bit ? '*' : '.');
- }
- print("\n");
- }
- #endif
-}
-
-uint8_t matrix_key_count(void) {
- uint8_t count = 0;
- for (uint8_t row = 0; row < MATRIX_ROWS; row++)
- count += bitpop32(matrix[row]);
- return count;
-} \ No newline at end of file
diff --git a/keyboards/tiger_lily/readme.md b/keyboards/tiger_lily/readme.md
deleted file mode 100644
index 37073def5..000000000
--- a/keyboards/tiger_lily/readme.md
+++ /dev/null
@@ -1,16 +0,0 @@
-tiger_lily
-==========
-
-This is the firmware for Rev. 20161114 of the Tiger Lily controller by [Bathroom Epiphanies](http://bathroomepiphanies.com/controllers/), a replacement controller for the [Filco Majestouch 2 104 key](https://mechanicalkeyboards.com/shop/index.php?l=product_detail&p=1819). Bathroom Epiphanies has advised that the source is also compatible with the Black Petal controller, however I do not own an example to test against.
-
-The code was adapted from the [BathroomEpiphanies TMK Firmware](https://github.com/BathroomEpiphanies/epiphanies_tmk_keyboard/tree/master/be_controllers).
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: Tiger Lily
-Hardware Availability: https://geekhack.org/index.php?topic=46700.0
-
-Make example for this keyboard (after setting up your build environment):
-
- make tiger_lily:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/tkc1800/keymaps/default/keymap.c b/keyboards/tkc1800/keymaps/default/keymap.c
index 3a11aed2f..cc19de3bd 100644
--- a/keyboards/tkc1800/keymaps/default/keymap.c
+++ b/keyboards/tkc1800/keymaps/default/keymap.c
@@ -34,6 +34,8 @@ enum {
FUNCTION,
};
+bool screenWorks = 0;
+
//13 characters max without re-writing the "Layer: " format in iota_gfx_task_user()
static char layer_lookup[][14] = {"Base","Function"};
@@ -93,7 +95,9 @@ void matrix_init_user(void) {
// calls code for the SSD1306 OLED
_delay_ms(400);
TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
- iota_gfx_init(); // turns on the display
+ if(iota_gfx_init()){ // turns on the display
+ screenWorks = 1;
+ }
#endif
#endif
#ifdef AUDIO_ENABLE
@@ -103,7 +107,9 @@ void matrix_init_user(void) {
void matrix_scan_user(void) {
#ifdef SSD1306OLED
- iota_gfx_task(); // this is what updates the display continuously
+ if(screenWorks){
+ iota_gfx_task(); // this is what updates the display continuously
+ };
#endif
}
diff --git a/keyboards/tkc1800/keymaps/smt/keymap.c b/keyboards/tkc1800/keymaps/smt/keymap.c
index ffaaef297..6683416e3 100644
--- a/keyboards/tkc1800/keymaps/smt/keymap.c
+++ b/keyboards/tkc1800/keymaps/smt/keymap.c
@@ -117,7 +117,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[DVORAK] = LAYOUT(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_HOME, KC_PGUP, KC_PSCR, \
KC_DEL, KC_END, KC_PGDN, KC_SLCK, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_NLCK, KC_PSLS, KC_PAST, 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_LBRC, KC_RBRC, KC_BSLS, KC_GRV, KC_NLCK, KC_PSLS, KC_PAST, KC_PAUS, \
HPR_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, KC_EQL, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PMNS, \
CTL_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, XXXXXX, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS, \
KC_LSFT, XXXXXX, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT, KC_UP, KC_P1, KC_P2, KC_P3, XXXXXX, \
diff --git a/keyboards/tkc1800/keymaps/wkl/keymap.c b/keyboards/tkc1800/keymaps/wkl/keymap.c
index 40d2e5fad..e04c4d5c1 100644
--- a/keyboards/tkc1800/keymaps/wkl/keymap.c
+++ b/keyboards/tkc1800/keymaps/wkl/keymap.c
@@ -34,6 +34,8 @@ enum {
FUNCTION,
};
+bool screenWorks = 0;
+
//13 characters max without re-writing the "Layer: " format in iota_gfx_task_user()
static char layer_lookup[][14] = {"Base","Function"};
@@ -93,7 +95,9 @@ void matrix_init_user(void) {
// calls code for the SSD1306 OLED
_delay_ms(400);
TWI_Init(TWI_BIT_PRESCALE_1, TWI_BITLENGTH_FROM_FREQ(1, 800000));
- iota_gfx_init(); // turns on the display
+ if(iota_gfx_init()){ // turns on the display
+ screenWorks = 1;
+ }
#endif
#endif
#ifdef AUDIO_ENABLE
@@ -103,7 +107,9 @@ void matrix_init_user(void) {
void matrix_scan_user(void) {
#ifdef SSD1306OLED
- iota_gfx_task(); // this is what updates the display continuously
+ if(screenWorks){
+ iota_gfx_task(); // this is what updates the display continuously
+ };
#endif
}
diff --git a/keyboards/toad/config.h b/keyboards/toad/config.h
new file mode 100644
index 000000000..f1d32c15b
--- /dev/null
+++ b/keyboards/toad/config.h
@@ -0,0 +1,54 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6776
+#define DEVICE_VER 0x0001
+#define MANUFACTURER farmakon
+#define PRODUCT "TOAD"
+#define DESCRIPTION "TOAD"
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 14
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B0, F6, F5, F4, F1, F0 }
+#define MATRIX_COL_PINS { B3, B2, B1, E6, B7, C7, C6, D4, D6, D7, B4, D0, D1, F7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 0
+#endif
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 0
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+#endif
diff --git a/keyboards/toad/info.json b/keyboards/toad/info.json
new file mode 100644
index 000000000..17a37147e
--- /dev/null
+++ b/keyboards/toad/info.json
@@ -0,0 +1,409 @@
+{
+ "keyboard_name": "Toad",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "key_count": 78,
+ "layout": [
+ {"label":"K000", "x":0, "y":0},
+ {"label":"K001", "x":2, "y":0},
+ {"label":"K002", "x":3, "y":0},
+ {"label":"K003", "x":4, "y":0},
+ {"label":"K004", "x":5, "y":0},
+ {"label":"K005", "x":6.5, "y":0},
+ {"label":"K006", "x":7.5, "y":0},
+ {"label":"K007", "x":8.5, "y":0},
+ {"label":"K008", "x":9.5, "y":0},
+ {"label":"K009", "x":11, "y":0},
+ {"label":"K010", "x":12, "y":0},
+ {"label":"K011", "x":13, "y":0},
+ {"label":"K012", "x":14, "y":0},
+ {"label":"K100", "x":0, "y":1.5},
+ {"label":"K101", "x":1, "y":1.5},
+ {"label":"K102", "x":2, "y":1.5},
+ {"label":"K103", "x":3, "y":1.5},
+ {"label":"K104", "x":4, "y":1.5},
+ {"label":"K105", "x":5, "y":1.5},
+ {"label":"K106", "x":6, "y":1.5},
+ {"label":"K107", "x":7, "y":1.5},
+ {"label":"K108", "x":8, "y":1.5},
+ {"label":"K109", "x":9, "y":1.5},
+ {"label":"K110", "x":10, "y":1.5},
+ {"label":"K111", "x":11, "y":1.5},
+ {"label":"K112", "x":12, "y":1.5},
+ {"label":"K113", "x":13, "y":1.5},
+ {"label":"K013", "x":14, "y":1.5},
+ {"label":"K200", "x":0, "y":2.5, "w":1.5},
+ {"label":"K201", "x":1.5, "y":2.5},
+ {"label":"K202", "x":2.5, "y":2.5},
+ {"label":"K203", "x":3.5, "y":2.5},
+ {"label":"K204", "x":4.5, "y":2.5},
+ {"label":"K205", "x":5.5, "y":2.5},
+ {"label":"K206", "x":6.5, "y":2.5},
+ {"label":"K207", "x":7.5, "y":2.5},
+ {"label":"K208", "x":8.5, "y":2.5},
+ {"label":"K209", "x":9.5, "y":2.5},
+ {"label":"K210", "x":10.5, "y":2.5},
+ {"label":"K211", "x":11.5, "y":2.5},
+ {"label":"K212", "x":12.5, "y":2.5},
+ {"label":"K213", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"K300", "x":0, "y":3.5, "w":1.75},
+ {"label":"K301", "x":1.75, "y":3.5},
+ {"label":"K302", "x":2.75, "y":3.5},
+ {"label":"K303", "x":3.75, "y":3.5},
+ {"label":"K304", "x":4.75, "y":3.5},
+ {"label":"K305", "x":5.75, "y":3.5},
+ {"label":"K306", "x":6.75, "y":3.5},
+ {"label":"K307", "x":7.75, "y":3.5},
+ {"label":"K308", "x":8.75, "y":3.5},
+ {"label":"K309", "x":9.75, "y":3.5},
+ {"label":"K310", "x":10.75, "y":3.5},
+ {"label":"K311", "x":11.75, "y":3.5},
+ {"label":"K312", "x":12.75, "y":3.5},
+ {"label":"K313", "x":13.75, "y":3.5, "w":1.25},
+ {"label":"K400", "x":0, "y":4.5, "w":1.25},
+ {"label":"K401", "x":1.25, "y":4.5},
+ {"label":"K402", "x":2.25, "y":4.5},
+ {"label":"K403", "x":3.25, "y":4.5},
+ {"label":"K404", "x":4.25, "y":4.5},
+ {"label":"K405", "x":5.25, "y":4.5},
+ {"label":"K406", "x":6.25, "y":4.5},
+ {"label":"K407", "x":7.25, "y":4.5},
+ {"label":"K408", "x":8.25, "y":4.5},
+ {"label":"K409", "x":9.25, "y":4.5},
+ {"label":"K410", "x":10.25, "y":4.5},
+ {"label":"K411", "x":11.25, "y":4.5},
+ {"label":"K412", "x":12.25, "y":4.5, "w":1.75},
+ {"label":"K413", "x":14, "y":4.5},
+ {"label":"K500", "x":0, "y":5.5, "w":1.25},
+ {"label":"K501", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"K502", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"K507", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"K510", "x":10, "y":5.5, "w":1.25},
+ {"label":"K511", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"K512", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"K513", "x":13.75, "y":5.5, "w":1.25}
+ ]
+ },
+
+ "LAYOUT_ansi_wk": {
+ "key_count": 74,
+ "layout": [
+ {"label":"K000", "x":0, "y":0},
+ {"label":"K001", "x":2, "y":0},
+ {"label":"K002", "x":3, "y":0},
+ {"label":"K003", "x":4, "y":0},
+ {"label":"K004", "x":5, "y":0},
+ {"label":"K005", "x":6.5, "y":0},
+ {"label":"K006", "x":7.5, "y":0},
+ {"label":"K007", "x":8.5, "y":0},
+ {"label":"K008", "x":9.5, "y":0},
+ {"label":"K009", "x":11, "y":0},
+ {"label":"K010", "x":12, "y":0},
+ {"label":"K011", "x":13, "y":0},
+ {"label":"K012", "x":14, "y":0},
+ {"label":"K100", "x":0, "y":1.5},
+ {"label":"K101", "x":1, "y":1.5},
+ {"label":"K102", "x":2, "y":1.5},
+ {"label":"K103", "x":3, "y":1.5},
+ {"label":"K104", "x":4, "y":1.5},
+ {"label":"K105", "x":5, "y":1.5},
+ {"label":"K106", "x":6, "y":1.5},
+ {"label":"K107", "x":7, "y":1.5},
+ {"label":"K108", "x":8, "y":1.5},
+ {"label":"K109", "x":9, "y":1.5},
+ {"label":"K110", "x":10, "y":1.5},
+ {"label":"K111", "x":11, "y":1.5},
+ {"label":"K112", "x":12, "y":1.5},
+ {"label":"K013", "x":13, "y":1.5, "w":2},
+ {"label":"K200", "x":0, "y":2.5, "w":1.5},
+ {"label":"K201", "x":1.5, "y":2.5},
+ {"label":"K202", "x":2.5, "y":2.5},
+ {"label":"K203", "x":3.5, "y":2.5},
+ {"label":"K204", "x":4.5, "y":2.5},
+ {"label":"K205", "x":5.5, "y":2.5},
+ {"label":"K206", "x":6.5, "y":2.5},
+ {"label":"K207", "x":7.5, "y":2.5},
+ {"label":"K208", "x":8.5, "y":2.5},
+ {"label":"K209", "x":9.5, "y":2.5},
+ {"label":"K210", "x":10.5, "y":2.5},
+ {"label":"K211", "x":11.5, "y":2.5},
+ {"label":"K212", "x":12.5, "y":2.5},
+ {"label":"K213", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"K300", "x":0, "y":3.5, "w":1.75},
+ {"label":"K301", "x":1.75, "y":3.5},
+ {"label":"K302", "x":2.75, "y":3.5},
+ {"label":"K303", "x":3.75, "y":3.5},
+ {"label":"K304", "x":4.75, "y":3.5},
+ {"label":"K305", "x":5.75, "y":3.5},
+ {"label":"K306", "x":6.75, "y":3.5},
+ {"label":"K307", "x":7.75, "y":3.5},
+ {"label":"K308", "x":8.75, "y":3.5},
+ {"label":"K309", "x":9.75, "y":3.5},
+ {"label":"K310", "x":10.75, "y":3.5},
+ {"label":"K311", "x":11.75, "y":3.5},
+ {"label":"K313", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"K400", "x":0, "y":4.5, "w":2.25},
+ {"label":"K402", "x":2.25, "y":4.5},
+ {"label":"K403", "x":3.25, "y":4.5},
+ {"label":"K404", "x":4.25, "y":4.5},
+ {"label":"K405", "x":5.25, "y":4.5},
+ {"label":"K406", "x":6.25, "y":4.5},
+ {"label":"K407", "x":7.25, "y":4.5},
+ {"label":"K408", "x":8.25, "y":4.5},
+ {"label":"K409", "x":9.25, "y":4.5},
+ {"label":"K410", "x":10.25, "y":4.5},
+ {"label":"K411", "x":11.25, "y":4.5},
+ {"label":"K412", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"K500", "x":0, "y":5.5, "w":1.25},
+ {"label":"K501", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"K502", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"K507", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"K510", "x":10, "y":5.5, "w":1.25},
+ {"label":"K511", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"K512", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"K513", "x":13.75, "y":5.5, "w":1.25}
+ ]
+ },
+
+ "LAYOUT_ansi_wkl": {
+ "key_count": 71,
+ "layout": [
+ {"label":"K000", "x":0, "y":0},
+ {"label":"K001", "x":2, "y":0},
+ {"label":"K002", "x":3, "y":0},
+ {"label":"K003", "x":4, "y":0},
+ {"label":"K004", "x":5, "y":0},
+ {"label":"K005", "x":6.5, "y":0},
+ {"label":"K006", "x":7.5, "y":0},
+ {"label":"K007", "x":8.5, "y":0},
+ {"label":"K008", "x":9.5, "y":0},
+ {"label":"K009", "x":11, "y":0},
+ {"label":"K010", "x":12, "y":0},
+ {"label":"K011", "x":13, "y":0},
+ {"label":"K012", "x":14, "y":0},
+ {"label":"K100", "x":0, "y":1.5},
+ {"label":"K101", "x":1, "y":1.5},
+ {"label":"K102", "x":2, "y":1.5},
+ {"label":"K103", "x":3, "y":1.5},
+ {"label":"K104", "x":4, "y":1.5},
+ {"label":"K105", "x":5, "y":1.5},
+ {"label":"K106", "x":6, "y":1.5},
+ {"label":"K107", "x":7, "y":1.5},
+ {"label":"K108", "x":8, "y":1.5},
+ {"label":"K109", "x":9, "y":1.5},
+ {"label":"K110", "x":10, "y":1.5},
+ {"label":"K111", "x":11, "y":1.5},
+ {"label":"K112", "x":12, "y":1.5},
+ {"label":"K013", "x":13, "y":1.5, "w":2},
+ {"label":"K200", "x":0, "y":2.5, "w":1.5},
+ {"label":"K201", "x":1.5, "y":2.5},
+ {"label":"K202", "x":2.5, "y":2.5},
+ {"label":"K203", "x":3.5, "y":2.5},
+ {"label":"K204", "x":4.5, "y":2.5},
+ {"label":"K205", "x":5.5, "y":2.5},
+ {"label":"K206", "x":6.5, "y":2.5},
+ {"label":"K207", "x":7.5, "y":2.5},
+ {"label":"K208", "x":8.5, "y":2.5},
+ {"label":"K209", "x":9.5, "y":2.5},
+ {"label":"K210", "x":10.5, "y":2.5},
+ {"label":"K211", "x":11.5, "y":2.5},
+ {"label":"K212", "x":12.5, "y":2.5},
+ {"label":"K213", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"K300", "x":0, "y":3.5, "w":1.75},
+ {"label":"K301", "x":1.75, "y":3.5},
+ {"label":"K302", "x":2.75, "y":3.5},
+ {"label":"K303", "x":3.75, "y":3.5},
+ {"label":"K304", "x":4.75, "y":3.5},
+ {"label":"K305", "x":5.75, "y":3.5},
+ {"label":"K306", "x":6.75, "y":3.5},
+ {"label":"K307", "x":7.75, "y":3.5},
+ {"label":"K308", "x":8.75, "y":3.5},
+ {"label":"K309", "x":9.75, "y":3.5},
+ {"label":"K310", "x":10.75, "y":3.5},
+ {"label":"K311", "x":11.75, "y":3.5},
+ {"label":"K313", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"K400", "x":0, "y":4.5, "w":2.25},
+ {"label":"K402", "x":2.25, "y":4.5},
+ {"label":"K403", "x":3.25, "y":4.5},
+ {"label":"K404", "x":4.25, "y":4.5},
+ {"label":"K405", "x":5.25, "y":4.5},
+ {"label":"K406", "x":6.25, "y":4.5},
+ {"label":"K407", "x":7.25, "y":4.5},
+ {"label":"K408", "x":8.25, "y":4.5},
+ {"label":"K409", "x":9.25, "y":4.5},
+ {"label":"K410", "x":10.25, "y":4.5},
+ {"label":"K411", "x":11.25, "y":4.5},
+ {"label":"K412", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"K500", "x":0, "y":5.5, "w":1.5},
+ {"label":"K502", "x":2.5, "y":5.5, "w":1.5},
+ {"label":"K507", "x":4, "y":5.5, "w":7},
+ {"label":"K511", "x":11, "y":5.5, "w":1.5},
+ {"label":"K513", "x":13.5, "y":5.5, "w":1.5}
+ ]
+ },
+
+ "LAYOUT_iso_wk": {
+ "key_count": 75,
+ "layout": [
+ {"label":"K000", "x":0, "y":0},
+ {"label":"K001", "x":2, "y":0},
+ {"label":"K002", "x":3, "y":0},
+ {"label":"K003", "x":4, "y":0},
+ {"label":"K004", "x":5, "y":0},
+ {"label":"K005", "x":6.5, "y":0},
+ {"label":"K006", "x":7.5, "y":0},
+ {"label":"K007", "x":8.5, "y":0},
+ {"label":"K008", "x":9.5, "y":0},
+ {"label":"K009", "x":11, "y":0},
+ {"label":"K010", "x":12, "y":0},
+ {"label":"K011", "x":13, "y":0},
+ {"label":"K012", "x":14, "y":0},
+ {"label":"K100", "x":0, "y":1.5},
+ {"label":"K101", "x":1, "y":1.5},
+ {"label":"K102", "x":2, "y":1.5},
+ {"label":"K103", "x":3, "y":1.5},
+ {"label":"K104", "x":4, "y":1.5},
+ {"label":"K105", "x":5, "y":1.5},
+ {"label":"K106", "x":6, "y":1.5},
+ {"label":"K107", "x":7, "y":1.5},
+ {"label":"K108", "x":8, "y":1.5},
+ {"label":"K109", "x":9, "y":1.5},
+ {"label":"K110", "x":10, "y":1.5},
+ {"label":"K111", "x":11, "y":1.5},
+ {"label":"K112", "x":12, "y":1.5},
+ {"label":"K013", "x":13, "y":1.5, "w":2},
+ {"label":"K200", "x":0, "y":2.5, "w":1.5},
+ {"label":"K201", "x":1.5, "y":2.5},
+ {"label":"K202", "x":2.5, "y":2.5},
+ {"label":"K203", "x":3.5, "y":2.5},
+ {"label":"K204", "x":4.5, "y":2.5},
+ {"label":"K205", "x":5.5, "y":2.5},
+ {"label":"K206", "x":6.5, "y":2.5},
+ {"label":"K207", "x":7.5, "y":2.5},
+ {"label":"K208", "x":8.5, "y":2.5},
+ {"label":"K209", "x":9.5, "y":2.5},
+ {"label":"K210", "x":10.5, "y":2.5},
+ {"label":"K211", "x":11.5, "y":2.5},
+ {"label":"K212", "x":12.5, "y":2.5},
+ {"label":"K300", "x":0, "y":3.5, "w":1.75},
+ {"label":"K301", "x":1.75, "y":3.5},
+ {"label":"K302", "x":2.75, "y":3.5},
+ {"label":"K303", "x":3.75, "y":3.5},
+ {"label":"K304", "x":4.75, "y":3.5},
+ {"label":"K305", "x":5.75, "y":3.5},
+ {"label":"K306", "x":6.75, "y":3.5},
+ {"label":"K307", "x":7.75, "y":3.5},
+ {"label":"K308", "x":8.75, "y":3.5},
+ {"label":"K309", "x":9.75, "y":3.5},
+ {"label":"K310", "x":10.75, "y":3.5},
+ {"label":"K311", "x":11.75, "y":3.5},
+ {"label":"K312", "x":12.75, "y":3.5},
+ {"label":"K313", "x":13.75, "y":2.5, "w":1.25, "h":2},
+ {"label":"K400", "x":0, "y":4.5, "w":1.25},
+ {"label":"K401", "x":1.25, "y":4.5},
+ {"label":"K402", "x":2.25, "y":4.5},
+ {"label":"K403", "x":3.25, "y":4.5},
+ {"label":"K404", "x":4.25, "y":4.5},
+ {"label":"K405", "x":5.25, "y":4.5},
+ {"label":"K406", "x":6.25, "y":4.5},
+ {"label":"K407", "x":7.25, "y":4.5},
+ {"label":"K408", "x":8.25, "y":4.5},
+ {"label":"K409", "x":9.25, "y":4.5},
+ {"label":"K410", "x":10.25, "y":4.5},
+ {"label":"K411", "x":11.25, "y":4.5},
+ {"label":"K412", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"K500", "x":0, "y":5.5, "w":1.25},
+ {"label":"K501", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"K502", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"K507", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"K510", "x":10, "y":5.5, "w":1.25},
+ {"label":"K511", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"K512", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"K513", "x":13.75, "y":5.5, "w":1.25}
+ ]
+ },
+
+ "LAYOUT_iso_wkl": {
+ "key_count": 72,
+ "layout": [
+ {"label":"K000", "x":0, "y":0},
+ {"label":"K001", "x":2, "y":0},
+ {"label":"K002", "x":3, "y":0},
+ {"label":"K003", "x":4, "y":0},
+ {"label":"K004", "x":5, "y":0},
+ {"label":"K005", "x":6.5, "y":0},
+ {"label":"K006", "x":7.5, "y":0},
+ {"label":"K007", "x":8.5, "y":0},
+ {"label":"K008", "x":9.5, "y":0},
+ {"label":"K009", "x":11, "y":0},
+ {"label":"K010", "x":12, "y":0},
+ {"label":"K011", "x":13, "y":0},
+ {"label":"K012", "x":14, "y":0},
+ {"label":"K100", "x":0, "y":1.5},
+ {"label":"K101", "x":1, "y":1.5},
+ {"label":"K102", "x":2, "y":1.5},
+ {"label":"K103", "x":3, "y":1.5},
+ {"label":"K104", "x":4, "y":1.5},
+ {"label":"K105", "x":5, "y":1.5},
+ {"label":"K106", "x":6, "y":1.5},
+ {"label":"K107", "x":7, "y":1.5},
+ {"label":"K108", "x":8, "y":1.5},
+ {"label":"K109", "x":9, "y":1.5},
+ {"label":"K110", "x":10, "y":1.5},
+ {"label":"K111", "x":11, "y":1.5},
+ {"label":"K112", "x":12, "y":1.5},
+ {"label":"K013", "x":13, "y":1.5, "w":2},
+ {"label":"K200", "x":0, "y":2.5, "w":1.5},
+ {"label":"K201", "x":1.5, "y":2.5},
+ {"label":"K202", "x":2.5, "y":2.5},
+ {"label":"K203", "x":3.5, "y":2.5},
+ {"label":"K204", "x":4.5, "y":2.5},
+ {"label":"K205", "x":5.5, "y":2.5},
+ {"label":"K206", "x":6.5, "y":2.5},
+ {"label":"K207", "x":7.5, "y":2.5},
+ {"label":"K208", "x":8.5, "y":2.5},
+ {"label":"K209", "x":9.5, "y":2.5},
+ {"label":"K210", "x":10.5, "y":2.5},
+ {"label":"K211", "x":11.5, "y":2.5},
+ {"label":"K212", "x":12.5, "y":2.5},
+ {"label":"K300", "x":0, "y":3.5, "w":1.75},
+ {"label":"K301", "x":1.75, "y":3.5},
+ {"label":"K302", "x":2.75, "y":3.5},
+ {"label":"K303", "x":3.75, "y":3.5},
+ {"label":"K304", "x":4.75, "y":3.5},
+ {"label":"K305", "x":5.75, "y":3.5},
+ {"label":"K306", "x":6.75, "y":3.5},
+ {"label":"K307", "x":7.75, "y":3.5},
+ {"label":"K308", "x":8.75, "y":3.5},
+ {"label":"K309", "x":9.75, "y":3.5},
+ {"label":"K310", "x":10.75, "y":3.5},
+ {"label":"K311", "x":11.75, "y":3.5},
+ {"label":"K312", "x":12.75, "y":3.5},
+ {"label":"K313", "x":13.75, "y":2.5, "w":1.25, "h":2},
+ {"label":"K400", "x":0, "y":4.5, "w":1.25},
+ {"label":"K401", "x":1.25, "y":4.5},
+ {"label":"K402", "x":2.25, "y":4.5},
+ {"label":"K403", "x":3.25, "y":4.5},
+ {"label":"K404", "x":4.25, "y":4.5},
+ {"label":"K405", "x":5.25, "y":4.5},
+ {"label":"K406", "x":6.25, "y":4.5},
+ {"label":"K407", "x":7.25, "y":4.5},
+ {"label":"K408", "x":8.25, "y":4.5},
+ {"label":"K409", "x":9.25, "y":4.5},
+ {"label":"K410", "x":10.25, "y":4.5},
+ {"label":"K411", "x":11.25, "y":4.5},
+ {"label":"K412", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"K500", "x":0, "y":5.5, "w":1.5},
+ {"label":"K502", "x":2.5, "y":5.5, "w":1.5},
+ {"label":"K507", "x":4, "y":5.5, "w":7},
+ {"label":"K511", "x":11, "y":5.5, "w":1.5},
+ {"label":"K513", "x":13.5, "y":5.5, "w":1.5}
+ ]
+ }
+ }
+}
+
diff --git a/keyboards/toad/keymaps/ansi_wk/keymap.c b/keyboards/toad/keymaps/ansi_wk/keymap.c
new file mode 100644
index 000000000..a4fd348f0
--- /dev/null
+++ b/keyboards/toad/keymaps/ansi_wk/keymap.c
@@ -0,0 +1,15 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_ansi_wk(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL
+ )
+};
+
+
diff --git a/keyboards/toad/keymaps/ansi_wkl/keymap.c b/keyboards/toad/keymaps/ansi_wkl/keymap.c
new file mode 100644
index 000000000..7fb6b3b59
--- /dev/null
+++ b/keyboards/toad/keymaps/ansi_wkl/keymap.c
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_ansi_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ )
+};
diff --git a/keyboards/toad/keymaps/default/keymap.c b/keyboards/toad/keymaps/default/keymap.c
new file mode 100644
index 000000000..4c30bdc44
--- /dev/null
+++ b/keyboards/toad/keymaps/default/keymap.c
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
+ KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
+ )
+};
diff --git a/keyboards/toad/keymaps/iso_wk/keymap.c b/keyboards/toad/keymaps/iso_wk/keymap.c
new file mode 100644
index 000000000..202550432
--- /dev/null
+++ b/keyboards/toad/keymaps/iso_wk/keymap.c
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_iso_wk(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL
+ )
+};
diff --git a/keyboards/toad/keymaps/iso_wkl/keymap.c b/keyboards/toad/keymaps/iso_wkl/keymap.c
new file mode 100644
index 000000000..1659d7b38
--- /dev/null
+++ b/keyboards/toad/keymaps/iso_wkl/keymap.c
@@ -0,0 +1,13 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_iso_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ )
+};
diff --git a/keyboards/toad/readme.md b/keyboards/toad/readme.md
new file mode 100644
index 000000000..de58f7202
--- /dev/null
+++ b/keyboards/toad/readme.md
@@ -0,0 +1,14 @@
+# Toad
+
+Toad: 70% Mechanical Keyboard PCB.
+
+Toad schematic and PCB are available opensource under Creative Commons BY-SA 3.0 license on EasyEDA at [this link](https://easyeda.com/farmakon/70_Keyboard-d4f6baf4792d4ada9c0571fa3713e461)
+
+For more informations on the Toad please visit this [geekhack.org thread](https://geekhack.org/index.php?topic=91388.0)
+
+Make examples for these keyboards (after setting up your build environment):
+
+ make toad: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/toad/rules.mk b/keyboards/toad/rules.mk
new file mode 100644
index 000000000..ee87c6e8d
--- /dev/null
+++ b/keyboards/toad/rules.mk
@@ -0,0 +1,56 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE ?= no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE ?= no # Mouse keys(+4700)
+EXTRAKEY_ENABLE ?= yes # Audio control and System control(+450)
+CONSOLE_ENABLE ?= no # Console for debug(+400)
+COMMAND_ENABLE ?= no # Commands for debug and configuration
+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 \ No newline at end of file
diff --git a/keyboards/toad/toad.c b/keyboards/toad/toad.c
new file mode 100644
index 000000000..bc4db0339
--- /dev/null
+++ b/keyboards/toad/toad.c
@@ -0,0 +1,18 @@
+#include "toad.h"
+
+void led_set_user(uint8_t usb_led) {
+
+ //LED1
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 6); PORTB &= ~(1 << 6);
+ } else {
+ DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
+ }
+
+ //LED2
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ DDRB |= (1 << 5); PORTB &= ~(1 << 5);
+ } else {
+ DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
+ }
+}
diff --git a/keyboards/toad/toad.h b/keyboards/toad/toad.h
new file mode 100644
index 000000000..154068e42
--- /dev/null
+++ b/keyboards/toad/toad.h
@@ -0,0 +1,91 @@
+#ifndef TOAD
+#define TOAD
+
+#include "quantum.h"
+
+// 70% keyboard: default - all keys
+#define LAYOUT_all( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K013, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, \
+ K500, K501, K502, K507, K510, K511, K512, K513 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413 }, \
+ { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \
+}
+
+// 70% keyboard: ANSI Winkey
+#define LAYOUT_ansi_wk( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
+ K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \
+ K500, K501, K502, K507, K510, K511, K512, K513 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO,K313 }, \
+ { K400, KC_NO,K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \
+ { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \
+}
+
+// 70% keyboard: ANSI Winkeyless
+#define LAYOUT_ansi_wkl( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
+ K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \
+ K500, K502, K507, K511, K513 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO,K313 }, \
+ { K400, KC_NO,K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \
+ { K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513 } \
+}
+
+// 70% keyboard: ISO Winkey
+#define LAYOUT_iso_wk( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \
+ K500, K501, K502, K507, K510, K511, K512, K513 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO}, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \
+ { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \
+}
+
+// 70% keyboard: ISO Winkeyless
+#define LAYOUT_iso_wkl( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
+ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \
+ K500, K502, K507, K511, K513 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO}, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
+ { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \
+ { K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513 } \
+}
+
+#endif
diff --git a/keyboards/tokyo60/config.h b/keyboards/tokyo60/config.h
new file mode 100644
index 000000000..16927be17
--- /dev/null
+++ b/keyboards/tokyo60/config.h
@@ -0,0 +1,63 @@
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Tokyo Keyboard
+#define PRODUCT tokyo60
+#define DESCRIPTION q.m.k. keyboard firmware for tokyo60
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 6
+//#define BACKLIGHT_ON_STATE 1
+#endif
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION ROW2COL
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Set power consumption to work with mobile devices */
+#define USB_MAX_POWER_CONSUMPTION 100
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
+#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B2, B5, B4, D7, D6, B3 }
+#define UNUSED_PINS
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#define RGB_DI_PIN F7
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 10
+#define RGBLIGHT_HUE_STEP 12
+#define RGBLIGHT_SAT_STEP 12
+#define RGBLIGHT_VAL_STEP 12
+#endif
+
+/* For Production */
+#define QMK_ESC_OUTPUT F0 // usually COL
+#define QMK_ESC_INPUT D0 // usually ROW
+
+#endif
diff --git a/keyboards/tokyo60/info.json b/keyboards/tokyo60/info.json
new file mode 100644
index 000000000..b0e13c053
--- /dev/null
+++ b/keyboards/tokyo60/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Tokyo60",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_hhkb": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/tokyo60/keymaps/default/config.h b/keyboards/tokyo60/keymaps/default/config.h
new file mode 100644
index 000000000..271f48d00
--- /dev/null
+++ b/keyboards/tokyo60/keymaps/default/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/tokyo60/keymaps/default/keymap.c b/keyboards/tokyo60/keymaps/default/keymap.c
new file mode 100644
index 000000000..a3e27bdd8
--- /dev/null
+++ b/keyboards/tokyo60/keymaps/default/keymap.c
@@ -0,0 +1,49 @@
+#include QMK_KEYBOARD_H
+
+#define BL 0
+#define FN 1
+/*
+ * Default HHKB Layout
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: Default layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │BkSpc│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │█████│Enter│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Shift│█████│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │█████│Shift│ Fn │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│█████│ Gui │ Alt │█████│█████│Space│█████│█████│█████│█████│█████│ Alt │ Gui │█████│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+[BL] = LAYOUT_60_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(FN), \
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT ),
+ /* 1: HHKB Fn layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Pwr │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ Ins │ Del │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Caps │ RGB │RGBfw│RGBrv│BLtog│BLstp│ │ │ Psc │ Slk │ Pus │ Up │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ VoD │ VoU │ Mut │ Ejc │ │NP_* │NP_/ │Home │PgUp │Left │Right│█████│NPEnt│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │█████│ │ │ │ │ │NP_+ │NP_- │ End │PgDwn│Down │█████│ │ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│█████│ │ │█████│█████│█████│ │█████│█████│█████│█████│ │ │█████│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+[FN]= LAYOUT_60_hhkb(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, \
+ KC_CAPS, RGB_TOG, RGB_MOD, RGB_RMOD, BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_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 ),
+};
+
+
diff --git a/keyboards/tokyo60/keymaps/swappedBottomRow/config.h b/keyboards/tokyo60/keymaps/swappedBottomRow/config.h
new file mode 100644
index 000000000..271f48d00
--- /dev/null
+++ b/keyboards/tokyo60/keymaps/swappedBottomRow/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+// place overrides here
diff --git a/keyboards/tokyo60/keymaps/swappedBottomRow/keymap.c b/keyboards/tokyo60/keymaps/swappedBottomRow/keymap.c
new file mode 100644
index 000000000..54b68f582
--- /dev/null
+++ b/keyboards/tokyo60/keymaps/swappedBottomRow/keymap.c
@@ -0,0 +1,47 @@
+#include QMK_KEYBOARD_H
+
+#define BL 0
+#define FN 1
+/*
+ * Default HHKB Layout
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* 0: Default layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ Esc │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │BkSpc│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Ctrl │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │█████│Enter│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Shift│█████│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │█████│Shift│ Fn │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│█████│ Gui │ Alt │█████│█████│Space│█████│█████│█████│█████│█████│ Alt │ Gui │█████│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+[BL] = LAYOUT_60_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, \
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(FN), \
+ KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI ),
+ /* 1: HHKB Fn layer
+┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
+│ │ F1 │ F2 │ F3 │ F4 │ F5 │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │ F12 │ Ins │ Del │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│Caps │ RGB │RGBfw│RGBrv│BLtog│BLstp│ │ │ Psc │ Slk │ Pus │ Up │ │ │█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │ VoD │ VoU │ Mut │ │ │NP_* │NP_/ │Home │PgUp │Left │Right│█████│NPEnt│█████│
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│ │█████│ │ │Calc │ │ │NP_+ │NP_- │ End │PgDwn│Down │█████│ │ │
+├─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┼─────┤
+│█████│ │ │█████│█████│█████│ │█████│█████│█████│█████│ │ │█████│█████│
+└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
+ */
+[FN]= LAYOUT_60_hhkb(
+ 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_INS, KC_DEL, \
+ KC_CAPS, RGB_TOG, RGB_MOD, RGB_RMOD, BL_TOGG, BL_STEP, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_PENT, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, 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 ),
+};
diff --git a/keyboards/tokyo60/readme.md b/keyboards/tokyo60/readme.md
new file mode 100644
index 000000000..3f6b3b76b
--- /dev/null
+++ b/keyboards/tokyo60/readme.md
@@ -0,0 +1,15 @@
+# tokyo60
+​
+![tokyo60](http://tokyokeyboard.com/wp-content/uploads/2018/02/AI7B4543_copy_page_20180215141449-1200x800.jpg)
+​
+Minimal hacker style mechanical keyboard designed in Tokyo. Full aluminum hi-pro construction with integrated top-plate. Cherry MX compatible. More Info at [Tokyo Keyboard](http://tokyokeyboard.com).
+​
+Keyboard Maintainer: [Tokyo Keyboard](http://tokyokeyboard.com)
+Hardware Supported: tokyo60 rev1
+Hardware Availability: [Tokyo Keyboard](http://tokyokeyboard.com), [Massdrop](https://www.massdrop.com/buy/massdrop-x-tokyo-keyboard-tokyo60-keyboard-kit?mode=guest_open)
+​
+Make example for this keyboard (after setting up your build environment):
+​
+ make tokyo60:default
+​
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/tokyo60/rules.mk b/keyboards/tokyo60/rules.mk
new file mode 100644
index 000000000..45f0013c1
--- /dev/null
+++ b/keyboards/tokyo60/rules.mk
@@ -0,0 +1,77 @@
+
+
+# MCU name
+#MCU = at90usb1287
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section Size in *bytes*
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+# 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 = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+# 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
+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
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable RGB light
+
+LAYOUTS = 60_hhkb
diff --git a/keyboards/tokyo60/tokyo60.c b/keyboards/tokyo60/tokyo60.c
new file mode 100644
index 000000000..2126bb612
--- /dev/null
+++ b/keyboards/tokyo60/tokyo60.c
@@ -0,0 +1,18 @@
+#include "tokyo60.h"
+
+void matrix_init_kb(void) {
+ // Keyboard start-up code goes here
+ // Runs once when the firmware starts up
+ matrix_init_user();
+ led_init_ports();
+};
+
+void matrix_scan_kb(void) {
+ // Looping keyboard code goes here
+ // This runs every cycle (a lot)
+ matrix_scan_user();
+};
+
+void led_init_ports(void) {
+ /* LEDs on */
+}
diff --git a/keyboards/tokyo60/tokyo60.h b/keyboards/tokyo60/tokyo60.h
new file mode 100644
index 000000000..53f5d24a8
--- /dev/null
+++ b/keyboards/tokyo60/tokyo60.h
@@ -0,0 +1,20 @@
+#ifndef TOKYO60_H
+#define TOKYO60_H
+
+#include "quantum.h"
+
+#define LAYOUT_60_hhkb( \
+ 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, K2D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K3D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K4D, \
+ K42, K43, K46, K4B, K4C \
+) { \
+ { 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 }, \
+ { KC_NO, K42, K43, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D } \
+}
+
+#endif
diff --git a/keyboards/tomato/config.h b/keyboards/tomato/config.h
deleted file mode 100644
index f33c13108..000000000
--- a/keyboards/tomato/config.h
+++ /dev/null
@@ -1,51 +0,0 @@
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0001
-#define MANUFACTURER 40 Percent Club
-#define PRODUCT Tomato
-#define DESCRIPTION A 30 key ortholinear keyboard with RGB backlighting
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 6
-
-/* key matrix pins */
-#define MATRIX_ROW_PINS { F7, B1, B3, B2, B6 }
-#define MATRIX_COL_PINS { B4, E6, D7, C6, D4, D0 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCING_DELAY 5
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-/* eliminate lag on space cadet mods */
-#define PERMISSIVE_HOLD
-
-/* setup lighting */
-#define RGB_DI_PIN B5
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 30
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
-
-#endif
diff --git a/keyboards/tomato/keymaps/default/keymap.c b/keyboards/tomato/keymaps/default/keymap.c
deleted file mode 100644
index 94bfca202..000000000
--- a/keyboards/tomato/keymaps/default/keymap.c
+++ /dev/null
@@ -1,158 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define SPC_F1 LT(1,KC_SPC)
-#define BS_F2 LT(2,KC_BSPC)
-#define C_F3 LT(3,KC_C)
-#define V_F4 LT(4,KC_V)
-#define B_F5 LT(5,KC_B)
-#define Z_CTL MT(MOD_LCTL, KC_Z)
-#define X_ALT MT(MOD_LALT, KC_X)
-#define N_ALT MT(MOD_RALT, KC_N)
-#define M_CTL MT(MOD_RCTL, KC_M)
-#define ENT_SFT MT(MOD_RSFT, KC_ENT)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Level 0: Default Layer
- * ,-------------------------------------------------------------------------------.
- * | Q | W | E | R | T | Y | U | I | O | P |
- * |-------------------------------------------------------------------------------|
- * | A | S | D | F | G | H | J | K | L | ESC |
- * |-------------------------------------------------------------------------------|
- * | Z | X | C | V | BSPC | SPC | B | N | M | ENT |
- * '-------------------------------------------------------------------------------'
- */
- LAYOUT_ortho_3x10
- ( KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P
- , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC
- , Z_CTL, X_ALT, C_F3, V_F4, BS_F2, SPC_F1, B_F5, N_ALT, M_CTL, ENT_SFT
- ),
- /* Level 1: Numbers Layer
- * ,-------------------------------------------------------------------------------.
- * | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 |
- * |-------------------------------------------------------------------------------|
- * | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 |
- * |-------------------------------------------------------------------------------|
- * | | | | | DEL | | | | | |
- * '-------------------------------------------------------------------------------'
- */
- LAYOUT_ortho_3x10
- ( KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0
- , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
- , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_DEL, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
- ),
- /* Level 2: Symbols Layer
- * ,-------------------------------------------------------------------------------.
- * | ! | @ | # | $ | % | ^ | & | * | ( | ) |
- * |-------------------------------------------------------------------------------|
- * | F11 | F12 | | | | | | | | ` |
- * |-------------------------------------------------------------------------------|
- * | | | | | | | | | | |
- * '-------------------------------------------------------------------------------'
- */
- LAYOUT_ortho_3x10
- ( KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN
- , KC_F11, KC_F12,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_GRAVE
- , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
- ),
- /* Level 3: RGB Layer
- * ,-------------------------------------------------------------------------------.
- * | | | | | | - | = | [ | ] | \ |
- * |-------------------------------------------------------------------------------|
- * | Tab | | | | | , | . | / | ; | ' |
- * |-------------------------------------------------------------------------------|
- * | | | | | | | Left | Down | Up | Right |
- * '-------------------------------------------------------------------------------'
- */
- LAYOUT_ortho_3x10
- ( KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_MINS,KC_EQL, KC_LBRC,KC_RBRC,KC_BSLS
- , KC_TAB, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_COMM,KC_DOT, KC_SLSH,KC_SCLN,KC_QUOT
- , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT
- ),
- /* Level 4: RGB Layer
- * ,-------------------------------------------------------------------------------.
- * | | | | | | _ | + | { | } | | |
- * |-------------------------------------------------------------------------------|
- * | Tab | | | | | < | > | ? | : | " |
- * |-------------------------------------------------------------------------------|
- * | | | | | | | Home | PgDn | PgUp | End |
- * '-------------------------------------------------------------------------------'
- */
- LAYOUT_ortho_3x10
- ( KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE
- , KC_TAB, KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_LT, KC_GT, KC_QUES,KC_COLN,KC_DQUO
- , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_HOME,KC_PGUP,KC_PGDN,KC_END
- ),
- /* Level 5: RGB Layer
- * ,-------------------------------------------------------------------------------.
- * | Calc | Web | Mail |Explore| | | | | | |
- * |-------------------------------------------------------------------------------|
- * |RGB_TOG|RGB_MOD|RGB_HUI|RGB_HUD|xxxxxxx|xxxxxxx|RGB_SAI|RGB_SAD|RGB_VAI|RGB_VAD|
- * |-------------------------------------------------------------------------------|
- * | | | | | Flash | | | | | |
- * '-------------------------------------------------------------------------------'
- */
- LAYOUT_ortho_3x10
- ( KC_CALC,KC_WSCH,KC_MAIL,KC_MYCM,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS
- , RGB_TOG,RGB_MOD,RGB_HUI,RGB_HUD,KC_NO, KC_NO, RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD
- , KC_TRNS,KC_TRNS,KC_TRNS,KC_TRNS,RESET, 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) {
-}
-
-void matrix_scan_user(void) {
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- return true;
-}
-
-void led_set_user(uint8_t usb_led) {
-
- if (usb_led & (1 << USB_LED_NUM_LOCK)) {
-
- } else {
-
- }
-
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
-
- } else {
-
- }
-
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
-
- } else {
-
- }
-
- if (usb_led & (1 << USB_LED_COMPOSE)) {
-
- } else {
-
- }
-
- if (usb_led & (1 << USB_LED_KANA)) {
-
- } else {
-
- }
-
-}
diff --git a/keyboards/tomato/readme.md b/keyboards/tomato/readme.md
deleted file mode 100644
index e3851f18c..000000000
--- a/keyboards/tomato/readme.md
+++ /dev/null
@@ -1,20 +0,0 @@
-Tomato
-===
-
-A 30 key keyboard with programmable rgb backlighting.
-
-* [The fluff](http://www.40percent.club/2017/07/tomato-in-gherkin.html)
-* [The meat](https://github.com/di0ib/Misc/tree/master/tomato)
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: Tomato PCB
-Hardware Availability: [Gherkin project on 40% Keyboards](http://www.40percent.club/2017/07/tomato-in-gherkin.html)
-
-Make example for this keyboard (after setting up your build environment):
-
- make tomato:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-
-First pass at adding support for the tomato keyboard. Completely
-untested. Intended to kick-start development.
diff --git a/keyboards/tomato/rules.mk b/keyboards/tomato/rules.mk
deleted file mode 100644
index cbb2b0519..000000000
--- a/keyboards/tomato/rules.mk
+++ /dev/null
@@ -1,58 +0,0 @@
-# MCU name
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-
-# Boot Section Size in *bytes*
-BOOTLOADER = caterina
-
-
-# Build Options
-# comment out to disable the options.
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = yes
-
-LAYOUTS = ortho_3x10
diff --git a/keyboards/tragicforce68/README.md b/keyboards/tragicforce68/README.md
new file mode 100644
index 000000000..c7a6cc77d
--- /dev/null
+++ b/keyboards/tragicforce68/README.md
@@ -0,0 +1,18 @@
+Tragicforce 68
+===============
+
+Magicforce 68 with [Tragicforce 68 replacement PCB](https://keeb.io/products/mf68-magicforce-68-pcb-replacement-kit) from Keebio.
+
+Keyboard Maintainer: [Keebio](https://keeb.io)
+Hardware Supported: Pro Micro
+Hardware Availability: [Keebio](https://keeb.io)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make tragicforce68:default
+
+Example of flashing this keyboard:
+
+ make tragicforce68:default:avrdude
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/tragicforce68/config.h b/keyboards/tragicforce68/config.h
new file mode 100644
index 000000000..9afdca614
--- /dev/null
+++ b/keyboards/tragicforce68/config.h
@@ -0,0 +1,69 @@
+/*
+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/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCEEB
+#define PRODUCT_ID 0x0510
+#define DEVICE_VER 0x0101
+#define MANUFACTURER Keebio
+#define PRODUCT Tragicforce 68
+#define DESCRIPTION Programmable PCB replacement for Magicforce 68
+
+/* key matrix size */
+#define MATRIX_ROWS 9
+#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 { D3, D2, D1, D0, B4, E6, C6, D7, D4 }
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 7
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#endif
diff --git a/keyboards/tragicforce68/info.json b/keyboards/tragicforce68/info.json
new file mode 100644
index 000000000..550040a3a
--- /dev/null
+++ b/keyboards/tragicforce68/info.json
@@ -0,0 +1,242 @@
+{
+ "keyboard_name": "Tragicforce 68",
+ "url": "https://keeb.io",
+ "maintainer": "Keebio",
+ "width": 17.25,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":" {", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"x":15.25, "y":1},
+ {"x":16.25, "y":1},
+
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"x":15.25, "y":3},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"x":14.25, "y":4},
+ {"x":15.25, "y":4},
+ {"x":16.25, "y":4}
+ ]
+ },
+ "LAYOUT_split_space": {
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Backspace", "x":13, "y":0, "w":2},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":" {", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"x":15.25, "y":1},
+ {"x":16.25, "y":1},
+
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"x":15.25, "y":3},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.75},
+ {"x":7.75, "y":4, "w":2.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},
+ {"x":14.25, "y":4},
+ {"x":15.25, "y":4},
+ {"x":16.25, "y":4}
+ ]
+ },
+ "LAYOUT_split_space_and_backspace": {
+ "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},
+ {"label":"Backspace", "x":14, "y":0},
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":" {", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"x":15.25, "y":1},
+ {"x":16.25, "y":1},
+
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"\"", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":2.75},
+ {"x":15.25, "y":3},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":2.25},
+ {"x":6, "y":4, "w":1.75},
+ {"x":7.75, "y":4, "w":2.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},
+ {"x":14.25, "y":4},
+ {"x":15.25, "y":4},
+ {"x":16.25, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/tragicforce68/keymaps/buswerks/keymap.c b/keyboards/tragicforce68/keymaps/buswerks/keymap.c
new file mode 100644
index 000000000..d74c0186d
--- /dev/null
+++ b/keyboards/tragicforce68/keymaps/buswerks/keymap.c
@@ -0,0 +1,60 @@
+#include QMK_KEYBOARD_H
+
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _FN1 2
+
+#define WORD_L LALT(KC_LEFT)
+#define WORD_R LALT(KC_RGHT)
+#define LINE_L LGUI(KC_LEFT)
+#define LINE_R LGUI(KC_RGHT)
+
+#define DESK_L LCTL(KC_LEFT)
+#define DESK_R LCTL(KC_RGHT)
+#define MSN_CTL LCTL(KC_UP)
+
+#define LT_FN LT(_FN1, KC_ESC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┐ ┌────────┬────────┐
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP,
+ //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
+ //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘
+ LT_FN, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────┐
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP,
+ //├──────────┬───────┴──┬─────┴────┬───┴────────┴────────┴────────┴────────┴────────┴──────┬─┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────┐
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_CAPS, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ //└──────────┴──────────┴──────────┴───────────────────────────────────────────────────────┴──────────┴──────────┴──────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_COLEMAK] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┐ ┌────────┬────────┐
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP,
+ //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤
+ 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_PGDN,
+ //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘
+ LT_FN, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, KC_ENTER,
+ //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────┐
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, KC_UP,
+ //├──────────┬───────┴──┬─────┴────┬───┴────────┴────────┴────────┴────────┴────────┴──────┬─┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────┐
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, KC_RALT, KC_CAPS, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ //└──────────┴──────────┴──────────┴───────────────────────────────────────────────────────┴──────────┴──────────┴──────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_FN1] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┐ ┌────────┬────────┐
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RESET, KC_HOME,
+ //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
+ //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘
+ _______, DESK_L, MSN_CTL, DESK_R, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______,
+ //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────┐
+ _______, _______, _______, _______, _______, _______, LINE_L, WORD_L, WORD_R, LINE_R, _______, _______, BL_INC,
+ //├──────────┬───────┴──┬─────┴────┬───┴────────┴────────┴────────┴────────┴────────┴──────┬─┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────┐
+ _______, _______, _______, KC_BSPC, _______, _______, KC_MENU, BL_BRTG, BL_DEC, BL_TOGG
+ //└──────────┴──────────┴──────────┴───────────────────────────────────────────────────────┴──────────┴──────────┴──────────┘ └────────┴────────┴────────┘
+ )
+}; \ No newline at end of file
diff --git a/keyboards/tragicforce68/keymaps/default/keymap.c b/keyboards/tragicforce68/keymaps/default/keymap.c
new file mode 100644
index 000000000..69255e080
--- /dev/null
+++ b/keyboards/tragicforce68/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+#include QMK_KEYBOARD_H
+
+#define _QWERTY 0
+#define _FN1 1
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────┬────────────────┐ ┌────────┬────────┐
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_PGUP,
+ //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_PGDN,
+ //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────┐
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ //├──────────┬───────┴──┬─────┴────┬───┴────────┴────────┴────────┴────────┴────────┴──────┬─┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────┐
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPACE, MO(_FN1), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ //└──────────┴──────────┴──────────┴───────────────────────────────────────────────────────┴──────────┴──────────┴──────────┘ └────────┴────────┴────────┘
+ ),
+
+ [_FN1] = 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_HOME,
+ //├────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────────────┤ ├────────┼────────┤
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, BL_STEP, KC_BSLS, _______, KC_END,
+ //├────────────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴─┬──────┴────────────┤ └────────┴────────┘
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_HOME, KC_QUOT, KC_ENTER,
+ //├──────────────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───┬────┴───────────────────┤ ┌────────┐
+ _______, _______, KC_MPLY, KC_MSTP, KC_MPRV, KC_MNXT, KC_VOLD, KC_VOLU, KC_MUTE, _______, KC_END, _______, BL_INC,
+ //├──────────┬───────┴──┬─────┴────┬───┴────────┴────────┴────────┴────────┴────────┴──────┬─┴────────┼────────┴─┬──────────┬────┬──────┴─┬────────┼────────┐
+ _______, _______, _______, _______, _______, _______, KC_MENU, BL_BRTG, BL_DEC, BL_TOGG
+ //└──────────┴──────────┴──────────┴───────────────────────────────────────────────────────┴──────────┴──────────┴──────────┘ └────────┴────────┴────────┘
+ )
+};
diff --git a/keyboards/tragicforce68/rules.mk b/keyboards/tragicforce68/rules.mk
new file mode 100644
index 000000000..a652f1fac
--- /dev/null
+++ b/keyboards/tragicforce68/rules.mk
@@ -0,0 +1,26 @@
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+BOOTLOADER = caterina
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# 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 = yes # 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
diff --git a/keyboards/tragicforce68/tragicforce68.c b/keyboards/tragicforce68/tragicforce68.c
new file mode 100644
index 000000000..327197d25
--- /dev/null
+++ b/keyboards/tragicforce68/tragicforce68.c
@@ -0,0 +1,8 @@
+#include "tragicforce68.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
diff --git a/keyboards/tragicforce68/tragicforce68.h b/keyboards/tragicforce68/tragicforce68.h
new file mode 100644
index 000000000..a63ce50a5
--- /dev/null
+++ b/keyboards/tragicforce68/tragicforce68.h
@@ -0,0 +1,74 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ A1, A2, A3, A4, A5, A6, A7, A8, E1, E2, E3, E4, E5, E6, E7, E8, \
+ B1, B2, B3, B4, B5, B6, B7, B8, F1, F2, F3, F4, F5, F6, F7, F8, \
+ C1, C2, C3, C4, C5, C6, C7, C8, G1, G2, G3, G4, G5, \
+ D1, D2, D3, D4, D5, D6, D7, D8, H1, H2, H3, H4, H5, \
+ J1, J2, J3, J5, J7, J8, H6, G6, G7, G8 \
+) { \
+ { A1, A2, A3, A4, A5, A6, A7, A8 }, \
+ { B1, B2, B3, B4, B5, B6, B7, B8 }, \
+ { C1, C2, C3, C4, C5, C6, C7, C8 }, \
+ { D1, D2, D3, D4, D5, D6, D7, D8 }, \
+ { E1, E2, E3, E4, E5, E6, E7, E8 }, \
+ { F1, F2, F3, F4, F5, F6, F7, F8 }, \
+ { G1, G2, G3, G4, G5, G6, G7, G8 }, \
+ { H1, H2, H3, H4, H5, H6, KC_NO, KC_NO }, \
+ { J1, J2, J3, KC_NO, J5, KC_NO, J7, J8 } \
+}
+
+#define LAYOUT_split_space( \
+ A1, A2, A3, A4, A5, A6, A7, A8, E1, E2, E3, E4, E5, E6, E7, E8, \
+ B1, B2, B3, B4, B5, B6, B7, B8, F1, F2, F3, F4, F5, F6, F7, F8, \
+ C1, C2, C3, C4, C5, C6, C7, C8, G1, G2, G3, G4, G5, \
+ D1, D2, D3, D4, D5, D6, D7, D8, H1, H2, H3, H4, H5, \
+ J1, J2, J3, J4, J5, J6, J7, J8, H6, G6, G7, G8 \
+) { \
+ { A1, A2, A3, A4, A5, A6, A7, A8 }, \
+ { B1, B2, B3, B4, B5, B6, B7, B8 }, \
+ { C1, C2, C3, C4, C5, C6, C7, C8 }, \
+ { D1, D2, D3, D4, D5, D6, D7, D8 }, \
+ { E1, E2, E3, E4, E5, E6, E7, E8 }, \
+ { F1, F2, F3, F4, F5, F6, F7, F8 }, \
+ { G1, G2, G3, G4, G5, G6, G7, G8 }, \
+ { H1, H2, H3, H4, H5, H6, KC_NO, KC_NO }, \
+ { J1, J2, J3, J4, J5, J6, J7, J8 } \
+}
+
+#define LAYOUT_split_space_and_backspace( \
+ A1, A2, A3, A4, A5, A6, A7, A8, E1, E2, E3, E4, E5, E6, H7, E7, E8, \
+ B1, B2, B3, B4, B5, B6, B7, B8, F1, F2, F3, F4, F5, F6, F7, F8, \
+ C1, C2, C3, C4, C5, C6, C7, C8, G1, G2, G3, G4, G5, \
+ D1, D2, D3, D4, D5, D6, D7, D8, H1, H2, H3, H4, H5, \
+ J1, J2, J3, J4, J5, J6, J7, J8, H6, G6, G7, G8 \
+) { \
+ { A1, A2, A3, A4, A5, A6, A7, A8 }, \
+ { B1, B2, B3, B4, B5, B6, B7, B8 }, \
+ { C1, C2, C3, C4, C5, C6, C7, C8 }, \
+ { D1, D2, D3, D4, D5, D6, D7, D8 }, \
+ { E1, E2, E3, E4, E5, E6, E7, E8 }, \
+ { F1, F2, F3, F4, F5, F6, F7, F8 }, \
+ { G1, G2, G3, G4, G5, G6, G7, G8 }, \
+ { H1, H2, H3, H4, H5, H6, H7, KC_NO }, \
+ { J1, J2, J3, J4, J5, J6, J7, J8 } \
+}
+
+#define LAYOUT_kc( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K10, K11, 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, K65, K66, K67, K68, K70, K71, K72, K73, K74 \
+) LAYOUT( \
+ KC_##K00, KC_##K01, KC_##K02, KC_##K03, KC_##K04, KC_##K05, KC_##K06, KC_##K07, KC_##K08, \
+ KC_##K10, KC_##K11, KC_##K12, KC_##K13, KC_##K14, KC_##K15, KC_##K16, KC_##K17, KC_##K18, \
+ KC_##K20, KC_##K21, KC_##K22, KC_##K23, KC_##K24, KC_##K25, KC_##K26, KC_##K27, KC_##K28, \
+ KC_##K30, KC_##K31, KC_##K32, KC_##K33, KC_##K34, KC_##K35, KC_##K36, KC_##K37, KC_##K38, \
+ KC_##K40, KC_##K41, KC_##K42, KC_##K43, KC_##K44, KC_##K45, KC_##K46, KC_##K47, KC_##K48, \
+ KC_##K50, KC_##K51, KC_##K52, KC_##K53, KC_##K54, KC_##K55, KC_##K56, KC_##K57, KC_##K58, \
+ KC_##K60, KC_##K61, KC_##K62, KC_##K63, KC_##K64, KC_##K65, KC_##K66, KC_##K67, KC_##K68, \
+ KC_##K70, KC_##K71, KC_##K72, KC_##K73, KC_##K74 \
+)
diff --git a/keyboards/treasure/type9/config.h b/keyboards/treasure/type9/config.h
new file mode 100644
index 000000000..367c53cb9
--- /dev/null
+++ b/keyboards/treasure/type9/config.h
@@ -0,0 +1,224 @@
+/*
+Copyright 2018 MechMerlin
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER Treasure
+#define PRODUCT Type 9
+#define DESCRIPTION A custom macropad
+
+/* key matrix size */
+#define MATRIX_ROWS 3
+#define MATRIX_COLS 3
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { E6, D7, C6 }
+#define MATRIX_COL_PINS { D1, D0, D4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION ROW2COL
+
+#define BACKLIGHT_PIN B5
+// #define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 10
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/treasure/type9/info.json b/keyboards/treasure/type9/info.json
new file mode 100644
index 000000000..7e7b1d0bd
--- /dev/null
+++ b/keyboards/treasure/type9/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Type-9",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 3,
+ "height": 3,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}]
+ }
+ }
+}
diff --git a/keyboards/treasure/type9/keymaps/default/config.h b/keyboards/treasure/type9/keymaps/default/config.h
new file mode 100644
index 000000000..a3ed4f762
--- /dev/null
+++ b/keyboards/treasure/type9/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/treasure/type9/keymaps/default/keymap.c b/keyboards/treasure/type9/keymaps/default/keymap.c
new file mode 100644
index 000000000..300d5b1e4
--- /dev/null
+++ b/keyboards/treasure/type9/keymaps/default/keymap.c
@@ -0,0 +1,64 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#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( /* Base */
+ KC_0, KC_1, KC_2, \
+ KC_3, KC_4, KC_5, \
+ KC_6, KC_7, KC_8 \
+ ),
+};
+
+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/treasure/type9/keymaps/default/readme.md b/keyboards/treasure/type9/keymaps/default/readme.md
new file mode 100644
index 000000000..94784bacc
--- /dev/null
+++ b/keyboards/treasure/type9/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for Type-9
diff --git a/keyboards/treasure/type9/readme.md b/keyboards/treasure/type9/readme.md
new file mode 100644
index 000000000..7c567f91b
--- /dev/null
+++ b/keyboards/treasure/type9/readme.md
@@ -0,0 +1,13 @@
+# Type-9
+
+3x3 Macropad.
+
+Keyboard Maintainer: [MechMerlin](https://github.com/mechmerlin)
+Hardware Supported: Treasure Macropad Type-9
+Hardware Availability: [Treasure](http://macropad.co/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make treasure/type9: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/treasure/type9/rules.mk b/keyboards/treasure/type9/rules.mk
new file mode 100644
index 000000000..599974d25
--- /dev/null
+++ b/keyboards/treasure/type9/rules.mk
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/treasure/type9/type9.c b/keyboards/treasure/type9/type9.c
new file mode 100644
index 000000000..58a9c8f52
--- /dev/null
+++ b/keyboards/treasure/type9/type9.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "type9.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/treasure/type9/type9.h b/keyboards/treasure/type9/type9.h
new file mode 100644
index 000000000..4e3c235d1
--- /dev/null
+++ b/keyboards/treasure/type9/type9.h
@@ -0,0 +1,40 @@
+/* Copyright 2018 MechMerlin
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef TYPE9_H
+#define TYPE9_H
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ K00, K01, K02, \
+ K10, K11, K12, \
+ K20, K21, K22 \
+) \
+{ \
+ { K00, K01, K02 }, \
+ { K10, K11, K12 }, \
+ { K20, K21, K22 }, \
+}
+
+#endif
diff --git a/keyboards/tv44/config.h b/keyboards/tv44/config.h
deleted file mode 100644
index 0ae93c095..000000000
--- a/keyboards/tv44/config.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-Copyright 2012 Jun Wako <wakojun@gmail.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEAE
-#define PRODUCT_ID 0x8844
-#define DEVICE_VER 0x0002
-#define MANUFACTURER Evan Sailer
-#define PRODUCT TheVan 44
-#define DESCRIPTION keyboard firmware for TV44
-
-/* key matrix size */
-#define MATRIX_ROWS 4
-#define MATRIX_COLS 12
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-#define MATRIX_ROW_PINS { D7, B5, F7, D4 }
-#define MATRIX_COL_PINS { D2, D3, D5, D6, B4, B6, F6, F5, F4, F1, F0, B3 }
-#define UNUSED_PINS
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-// #define BACKLIGHT_PIN B7
-// #define BACKLIGHT_BREATHING
-// #define BACKLIGHT_LEVELS 3
-
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-//#define FORCE_NKRO
-
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
-/* key combination for magic key command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* control how magic key switches layers */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
-
-/* override magic key keymap */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
-//#define MAGIC_KEY_HELP1 H
-//#define MAGIC_KEY_HELP2 SLASH
-//#define MAGIC_KEY_DEBUG D
-//#define MAGIC_KEY_DEBUG_MATRIX X
-//#define MAGIC_KEY_DEBUG_KBD K
-//#define MAGIC_KEY_DEBUG_MOUSE M
-//#define MAGIC_KEY_VERSION V
-//#define MAGIC_KEY_STATUS S
-//#define MAGIC_KEY_CONSOLE C
-//#define MAGIC_KEY_LAYER0_ALT1 ESC
-//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
-//#define MAGIC_KEY_LAYER0 0
-//#define MAGIC_KEY_LAYER1 1
-//#define MAGIC_KEY_LAYER2 2
-//#define MAGIC_KEY_LAYER3 3
-//#define MAGIC_KEY_LAYER4 4
-//#define MAGIC_KEY_LAYER5 5
-//#define MAGIC_KEY_LAYER6 6
-//#define MAGIC_KEY_LAYER7 7
-//#define MAGIC_KEY_LAYER8 8
-//#define MAGIC_KEY_LAYER9 9
-//#define MAGIC_KEY_BOOTLOADER PAUSE
-//#define MAGIC_KEY_LOCK CAPS
-//#define MAGIC_KEY_EEPROM E
-//#define MAGIC_KEY_NKRO N
-//#define MAGIC_KEY_SLEEP_LED Z
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/tv44/keymaps/belak/keymap.c b/keyboards/tv44/keymaps/belak/keymap.c
deleted file mode 100644
index 6c0ff1a1c..000000000
--- a/keyboards/tv44/keymaps/belak/keymap.c
+++ /dev/null
@@ -1,105 +0,0 @@
-#include "tv44.h"
-#include "action_layer.h"
-#include "debug.h"
-#include "eeconfig.h"
-
-// Layer names. We stick to 3 letters if possible so MO(NAME) fits in 7
-// characters and doesn't mess with the grid.
-#define _QW 0
-#define _L1 1
-#define _L2 2
-#define _L3 3
-
-// Curly braces have their own keys. These are defined so they don't mess up the
-// grid in layer 2.
-#define L_CURBR LSFT(KC_LBRC)
-#define R_CURBR LSFT(KC_RBRC)
-
-#define L1_TAB LT(_L1, KC_TAB)
-#define L2_ESC LT(_L2, KC_ESC)
-#define L2_SLSH LT(_L2, KC_SLSH)
-#define L3_QUOT LT(_L3, KC_QUOT)
-
-// Tap dance magic
-#define TD_LGUI TD(BE_TD_GUI)
-#define TD_LCTL TD(BE_TD_CTL)
-#define TD_LALT TD(BE_TD_ALT)
-
-enum belak_td {
- BE_TD_GUI = 0,
- BE_TD_CTL,
- BE_TD_ALT,
-};
-
-void mod_tap_fn(qk_tap_dance_state_t *state, void *user_data);
-void mod_reset_fn(qk_tap_dance_state_t *state, void *user_data);
-
-qk_tap_dance_action_t tap_dance_actions[] = {
- [BE_TD_GUI] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
- [BE_TD_CTL] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
- [BE_TD_ALT] = ACTION_TAP_DANCE_FN_ADVANCED(mod_tap_fn, NULL, mod_reset_fn),
-};
-
-uint16_t tap_dance_keys[] = {
- [BE_TD_GUI] = KC_LGUI,
- [BE_TD_CTL] = KC_LCTL,
- [BE_TD_ALT] = KC_LALT,
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QW] = LAYOUT_arrow_command( /* Qwerty */
- L2_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- L1_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, L2_SLSH,
- TD_LCTL, MO(_L3), TD_LALT, TD_LGUI, KC_SPC, KC_SPC, MO(_L1), KC_LEFT, KC_DOWN, KC_RGHT
- ),
- [_L1] = LAYOUT_arrow_command( /* LAYER 1 */
- KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
- _______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, KC_QUOT,
- _______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT,
- _______, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [_L2] = LAYOUT_arrow_command( /* LAYER 2 */
- _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
- KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, L_CURBR, R_CURBR, KC_4, KC_5, KC_6, KC_VOLU, _______,
- _______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______,
- _______, _______, _______, _______, _______, _______, KC_RALT, _______, _______, _______
- ),
- [_L3] = LAYOUT_arrow_command( /* LAYER 3 */
- _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______,
- KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______,
- _______, _______, _______, _______, _______, _______, _______, KC_F9, KC_F10, KC_F11, KC_F12, KC_RSFT,
- _______, _______, _______, _______, _______, _______, KC_RALT, _______, _______, _______
- )
-};
-
-const uint16_t PROGMEM fn_actions[] = {};
-
-// Tap dance functions
-void mod_tap_fn(qk_tap_dance_state_t *state, void *user_data) {
- switch (state->count) {
- case 1:
- register_mods(MOD_BIT(tap_dance_keys[state->keycode - QK_TAP_DANCE]));
- send_keyboard_report();
- break;
- case 2:
- layer_on(_L2);
- break;
- case 3:
- layer_off(_L2);
- layer_on(_L1);
- break;
- default:
- reset_tap_dance(state);
- }
-}
-
-void mod_reset_fn(qk_tap_dance_state_t *state, void *user_data) {
- layer_off(_L1);
- layer_off(_L2);
- unregister_mods(MOD_BIT(tap_dance_keys[state->keycode - QK_TAP_DANCE]));
- send_keyboard_report();
-}
diff --git a/keyboards/tv44/keymaps/budi/keymap.c b/keyboards/tv44/keymaps/budi/keymap.c
deleted file mode 100644
index 53c281acd..000000000
--- a/keyboards/tv44/keymaps/budi/keymap.c
+++ /dev/null
@@ -1,196 +0,0 @@
-#include "tv44.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-#include "timer.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 _DV 0
-#define _NM 1
-#define _NV 2
-#define _G1 3
-#define _G2 4
-#define _FN 5
-
-// Requires KC_TRNS/_______ for the trigger key in the destination layer
-#define NM_SP LT(_NM, KC_SPC)
-#define NV_SP LT(_NV, KC_SPC)
-
-// Custom macros
-#define LC_ESC LCTL_T(KC_ESC) // Tap for Esc, Hold for L-CTRL
-#define RC_ENT RCTL_T(KC_ENT) // Tap for Enter, Hold for R-CTRL
-
-// Curly braces have their own keys. These are defined to make them not mess up
-// the grid in layer 2.
-#define L_CURB LSFT(KC_LBRC)
-#define R_CURB LSFT(KC_RBRC)
-
-// Hypers
-#define HYP0 HYPR(KC_0)
-#define HYP1 HYPR(KC_1)
-#define HYP2 HYPR(KC_2)
-#define HYP3 HYPR(KC_3)
-#define HYP4 HYPR(KC_4)
-#define HYP5 HYPR(KC_5)
-#define HYP6 HYPR(KC_6)
-#define HYP7 HYPR(KC_7)
-#define HYP8 HYPR(KC_8)
-#define HYP9 HYPR(KC_9)
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define xxxxxxx KC_NO
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-
-/* DVORAK
- * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
- * | TAB | ' | , | . | P | Y | F | G | C | R | L | BACKSPACE |
- * |---------`------`------`------`------`------`------`------`------`------`------`------------|
- * | LCTL | A | O | E | U | I | D | H | T | N | S | ENTER |
- * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
- * | LSHFT | ; | Q | J | K | X | B | M | W | V | Z | RSHFT |
- * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
- * | MO FN | GUI | ALT | NM / SPACE | NV / SPACE | RALT | / | \ | ESC |
- * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
- */
- [_DV] = LAYOUT_arrow(
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
- KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT,
- KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
- MO(_FN), KC_LGUI, KC_LALT, NM_SP, NV_SP, KC_RALT, KC_SLSH, KC_BSLS, KC_ESC
- ),
-
-
-
-/* NUMBERS
- * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | DELETE |
- * |---------`------`------`------`------`------`------`------`------`------`------`------------|
- * | LCTL | ! | @ | [ | { | ( | ) | } | ] | ? | | | ENTER |
- * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
- * | LSFT | ` | ~ | # | $ | % | ^ | & | * | _ | = | + |
- * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
- * | | GUI | LALT |-----TRNS-----| SPACE | RALT | / | \ | - |
- * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
- */
- [_NM] = LAYOUT_arrow(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL,
- _______, KC_EXLM, KC_AT, KC_LBRC, L_CURB, KC_LPRN, KC_RPRN, R_CURB, KC_RBRC, KC_QUES, KC_PIPE, _______,
- _______, KC_GRV, KC_TILD, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_UNDS, KC_EQL, KC_PLUS,
- _______, _______, _______, _______, _______, _______, KC_SLSH, KC_BSLS, KC_MINS
- ),
-
-
-
-/* NAVIGATION
- * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
- * | ESC | MWU | MWL | MU | MWR | | | HOME | UP | END | PGUP | DELETE |
- * |---------`------`------`------`------`------`------`------`------`------`------`------------|
- * | LCTL | MWD | ML | MD | MR | | | LEFT | DOWN | RIGHT| PGDN | MB2 |
- * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
- * | LSFT | HYP1 | HYP2 | HYP3 | HYP4 | HYP5 | HYP6 | HYP7 | HYP8 | HYP9 | HYP0 | VOLUP |
- * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
- * | | GUI | LALT | MB1 |----TRNS----| MUTE | PLAY | STOP | VOLDN |
- * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
- */
- [_NV] = LAYOUT_arrow(
- KC_ESC, KC_WH_U, KC_WH_L, KC_MS_U, KC_WH_R, xxxxxxx, xxxxxxx, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_DEL,
- _______, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, xxxxxxx, xxxxxxx, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_BTN2,
- _______, HYP1, HYP2, HYP3, HYP4, HYP5, HYP6, HYP7, HYP8, HYP9, HYP0, KC_VOLU,
- _______, _______, _______, KC_BTN1, _______, KC_MUTE, KC_MPLY, KC_MSTP, KC_VOLD
- ),
-
-
-
-/* GAME 1
- * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
- * | TAB | ' | , | . | P | Y | F | G | C | R | L | BACKSPACE |
- * |---------`------`------`------`------`------`------`------`------`------`------`------------|
- * | LCTL | A | O | E | U | I | D | H | T | N | S | ENTER |
- * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
- * | LSFT | ; | Q | J | K | X | B | M | W | V | Z | RSFT |
- * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
- * | - | = | LALT | MO G2 | SPACE | RALT | | | MO FN |
- * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
- */
- [_G1] = LAYOUT_arrow(
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
- _______, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT,
- _______, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
- KC_MINS, KC_EQL, _______, MO(_G2), KC_SPC, KC_RALT, xxxxxxx, xxxxxxx, MO(_FN)
- ),
-
-
-
-/* GAME 2
- * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
- * | ESC | 1 | 2 | 3 | 4 | 5 | F1 | F2 | F3 | F4 | F5 | DELETE |
- * |---------`------`------`------`------`------`------`------`------`------`------`------------|
- * | LCTL | 6 | 7 | 8 | 9 | 0 | F6 | F7 | F8 | F9 | F10 | ENTER |
- * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
- * | LSFT | ` | / | [ | ] | \ | F11 | F12 | F13 | F14 | F15 | RSFT |
- * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
- * | MB 3 | MB 4 | LALT |----TRNS------| SPACE | MB5 | | | MO FN |
- * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
- */
- [_G2] = LAYOUT_arrow(
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_DEL,
- _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
- _______, KC_GRV, KC_SLSH, KC_LBRC, KC_RBRC, KC_BSLS, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, _______,
- KC_BTN3, KC_BTN4, _______, _______, _______, KC_BTN5, xxxxxxx, xxxxxxx, _______
- ),
-
-
-
-/* FUNCTIONS
- * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
- * | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | DELETE |
- * |---------`------`------`------`------`------`------`------`------`------`------`------------|
- * | LCTL | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | |
- * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
- * | LSFT | _DV | _G1 | | | | | | | | | |
- * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
- * |---TRNS---| CAPS | LALT | | | RALT | | RESET |--TRNS-|
- * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
- */
- [_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,
- _______, TO(_DV), TO(_G1), xxxxxxx, xxxxxxx, xxxxxxx, KC_PWR, KC_SLEP, KC_WAKE, xxxxxxx, xxxxxxx, xxxxxxx,
- _______, KC_CAPS, _______, xxxxxxx, xxxxxxx, KC_RALT, xxxxxxx, RESET, _______
- )
-
-
-
-/* Transparent
- * ,---------+------+------+------+------+------+------+------+------+------+------+------------.
- * | | | | | | | | | | | | |
- * |---------`------`------`------`------`------`------`------`------`------`------`------------|
- * | | | | | | | | | | | | |
- * |----------`------`------`------`------`------`------`------`------`------`------`-----------|
- * | | | | | | | | | | | | |
- * |-----------`------`------`------`------`------`-------`------`------`------`------`---------|
- * | | | | | | | | | |
- * `---------+----------+----------+-----^^^------+----^^^-----+-------+-------+-------+-------'
- */
-// [_TR] = LAYOUT_arrow(
-// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-// _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
-// _______, _______, _______, _______, _______, _______, _______, _______, _______
-// )
-
-
-
-};
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
diff --git a/keyboards/tv44/keymaps/budi/readme.md b/keyboards/tv44/keymaps/budi/readme.md
deleted file mode 100644
index d1ee7d892..000000000
--- a/keyboards/tv44/keymaps/budi/readme.md
+++ /dev/null
@@ -1,8 +0,0 @@
-# Budi's TV44 Arrow layout
-
-- Dvorak main layer
-- Somewhat easy bracket access for devs, vim-friendly :)
-- Dedicated gaming layers cuz u don't wanna mess with apm
-- Mainly for windows, but with translated alt/cmd on os, it's good to go
-
-ASCII graphics shamelessly stolen from tong92's layout :)
diff --git a/keyboards/tv44/keymaps/core/keymap.c b/keyboards/tv44/keymaps/core/keymap.c
deleted file mode 100644
index d24049696..000000000
--- a/keyboards/tv44/keymaps/core/keymap.c
+++ /dev/null
@@ -1,34 +0,0 @@
-#include "tv44.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-
-#define _QW 0
-#define _L1 1
-#define _L2 2
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_QW] = LAYOUT( /* Qwerty */
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, MO(_L2),
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, MO(_L1), KC_RALT, KC_RCTL
- ),
- [_L1] = LAYOUT( /* LAYER 1 */
- KC_GRV, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_CALC, KC_PGUP, KC_UP, KC_PGDN, KC_PSCR, KC_PAUS,
- KC_TAB, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_INS, _______,
- _______, _______, _______, _______, _______, _______, KC_END, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [_L2] = LAYOUT( /* LAYER 2 */
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
- KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_UNDS, KC_PLUS,
- _______, _______, _______, _______, _______, KC_COMM, KC_SLSH, KC_RBRC, KC_LBRC, KC_BSLS, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
- ),
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/tv44/keymaps/core/rules.mk b/keyboards/tv44/keymaps/core/rules.mk
deleted file mode 100644
index 457a3d01d..000000000
--- a/keyboards/tv44/keymaps/core/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tv44/keymaps/default/keymap.c b/keyboards/tv44/keymaps/default/keymap.c
deleted file mode 100644
index 6055cd74e..000000000
--- a/keyboards/tv44/keymaps/default/keymap.c
+++ /dev/null
@@ -1,101 +0,0 @@
-#include "tv44.h"
-#include "action_layer.h"
-#include "eeconfig.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 _QW 0
-#define _DV 1
-#define _CM 2
-#define _L1 3
-#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)
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-
-
-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,
- MO(_L1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, MO(_L1),
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2),
- KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, KC_SPC, KC_RALT, KC_ESC, TG(_L3)
- ),
- [_DV] = LAYOUT( /* Dvorak */
- KC_TAB, KC_SLSH, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC,
- MO(_L1), KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, MO(_L1),
- KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, MO(_L2),
- KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, KC_SPC, KC_RALT, KC_ESC, TG(_L3)
- ),
- [_CM] = LAYOUT( /* Colemak */
- KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
- MO(_L1), KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, MO(_L1),
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, MO(_L2),
- KC_LCTL, MO(_L2), KC_LGUI, KC_ENT, KC_SPC, KC_RALT, KC_ESC, TG(_L3)
- ),
- [_L1] = LAYOUT( /* LAYER 1 */
- KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
- _______, KC_BSLS, KC_QUOT, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_DOWN, KC_UP, KC_LEFT, KC_RGHT, _______,
- _______, KC_ESC, _______, KC_PSCR, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_RSFT,
- _______, KC_LGUI, _______, _______, _______, _______, _______, _______
- ),
- [_L2] = LAYOUT( /* LAYER 2 */
- _______, QWERTY, DVORAK, COLEMAK, _______, _______, _______, KC_7, KC_8, KC_9, KC_0, _______,
- KC_ESC, KC_PIPE, KC_DQUO, KC_UNDS, KC_PLUS, L_CURBR, R_CURBR, KC_4, KC_5, KC_6, KC_VOLU, KC_ENT,
- _______, _______, _______, _______, _______, _______, KC_0, KC_1, KC_2, KC_3, KC_VOLD, _______,
- _______, _______, _______, _______, _______, _______, _______, _______
- ),
- [_L3] = LAYOUT( /* LAYER 3 */
- _______, _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, _______,
- KC_ESC, _______, _______, _______, _______, _______, _______, KC_F5, KC_F6, KC_F7, KC_F8, _______,
- KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_F12, _______,
- _______, KC_LSFT, KC_B, KC_SPC, KC_C, _______, _______, _______
- )
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch(id) {
- case _DV:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_DV);
- }
- break;
- case _QW:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_QW);
- }
- break;
- case _CM:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_CM);
- }
- break;
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/tv44/keymaps/default/rules.mk b/keyboards/tv44/keymaps/default/rules.mk
deleted file mode 100644
index f4671a9d1..000000000
--- a/keyboards/tv44/keymaps/default/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/jeebak/keymap.c b/keyboards/tv44/keymaps/jeebak/keymap.c
deleted file mode 100644
index 5503e1f9e..000000000
--- a/keyboards/tv44/keymaps/jeebak/keymap.c
+++ /dev/null
@@ -1,425 +0,0 @@
-#include "tv44.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-
-extern keymap_config_t keymap_config;
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QWERTY 0
-#define _COLEMAK 1
-#define _DVORAK 2
-#define _LOWER 3
-#define _RAISE 4
-#define _PLOVER 5
-#define _TOUCHCURSOR 6
-#define _MOUSECURSOR 7
-#define _ADJUST 16
-
-// Keycodes
-enum planck_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- PLOVER,
- LOWER,
- RAISE,
- BACKLIT,
- EXT_PLV
-};
-
-enum macro_keycodes {
- KC_ALT_TAB,
- KC_CMD_TAB,
- KC_CTL_TAB,
- KC_CMD_SLSH,
- KC_AG_FIND,
- KC_AG_AGAIN,
- KC_AG_UNDO,
- KC_AG_CUT,
- KC_AG_COPY,
- KC_AG_PASTE,
- KC_AG_DESK_L,
- KC_AG_DESK_R,
- KC_AG_TAB_C,
- KC_AG_TAB_N,
- KC_AG_TAB_R,
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
-// Custom macros
-#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
-#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
-#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper
-#define GUI_SEM GUI_T(KC_SCLN) // Tap for Semicolon, hold for GUI
-#define ALT_QUO ALT_T(KC_QUOT) // Tap for Quote, hold for Alt
-// Requires KC_TRNS/_______ for the trigger key in the destination layer
-#define LT_TC LT(_TOUCHCURSOR, KC_SPC) // L-ayer T-ap T-ouch C-ursor
-#define LT_MC(kc) LT(_MOUSECURSOR, kc) // L-ayer T-ap M-ouse C-ursor
-#define ALT_TAB M(KC_ALT_TAB) // Macro for Alt-Tab
-#define CMD_TAB M(KC_CMD_TAB) // Macro for Cmd-Tab
-#define CTL_TAB M(KC_CTL_TAB) // Macro for Ctl-Tab
-#define CMD_SLSH M(KC_CMD_SLSH) // Macro for Cmd-Slash (personal shortcut to toggle iTerm2 visibility)
-#define AG_FIND M(KC_AG_FIND) // Macros for Cmd-[x] vs Ctrl-[x] based on current AG_NORM or AG_SWAP settings
-#define AG_AGAIN M(KC_AG_AGAIN)
-#define AG_UNDO M(KC_AG_UNDO)
-#define AG_CUT M(KC_AG_CUT)
-#define AG_COPY M(KC_AG_COPY)
-#define AG_PASTE M(KC_AG_PASTE)
-#define AG_D_L M(KC_AG_DESK_L) // For Virtual Desktop Switching: Left, and
-#define AG_D_R M(KC_AG_DESK_R) // Right
-#define AG_T_C M(KC_AG_TAB_C) // For Chrome, etc. Tab Close,
-#define AG_T_N M(KC_AG_TAB_N) // Tab New, and
-#define AG_T_R M(KC_AG_TAB_R) // Tab Reopen Closed
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Qwerty
- *
- * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
- * |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
- * | Ctrl/Esc | A | S | MC/D | F | G | H | J | K | L |GUI/; | Alt/" |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | Shift | Z | X | C | V | B | N | M | , | . | / | Sft/Ent |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
- * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
- */
-[_QWERTY] = LAYOUT(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- CTL_ESC , KC_A, KC_S,LT_MC(KC_D), KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, GUI_SEM, ALT_QUO ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ),
-/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
-
-/* Colemak
- * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
- * |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
- * | Ctrl/Esc | A | R | MC/S | T | D | H | N | E | I | O | " |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | Shift | Z | X | C | V | B | K | M | , | . | / | Sft/Ent |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
- * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
- */
-[_COLEMAK] = LAYOUT(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- CTL_ESC , KC_A, KC_R,LT_MC(KC_S), KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ),
-/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
-
-/* Dvorak
- * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
- * |Hyper/Tab| " | , | . | P | Y | F | G | C | R | L | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
- * | Ctrl/Esc | A | O | MC/E | U | I | D | H | T | N | S | / |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | Shift | ; | Q | J | K | X | B | M | W | V | Z | Sft/Ent |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | Alt | GUI | Lower | TC/Space | TC/Space | Raise | Vol+ | Play |
- * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
- */
-[_DVORAK] = LAYOUT(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- CTL_ESC , KC_A, KC_O,LT_MC(KC_E), KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- KC_LSFT , KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- KC_LALT , KC_LGUI , LOWER , LT_TC , LT_TC , RAISE , KC_VOLU , KC_MPLY ),
-/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
-
-/* Lower
- * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
- * | [ | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | "|" |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | ] | F7 | F8 | F9 | F10 | F11 | F12 | - | = | [ | ] | \ |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | Brite | | | | | | Vol- | Mute |
- * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
- */
-[_LOWER] = LAYOUT(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- KC_TILD,KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- KC_LBRC , KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- KC_RBRC , KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- BACKLIT , _______ , _______ , _______ , _______ , _______ , KC_VOLD , KC_MUTE ),
-/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
-
-/* Raise
- * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
- * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
- * | $ | 4 | 5 | 6 | . | + | . | 4 | 5 | 6 | * | "|" |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | = | 7 | 8 | 9 | 0 | - | . | 1 | 2 | 3 | / | \ |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | Brite | | | | | | Vol- | Mute |
- * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
- */
-[_RAISE] = LAYOUT(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- KC_0 , KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- KC_DLR , KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_DOT, KC_4, KC_5, KC_6, KC_ASTR, KC_PIPE ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- KC_EQL , KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_DOT, KC_1, KC_2, KC_3, KC_SLSH, KC_BSLS ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- BACKLIT , _______ , _______ , _______ , _______ , _______ , KC_VOLD , KC_MUTE ),
-/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
-
-/* TouchCursor layer (http://martin-stone.github.io/touchcursor/) plus personal customizations
- * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
- * | AltTab |CmdTab|CtlTab| GUI |Shift | ~ |Insert| Home | Up | End | Bksp | |
- * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
- * | | Alt |Space |Tab_C | Find |Again | PgUp | Left | Down |Right |Desk_L| Desk_R |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | | Undo | Cut | Copy |Paste | ` | PgDn | Del |Tab_N |Tab_R |iTerm2| |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | | | | | | | | |
- * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
- *
- * The KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_FIND, and KC_AGAIN keycodes don't
- * seem to work on Mac. Presumably they'll work under Windows.
- */
-
-[_TOUCHCURSOR] = LAYOUT(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- ALT_TAB,CMD_TAB, CTL_TAB, KC_LGUI, KC_LSFT, KC_TILD, KC_INS, KC_HOME, KC_UP, KC_END, KC_BSPC, _______ ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- _______ ,KC_LALT, KC_SPC, AG_T_C, AG_FIND,AG_AGAIN, KC_PGUP, KC_LEFT, KC_DOWN, KC_RGHT, AG_D_L, AG_D_R ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- _______ ,AG_UNDO, AG_CUT, AG_COPY,AG_PASTE, KC_GRV, KC_PGDN, KC_DEL, AG_T_N, AG_T_R,CMD_SLSH, _______ ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ),
-/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
-
-/* Mouse Layer
- * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
- * | | |ACCL0 | | | | |WHL_L | Up |WHL_R | BTN2 | |
- * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
- * | |ACCL2 | BTN2 | | BTN1 |ACCL1 |WHL_Up| Left | Down |Right | BTN4 | BTN5 |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | | | | | BTN3 | |WHL_Dn| BTN1 | | | BTN3 | |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | | | | | | | | |
- * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
- */
-
-[_MOUSECURSOR] = LAYOUT(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- _______,_______, KC_ACL0, _______, _______, _______, _______, KC_WH_L, KC_MS_U, KC_WH_R, KC_BTN2, _______ ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- _______ ,KC_ACL2, KC_BTN2, _______, KC_BTN1, KC_ACL1, KC_WH_U, KC_MS_L, KC_MS_D, KC_MS_R, KC_BTN4, KC_BTN5 ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- _______ ,_______, _______, _______, KC_BTN3, _______, KC_WH_D, KC_BTN1, _______, _______, KC_BTN3, _______ ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ ),
-/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
-
-/* Plover layer (http://opensteno.org)
- * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
- * | # | # | # | # | # | # | # | # | # | # | # | # |
- * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
- * | | S | T | P | H | * | * | F | P | L | T | D |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | TogOut | S | K | W | R | * | * | R | B | G | S | Z |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | Exit | A | O | | | E | U | |
- * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
- */
-
-[_PLOVER] = LAYOUT(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- KC_1 , KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- XXXXXXX , KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- XXXXXXX , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- EXT_PLV , KC_C , KC_V , XXXXXXX , XXXXXXX , KC_N , KC_M , XXXXXXX ),
-/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
-
-/* Adjust (Lower + Raise)
- * ,---------+------+------+------+------+------+------+------+------+------+------+-------------.
- * | | | | | | | | | | | | Del |
- * |---------`------`------`------`------`------`------`------`------`------`------`-------------|
- * | | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
- * |----------`------`------`------`------`------`------`------`------`------`------`------------|
- * | | | | | | | | | | | | |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-----------|
- * | | | | | | | | Reset |
- * `--------+---------+---------+------^^^-------+-----^^^--------+---------+---------+---------'
- */
-[_ADJUST] = LAYOUT(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- _______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______ ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- _______ , _______ , _______ , _______ , _______ , _______ , _______ , RESET )
-/*`-----------+---------------+---------+-------^^^------+-------^^^-------+---------+-----------------+--------------'*/
-};
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- default_layer_set(1UL<<_QWERTY);
- }
- return false;
- break;
- case COLEMAK:
- if (record->event.pressed) {
- default_layer_set(1UL<<_COLEMAK);
- }
- return false;
- break;
- case DVORAK:
- if (record->event.pressed) {
- default_layer_set(1UL<<_DVORAK);
- }
- return false;
- break;
- case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case BACKLIT:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- } else {
- unregister_code(KC_RSFT);
- }
- return false;
- break;
- case PLOVER:
- if (record->event.pressed) {
- layer_off(_RAISE);
- layer_off(_LOWER);
- layer_off(_ADJUST);
- layer_on(_PLOVER);
- if (!eeconfig_is_enabled()) {
- eeconfig_init();
- }
- keymap_config.raw = eeconfig_read_keymap();
- keymap_config.nkro = 1;
- eeconfig_update_keymap(keymap_config.raw);
- }
- return false;
- break;
- case EXT_PLV:
- if (record->event.pressed) {
- layer_off(_PLOVER);
- }
- 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();
- }
-
- bool use_cmd = true; // Use, for example, Cmd-Tab, Cmd-C, Cmd-V, etc.
- // Compare to MAGIC_SWAP_ALT_GUI and MAGIC_UNSWAP_ALT_GUI configs, set in:
- // quantum/quantum.c
- if(keymap_config.swap_lalt_lgui == 1 && keymap_config.swap_ralt_rgui == 1) {
- use_cmd = false; // ... or, Alt-Tab, Ctrl-C, Ctrl-V, etc.
- }
-
- switch (id) {
- case KC_ALT_TAB:
- if(use_cmd) { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); }
- else { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); }
- case KC_CMD_TAB:
- if(use_cmd) { return (record->event.pressed ? MACRO( D(LGUI), D(TAB), END ) : MACRO( U(TAB), END )); }
- else { return (record->event.pressed ? MACRO( D(LALT), D(TAB), END ) : MACRO( U(TAB), END )); }
-
- case KC_CTL_TAB:
- return (record->event.pressed ? MACRO( D(LCTRL), D(TAB), END ) : MACRO( U(TAB), END ));
- case KC_CMD_SLSH:
- return (record->event.pressed ? MACRO( D(LGUI), D(SLSH),END ) : MACRO( U(SLSH),END ));
-
- case KC_AG_FIND:
- return use_cmd ? MACRODOWN( D(LGUI), T(F), END ) : MACRODOWN( D(LCTRL), T(F), END );
- case KC_AG_AGAIN:
- return use_cmd ? MACRODOWN( D(LGUI), T(G), END ) : MACRODOWN( D(LCTRL), T(G), END );
- case KC_AG_UNDO:
- return use_cmd ? MACRODOWN( D(LGUI), T(Z), END ) : MACRODOWN( D(LCTRL), T(Z), END );
- case KC_AG_CUT:
- return use_cmd ? MACRODOWN( D(LGUI), T(X), END ) : MACRODOWN( D(LCTRL), T(X), END );
- case KC_AG_COPY:
- return use_cmd ? MACRODOWN( D(LGUI), T(C), END ) : MACRODOWN( D(LCTRL), T(C), END );
- case KC_AG_PASTE:
- return use_cmd ? MACRODOWN( D(LGUI), T(V), END ) : MACRODOWN( D(LCTRL), T(V), END );
-
- case KC_AG_DESK_L:
- return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(SCLN), END ) : MACRODOWN( D(LALT), D(LCTRL), T(SCLN), END );
- case KC_AG_DESK_R:
- return use_cmd ? MACRODOWN( D(LGUI), D(LCTRL), T(QUOT), END ) : MACRODOWN( D(LALT), D(LCTRL), T(QUOT), END );
-
- case KC_AG_TAB_C:
- return use_cmd ? MACRODOWN( D(LGUI), T(W), END ) : MACRODOWN( D(LCTRL), T(W), END );
- case KC_AG_TAB_N:
- return use_cmd ? MACRODOWN( D(LGUI), T(T), END ) : MACRODOWN( D(LCTRL), T(T), END );
- case KC_AG_TAB_R:
- return use_cmd ? MACRODOWN( D(LGUI), D(LSHIFT), T(T), END ) : MACRODOWN( D(LCTRL), D(LSHIFT), T(T), END );
- }
-
- return MACRO_NONE;
-}
diff --git a/keyboards/tv44/keymaps/jeebak/rules.mk b/keyboards/tv44/keymaps/jeebak/rules.mk
deleted file mode 100644
index f4671a9d1..000000000
--- a/keyboards/tv44/keymaps/jeebak/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/jetpacktuxedo/keymap.c b/keyboards/tv44/keymaps/jetpacktuxedo/keymap.c
deleted file mode 100644
index 45bedaa97..000000000
--- a/keyboards/tv44/keymaps/jetpacktuxedo/keymap.c
+++ /dev/null
@@ -1,39 +0,0 @@
-#include "tv44.h"
-
-extern keymap_config_t keymap_config;
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT_arrow_command( /* Qwerty */
- KC_GESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- 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, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, MT(MOD_RSFT, KC_SLSH),
- KC_LCTL, KC_LGUI, KC_LALT, MO(3), LT(1, KC_SPC), LT(1, KC_SPC), MO(4), KC_LEFT, KC_DOWN, KC_RIGHT
- ),
- [1] = LAYOUT_arrow_command( /* LAYER 2 */
- 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_MINS, KC_EQL, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_QUOT, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_PGUP, KC_BSLS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
- ),
- [2] = LAYOUT_arrow_command( /* LAYER 1 */
- 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_UNDS, KC_PLUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_DQUO, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LCBR, KC_RCBR, KC_PGUP, KC_PIPE,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END
- ),
- [3] = LAYOUT_arrow_command( /* LAYER 3 */
- KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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
- ),
- [4] = LAYOUT_arrow_command( /* Gaming Layer*/
- KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_U, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS,
- KC_TAB, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_D, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_SPACE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-};
diff --git a/keyboards/tv44/keymaps/jetpacktuxedo/rules.mk b/keyboards/tv44/keymaps/jetpacktuxedo/rules.mk
deleted file mode 100644
index ebc9f810f..000000000
--- a/keyboards/tv44/keymaps/jetpacktuxedo/rules.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/tv44/keymaps/mjt/keymap.c b/keyboards/tv44/keymaps/mjt/keymap.c
deleted file mode 100644
index 25f8cfc52..000000000
--- a/keyboards/tv44/keymaps/mjt/keymap.c
+++ /dev/null
@@ -1,199 +0,0 @@
-//Author: mike terhar
-
-#include "tv44.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-#ifdef BACKLIGHT_ENABLE
- #include "backlight.h"
-#endif
-
-enum minivan_layers {
- _QWERTY,
- _NUMSYM,
- _FKEYS,
- _FKEYGRV,
- _PLOVER,
- _ADJUST
-};
-
-enum planck_keycodes {
- QWERTY = SAFE_RANGE,
- DYNKEY,
- DYNAMIC_MACRO_RANGE,
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define FKEYS F(_FKEYS)
-#define NUMSYM F(_NUMSYM)
-#define FKEYGRV F(_FKEYGRV)
-#define MACSLEEP M(5)
-#define PLOVER M(6)
-#define LAYERRESET M(7)
-#define BACKLIT M(8)
-#define ADJUST M(9)
-#define XXXXXXX KC_NO
-
-#include "dynamic_macro.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_QWERTY] = {
- {FKEYS, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC},
- {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT},
- {KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT,KC_SLSH,SFT_T(KC_ENT) },
- {KC_LCTL,KC_LALT,KC_LGUI, KC_SPC,XXXXXXX,XXXXXXX,XXXXXXX,NUMSYM,KC_LEFT,KC_DOWN,KC_UP ,KC_RIGHT}
-},
-[_NUMSYM] = {
- {FKEYGRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______},
- {KC_DEL,KC_EXLM, KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN, ADJUST },
- { _______, KC_UNDS,KC_PLUS, KC_LCBR,KC_RCBR,KC_PIPE , KC_MINS,KC_EQL,KC_LBRC, KC_RBRC, KC_BSLS, _______},
- {_______,_______,_______,_______,XXXXXXX,XXXXXXX,XXXXXXX,_______, KC_HOME, KC_PGDN, KC_PGUP, KC_END}
-},
-[_FKEYS] ={
- {_______, 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, _______, _______, _______, MACSLEEP, DYN_REC_START1, DYN_REC_START2 },
- {KC_CAPS, _______, _______, _______, _______, _______, _______, _______, DYN_MACRO_PLAY1, DYN_MACRO_PLAY2,_______,DYN_REC_STOP},
- {_______,_______,_______,LAYERRESET,XXXXXXX,XXXXXXX,XXXXXXX,LAYERRESET, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY}
-},
-[_PLOVER] = {
- {KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1, KC_1 },
- {XXXXXXX, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC},
- {XXXXXXX, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT},
- {LAYERRESET, XXXXXXX, KC_C, KC_V, XXXXXXX , XXXXXXX, XXXXXXX, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX}
-},
-[_ADJUST] = {
- {_______ , RESET, _______, _______, _______, _______, _______, _______, KC_SLCK, KC_PAUS, KC_PSCR, KC_DEL },
- {_______ , _______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, _______, MACSLEEP, PLOVER, _______},
- {_______ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
- {BACKLIT, _______, _______, LAYERRESET, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______}
-}
-};
-
-#ifdef AUDIO_ENABLE
-
-float tone_startup[][2] = SONG(STARTUP_SOUND);
-float tone_qwerty[][2] = SONG(QWERTY_SOUND);
-float tone_dyn_macro_rec[][2] = SONG(DVORAK_SOUND);
-float tone_dyn_macro_play[][2] = SONG(COLEMAK_SOUND);
-float tone_plover[][2] = SONG(PLOVER_SOUND);
-float tone_adjust[][2] = SONG(PLOVER_GOODBYE_SOUND);
-float music_scale[][2] = SONG(MUSIC_SCALE_SOUND);
-
-float tone_goodbye[][2] = SONG(GOODBYE_SOUND);
-#endif
-
-void persistant_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-const uint16_t PROGMEM fn_actions[] = {
- [_FKEYS] = ACTION_LAYER_TAP_KEY(_FKEYS, KC_TAB),
- [_FKEYGRV] = ACTION_LAYER_TAP_KEY(_FKEYS, KC_GRV),
- [_NUMSYM] = ACTION_LAYER_TAP_TOGGLE(_NUMSYM),
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch(id) {
- case 5: // MACSLEEP
- if (record->event.pressed) {
- register_code(KC_RSFT);
- register_code(KC_RCTL);
- register_code(KC_POWER);
- unregister_code(KC_POWER);
- unregister_code(KC_RCTL);
- unregister_code(KC_RSFT);
- }
- break;
- case 6: // PLOVER
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- stop_all_notes();
- PLAY_NOTE_ARRAY(tone_plover, false, 0);
- #endif
- layer_off(_NUMSYM);
- layer_off(_FKEYS);
- layer_off(_ADJUST);
- layer_on(_PLOVER);
- }
- break;
- case 7: // LAYERRESET
- if (record->event.pressed) {
- #ifdef AUDIO_ENABLE
- PLAY_NOTE_ARRAY(tone_qwerty, false, 0);
- #endif
- layer_off(_NUMSYM);
- layer_off(_FKEYS);
- layer_off(_PLOVER);
- layer_off(_ADJUST);
- }
- break;
- case 8: // BACKLIT
- if (record->event.pressed) {
- register_code(KC_RSFT);
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- case 9: // ADJUST
- if(record->event.pressed) {
- #ifdef AUDIO_ENABLE
- stop_all_notes();
- PLAY_NOTE_ARRAY(tone_adjust, false, 0);
- #endif
- layer_off(_NUMSYM);
- layer_off(_FKEYS);
- layer_off(_PLOVER);
- layer_on(_ADJUST);
- }
- }
- return MACRO_NONE;
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- uint16_t macro_kc = keycode;
- if (keycode == FKEYS || keycode == ADJUST || keycode == FKEYGRV ){
- macro_kc = DYN_REC_STOP;
- }
- if (!process_record_dynamic_macro(macro_kc, record)) {
- return false;
- }
-
- return true;
-}
-
-void matrix_init_user(void) {
- #ifdef AUDIO_ENABLE
- startup_user();
- #endif
-}
-
-#ifdef AUDIO_ENABLE
-
-void startup_user()
-{
- _delay_ms(20); // gets rid of tick
- PLAY_NOTE_ARRAY(tone_startup, false, 0);
-}
-
-void shutdown_user()
-{
- PLAY_NOTE_ARRAY(tone_goodbye, false, 0);
- _delay_ms(150);
- stop_all_notes();
-}
-
-void music_on_user(void)
-{
- music_scale_user();
-}
-
-void music_scale_user(void)
-{
- PLAY_NOTE_ARRAY(music_scale, false, 0);
-}
-#endif
diff --git a/keyboards/tv44/keymaps/mjt/rules.mk b/keyboards/tv44/keymaps/mjt/rules.mk
deleted file mode 100644
index 41afd9a55..000000000
--- a/keyboards/tv44/keymaps/mjt/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = yes # Console for debug(+400)
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
diff --git a/keyboards/tv44/keymaps/smt/keymap.c b/keyboards/tv44/keymaps/smt/keymap.c
deleted file mode 100644
index 0e1484e82..000000000
--- a/keyboards/tv44/keymaps/smt/keymap.c
+++ /dev/null
@@ -1,232 +0,0 @@
-#include "tv44.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-
-extern keymap_config_t keymap_config;
-
-// Each layer gets a name for readability, which is then used in the keymap matrix below.
-// The underscores don't mean anything - you can have a layer called STUFF or any other name.
-// Layer names don't all need to be of the same length, obviously, and you can also skip them
-// entirely and just use numbers.
-#define _QWERTY 0
-#define _COLEMAK 1
-#define _DVORAK 2
-#define _LOWER 3
-#define _RAISE 4
-#define _ADJUST 16
-
-// Keycodes
-enum planck_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
- LOWER,
- RAISE,
- BACKLIT
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
-// Custom macros
-#define CTL_ESC CTL_T(KC_ESC) // Tap for Esc, hold for Ctrl
-#define SFT_ENT SFT_T(KC_ENT) // Tap for Enter, hold for Shift
-#define HPR_TAB ALL_T(KC_TAB) // Tap for Tab, hold for Hyper (Super+Ctrl+Alt+Shift)
-#define ALT_GRV ALT_T(KC_GRV) // Tap for Backtick, hold for Alt (Ctrl+Alt+Shift)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Qwerty
- *
- * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
- * |Hyper/Tab| Q | W | E | R | T | Y | U | I | O | P | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`---------|
- * | Ctrl/Esc | A | S | D | F | G | H | J | K | L | ; | ' |
- * |----------`------`------`------`------`------`------`------`------`------`------`--------|
- * | Shift | Z | X | C | V | B | N | M | , | . | / |Sft/Ent|
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
- * | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
- * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
- */
-[_QWERTY] = LAYOUT_arrow(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- HPR_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- CTL_ESC , KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- ALT_GRV , KC_LGUI , LOWER , KC_SPC , KC_SPC , RAISE , KC_RGUI, KC_RALT, KC_RCTL ),
-/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
-
-/* Colemak
- * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
- * |Hyper/Tab| Q | W | F | P | G | J | L | U | Y | ; | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`---------|
- * | Ctrl/Esc | A | R | S | T | D | H | N | E | I | O | ' |
- * |----------`------`------`------`------`------`------`------`------`------`------`--------|
- * | Shift | Z | X | C | V | B | K | M | , | . | / |Sft/Ent|
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
- * | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
- * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
- */
-[_COLEMAK] = LAYOUT_arrow(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- HPR_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- CTL_ESC , KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- KC_LSFT , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, SFT_ENT ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- ALT_GRV , KC_LGUI , LOWER , KC_SPC , KC_SPC , RAISE , KC_RGUI, KC_RALT, KC_RCTL ),
-/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
-
-/* Dvorak
- * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
- * |Hyper/Tab| ' | , | . | P | Y | F | G | C | R | L | Bksp |
- * |---------`------`------`------`------`------`------`------`------`------`------`---------|
- * | Ctrl/Esc | A | O | E | U | I | D | H | T | N | S | - |
- * |----------`------`------`------`------`------`------`------`------`------`------`--------|
- * | Shift | ; | Q | J | K | X | B | M | W | V | Z |Sft/Ent|
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
- * | Alt/` | GUI | Lower | Space | Space | Raise | GUI | Alt | Ctrl |
- * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
- */
-[_DVORAK] = LAYOUT_arrow(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- HPR_TAB,KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- CTL_ESC , KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- KC_LSFT , KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, SFT_ENT ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- ALT_GRV , KC_LGUI , LOWER , KC_SPC , KC_SPC , RAISE , KC_RGUI, KC_RALT, KC_RCTL ),
-/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
-
-/* Lower
- * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
- * | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Del |
- * |---------`------`------`------`------`------`------`------`------`------`------`---------|
- * | $ | 4 | 5 | 6 | . | + | * | 4 | 5 | 6 | . | PageUp |
- * |----------`------`------`------`------`------`------`------`------`------`------`--------|
- * | = | 7 | 8 | 9 | 0 | - | / | 1 | 2 | 3 | Up |PageDn |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
- * | Brite | | | Home | End | | Left | Down | Right |
- * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
- */
-[_LOWER] = LAYOUT_arrow(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
-ALL_T(KC_0), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
-CTL_T(KC_DLR), KC_4, KC_5, KC_6, KC_DOT, KC_PLUS, KC_ASTR, KC_4, KC_5, KC_6, KC_DOT, KC_PGUP ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
-SFT_T(KC_EQL), KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_SLSH, KC_1, KC_2, KC_3, KC_UP, SFT_T(KC_PGDN),
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-ALT_T(BACKLIT), _______ , _______ , KC_HOME , KC_END , _______ , KC_LEFT, KC_DOWN, KC_RGHT ),
-/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
-
-/* Raise
- * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Del |
- * |---------`------`------`------`------`------`------`------`------`------`------`---------|
- * | F1 | F2 | F3 | F4 | F5 | F6 | _ | ? | + | { | } | |
- * |----------`------`------`------`------`------`------`------`------`------`------`--------|
- * | F7 | F8 | F9 | F10 | F11 | F12 | - | / | = | [ | ] | |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
- * | Brite | | | Play | Next | | Mute | Vol- | Vol+ |
- * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
- */
-[_RAISE] = LAYOUT_arrow(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
-ALL_T(KC_TILD),KC_EXLM,KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
-CTL_T(KC_F1), KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_QUES, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- SFT_T(KC_F7), KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_MINS, KC_SLSH, KC_EQL, KC_LBRC, KC_RBRC, SFT_T(KC_BSLS),
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
-ALT_T(BACKLIT), _______ , _______ , KC_MPLY , KC_MNXT , _______ , KC_MUTE, KC_VOLD, KC_VOLU ),
-/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
-
-/* Adjust (Lower + Raise)
- * ,---------+------+------+------+------+------+------+------+------+------+------+---------.
- * | | Reset| | | | | | | | | | Reset |
- * |---------`------`------`------`------`------`------`------`------`------`------`---------|
- * | | | | | |AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
- * |----------`------`------`------`------`------`------`------`------`------`------`--------|
- * | | | | | | | | | | | | |
- * |-----------`------`------`------`------`-----'-------`------`------`------`------`-------|
- * | | | | | | | | | |
- * `-------+---------+--------+-----^^^------+-----^^^------+---------+------+------+-------'
- */
-[_ADJUST] = LAYOUT_arrow(
-/*,--------+-------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------.*/
- _______, RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET ,
-/*|--------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`-----------------|*/
- _______ ,_______, _______, _______, _______, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______ ,
-/*|---------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`----------------|*/
- _______ ,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
-/*|----------`-------`--------`--------`--------`--------`--------`--------`--------`--------`--------`---------------|*/
- _______ , _______ , _______ , _______ , _______ , _______ , _______, _______, _______ ),
-/*`---------+---------------+---------+-------^^^------+-------^^^-------+----------+--------+--------+--------------'*/
-};
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_QWERTY);
- }
- return false;
- break;
- case COLEMAK:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_COLEMAK);
- }
- return false;
- break;
- case DVORAK:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_DVORAK);
- }
- return false;
- break;
- case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case BACKLIT:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- } else {
- unregister_code(KC_RSFT);
- }
- return false;
- break;
- }
- return true;
-}
diff --git a/keyboards/tv44/keymaps/smt/rules.mk b/keyboards/tv44/keymaps/smt/rules.mk
deleted file mode 100644
index f4671a9d1..000000000
--- a/keyboards/tv44/keymaps/smt/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/tong92/keymap.c b/keyboards/tv44/keymaps/tong92/keymap.c
deleted file mode 100644
index a8c101b64..000000000
--- a/keyboards/tv44/keymaps/tong92/keymap.c
+++ /dev/null
@@ -1,136 +0,0 @@
-//Author: tong92 <tong92power@gmail.com>
-
-#include "tv44.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-#ifdef BACKLIGHT_ENABLE
- #include "backlight.h"
-#endif
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define LOWER F(1)
-#define RAISE F(2)
-#define FTN MO(4)
-#define MOUSE M(10)
-#define GO_DEFT M(99)
-#define XXXXXXX KC_NO
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-/* Qwerty
- * ,--------------------------------------------------------------------------.
- * | Tab | Q | W | E | R | T | Y | U | I | O | P | Bksp |
- * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
- * | Ctrl | A | S | D | F | G | H | J | K | L | ; | Enter|
- * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
- * | Shift | Z | X | C | V | B | N | M | , | . | / |Shift|
- * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
- * | Ftn1 | GUI | Alt | Space/LOWER | Space/RAISE | ' | [ | ] | Alt |
- * `--------------------------------------------------------------------------'
- */
-[0] = LAYOUT_arrow(
-KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
-KC_LCTL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_ENT,
-KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_RSFT,
-FTN, KC_LGUI,KC_LALT, LOWER, RAISE, KC_QUOT,KC_LBRC,KC_RBRC,KC_RALT
-),
-/* LOWER
- * ,--------------------------------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | |
- * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
- * | | F1 | F2 | F3 | F4 | F5 | F6 | - | + | [ | ] | \ |
- * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo|
- * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
- * | | | | | | END | LEFT| Down|RIGHT|
- * `--------------------------------------------------------------------------'
- */
-[1] = LAYOUT_arrow(
-KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
-_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS,KC_PLUS,KC_LBRC,KC_RBRC,KC_BSLS,
-_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN,
-XXXXXXX,_______,_______, _______,XXXXXXX, KC_END, KC_LEFT,KC_DOWN,KC_RIGHT
-),
-/* RAISE
- * ,--------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | |
- * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
- * | | F1 | F2 | F3 | F4 | F5 | F6 | _ | = | { | } | | |
- * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 | | HOME| PgUp| UP | PgDo|
- * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
- * | | | | | | END | LEFT| Down|RIGHT|
- * `--------------------------------------------------------------------------'
- */
-[2] = LAYOUT_arrow(
-KC_TILD,KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,_______,
-_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS,KC_EQL, KC_LCBR,KC_RCBR,KC_PIPE,
-_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,KC_HOME,KC_PGUP,KC_UP ,KC_PGDN,
-XXXXXXX,_______,_______, _______,_______, KC_END, KC_LEFT,KC_DOWN,KC_RIGHT
-),
-/* FTN
- * ,--------------------------------------------------------------------------.
- * | ESC |WinOf|WinUp| | |Sh+Ca| | PgUp| UP | PgDo|PrtSc| DELET |
- * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
- * | |WinLe|WinDo|WinRi| |Al+Ca|CapsL| LEFT| DOWN|RIGHT| | |
- * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
- * | |WinLW|WinRW| | |Ct+Ca|ScroL| HOME| | END | | Ctrl|
- * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
- * | | DeskL | DeskR| Task Manager| DeskX | MOUSE| | | LED |
- * `--------------------------------------------------------------------------'
- */
-[4] = LAYOUT_arrow(
-KC_ESC ,LALT(KC_F4) ,LGUI(KC_UP) ,XXXXXXX ,XXXXXXX,S(KC_CAPS) ,XXXXXXX ,KC_PGUP,KC_UP ,KC_PGDN ,KC_PSCR,KC_DELT,
-_______,LGUI(KC_LEFT) ,LGUI(KC_DOWN) ,LGUI(KC_RIGHT),XXXXXXX,LALT(KC_CAPS) ,KC_CAPS ,KC_LEFT,KC_DOWN,KC_RIGHT,XXXXXXX,XXXXXXX,
-_______,LGUI(LSFT(KC_LEFT)),LGUI(LSFT(KC_RIGHT)),XXXXXXX ,XXXXXXX,LCTL(KC_CAPS) ,KC_SLCK ,KC_HOME,XXXXXXX,KC_END ,XXXXXXX,KC_RCTL,
-_______,LGUI(LCTL(KC_LEFT)),LGUI(LCTL(KC_RIGHT)), LCTL(LALT(KC_DELT)),LGUI(LCTL(KC_F4)), MOUSE ,XXXXXXX ,XXXXXXX,M(0)
-),
-/* MOUSE
- * ,--------------------------------------------------------------------------.
- * | | | |Mo_Up| | | |M_WhL|M_WhU|M_WhR| | RESET |
- * |------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-------|
- * | | |Mo_Le|Mo_Do|Mo_Ri| | |M_Bt1|M_WhD|M_Bt2| | |
- * |-------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`------|
- * | | | | | | | |M_AC0|M_AC1|M_AC2| | |
- * |--------`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----`-----|
- * | | | | GO_DEFAULT | GO_DEFAULT | | | | |
- * `--------------------------------------------------------------------------'
- */
-[10] = LAYOUT_arrow(
-XXXXXXX,XXXXXXX,XXXXXXX,KC_MS_U,XXXXXXX,XXXXXXX,XXXXXXX,KC_WH_L,KC_WH_U,KC_WH_R,XXXXXXX,RESET,
-XXXXXXX,XXXXXXX,KC_MS_L,KC_MS_D,KC_MS_R,XXXXXXX,XXXXXXX,KC_BTN1,KC_WH_D,KC_BTN2,XXXXXXX,XXXXXXX,
-XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,KC_ACL0,KC_ACL1,KC_ACL2,XXXXXXX,XXXXXXX,
-XXXXXXX,XXXXXXX,XXXXXXX, GO_DEFT,GO_DEFT, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX
-)
-};
-
-const uint16_t PROGMEM fn_actions[] = {
- [1] = ACTION_LAYER_TAP_KEY(1, KC_SPC),
- [2] = ACTION_LAYER_TAP_KEY(2, KC_SPC)
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- switch(id) {
- case 0:
- if (record->event.pressed) {
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- }
- break;
- case 10:
- if (record->event.pressed) {
- layer_on(10);
- }
- break;
- case 99:
- if (record->event.pressed) {
- layer_off(10);
- layer_off(4);
- }
- break;
- }
- return MACRO_NONE;
-};
diff --git a/keyboards/tv44/keymaps/tong92/rules.mk b/keyboards/tv44/keymaps/tong92/rules.mk
deleted file mode 100644
index e60e3c5c5..000000000
--- a/keyboards/tv44/keymaps/tong92/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# 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 = 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 this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/tv44/keymaps/xyverz/keymap.c b/keyboards/tv44/keymaps/xyverz/keymap.c
deleted file mode 100644
index bbdb9093e..000000000
--- a/keyboards/tv44/keymaps/xyverz/keymap.c
+++ /dev/null
@@ -1,126 +0,0 @@
-#include "tv44.h"
-#include "action_layer.h"
-#include "eeconfig.h"
-
-extern keymap_config_t keymap_config;
-
-enum planck_layers {
- _QWERTY,
- _COLEMAK,
- _DVORAK,
- _LOWER,
- _RAISE,
- _ADJUST
-};
-
-enum planck_keycodes {
- DVORAK = SAFE_RANGE,
- QWERTY,
- COLEMAK,
- LOWER,
- RAISE,
- ADJUST
-};
-
-// Fillers to make layering more clear
-#define _______ KC_TRNS
-#define XXXXXXX KC_NO
-
-// Aliases for some other things I want to try out
-#define RAI_ESC LT(_RAISE, KC_ESC)
-#define LOW_QUQ LT(_LOWER, KC_QUOT)
-#define LOW_MIN LT(_LOWER, KC_MINS) // Same as above, but for Dvorak layer
-#define GUIBSPC GUI_T(KC_BSPC)
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [_DVORAK] = LAYOUT( /* 0: Dvorak */
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH,
- RAI_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, LOW_MIN,
- KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT,
- KC_LCTL, KC_LALT, LOWER, GUIBSPC, KC_SPC, RAISE, KC_LGUI, KC_ENT
- ),
-
- [_QWERTY] = LAYOUT( /* 1: 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,
- RAI_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, LOW_QUQ,
- 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, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LGUI, KC_ENT
- ),
-
- [_COLEMAK] = LAYOUT( /* 2: Colemak */
- KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC,
- RAI_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, LOW_QUQ,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
- KC_LCTL, KC_LALT, LOWER, KC_BSPC, KC_SPC, RAISE, KC_LGUI, KC_ENT
- ),
-
- [_LOWER] = LAYOUT( /* 1: FN 1 */
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
- _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
- KC_CAPS, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
- KC_LEFT, KC_RGHT, _______, KC_DEL, KC_INS, _______, KC_UP, KC_DOWN
- ),
-
- [_RAISE] = LAYOUT( /* 2: FN 2 */
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
- _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_CAPS, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______,
- KC_LEFT, KC_RGHT, _______, KC_DEL, KC_INS, _______, KC_UP, KC_DOWN
- ),
-
- [_ADJUST] = LAYOUT(
- KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12,
- _______, RESET, _______, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- KC_HOME, KC_END, _______, _______, _______, _______, KC_PGUP, KC_PGDN
- )
-};
-
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_QWERTY);
- }
- return false;
- break;
- case COLEMAK:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_COLEMAK);
- }
- return false;
- break;
- case DVORAK:
- if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_DVORAK);
- }
- return false;
- break;
- case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- }
- return true;
-}
diff --git a/keyboards/tv44/keymaps/xyverz/rules.mk b/keyboards/tv44/keymaps/xyverz/rules.mk
deleted file mode 100644
index f4671a9d1..000000000
--- a/keyboards/tv44/keymaps/xyverz/rules.mk
+++ /dev/null
@@ -1,21 +0,0 @@
-# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
-# the appropriate keymap folder that will get included automatically
-#
-BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-MIDI_ENABLE = no # MIDI controls
-AUDIO_ENABLE = no # Audio output on port C6
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif \ No newline at end of file
diff --git a/keyboards/tv44/readme.md b/keyboards/tv44/readme.md
deleted file mode 100644
index f23ca0da5..000000000
--- a/keyboards/tv44/readme.md
+++ /dev/null
@@ -1,14 +0,0 @@
-The Van 44
-==========
-
-A compact 44% keyboard.
-
-Keyboard Maintainer: QMK Community
-Hardware Supported: The Van PCB
-Hardware Availability: https://thevankeyboards.com/collections/catalog/products/minivan-diy?variant=609138376718
-
-Make example for this keyboard (after setting up your build environment):
-
- make tv44:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/tv44/tv44.c b/keyboards/tv44/tv44.c
deleted file mode 100644
index 6dc0efd28..000000000
--- a/keyboards/tv44/tv44.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "tv44.h"
-
-void matrix_init_kb(void) {
- // put your keyboard start-up code here
- // runs once when the firmware starts up
-
- matrix_init_user();
-}
-
-void matrix_scan_kb(void) {
- // put your looping keyboard code here
- // runs every cycle (a lot)
-
- matrix_scan_user();
-}
-
-bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
- // put your per-action keyboard code here
- // runs for every action, just before processing by the firmware
-
- return process_record_user(keycode, record);
-}
-
-void led_set_kb(uint8_t usb_led) {
- // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
-
- led_set_user(usb_led);
-}
diff --git a/keyboards/tv44/tv44.h b/keyboards/tv44/tv44.h
deleted file mode 100644
index aea6179d9..000000000
--- a/keyboards/tv44/tv44.h
+++ /dev/null
@@ -1,67 +0,0 @@
-#ifndef TV44_H
-#define TV44_H
-
-#include "quantum.h"
-
-// This a shortcut to help you visually see your layout.
-// There are a number of variations depending on the layout of your bottom row.
-// The arrow variant adds an additional key on the bottom-right, while the
-// command variant adds an additional key on the bottom-left. arrow-command is a
-// combination of both of those, having an additional key on both sides.
-//
-// Please note that the numbering of the macro arguments are based on the
-// numbers of the keys on the PCB.
-
-#define LAYOUT( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
- K30, K31, K32, K33, K37, K38, K39, 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, KC_NO, KC_NO, KC_NO, K37, K38, K39, KC_NO, K3B } \
-}
-
-#define LAYOUT_arrow( \
- 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, 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, KC_NO, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \
-}
-
-#define LAYOUT_command( \
- 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 \
-) \
-{ \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
- { K30, K31, K32, K33, K34, KC_NO, KC_NO, K37, K38, K39, KC_NO, K3B } \
-}
-
-#define LAYOUT_arrow_command( \
- 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 \
-) \
-{ \
- { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B }, \
- { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B }, \
- { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B }, \
- { K30, K31, K32, K33, K34, KC_NO, KC_NO, K37, K38, K39, K3A, K3B } \
-}
-
-#endif
diff --git a/keyboards/uk78/config.h b/keyboards/uk78/config.h
index 35f5bf70b..34d672079 100644
--- a/keyboards/uk78/config.h
+++ b/keyboards/uk78/config.h
@@ -60,9 +60,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
/* ws2812b options */
#define RGB_DI_PIN F6
#ifdef RGB_DI_PIN
diff --git a/keyboards/unloved_bastard/matrix.c b/keyboards/unloved_bastard/matrix.c
deleted file mode 100644
index 65773879b..000000000
--- a/keyboards/unloved_bastard/matrix.c
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- Copyright 2017 Gabriel Young <gabeplaysdrums@live.com>
- Copyright 2018 Alexander Fougner <fougner89 at 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 <stdint.h>
-#include <stdbool.h>
-#include <avr/io.h>
-#include <util/delay.h>
-#include "print.h"
-#include "debug.h"
-#include "util.h"
-#include "matrix.h"
-
-#ifndef DEBOUNCING_DELAY
-# define DEBOUNCING_DELAY 5
-#endif
-static uint8_t debouncing = DEBOUNCING_DELAY;
-
-static matrix_row_t matrix[MATRIX_ROWS];
-static matrix_row_t matrix_debouncing[MATRIX_ROWS];
-
-static matrix_row_t scan_col(void) {
- return (
- (PINC&(1<<7) ? 0 : ((matrix_row_t)1<<0)) |
- (PINB&(1<<6) ? 0 : ((matrix_row_t)1<<1)) |
- (PINB&(1<<1) ? 0 : ((matrix_row_t)1<<2)) |
- (PINB&(1<<0) ? 0 : ((matrix_row_t)1<<3)) |
- (PINB&(1<<5) ? 0 : ((matrix_row_t)1<<4)) |
- (PINB&(1<<3) ? 0 : ((matrix_row_t)1<<5)) |
- (PINB&(1<<4) ? 0 : ((matrix_row_t)1<<6)) |
- (PINB&(1<<2) ? 0 : ((matrix_row_t)1<<7))
- );
-}
-
-static void select_col(uint8_t col) {
- switch (col) {
- case 0: PORTD = (PORTD & ~0b00111111) | 0b00110011; break;
- case 1: PORTD = (PORTD & ~0b00111111) | 0b00100011; break;
- case 2: PORTD = (PORTD & ~0b00111111) | 0b00010111; break;
- case 3: PORTD = (PORTD & ~0b00111111) | 0b00110011; break;
- case 4: PORTD = (PORTD & ~0b00111111) | 0b00010011; break;
- case 5: PORTD = (PORTD & ~0b00111111) | 0b00011011; break;
- case 6: PORTD = (PORTD & ~0b00111111) | 0b00110100; break;
- case 7: PORTD = (PORTD & ~0b00111111) | 0b00111010; break;
- case 8: PORTD = (PORTD & ~0b00111111) | 0b00111000; break;
- case 9: PORTD = (PORTD & ~0b00111111) | 0b00111100; break;
- case 10: PORTD = (PORTD & ~0b00111111) | 0b00110010; break;
- case 11: PORTD = (PORTD & ~0b00111111) | 0b00011111; break;
- case 12: PORTD = (PORTD & ~0b00111111) | 0b00001111; break;
- case 13: PORTD = (PORTD & ~0b00111111) | 0b00100111; break;
- case 14: PORTD = (PORTD & ~0b00111111) | 0b00000111; break;
- case 15: PORTD = (PORTD & ~0b00111111) | 0b00110110; break;
- case 16: PORTD = (PORTD & ~0b00111111) | 0b00001011; break;
- case 17: PORTD = (PORTD & ~0b00111111) | 0b00000011; break;
- }
-}
-
-void matrix_init(void) {
- /* Row output pins */
- DDRD |= 0b00111111;
- /* Column input pins */
- DDRC &= ~0b10000000;
- DDRB &= ~0b01111111;
- PORTC |= 0b10000000;
- PORTB |= 0b01111111;
-
- for (uint8_t i=0; i < MATRIX_ROWS; i++)
- matrix[i] = matrix_debouncing[i] = 0;
-
- matrix_init_quantum();
-}
-
-uint8_t matrix_scan(void) {
- for (uint8_t col = 0; col < MATRIX_COLS; col++) {
- select_col(col);
- _delay_us(3);
- matrix_row_t col_scan = scan_col();
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- bool prev_bit = matrix_debouncing[row] & ((matrix_row_t)1<<col);
- bool curr_bit = col_scan & (1<<row);
- if (prev_bit != curr_bit) {
- matrix_debouncing[row] ^= ((matrix_row_t)1<<col);
- debouncing = DEBOUNCING_DELAY;
- }
- }
- }
-
- if (debouncing) {
- if (--debouncing)
- _delay_ms(1);
- else
- for (uint8_t i = 0; i < MATRIX_ROWS; i++)
- matrix[i] = matrix_debouncing[i];
- }
-
- matrix_scan_quantum();
- return 1;
-}
-
-inline matrix_row_t matrix_get_row(uint8_t row) {
- return matrix[row];
-}
-
-void matrix_print(void) {
-#ifndef NO_PRINT
- print("\nr\\c ABCDEFGHIJKLMNOPQR\n");
- for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
- matrix_row_t matrix_row = matrix_get_row(row);
- xprintf("%02X: ", row);
- for (uint8_t col = 0; col < MATRIX_COLS; col++) {
- bool curr_bit = matrix_row & (1<<col);
- xprintf("%c", curr_bit ? '*' : '.');
- }
- print("\n");
- }
-#endif
-}
-
-uint8_t matrix_key_count(void) {
- uint8_t count = 0;
- for (uint8_t row = 0; row < MATRIX_ROWS; row++)
- count += bitpop32(matrix[row]);
- return count;
-}
diff --git a/keyboards/unloved_bastard/readme.md b/keyboards/unloved_bastard/readme.md
deleted file mode 100644
index 33c74d4b0..000000000
--- a/keyboards/unloved_bastard/readme.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# unloved_bastard
-
-![unloved_bastard](imgur.com image replace me!)
-
-A short description of the keyboard/project
-
-Keyboard Maintainer: [Alexander Fougner](https://github.com/fougner)
-Hardware Supported: CoolerMaster Masterkeys S PBT (Not the Pro versions with backlighting etc)
-Hardware Availability: Pretty much anywhere
-
-Make example for this keyboard (after setting up your build environment):
-
- make unloved_bastard:default
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/ut47/config.h b/keyboards/ut47/config.h
deleted file mode 100644
index 4335e3edd..000000000
--- a/keyboards/ut47/config.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
-Copyright 2018 Carlos Filoteo
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x0000
-#define DEVICE_VER 0x0001
-#define MANUFACTURER 40percent.club
-#define PRODUCT ut47
-#define DESCRIPTION An awesome 40% keyboard
-
-/* key matrix size */
-#define MATRIX_ROWS 4
-#define MATRIX_COLS 12
-
-#define MATRIX_ROW_PINS { D1, D0, D4, C6 }
-#define MATRIX_COL_PINS { D7, E6, B4, B5, B6, B2, B3, B1, F7, F6, F5, F4 }
-#define UNUSED_PINS
-
-/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
-#define DIODE_DIRECTION COL2ROW
-
-// #define BACKLIGHT_PIN B7
-// #define BACKLIGHT_BREATHING
-// #define BACKLIGHT_LEVELS 3
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCING_DELAY 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* key combination for magic key command */
-#define IS_COMMAND() ( \
- keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
-)
-
-/* Enable GNAP matrix serial output */
-#define GNAP_ENABLE
-
-/* USART configuration */
-#ifdef __AVR_ATmega32U4__
-# define SERIAL_UART_BAUD 9600
-# define SERIAL_UART_DATA UDR1
-# define SERIAL_UART_UBRR (F_CPU / (16UL * SERIAL_UART_BAUD) - 1)
-# define SERIAL_UART_RXD_VECT USART1_RX_vect
-# define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
-# define SERIAL_UART_INIT() do { \
- /* baud rate */ \
- UBRR1L = SERIAL_UART_UBRR; \
- /* baud rate */ \
- UBRR1H = SERIAL_UART_UBRR >> 8; \
- /* enable TX */ \
- UCSR1B = _BV(TXEN1); \
- /* 8-bit data */ \
- UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
- sei(); \
- } while(0)
-# else
-# error "USART configuration is needed."
-#endif
-
-#endif
diff --git a/keyboards/ut47/keymaps/default/config.h b/keyboards/ut47/keymaps/default/config.h
deleted file mode 100644
index 46098a22f..000000000
--- a/keyboards/ut47/keymaps/default/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2018 Carlos Filoteo
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
-
-// place overrides here
-
-#endif
diff --git a/keyboards/ut47/keymaps/default/keymap.c b/keyboards/ut47/keymaps/default/keymap.c
deleted file mode 100644
index 6b6bb025b..000000000
--- a/keyboards/ut47/keymaps/default/keymap.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Copyright 2018 Carlos Filoteo
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include QMK_KEYBOARD_H
-#ifdef LED_ENABLE
- #include "protocol/serial.h"
-#endif
-
-#define _______ KC_TRNS
-#define LT3_TAB LT(3, KC_TAB)
-#define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT)
-
-enum custom_keycodes {
- LED_TOG = SAFE_RANGE,
- LED_CHG
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Base Layer
- * ,-------------------------------------------------------------------------.
- * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
- * |-------------------------------------------------------------------------+
- * |Tab/L3| A | S | D | F | G | H | J | K | L | ; | ' |
- * |-------------------------------------------------------------------------+
- * | Shift | Z | X | C | V | B | N | M | , | . | / |Sh/En|
- * |-------------------------------------------------------------------------+
- * | Ctrl| Alt | Gui | App | L2 | Space | L1 | Left| Down| Up |Right|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT(
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- LT3_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, MT_RSFT_ENT,
- KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
-),
-
- /* FN Layer 1
- * ,-------------------------------------------------------------------------.
- * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete|
- * |-------------------------------------------------------------------------+
- * | | | | | | | | - | = | [ | ] | \ |
- * |-------------------------------------------------------------------------+
- * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | |
- * |-------------------------------------------------------------------------+
- * | | | |Capsl| | | | Home| PgDn| PgUp| End |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Right */
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
- _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
- _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
-),
-
- /* FN Layer 2
- * ,-------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |Delete|
- * |-------------------------------------------------------------------------+
- * | | | | | | | | _ | + | { | } | | |
- * |-------------------------------------------------------------------------+
- * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
- * |-------------------------------------------------------------------------+
- * | | | |Capsl| | | | Home| PgDn| PgUp| End |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Left */
- KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_DELETE,
- _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
-),
-
- /* FN Layer 2
- * ,-------------------------------------------------------------------------.
- * | Esc | Calc|Webhm| Mail| Comp| | | | | |PrtSc| |
- * |-------------------------------------------------------------------------+
- * | | | | | | | | | | | | |
- * |-------------------------------------------------------------------------+
- * | |LEDtg|LEDch| | | | | | | | | |
- * |-------------------------------------------------------------------------+
- * | | | | | | | |MousL|MousD|MousU|MousR|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Tab */
- KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, LED_TOG, LED_CHG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
-),
-};
-
-//LED keymap functions
- #ifdef LED_ENABLE
-void led_chmode(void) {
- serial_send(101);
-}
-
-void led_toggle(void) {
- serial_send(100);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch(keycode) {
- case LED_TOG:
- #ifdef LED_ENABLE
- led_toggle();
- #endif
- return false;
- case LED_CHG:
- #ifdef LED_ENABLE
- led_chmode();
- #endif
- return false;
- }
- }
- return true;
-};
-#endif
diff --git a/keyboards/ut47/keymaps/non-us/config.h b/keyboards/ut47/keymaps/non-us/config.h
deleted file mode 100644
index 46098a22f..000000000
--- a/keyboards/ut47/keymaps/non-us/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2018 Carlos Filoteo
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
-
-// place overrides here
-
-#endif
diff --git a/keyboards/ut47/keymaps/non-us/keymap.c b/keyboards/ut47/keymaps/non-us/keymap.c
deleted file mode 100644
index 1cb537b7d..000000000
--- a/keyboards/ut47/keymaps/non-us/keymap.c
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Copyright 2018 Carlos Filoteo
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include QMK_KEYBOARD_H
-#ifdef LED_ENABLE
- #include "protocol/serial.h"
-#endif
-
-#define _______ KC_TRNS
-#define LT3_TAB LT(3, KC_TAB)
-#define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT)
-
-enum custom_keycodes {
- LED_TOG = SAFE_RANGE,
- LED_CHG
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Base Layer
- * ,-------------------------------------------------------------------------.
- * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
- * |-------------------------------------------------------------------------+
- * |Tab/L3| A | S | D | F | G | H | J | K | L | ; | ' |
- * |-------------------------------------------------------------------------+
- * | Shift | Z | X | C | V | B | N | M | , | . | / |Sh/En|
- * |-------------------------------------------------------------------------+
- * | Ctrl| Alt | Gui | App | L2 | Space | L1 | Left| Down| Up |Right|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT(
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- LT3_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, MT_RSFT_ENT,
- KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
-),
-
- /* FN Layer 1
- * ,-------------------------------------------------------------------------.
- * | ` ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete|
- * |-------------------------------------------------------------------------+
- * | | | | | | | # | - | = | [ | ] | \ |
- * |-------------------------------------------------------------------------+
- * | | F11 | F12 | F13 | F14 | F15 | F16 | F17 | F18 | F19 | F20 | |
- * |-------------------------------------------------------------------------+
- * | | | |Capsl| | | | Home| PgDn| PgUp| End |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Right */
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
- _______, _______, _______, _______, _______, _______, KC_NUHS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_NUBS,
- _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
-),
-
- /* FN Layer 2
- * ,-------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) |Delete|
- * |-------------------------------------------------------------------------+
- * | | | | | | | | _ | + | { | } | | |
- * |-------------------------------------------------------------------------+
- * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | |
- * |-------------------------------------------------------------------------+
- * | | | |Capsl| | | | Home| PgDn| PgUp| End |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Left */
- KC_TILDE, KC_EXCLAIM, KC_AT, KC_HASH, KC_DOLLAR, KC_PERCENT, KC_CIRCUMFLEX, KC_AMPERSAND, KC_ASTERISK, KC_LEFT_PAREN, KC_RIGHT_PAREN, KC_DELETE,
- _______, _______, _______, _______, _______, _______, _______, KC_UNDERSCORE, KC_PLUS, KC_LEFT_CURLY_BRACE, KC_RIGHT_CURLY_BRACE, KC_PIPE,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
-),
-
- /* FN Layer 2
- * ,-------------------------------------------------------------------------.
- * | Esc | Calc|Webhm| Mail| Comp| | | | | |PrtSc| |
- * |-------------------------------------------------------------------------+
- * | | | | | | | | | | | | |
- * |-------------------------------------------------------------------------+
- * | |LEDtg|LEDch| | | | | | | | | |
- * |-------------------------------------------------------------------------+
- * | | | | | | | |MousL|MousD|MousU|MousR|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Tab */
- KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, LED_TOG, LED_CHG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
-),
-};
-
-//LED keymap functions
- #ifdef LED_ENABLE
-void led_chmode(void) {
- serial_send(101);
-}
-
-void led_toggle(void) {
- serial_send(100);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch(keycode) {
- case LED_TOG:
- #ifdef LED_ENABLE
- led_toggle();
- #endif
- return false;
- case LED_CHG:
- #ifdef LED_ENABLE
- led_chmode();
- #endif
- return false;
- }
- }
- return true;
-};
-#endif
diff --git a/keyboards/ut47/keymaps/nordic/keymap.c b/keyboards/ut47/keymaps/nordic/keymap.c
deleted file mode 100644
index cc3f43650..000000000
--- a/keyboards/ut47/keymaps/nordic/keymap.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Copyright 2018 Carlos Filoteo
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include QMK_KEYBOARD_H
-#ifdef LED_ENABLE
- #include "protocol/serial.h"
-
-#endif
-
-#include "keymap_norwegian.h"
-
-#define _______ KC_TRNS
-#define LT3_TAB LT(3, KC_TAB)
-#define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT)
-#define CTRADEL LALT(LCTL(KC_DEL))
-#define ALTTAB LALT(KC_TAB)
-
-enum custom_keycodes {
- LED_TOG = SAFE_RANGE,
- LED_CHG
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- /* Base Layer - L0
- * ,-------------------------------------------------------------------------.
- * | Esc | Q | W | E | R | T | Y | U | I | O | P |Bspace |
- * |-------------------------------------------------------------------------+
- * |Tab/L3| A | S | D | F | G | H | J | K | L | ' |Ent/RS|
- * |-------------------------------------------------------------------------+
- * | Shift | Z | X | C | V | B | N | M | , | . | Up | L4 |
- * |-------------------------------------------------------------------------+
- * | Ctrl| Gui | L4 | Alt | L2 | Space | L1 | Ctrl| Left| Down|Right|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Base - L0 */
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
- LT3_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, NO_APOS, MT_RSFT_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, MO(4),
- KC_LCTL, KC_LGUI, MO(4), KC_LALT, MO(2), KC_SPC, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
-),
-
- /* FN Layer 1
- * ,-------------------------------------------------------------------------.
- * | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Delete|
- * |-------------------------------------------------------------------------+
- * | | | | | | | | | + | = | * | / |
- * |-------------------------------------------------------------------------+
- * | | | | | | | | | - | _ | PgUp| |
- * |-------------------------------------------------------------------------+
- * | | | |Capsl| | | | | Home| PgDn| End |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Right modifier - L1 */
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
- _______, _______, _______, _______, _______, _______, _______, _______, NO_PLUS, NO_EQL, NO_ASTR, NO_SLSH,
- _______, _______, _______, _______, _______, _______, _______, _______, NO_MINS, NO_UNDS, KC_PGUP, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
-),
-
- /* FN Layer 2
- * ,-------------------------------------------------------------------------.
- * | § | ! | " | # | ¤ | % | & | / | = | + | \ | Delete|
- * |-------------------------------------------------------------------------+
- * | | | ? | { | [ | ( | ) | ] | } | F10 | F11 | F12 |
- * |-------------------------------------------------------------------------+
- * | | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | PgUp| |
- * |-------------------------------------------------------------------------+
- * | | | |Capsl| | | | | Home| PgDn| End |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Left modifier - L2 */
- NO_SECT, KC_EXCLAIM, NO_QUO2, KC_HASH, NO_BULT, KC_PERCENT, NO_AMPR, NO_SLSH, NO_EQL, NO_PLUS, NO_BSLS, KC_DELETE,
- _______, _______, NO_QUES, NO_LCBR, NO_LBRC, NO_LPRN, NO_RPRN, NO_RBRC, NO_RCBR, KC_F10, KC_F11, KC_F12,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_PGUP, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
-),
-
- /* FN Layer 3
- * ,-------------------------------------------------------------------------.
- * | Esc | Calc|Webhm| Comp|Webrf| | | | | |PrtSc|CtrAlDl|
- * |-------------------------------------------------------------------------+
- * | | | | | | | |VolDn|VolUp| | | |
- * |-------------------------------------------------------------------------+
- * | |LEDtg|LEDch| | |RESET| | Mute| |MouB1|MousU|MouB2|
- * |-------------------------------------------------------------------------+
- * | | | | | | | | |MousL|MousD|MousR|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Hold Tab down - L3 */
- KC_ESC, KC_CALC, KC_WHOM, KC_MYCM, KC_WREF, _______, _______, _______, _______, _______, KC_PSCR, CTRADEL,
- _______, _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, _______, _______, _______,
- _______, LED_TOG, LED_CHG, _______, _______, RESET, _______, KC_MUTE, _______, KC_MS_BTN1, KC_MS_U, KC_MS_BTN2,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R
-),
-
- /* FN Layer 4
- * ,-------------------------------------------------------------------------.
- * | | | @ | £ | $ | ~ | | ¨ | ´ | ` | Å | |
- * |-------------------------------------------------------------------------+
- * | | | | € | | | | | ^ | Ø | Æ | |
- * |-------------------------------------------------------------------------+
- * | | < | | | | | | µ | | | | |
- * |-------------------------------------------------------------------------+
- * | | | | | | | | L5 | | | |
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* Norsk - L4 */
- _______, _______, NO_AT, NO_PND, NO_DLR, NO_TILD, _______, NO_QUOT, NO_ACUT, NO_GRV, NO_AA, _______,
- _______, _______, _______, NO_EURO, _______, _______, _______, _______, NO_CIRC, NO_OSLH, NO_AE, _______,
- _______, NO_LESS, _______, _______, _______, _______, _______, NO_MU, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, TO(5), _______, _______, _______
-),
-
- /* GAMING Layer (toggle on and off)
- * ,-------------------------------------------------------------------------.
- * | Esc | Q | W | E | R | T | Y | F1 | F2 | F3 | F4 |Alt+Tab|
- * |-------------------------------------------------------------------------+
- * | Tab | A | S | D | F | G | H | F5 | F6 | F7 | F8 | Enter|
- * |-------------------------------------------------------------------------+
- * | Shift | 1 | 2 | 3 | 4 | 5 | 6 | F9 | F10 | F11 | Up |TOGGL|
- * |-------------------------------------------------------------------------+
- * | Ctrl| Z | X | C | B | Space | M | V |Left |Down |Right|
- * `-------------------------------------------------------------------------'
- */
-
-LAYOUT( /* GAMING, toggled on and off - L5 */
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_F1, KC_F2, KC_F3, KC_F4, ALTTAB,
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_F5, KC_F6, KC_F7, KC_F8, KC_ENT,
- KC_LSFT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F9, KC_F10, KC_F11, KC_UP, TO(0),
- KC_LCTL, KC_Z, KC_X, KC_C, KC_B, KC_SPC, KC_M, KC_V, KC_LEFT, KC_DOWN, KC_RGHT
-),
-};
-
-//LED keymap functions
- #ifdef LED_ENABLE
-void led_chmode(void) {
- serial_send(101);
-}
-
-void led_toggle(void) {
- serial_send(100);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch(keycode) {
- case LED_TOG:
- #ifdef LED_ENABLE
- led_toggle();
- #endif
- return false;
- case LED_CHG:
- #ifdef LED_ENABLE
- led_chmode();
- #endif
- return false;
- }
- }
- return true;
-};
-#endif
diff --git a/keyboards/ut47/keymaps/rgb/config.h b/keyboards/ut47/keymaps/rgb/config.h
deleted file mode 100644
index 0eb010a3a..000000000
--- a/keyboards/ut47/keymaps/rgb/config.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Copyright 2018 Carlos Filoteo
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
-
-// place overrides here
-#define RGBLIGHT_ANIMATIONS
-#define RGB_DI_PIN D3 // The pin the LED strip is connected to
-#define RGBLED_NUM 7 // Number of LEDs in your strip
-
-#endif
diff --git a/keyboards/ut47/keymaps/rgb/keymap.c b/keyboards/ut47/keymaps/rgb/keymap.c
deleted file mode 100644
index 58d11031a..000000000
--- a/keyboards/ut47/keymaps/rgb/keymap.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/* Copyright 2018 Carlos Filoteo
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-#include QMK_KEYBOARD_H
-#ifdef LED_ENABLE
- #include "protocol/serial.h"
-#endif
-
-#define _______ KC_TRNS
-#define LT3_TAB LT(3, KC_TAB)
-#define MT_RSFT_ENT MT(MOD_RSFT, KC_ENT)
-
-enum custom_keycodes {
- LED_TOG = SAFE_RANGE,
- LED_CHG
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
-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,
- LT3_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, MT_RSFT_ENT,
- KC_LCTL, KC_LALT, KC_LGUI, KC_APP, MO(2), KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
-),
-
-LAYOUT(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DELETE,
- _______, _______, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
- _______, KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
-),
-
-LAYOUT(
- KC_FN6, KC_FN7, KC_FN8, KC_FN9, KC_FN10, KC_FN11, KC_FN12, KC_FN13, KC_FN14, KC_FN15, KC_FN16, KC_DELETE,
- _______, _______, _______, _______, _______, _______, _______, KC_FN17, KC_FN18, KC_FN19, KC_FN20, KC_FN21,
- _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
- _______, _______, _______, KC_CAPS, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END
-),
-
-LAYOUT( /* Tab */
- KC_ESC, KC_CALC, KC_WHOM, KC_MAIL, KC_MYCM, _______, _______, _______, _______, _______, KC_PSCR, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_U, KC_MS_R
-),
-};
-
-//LED keymap functions
- #ifdef LED_ENABLE
-void led_chmode(void) {
- serial_send(101);
-}
-
-void led_toggle(void) {
- serial_send(100);
-}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (record->event.pressed) {
- switch(keycode) {
- case LED_TOG:
- #ifdef LED_ENABLE
- led_toggle();
- #endif
- return false;
- case LED_CHG:
- #ifdef LED_ENABLE
- led_chmode();
- #endif
- return false;
- }
- }
- return true;
-};
-#endif
diff --git a/keyboards/ut47/readme.md b/keyboards/ut47/readme.md
deleted file mode 100644
index 3f08b3b32..000000000
--- a/keyboards/ut47/readme.md
+++ /dev/null
@@ -1,41 +0,0 @@
-# ut47
-
-![ut47](https://i.imgur.com/ZDKZQaj.jpg)
-
-Somewhere between ortholinear and standard offset. Created to have all the same functions on a Planck in a keyboard but with a more conventional keyboard row stagger.
-
-Keyboard Maintainer: [filoxo](https://github.com/filoxo), [network_operations]
-
-Hardware Supported: [PCB design](http://www.40percent.club/2016/10/gnap-20-plateless.html), Arduino Pro Micro
-
-Hardware Availability: [How to order](http://www.40percent.club/2017/03/ordering-pcb.html)
-
-### Instructions
-
-To flash the UT47 without LEDs (single controller), run:
-
- make ut47:default
-
-To enable the UT47 LEDs (dual controller), run this for the main controller:
-
- make ut47:default LED_ENABLE=yes
-
-Or you can add `LED_ENABLE = yes` to *rules.mk*
-
-And then flash [LED_controls.ino](LED_controls.ino) to the second controller using [Arduino IDE](https://www.arduino.cc/en/Main/Software) or similar. NOTE: Arduino IDE will require importing additional libraries to compile.
-
-<small>The reason this is an "opt-in" feature is to prevent sending serial communication over the pin, in case it ends up being used for something else (like RGB underglow).</small>
-
-### Layout
-
-Go to the [default layout README](keymaps/default/readme.md) for more information.
-
-### Additional info
-
-Credit: Forked from [di0ib TMK version](https://github.com/di0ib/tmk_keyboard/tree/master/keyboard/gnap)
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
-
-### Build Guide
-
-[u/network_operations' build guide thread](https://www.reddit.com/r/MechanicalKeyboards/comments/7wqktu/gnap_the_cheap_40/)
diff --git a/keyboards/ut47/rules.mk b/keyboards/ut47/rules.mk
deleted file mode 100644
index b04659866..000000000
--- a/keyboards/ut47/rules.mk
+++ /dev/null
@@ -1,70 +0,0 @@
-# MCU name
-#MCU = at90usb1286
-MCU = atmega32u4
-
-# Processor frequency.
-# This will define a symbol, F_CPU, in all source code files equal to the
-# processor frequency in Hz. You can then use this symbol in your source code to
-# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
-# automatically to create a 32-bit value in your source code.
-#
-# This will be an integer division of F_USB below, as it is sourced by
-# F_USB after it has run through any CPU prescalers. Note that this value
-# does not *change* the processor frequency - it should merely be updated to
-# reflect the processor speed set externally so that the code can use accurate
-# software delays.
-F_CPU = 16000000
-
-
-#
-# LUFA specific
-#
-# Target architecture (see library "Board Types" documentation).
-ARCH = AVR8
-
-# Input clock frequency.
-# This will define a symbol, F_USB, in all source code files equal to the
-# input clock frequency (before any prescaling is performed) in Hz. This value may
-# differ from F_CPU if prescaling is used on the latter, and is required as the
-# raw input clock is fed directly to the PLL sections of the AVR for high speed
-# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
-# at the end, this will be done automatically to create a 32-bit value in your
-# source code.
-#
-# If no clock division is performed on the input clock inside the AVR (via the
-# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
-F_USB = $(F_CPU)
-
-# Interrupt driven control endpoint task(+60)
-OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
-
-# Bootloader
-BOOTLOADER = caterina
-
-# custom matrix setup
-CUSTOM_MATRIX = yes
-SRC += matrix.c protocol/serial_uart.c
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
-EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
-CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
-# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
-SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
-# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
-NKRO_ENABLE = yes # USB Nkey Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
-MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
-UNICODE_ENABLE = no # Unicode
-BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-AUDIO_ENABLE = no # Audio output on port C6
-FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
-
-ifeq ($(strip $(LED_ENABLE)), yes)
- OPT_DEFS += -DLED_ENABLE
- SRC += led.c
-endif
diff --git a/keyboards/v60_type_r/keymaps/followingghosts/config.h b/keyboards/v60_type_r/keymaps/followingghosts/config.h
new file mode 100644
index 000000000..a2612e2d3
--- /dev/null
+++ b/keyboards/v60_type_r/keymaps/followingghosts/config.h
@@ -0,0 +1,18 @@
+/* Copyright 2018 Ben Lewis (FollowingGhosts)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 V60_POLESTAR
+#define RGBLIGHT_EFFECT_BREATHING
diff --git a/keyboards/v60_type_r/keymaps/followingghosts/keymap.c b/keyboards/v60_type_r/keymaps/followingghosts/keymap.c
new file mode 100644
index 000000000..cca95c509
--- /dev/null
+++ b/keyboards/v60_type_r/keymaps/followingghosts/keymap.c
@@ -0,0 +1,109 @@
+/* Copyright 2018 Ben Lewis (FollowingGhosts)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* This is adapted from the official ANSI layout provided by the KBP V60 Type R
+* as depicted in their manual and on the stock keycaps.
+*/
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap 0: Default Layer (Qwerty)
+ * CAPS opens Layer 1 if held, acts normally if tapped
+ * Tab is used for Mouse Layer (2)
+ * ,-----------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bs |
+ * |-----------------------------------------------------------|
+ * |L2/Tab| Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
+ * |-----------------------------------------------------------|
+ * |L1/Caps| A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------|
+ * |LShift( | Z| X| C| V| B| N| M| ,| .| /| RShift) |
+ * |-----------------------------------------------------------|
+ * |Ctrl|Gui |Alt | Space |Fn0 |Gui |App|Ctrl|
+ * `-----------------------------------------------------------'
+ */
+ [0] = LAYOUT_60_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, \
+ LT(2, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
+ LT(1, KC_CAPS), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
+ KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_RGUI, KC_APP, KC_RCTL),
+
+ /*
+ Keymap 1: FN Layer
+ AGSW swaps Alt and OS keys for Windows/Mac
+ RGB enabled
+ Backlight keys are swapped as firmware is backwards?
+ * ,-----------------------------------------------------------.
+ * |` | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Del |
+ * |-----------------------------------------------------------|
+ * | | |Up |RGB|HUI|SAI|VAI| |Prt|Scl|Pau|Up| | Ins |
+ * |-----------------------------------------------------------|
+ * | |Lft|Dwn|Rig|HUD|SAD|VAD| |Hme|PgU|Lef|Rig| |
+ * |-----------------------------------------------------------|
+ * | |BLD|BLT|BLI| |VolD|VolU|Mut|End|PgD|Dwn| RESET |
+ * |-----------------------------------------------------------|
+ * | | | | | |AGSW| | |
+ * `-----------------------------------------------------------'
+ */
+
+ [1] = LAYOUT_60_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, \
+ KC_TRNS, KC_TRNS, KC_UP, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_INS, \
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, RGB_HUD, RGB_SAD, RGB_VAD, KC_TRNS, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, KC_TRNS, \
+ KC_TRNS, BL_INC, BL_STEP, BL_DEC, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_DOWN, RESET, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, AG_SWAP, KC_TRNS, KC_TRNS),
+
+/*
+Mouse Layer
+M1 = Mouse Button 1
+M2 = Mouse Button 2
+WASD are Up Left Right Down respectively
+* ,-----------------------------------------------------------.
+* | | | | | | | | | | | | | | |
+* |-----------------------------------------------------------|
+* | | M1|MUP|M2 | | | | | | | |MPLY| | |
+* |-----------------------------------------------------------|
+* | |ML |MDN|MR | | | | | | |MPRV|MNXT| |
+* |-----------------------------------------------------------|
+* | | | | | | | | | | | | |
+* |-----------------------------------------------------------|
+* | | | | | | | | |
+* `-----------------------------------------------------------'
+*/
+ [2] = LAYOUT_60_ansi(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_BTN1, KC_MS_U, KC_BTN2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPLY, KC_TRNS, KC_TRNS, \
+ KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MNXT, 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),
+
+
+};
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // output low
+ DDRE |= (1<<PE6);
+ PORTE &= ~(1<<PE6);
+ }
+ else {
+ // Hi-Z
+ DDRE &= ~(1<<PE6);
+ PORTE &= ~(1<<PE6);
+ }
+}
diff --git a/keyboards/v60_type_r/keymaps/followingghosts/readme.md b/keyboards/v60_type_r/keymaps/followingghosts/readme.md
new file mode 100644
index 000000000..a7379a52d
--- /dev/null
+++ b/keyboards/v60_type_r/keymaps/followingghosts/readme.md
@@ -0,0 +1,61 @@
+KB Paradise V60 Type R Customised Layout by FollowingGhosts
+======================
+
+This is my custom keymap for the Polestar Type R
+
+## Keymap Notes
+Supports Underglow lighting with RGB modifier keys and normal backlight
+Selectable swap between Alt and OS keys which is stored in EEPROM
+CAPSLOCK acts as FN when held/equivalent to MO1
+TAB acts as FN2 when held to provide a mouse layer with WASD and Q and E as left and right click respectively
+LShift and RShift have Space Cadet Shift enabled
+
+RGB colour setting is set to HSV to bring it in line with (QMK docs)([https://beta.docs.qmk.fm/features/feature_rgblight])
+R+/R- are hue, G+/G- are saturation and B+/B- are value
+
+```
+ Keymap 0: Default/Windows Layer (Qwerty)
+ * ,-----------------------------------------------------------.
+ * |Esc| 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| Bs |
+ * |-----------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \|
+ * |-----------------------------------------------------------|
+ * |CAP/MO1| A| S| D| F| G| H| J| K| L| ;| '|Return |
+ * |-----------------------------------------------------------|
+ * |LShift | Z| X| C| V| B| N| M| ,| .| /| RShift |
+ * |-----------------------------------------------------------|
+ * |Ctrl|Gui |Alt | Space | MO1|Gui |App|Ctrl|
+ * -----------------------------------------------------------'
+
+
+Keymap 1: FN Layer
+ * -----------------------------------------------------------.
+ * | | F1| F2| F3| F4| F5| F6| F7| F8| F9|F10|F11|F12| Del |
+ * |-----------------------------------------------------------|
+ * | | |Up |RGB|HUI|SAI|VAI| |Prt|Scl|Pau|Up| | Ins |
+ * |-----------------------------------------------------------|
+ * | |Lft|Dwn|Rig|HUD|SAD|VAD| |Hme|PgU|Lef|Rig| |
+ * |-----------------------------------------------------------|
+ * | |BLD|BLT|BLI| |VolD|VolU|Mut|End|PgD|Dwn| |
+ * |-----------------------------------------------------------|
+ * | | | | | |AGSW| | |
+ * '-----------------------------------------------------------'
+
+Mouse Layer
+ M1 = Mouse Button 1
+ M2 = Mouse Button 2
+ WASD are Up Left Right Down respectively
+ * ,-----------------------------------------------------------.
+ * | | | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | | M1|MUP|M2 | | | | | | | |MPLY| | |
+ * |-----------------------------------------------------------|
+ * | |ML |MDN|MR | | | | | | |MNXT|MPRV| |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | | | | | |
+ * |-----------------------------------------------------------|
+ * | | | | | | | | |
+ * -----------------------------------------------------------'
+```
+### Build
+To build this keymap, simply run `make v60_type_r:followingghosts`.
diff --git a/keyboards/v60_type_r/keymaps/followingghosts/rules.mk b/keyboards/v60_type_r/keymaps/followingghosts/rules.mk
new file mode 100644
index 000000000..a1b0120a6
--- /dev/null
+++ b/keyboards/v60_type_r/keymaps/followingghosts/rules.mk
@@ -0,0 +1,4 @@
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+CONSOLE_ENABLE = no
diff --git a/keyboards/v60_type_r/keymaps/xtonhasvim/config.h b/keyboards/v60_type_r/keymaps/xtonhasvim/config.h
new file mode 100644
index 000000000..997802a56
--- /dev/null
+++ b/keyboards/v60_type_r/keymaps/xtonhasvim/config.h
@@ -0,0 +1,24 @@
+/* Copyright 2018 Christon DeWan (Xton)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 V60_POLESTAR
+
+#define PERMISSIVE_HOLD
+
+
diff --git a/keyboards/v60_type_r/keymaps/xtonhasvim/keymap.c b/keyboards/v60_type_r/keymaps/xtonhasvim/keymap.c
new file mode 100644
index 000000000..ec337bb22
--- /dev/null
+++ b/keyboards/v60_type_r/keymaps/xtonhasvim/keymap.c
@@ -0,0 +1,196 @@
+/* Copyright 2018 Christon DeWan (Xton)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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 "xtonhasvim.h"
+#include "fancylighting.h"
+
+#define _______ KC_TRNS
+#define X_____X KC_NO
+
+enum layers {
+ _QWERTY,
+ _FUN,
+ _MOVE,
+ _CMD
+};
+
+enum layout_key_codes {
+ IND_BRI = VIM_SAFE_RANGE,
+ IND_DIM
+};
+
+extern uint8_t vim_cmd_layer(void) { return _CMD; }
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, X_____X, 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, \
+ LT(_MOVE, KC_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, X_____X, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, X_____X, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, VIM_START, MO(_FUN)),
+
+
+ [_MOVE] = LAYOUT_all(
+ X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
+ X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, KC_HOME, KC_PGDN, KC_PGUP, KC_END, X_____X, X_____X, X_____X, X_____X,
+ _______, X_____X, LGUI(KC_LBRC), LGUI(LSFT(KC_LBRC)), LGUI(LSFT(KC_RBRC)), LGUI(KC_RBRC), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, X_____X, X_____X, VIM_START,
+ _______, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______),
+
+
+ [_FUN] = 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, X_____X, KC_DEL, \
+ X_____X, X_____X, KC_UP, RGB_TOG, IND_BRI, X_____X, X_____X, X_____X, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, X_____X, KC_INS, \
+ X_____X, KC_LEFT, KC_DOWN, KC_RIGHT, IND_DIM, X_____X, X_____X, X_____X, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, FIREY_RETURN, \
+ _______, X_____X, BL_INC, BL_STEP, BL_DEC, X_____X, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_DOWN, _______, X_____X, \
+ _______, _______, _______, X_____X, _______, _______, X_____X, _______
+ ),
+
+ [_CMD] = LAYOUT_all(
+ VIM_ESC, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X, X_____X,
+ X_____X, X_____X, VIM_W, VIM_E, X_____X, X_____X, VIM_Y, VIM_U, VIM_I, VIM_O, VIM_P, X_____X, X_____X, X_____X,
+ _______, VIM_A, VIM_S, VIM_D, X_____X, VIM_G, VIM_H, VIM_J, VIM_K, VIM_L, X_____X, X_____X, X_____X,
+ VIM_SHIFT, X_____X, X_____X, VIM_X, VIM_C, VIM_V, VIM_B, X_____X, X_____X, VIM_COMMA, VIM_PERIOD, X_____X, VIM_SHIFT,X_____X,
+ _______, _______, _______, _______, _______, _______, _______, TO(_QWERTY)
+ )
+};
+
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // output low
+ DDRE |= (1<<PE6);
+ PORTE &= ~(1<<PE6);
+ }
+ else {
+ // Hi-Z
+ DDRE &= ~(1<<PE6);
+ PORTE &= ~(1<<PE6);
+ }
+}
+
+#define C_RED 0xFF, 0x00, 0x00
+#define C_GRN 0x00, 0xFF, 0x00
+#define C_BLU 0x00, 0x00, 0xFF
+
+#define C_YAN 0x00, 0xFF, 0xFF
+#define C_PRP 0x7A, 0x00, 0xFF
+#define C_ORG 0xFF, 0x93, 0x00
+
+float rgb_brightness = 1.0;
+
+/** the underglow LEDs aren't individually addressable, sadly */
+void rgbflag(uint8_t r, uint8_t g, uint8_t b) {
+ float rgb_brightness = ((float)rgblight_get_val())/256;
+ if(rgb_brightness == 0) rgb_brightness = 0.05;
+ LED_TYPE *target_led = user_rgb_mode ? shadowed_led : led;
+ target_led[0].r = (uint8_t)(r*rgb_brightness);
+ target_led[0].g = (uint8_t)(g*rgb_brightness);
+ target_led[0].b = (uint8_t)(b*rgb_brightness);
+ rgblight_set(); // just to handle turning off if that's required
+}
+
+void set_state_leds(void) {
+ switch (biton32(layer_state)) {
+ case _MOVE:
+ rgbflag(C_BLU);
+ break;
+ case _FUN:
+ rgbflag(C_PRP);
+ break;
+ case _CMD:
+ switch(vstate) {
+ case VIM_V:
+ case VIM_VI:
+ case VIM_VS:
+ case VIM_C:
+ case VIM_CI:
+ case VIM_D:
+ case VIM_DI:
+ rgbflag(C_RED);
+ break;
+ case VIM_G:
+ rgbflag(C_PRP);
+ break;
+ case VIM_Y:
+ rgbflag(C_ORG);
+ break;
+ case VIM_START:
+ default:
+ rgbflag(C_GRN);
+ break;
+ }
+ break;
+ default: // for any other layers, or the default layer
+ rgbflag(C_YAN);
+ break;
+ }
+}
+
+#define RGBLIGHT_LIMIT_VAL 255
+#define RGBLIGHT_BASE_VAL 3
+extern rgblight_config_t rgblight_config;
+extern backlight_config_t backlight_config;
+
+bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+ if (record->event.pressed) {
+ switch(keycode) {
+ case IND_BRI:
+ if (rgblight_config.val + RGBLIGHT_VAL_STEP > RGBLIGHT_LIMIT_VAL) {
+ rgblight_config.val = RGBLIGHT_LIMIT_VAL;
+ } else {
+ rgblight_config.val = rgblight_config.val + RGBLIGHT_VAL_STEP;
+ }
+ eeconfig_update_rgblight(rgblight_config.raw);
+ set_state_leds();
+ break;
+ case IND_DIM:
+ if (rgblight_config.val - RGBLIGHT_VAL_STEP < RGBLIGHT_BASE_VAL) {
+ rgblight_config.val = RGBLIGHT_BASE_VAL;
+ } else {
+ rgblight_config.val = rgblight_config.val - RGBLIGHT_VAL_STEP;
+ }
+ eeconfig_update_rgblight(rgblight_config.raw);
+ set_state_leds();
+ break;
+ }
+ }
+ return true;
+}
+
+void suspend_power_down_user(void)
+{
+ // rgb
+ rgblight_config.enable = false;
+ rgblight_set();
+
+ // backlight
+ /** I don't know why, but 3 means "off" and down is up */
+ backlight_config.level = 3;
+ backlight_config.enable = false;
+ backlight_set(3);
+}
+
+void suspend_wakeup_init_user(void)
+{
+ rgblight_config.raw = eeconfig_read_rgblight();
+ backlight_config.raw = eeconfig_read_backlight();
+
+ backlight_set(backlight_config.level);
+ rgblight_set();
+}
+
diff --git a/keyboards/v60_type_r/keymaps/xtonhasvim/readme.md b/keyboards/v60_type_r/keymaps/xtonhasvim/readme.md
new file mode 100644
index 000000000..541faed2b
--- /dev/null
+++ b/keyboards/v60_type_r/keymaps/xtonhasvim/readme.md
@@ -0,0 +1,20 @@
+KB Paradise V60 Type R Xton Has Vim! Layout
+======================
+
+If you don't look closely, this layout mimics the default layout fairly well. Care
+is taken to match the FN layer to the keycaps that the TypeR comes with. I wrote this layout
+for a keyboard that I'm giving my intern as a parting gift and wanted it to be as easy to learn
+as possible.
+
+The key differences:
+
+- Holding capslock down activates the movement layer, much like the vimouse layout except that I'm using the xtonhasvim movement layer.
+- Capslock+return (or right-control) activates vim mode!
+
+## Keymap Notes
+
+- Alternate underglow modes are not supported. Instead the underglow is used to indicate state. It can be turned off and dimmed. Polestar underglow LEDs are not individually addressable, sadly.
+
+### Build
+
+To build this keymap, simply run `make v60_type_r:xtonhasvim` from the root project directory. Flash using QMK Toolbox
diff --git a/keyboards/v60_type_r/keymaps/xtonhasvim/rules.mk b/keyboards/v60_type_r/keymaps/xtonhasvim/rules.mk
new file mode 100644
index 000000000..6f9d7cc39
--- /dev/null
+++ b/keyboards/v60_type_r/keymaps/xtonhasvim/rules.mk
@@ -0,0 +1,5 @@
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
+MOUSEKEY_ENABLE = no
+CONSOLE_ENABLE = no # Console for debug(+400)
+DEBUG_ENABLE = no
diff --git a/keyboards/v60_type_r/readme.md b/keyboards/v60_type_r/readme.md
index 5065ca106..c7039c2e7 100644
--- a/keyboards/v60_type_r/readme.md
+++ b/keyboards/v60_type_r/readme.md
@@ -28,8 +28,8 @@ Note: By default the V60 Type R uses TMK. You should know what you're doing and
You will then have to use tkg-toolkit to finish the flashing
-Keyboard Maintainer: QMK Community
-Hardware Supported: KBP V60 Type R PCB
+Keyboard Maintainer: QMK Community
+Hardware Supported: KBP V60 Type R PCB
Hardware Availability: [mechanicalkeyboards.com](https://mechanicalkeyboards.com/search.php?keyword=kbp+v60+type+r), [Massdrop](https://www.massdrop.com/buy/kbparadise-v60-type-r-mechanical-keyboard)
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/v60_type_r/rules.mk b/keyboards/v60_type_r/rules.mk
index afd65cd1a..30038d562 100644
--- a/keyboards/v60_type_r/rules.mk
+++ b/keyboards/v60_type_r/rules.mk
@@ -68,4 +68,4 @@ BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID
AUDIO_ENABLE ?= no # Audio output on port C6
FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches
-LAYOUTS = 60_ansi \ No newline at end of file
+LAYOUTS = 60_ansi
diff --git a/keyboards/vinta/boards/GENERIC_STM32_F042X6/board.c b/keyboards/vinta/boards/GENERIC_STM32_F042X6/board.c
new file mode 100644
index 000000000..19adfb933
--- /dev/null
+++ b/keyboards/vinta/boards/GENERIC_STM32_F042X6/board.c
@@ -0,0 +1,101 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#include "hal.h"
+
+#if HAL_USE_PAL || defined(__DOXYGEN__)
+/**
+ * @brief PAL setup.
+ * @details Digital I/O ports static configuration as defined in @p board.h.
+ * This variable is used by the HAL when initializing the PAL driver.
+ */
+const PALConfig pal_default_config = {
+#if STM32_HAS_GPIOA
+ {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
+ VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH},
+#endif
+#if STM32_HAS_GPIOB
+ {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
+ VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH},
+#endif
+#if STM32_HAS_GPIOC
+ {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
+ VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH},
+#endif
+#if STM32_HAS_GPIOD
+ {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
+ VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH},
+#endif
+#if STM32_HAS_GPIOE
+ {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
+ VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH},
+#endif
+#if STM32_HAS_GPIOF
+ {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
+ VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH},
+#endif
+#if STM32_HAS_GPIOG
+ {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
+ VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH},
+#endif
+#if STM32_HAS_GPIOH
+ {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
+ VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH},
+#endif
+#if STM32_HAS_GPIOI
+ {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
+ VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH}
+#endif
+};
+#endif
+
+void enter_bootloader_mode_if_requested(void);
+
+/**
+ * @brief Early initialization code.
+ * @details This initialization must be performed just after stack setup
+ * and before any other initialization.
+ */
+void __early_init(void) {
+ enter_bootloader_mode_if_requested();
+ stm32_clock_init();
+}
+
+#if HAL_USE_MMC_SPI || defined(__DOXYGEN__)
+/**
+ * @brief MMC_SPI card detection.
+ */
+bool mmc_lld_is_card_inserted(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return true;
+}
+
+/**
+ * @brief MMC_SPI card write protection detection.
+ */
+bool mmc_lld_is_write_protected(MMCDriver *mmcp) {
+
+ (void)mmcp;
+ /* TODO: Fill the implementation.*/
+ return false;
+}
+#endif
+
+/**
+ * @brief Board-specific initialization code.
+ * @todo Add your board-specific code, if any.
+ */
+void boardInit(void) {
+}
diff --git a/keyboards/vinta/boards/GENERIC_STM32_F042X6/board.h b/keyboards/vinta/boards/GENERIC_STM32_F042X6/board.h
new file mode 100644
index 000000000..241d566af
--- /dev/null
+++ b/keyboards/vinta/boards/GENERIC_STM32_F042X6/board.h
@@ -0,0 +1,896 @@
+/*
+ ChibiOS - Copyright (C) 2006..2016 Giovanni Di Sirio
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+#ifndef _BOARD_H
+#define _BOARD_H
+
+/*
+ * Setup for STMicroelectronics STM32 Nucleo32-F042K6 board.
+ */
+
+/*
+ * Board identifier.
+ */
+#define BOARD_GENERIC_STM32_F042X6
+#define BOARD_NAME "Vinta PCB"
+
+/*
+ * Board oscillators-related settings.
+ * NOTE: LSE not fitted.
+ * NOTE: HSE not fitted.
+ */
+#if !defined(STM32_LSECLK)
+#define STM32_LSECLK 0U
+#endif
+
+#define STM32_LSEDRV (3U << 3U)
+
+#if !defined(STM32_HSECLK)
+#define STM32_HSECLK 0U
+#endif
+
+/*
+ * MCU type as defined in the ST header.
+ */
+#define STM32F042x6
+
+/*
+ * IO pins assignments.
+ */
+#define GPIOA_PIN0 0U
+#define GPIOA_PIN1 1U
+#define GPIOA_PIN2 2U
+#define GPIOA_PIN3 3U
+#define GPIOA_PIN4 4U
+#define GPIOA_PIN5 5U
+#define GPIOA_PIN6 6U
+#define GPIOA_PIN7 7U
+#define GPIOA_PIN8 8U
+#define GPIOA_PIN9 9U
+#define GPIOA_PIN10 10U
+#define GPIOA_PIN11 11U
+#define GPIOA_PIN12 12U
+#define GPIOA_PIN13 13U
+#define GPIOA_PIN14 14U
+#define GPIOA_PIN15 15U
+
+#define GPIOB_PIN0 0U
+#define GPIOB_PIN1 1U
+#define GPIOB_PIN2 2U
+#define GPIOB_PIN3 3U
+#define GPIOB_PIN4 4U
+#define GPIOB_PIN5 5U
+#define GPIOB_PIN6 6U
+#define GPIOB_PIN7 7U
+#define GPIOB_PIN8 8U
+#define GPIOB_PIN9 9U
+#define GPIOB_PIN10 10U
+#define GPIOB_PIN11 11U
+#define GPIOB_PIN12 12U
+#define GPIOB_PIN13 13U
+#define GPIOB_PIN14 14U
+#define GPIOB_PIN15 15U
+
+#define GPIOC_PIN0 0U
+#define GPIOC_PIN1 1U
+#define GPIOC_PIN2 2U
+#define GPIOC_PIN3 3U
+#define GPIOC_PIN4 4U
+#define GPIOC_PIN5 5U
+#define GPIOC_PIN6 6U
+#define GPIOC_PIN7 7U
+#define GPIOC_PIN8 8U
+#define GPIOC_PIN9 9U
+#define GPIOC_PIN10 10U
+#define GPIOC_PIN11 11U
+#define GPIOC_PIN12 12U
+#define GPIOC_PIN13 13U
+#define GPIOC_PIN14 14U
+#define GPIOC_PIN15 15U
+
+#define GPIOD_PIN0 0U
+#define GPIOD_PIN1 1U
+#define GPIOD_PIN2 2U
+#define GPIOD_PIN3 3U
+#define GPIOD_PIN4 4U
+#define GPIOD_PIN5 5U
+#define GPIOD_PIN6 6U
+#define GPIOD_PIN7 7U
+#define GPIOD_PIN8 8U
+#define GPIOD_PIN9 9U
+#define GPIOD_PIN10 10U
+#define GPIOD_PIN11 11U
+#define GPIOD_PIN12 12U
+#define GPIOD_PIN13 13U
+#define GPIOD_PIN14 14U
+#define GPIOD_PIN15 15U
+
+#define GPIOE_PIN0 0U
+#define GPIOE_PIN1 1U
+#define GPIOE_PIN2 2U
+#define GPIOE_PIN3 3U
+#define GPIOE_PIN4 4U
+#define GPIOE_PIN5 5U
+#define GPIOE_PIN6 6U
+#define GPIOE_PIN7 7U
+#define GPIOE_PIN8 8U
+#define GPIOE_PIN9 9U
+#define GPIOE_PIN10 10U
+#define GPIOE_PIN11 11U
+#define GPIOE_PIN12 12U
+#define GPIOE_PIN13 13U
+#define GPIOE_PIN14 14U
+#define GPIOE_PIN15 15U
+
+#define GPIOF_PIN0 0U
+#define GPIOF_PIN1 1U
+#define GPIOF_PIN2 2U
+#define GPIOF_PIN3 3U
+#define GPIOF_PIN4 4U
+#define GPIOF_PIN5 5U
+#define GPIOF_PIN6 6U
+#define GPIOF_PIN7 7U
+#define GPIOF_PIN8 8U
+#define GPIOF_PIN9 9U
+#define GPIOF_PIN10 10U
+#define GPIOF_PIN11 11U
+#define GPIOF_PIN12 12U
+#define GPIOF_PIN13 13U
+#define GPIOF_PIN14 14U
+#define GPIOF_PIN15 15U
+
+/*
+ * IO lines assignments.
+ */
+
+#define LINE_BOOT0 PAL_LINE(GPIOB, 8U)
+#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
+#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
+
+/*
+ * I/O ports initial setup, this configuration is established soon after reset
+ * in the initialization code.
+ * Please refer to the STM32 Reference Manual for details.
+ */
+#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
+#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
+#define PIN_MODE_ALTERNATE(n) (2U << ((n) * 2U))
+#define PIN_MODE_ANALOG(n) (3U << ((n) * 2U))
+#define PIN_ODR_LOW(n) (0U << (n))
+#define PIN_ODR_HIGH(n) (1U << (n))
+#define PIN_OTYPE_PUSHPULL(n) (0U << (n))
+#define PIN_OTYPE_OPENDRAIN(n) (1U << (n))
+#define PIN_OSPEED_VERYLOW(n) (0U << ((n) * 2U))
+#define PIN_OSPEED_LOW(n) (1U << ((n) * 2U))
+#define PIN_OSPEED_MEDIUM(n) (2U << ((n) * 2U))
+#define PIN_OSPEED_HIGH(n) (3U << ((n) * 2U))
+#define PIN_PUPDR_FLOATING(n) (0U << ((n) * 2U))
+#define PIN_PUPDR_PULLUP(n) (1U << ((n) * 2U))
+#define PIN_PUPDR_PULLDOWN(n) (2U << ((n) * 2U))
+#define PIN_AFIO_AF(n, v) ((v) << (((n) % 8U) * 4U))
+
+/*
+ * GPIOA setup:
+ *
+ * PA0 - COL5
+ * PA1 - COL4
+ * PA2 - COL3
+ * PA3 - COL2
+ * PA4 - COL1
+ * PA5 - COL0
+ * PA6 - ROW4
+ * PA7 - ROW3
+ * PA8 - NC
+ * PA9 - ROW1
+ * PA10 - ROW0
+ * PA11 - USB_DM
+ * PA12 - USB_DP
+ * PA13 - COL15/SWDIO (for now, COL15)
+ * PA14 - COL14/SWCLK (for now, COL14)
+ * PA15 - COL13
+ */
+#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_PIN0) | \
+ PIN_MODE_INPUT(GPIOA_PIN1) | \
+ PIN_MODE_INPUT(GPIOA_PIN2) | \
+ PIN_MODE_INPUT(GPIOA_PIN3) | \
+ PIN_MODE_INPUT(GPIOA_PIN4) | \
+ PIN_MODE_INPUT(GPIOA_PIN5) | \
+ PIN_MODE_INPUT(GPIOA_PIN6) | \
+ PIN_MODE_INPUT(GPIOA_PIN7) | \
+ PIN_MODE_INPUT(GPIOA_PIN8) | \
+ PIN_MODE_INPUT(GPIOA_PIN9) | \
+ PIN_MODE_INPUT(GPIOA_PIN10) | \
+ PIN_MODE_INPUT(GPIOA_PIN11) | \
+ PIN_MODE_INPUT(GPIOA_PIN12) | \
+ PIN_MODE_INPUT(GPIOA_PIN13) | \
+ PIN_MODE_INPUT(GPIOA_PIN14) | \
+ PIN_MODE_INPUT(GPIOA_PIN15))
+#define VAL_GPIOA_OTYPER (PIN_OTYPE_PUSHPULL(GPIOA_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOA_PIN15))
+#define VAL_GPIOA_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOA_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN1) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN8) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN9) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOA_PIN11) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN12) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN13) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN14) | \
+ PIN_OSPEED_VERYLOW(GPIOA_PIN15))
+#define VAL_GPIOA_PUPDR (PIN_PUPDR_PULLUP(GPIOA_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN10) | \
+ PIN_PUPDR_FLOATING(GPIOA_PIN11) | \
+ PIN_PUPDR_FLOATING(GPIOA_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOA_PIN15))
+#define VAL_GPIOA_ODR (PIN_ODR_HIGH(GPIOA_PIN0) | \
+ PIN_ODR_HIGH(GPIOA_PIN1) | \
+ PIN_ODR_HIGH(GPIOA_PIN2) | \
+ PIN_ODR_HIGH(GPIOA_PIN3) | \
+ PIN_ODR_HIGH(GPIOA_PIN4) | \
+ PIN_ODR_HIGH(GPIOA_PIN5) | \
+ PIN_ODR_HIGH(GPIOA_PIN6) | \
+ PIN_ODR_HIGH(GPIOA_PIN7) | \
+ PIN_ODR_HIGH(GPIOA_PIN8) | \
+ PIN_ODR_HIGH(GPIOA_PIN9) | \
+ PIN_ODR_HIGH(GPIOA_PIN10) | \
+ PIN_ODR_HIGH(GPIOA_PIN11) | \
+ PIN_ODR_HIGH(GPIOA_PIN12) | \
+ PIN_ODR_HIGH(GPIOA_PIN13) | \
+ PIN_ODR_HIGH(GPIOA_PIN14) | \
+ PIN_ODR_HIGH(GPIOA_PIN15))
+#define VAL_GPIOA_AFRL (PIN_AFIO_AF(GPIOA_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN7, 0U))
+#define VAL_GPIOA_AFRH (PIN_AFIO_AF(GPIOA_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOA_PIN15, 0U))
+
+/*
+ * GPIOB setup:
+ *
+ * PB0 - ROW2
+ * PB1 - RGB_D
+ * PB2 - PIN2 (input pullup).
+ * PB3 - COL12
+ * PB4 - COL11
+ * PB5 - COL10
+ * PB6 - COL9
+ * PB7 - COL8
+ * PB8 - BOOT0 (set as output for STM32F042)
+ * PB9 - PIN9 (input pullup).
+ * PB10 - PIN10 (input pullup).
+ * PB11 - PIN11 (input pullup).
+ * PB12 - PIN12 (input pullup).
+ * PB13 - PIN13 (input pullup).
+ * PB14 - PIN14 (input pullup).
+ * PB15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
+ PIN_MODE_OUTPUT(GPIOB_PIN1) | \
+ PIN_MODE_INPUT(GPIOB_PIN2) | \
+ PIN_MODE_INPUT(GPIOB_PIN3) | \
+ PIN_MODE_INPUT(GPIOB_PIN4) | \
+ PIN_MODE_INPUT(GPIOB_PIN5) | \
+ PIN_MODE_INPUT(GPIOB_PIN6) | \
+ PIN_MODE_INPUT(GPIOB_PIN7) | \
+ PIN_MODE_OUTPUT(GPIOB_PIN8) | \
+ PIN_MODE_INPUT(GPIOB_PIN9) | \
+ PIN_MODE_INPUT(GPIOB_PIN10) | \
+ PIN_MODE_INPUT(GPIOB_PIN11) | \
+ PIN_MODE_INPUT(GPIOB_PIN12) | \
+ PIN_MODE_INPUT(GPIOB_PIN13) | \
+ PIN_MODE_INPUT(GPIOB_PIN14) | \
+ PIN_MODE_INPUT(GPIOB_PIN15))
+#define VAL_GPIOB_OTYPER (PIN_OTYPE_PUSHPULL(GPIOB_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOB_PIN15))
+#define VAL_GPIOB_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOB_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN2) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN3) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN4) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN5) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN6) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN7) | \
+ PIN_OSPEED_VERYLOW(GPIOB_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOB_PIN15))
+#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLUP(GPIOB_PIN0) | \
+ PIN_PUPDR_FLOATING(GPIOB_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN7) | \
+ PIN_PUPDR_PULLDOWN(GPIOB_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOB_PIN15))
+#define VAL_GPIOB_ODR (PIN_ODR_HIGH(GPIOB_PIN0) | \
+ PIN_ODR_HIGH(GPIOB_PIN1) | \
+ PIN_ODR_HIGH(GPIOB_PIN2) | \
+ PIN_ODR_HIGH(GPIOB_PIN3) | \
+ PIN_ODR_HIGH(GPIOB_PIN4) | \
+ PIN_ODR_HIGH(GPIOB_PIN5) | \
+ PIN_ODR_HIGH(GPIOB_PIN6) | \
+ PIN_ODR_HIGH(GPIOB_PIN7) | \
+ PIN_ODR_HIGH(GPIOB_PIN8) | \
+ PIN_ODR_HIGH(GPIOB_PIN9) | \
+ PIN_ODR_HIGH(GPIOB_PIN10) | \
+ PIN_ODR_HIGH(GPIOB_PIN11) | \
+ PIN_ODR_HIGH(GPIOB_PIN12) | \
+ PIN_ODR_HIGH(GPIOB_PIN13) | \
+ PIN_ODR_HIGH(GPIOB_PIN14) | \
+ PIN_ODR_HIGH(GPIOB_PIN15))
+#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN7, 0U))
+#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOB_PIN15, 0U))
+
+/*
+ * GPIOC setup:
+ *
+ * PC0 - PIN0 (input pullup).
+ * PC1 - PIN1 (input pullup).
+ * PC2 - PIN2 (input pullup).
+ * PC3 - PIN3 (input pullup).
+ * PC4 - PIN4 (input pullup).
+ * PC5 - PIN5 (input pullup).
+ * PC6 - PIN6 (input pullup).
+ * PC7 - PIN7 (input pullup).
+ * PC8 - PIN8 (input pullup).
+ * PC9 - PIN9 (input pullup).
+ * PC10 - PIN10 (input pullup).
+ * PC11 - PIN11 (input pullup).
+ * PC12 - PIN12 (input pullup).
+ * PC13 - PIN13 (input pullup).
+ * PC14 - PIN14 (input pullup).
+ * PC15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_PIN0) | \
+ PIN_MODE_INPUT(GPIOC_PIN1) | \
+ PIN_MODE_INPUT(GPIOC_PIN2) | \
+ PIN_MODE_INPUT(GPIOC_PIN3) | \
+ PIN_MODE_INPUT(GPIOC_PIN4) | \
+ PIN_MODE_INPUT(GPIOC_PIN5) | \
+ PIN_MODE_INPUT(GPIOC_PIN6) | \
+ PIN_MODE_INPUT(GPIOC_PIN7) | \
+ PIN_MODE_INPUT(GPIOC_PIN8) | \
+ PIN_MODE_INPUT(GPIOC_PIN9) | \
+ PIN_MODE_INPUT(GPIOC_PIN10) | \
+ PIN_MODE_INPUT(GPIOC_PIN11) | \
+ PIN_MODE_INPUT(GPIOC_PIN12) | \
+ PIN_MODE_INPUT(GPIOC_PIN13) | \
+ PIN_MODE_INPUT(GPIOC_PIN14) | \
+ PIN_MODE_INPUT(GPIOC_PIN15))
+#define VAL_GPIOC_OTYPER (PIN_OTYPE_PUSHPULL(GPIOC_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOC_PIN15))
+#define VAL_GPIOC_OSPEEDR (PIN_OSPEED_HIGH(GPIOC_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN4) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN6) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOC_PIN15))
+#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOC_PIN15))
+#define VAL_GPIOC_ODR (PIN_ODR_HIGH(GPIOC_PIN0) | \
+ PIN_ODR_HIGH(GPIOC_PIN1) | \
+ PIN_ODR_HIGH(GPIOC_PIN2) | \
+ PIN_ODR_HIGH(GPIOC_PIN3) | \
+ PIN_ODR_HIGH(GPIOC_PIN4) | \
+ PIN_ODR_HIGH(GPIOC_PIN5) | \
+ PIN_ODR_HIGH(GPIOC_PIN6) | \
+ PIN_ODR_HIGH(GPIOC_PIN7) | \
+ PIN_ODR_HIGH(GPIOC_PIN8) | \
+ PIN_ODR_HIGH(GPIOC_PIN9) | \
+ PIN_ODR_HIGH(GPIOC_PIN10) | \
+ PIN_ODR_HIGH(GPIOC_PIN11) | \
+ PIN_ODR_HIGH(GPIOC_PIN12) | \
+ PIN_ODR_HIGH(GPIOC_PIN13) | \
+ PIN_ODR_HIGH(GPIOC_PIN14) | \
+ PIN_ODR_HIGH(GPIOC_PIN15))
+#define VAL_GPIOC_AFRL (PIN_AFIO_AF(GPIOC_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN7, 0U))
+#define VAL_GPIOC_AFRH (PIN_AFIO_AF(GPIOC_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOC_PIN15, 0U))
+
+/*
+ * GPIOD setup:
+ *
+ * PD0 - PIN0 (input pullup).
+ * PD1 - PIN1 (input pullup).
+ * PD2 - PIN2 (input pullup).
+ * PD3 - PIN3 (input pullup).
+ * PD4 - PIN4 (input pullup).
+ * PD5 - PIN5 (input pullup).
+ * PD6 - PIN6 (input pullup).
+ * PD7 - PIN7 (input pullup).
+ * PD8 - PIN8 (input pullup).
+ * PD9 - PIN9 (input pullup).
+ * PD10 - PIN10 (input pullup).
+ * PD11 - PIN11 (input pullup).
+ * PD12 - PIN12 (input pullup).
+ * PD13 - PIN13 (input pullup).
+ * PD14 - PIN14 (input pullup).
+ * PD15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
+ PIN_MODE_INPUT(GPIOD_PIN1) | \
+ PIN_MODE_INPUT(GPIOD_PIN2) | \
+ PIN_MODE_INPUT(GPIOD_PIN3) | \
+ PIN_MODE_INPUT(GPIOD_PIN4) | \
+ PIN_MODE_INPUT(GPIOD_PIN5) | \
+ PIN_MODE_INPUT(GPIOD_PIN6) | \
+ PIN_MODE_INPUT(GPIOD_PIN7) | \
+ PIN_MODE_INPUT(GPIOD_PIN8) | \
+ PIN_MODE_INPUT(GPIOD_PIN9) | \
+ PIN_MODE_INPUT(GPIOD_PIN10) | \
+ PIN_MODE_INPUT(GPIOD_PIN11) | \
+ PIN_MODE_INPUT(GPIOD_PIN12) | \
+ PIN_MODE_INPUT(GPIOD_PIN13) | \
+ PIN_MODE_INPUT(GPIOD_PIN14) | \
+ PIN_MODE_INPUT(GPIOD_PIN15))
+#define VAL_GPIOD_OTYPER (PIN_OTYPE_PUSHPULL(GPIOD_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOD_PIN15))
+#define VAL_GPIOD_OSPEEDR (PIN_OSPEED_HIGH(GPIOD_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN4) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN6) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOD_PIN15))
+#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOD_PIN15))
+#define VAL_GPIOD_ODR (PIN_ODR_HIGH(GPIOD_PIN0) | \
+ PIN_ODR_HIGH(GPIOD_PIN1) | \
+ PIN_ODR_HIGH(GPIOD_PIN2) | \
+ PIN_ODR_HIGH(GPIOD_PIN3) | \
+ PIN_ODR_HIGH(GPIOD_PIN4) | \
+ PIN_ODR_HIGH(GPIOD_PIN5) | \
+ PIN_ODR_HIGH(GPIOD_PIN6) | \
+ PIN_ODR_HIGH(GPIOD_PIN7) | \
+ PIN_ODR_HIGH(GPIOD_PIN8) | \
+ PIN_ODR_HIGH(GPIOD_PIN9) | \
+ PIN_ODR_HIGH(GPIOD_PIN10) | \
+ PIN_ODR_HIGH(GPIOD_PIN11) | \
+ PIN_ODR_HIGH(GPIOD_PIN12) | \
+ PIN_ODR_HIGH(GPIOD_PIN13) | \
+ PIN_ODR_HIGH(GPIOD_PIN14) | \
+ PIN_ODR_HIGH(GPIOD_PIN15))
+#define VAL_GPIOD_AFRL (PIN_AFIO_AF(GPIOD_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN7, 0U))
+#define VAL_GPIOD_AFRH (PIN_AFIO_AF(GPIOD_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOD_PIN15, 0U))
+
+/*
+ * GPIOE setup:
+ *
+ * PE0 - PIN0 (input pullup).
+ * PE1 - PIN1 (input pullup).
+ * PE2 - PIN2 (input pullup).
+ * PE3 - PIN3 (input pullup).
+ * PE4 - PIN4 (input pullup).
+ * PE5 - PIN5 (input pullup).
+ * PE6 - PIN6 (input pullup).
+ * PE7 - PIN7 (input pullup).
+ * PE8 - PIN8 (input pullup).
+ * PE9 - PIN9 (input pullup).
+ * PE10 - PIN10 (input pullup).
+ * PE11 - PIN11 (input pullup).
+ * PE12 - PIN12 (input pullup).
+ * PE13 - PIN13 (input pullup).
+ * PE14 - PIN14 (input pullup).
+ * PE15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_PIN0) | \
+ PIN_MODE_INPUT(GPIOE_PIN1) | \
+ PIN_MODE_INPUT(GPIOE_PIN2) | \
+ PIN_MODE_INPUT(GPIOE_PIN3) | \
+ PIN_MODE_INPUT(GPIOE_PIN4) | \
+ PIN_MODE_INPUT(GPIOE_PIN5) | \
+ PIN_MODE_INPUT(GPIOE_PIN6) | \
+ PIN_MODE_INPUT(GPIOE_PIN7) | \
+ PIN_MODE_INPUT(GPIOE_PIN8) | \
+ PIN_MODE_INPUT(GPIOE_PIN9) | \
+ PIN_MODE_INPUT(GPIOE_PIN10) | \
+ PIN_MODE_INPUT(GPIOE_PIN11) | \
+ PIN_MODE_INPUT(GPIOE_PIN12) | \
+ PIN_MODE_INPUT(GPIOE_PIN13) | \
+ PIN_MODE_INPUT(GPIOE_PIN14) | \
+ PIN_MODE_INPUT(GPIOE_PIN15))
+#define VAL_GPIOE_OTYPER (PIN_OTYPE_PUSHPULL(GPIOE_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOE_PIN15))
+#define VAL_GPIOE_OSPEEDR (PIN_OSPEED_HIGH(GPIOE_PIN0) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN4) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN6) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOE_PIN15))
+#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOE_PIN15))
+#define VAL_GPIOE_ODR (PIN_ODR_HIGH(GPIOE_PIN0) | \
+ PIN_ODR_HIGH(GPIOE_PIN1) | \
+ PIN_ODR_HIGH(GPIOE_PIN2) | \
+ PIN_ODR_HIGH(GPIOE_PIN3) | \
+ PIN_ODR_HIGH(GPIOE_PIN4) | \
+ PIN_ODR_HIGH(GPIOE_PIN5) | \
+ PIN_ODR_HIGH(GPIOE_PIN6) | \
+ PIN_ODR_HIGH(GPIOE_PIN7) | \
+ PIN_ODR_HIGH(GPIOE_PIN8) | \
+ PIN_ODR_HIGH(GPIOE_PIN9) | \
+ PIN_ODR_HIGH(GPIOE_PIN10) | \
+ PIN_ODR_HIGH(GPIOE_PIN11) | \
+ PIN_ODR_HIGH(GPIOE_PIN12) | \
+ PIN_ODR_HIGH(GPIOE_PIN13) | \
+ PIN_ODR_HIGH(GPIOE_PIN14) | \
+ PIN_ODR_HIGH(GPIOE_PIN15))
+#define VAL_GPIOE_AFRL (PIN_AFIO_AF(GPIOE_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN7, 0U))
+#define VAL_GPIOE_AFRH (PIN_AFIO_AF(GPIOE_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOE_PIN15, 0U))
+
+/*
+ * GPIOF setup:
+ *
+ * PF0 - COL7
+ * PF1 - COL6
+ * PF2 - PIN2 (input pullup).
+ * PF3 - PIN3 (input pullup).
+ * PF4 - PIN4 (input pullup).
+ * PF5 - PIN5 (input pullup).
+ * PF6 - PIN6 (input pullup).
+ * PF7 - PIN7 (input pullup).
+ * PF8 - PIN8 (input pullup).
+ * PF9 - PIN9 (input pullup).
+ * PF10 - PIN10 (input pullup).
+ * PF11 - PIN11 (input pullup).
+ * PF12 - PIN12 (input pullup).
+ * PF13 - PIN13 (input pullup).
+ * PF14 - PIN14 (input pullup).
+ * PF15 - PIN15 (input pullup).
+ */
+#define VAL_GPIOF_MODER (PIN_MODE_INPUT(GPIOF_PIN0) | \
+ PIN_MODE_INPUT(GPIOF_PIN1) | \
+ PIN_MODE_INPUT(GPIOF_PIN2) | \
+ PIN_MODE_INPUT(GPIOF_PIN3) | \
+ PIN_MODE_INPUT(GPIOF_PIN4) | \
+ PIN_MODE_INPUT(GPIOF_PIN5) | \
+ PIN_MODE_INPUT(GPIOF_PIN6) | \
+ PIN_MODE_INPUT(GPIOF_PIN7) | \
+ PIN_MODE_INPUT(GPIOF_PIN8) | \
+ PIN_MODE_INPUT(GPIOF_PIN9) | \
+ PIN_MODE_INPUT(GPIOF_PIN10) | \
+ PIN_MODE_INPUT(GPIOF_PIN11) | \
+ PIN_MODE_INPUT(GPIOF_PIN12) | \
+ PIN_MODE_INPUT(GPIOF_PIN13) | \
+ PIN_MODE_INPUT(GPIOF_PIN14) | \
+ PIN_MODE_INPUT(GPIOF_PIN15))
+#define VAL_GPIOF_OTYPER (PIN_OTYPE_PUSHPULL(GPIOF_PIN0) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN1) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN2) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN3) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN4) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN5) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN6) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN7) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN8) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN9) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN10) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN11) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN12) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN13) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN14) | \
+ PIN_OTYPE_PUSHPULL(GPIOF_PIN15))
+#define VAL_GPIOF_OSPEEDR (PIN_OSPEED_VERYLOW(GPIOF_PIN0) | \
+ PIN_OSPEED_VERYLOW(GPIOF_PIN1) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN2) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN3) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN4) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN5) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN6) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN7) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN8) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN9) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN10) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN11) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN12) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN13) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN14) | \
+ PIN_OSPEED_HIGH(GPIOF_PIN15))
+#define VAL_GPIOF_PUPDR (PIN_PUPDR_PULLUP(GPIOF_PIN0) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN1) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN2) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN3) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN4) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN5) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN6) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN7) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN8) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN9) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN10) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN11) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN12) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN13) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN14) | \
+ PIN_PUPDR_PULLUP(GPIOF_PIN15))
+#define VAL_GPIOF_ODR (PIN_ODR_HIGH(GPIOF_PIN0) | \
+ PIN_ODR_HIGH(GPIOF_PIN1) | \
+ PIN_ODR_HIGH(GPIOF_PIN2) | \
+ PIN_ODR_HIGH(GPIOF_PIN3) | \
+ PIN_ODR_HIGH(GPIOF_PIN4) | \
+ PIN_ODR_HIGH(GPIOF_PIN5) | \
+ PIN_ODR_HIGH(GPIOF_PIN6) | \
+ PIN_ODR_HIGH(GPIOF_PIN7) | \
+ PIN_ODR_HIGH(GPIOF_PIN8) | \
+ PIN_ODR_HIGH(GPIOF_PIN9) | \
+ PIN_ODR_HIGH(GPIOF_PIN10) | \
+ PIN_ODR_HIGH(GPIOF_PIN11) | \
+ PIN_ODR_HIGH(GPIOF_PIN12) | \
+ PIN_ODR_HIGH(GPIOF_PIN13) | \
+ PIN_ODR_HIGH(GPIOF_PIN14) | \
+ PIN_ODR_HIGH(GPIOF_PIN15))
+#define VAL_GPIOF_AFRL (PIN_AFIO_AF(GPIOF_PIN0, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN1, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN2, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN3, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN4, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN5, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN6, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN7, 0U))
+#define VAL_GPIOF_AFRH (PIN_AFIO_AF(GPIOF_PIN8, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN9, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN10, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN11, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN12, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN13, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN14, 0U) | \
+ PIN_AFIO_AF(GPIOF_PIN15, 0U))
+
+#if !defined(_FROM_ASM_)
+#ifdef __cplusplus
+extern "C" {
+#endif
+ void boardInit(void);
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FROM_ASM_ */
+
+#endif /* _BOARD_H */
diff --git a/keyboards/vinta/boards/GENERIC_STM32_F042X6/board.mk b/keyboards/vinta/boards/GENERIC_STM32_F042X6/board.mk
new file mode 100644
index 000000000..bbeb5bbff
--- /dev/null
+++ b/keyboards/vinta/boards/GENERIC_STM32_F042X6/board.mk
@@ -0,0 +1,5 @@
+# List of all the board related files.
+BOARDSRC = $(BOARD_PATH)/boards/GENERIC_STM32_F042X6/board.c
+
+# Required include directories
+BOARDINC = $(BOARD_PATH)/boards/GENERIC_STM32_F042X6
diff --git a/keyboards/vinta/bootloader_defs.h b/keyboards/vinta/bootloader_defs.h
new file mode 100644
index 000000000..4994be9c2
--- /dev/null
+++ b/keyboards/vinta/bootloader_defs.h
@@ -0,0 +1,7 @@
+/* Address for jumping to bootloader on STM32 chips. */
+/* It is chip dependent, the correct number can be looked up here:
+ * http://www.st.com/web/en/resource/technical/document/application_note/CD00167594.pdf
+ * This also requires a patch to chibios:
+ * <tmk_dir>/tmk_core/tool/chibios/ch-bootloader-jump.patch
+ */
+#define STM32_BOOTLOADER_ADDRESS 0x1FFFC400 \ No newline at end of file
diff --git a/keyboards/vinta/chconf.h b/keyboards/vinta/chconf.h
new file mode 100644
index 000000000..b836a3b99
--- /dev/null
+++ b/keyboards/vinta/chconf.h
@@ -0,0 +1,521 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/chconf.h
+ * @brief Configuration file template.
+ * @details A copy of this file must be placed in each project directory, it
+ * contains the application specific kernel settings.
+ *
+ * @addtogroup config
+ * @details Kernel related settings and hooks.
+ * @{
+ */
+
+#ifndef CHCONF_H
+#define CHCONF_H
+
+#define _CHIBIOS_RT_CONF_
+
+/*===========================================================================*/
+/**
+ * @name System timers settings
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief System time counter resolution.
+ * @note Allowed values are 16 or 32 bits.
+ */
+#define CH_CFG_ST_RESOLUTION 32
+
+/**
+ * @brief System tick frequency.
+ * @details Frequency of the system timer that drives the system ticks. This
+ * setting also defines the system tick time unit.
+ */
+#define CH_CFG_ST_FREQUENCY 10000
+
+/**
+ * @brief Time delta constant for the tick-less mode.
+ * @note If this value is zero then the system uses the classic
+ * periodic tick. This value represents the minimum number
+ * of ticks that is safe to specify in a timeout directive.
+ * The value one is not valid, timeouts are rounded up to
+ * this value.
+ */
+#define CH_CFG_ST_TIMEDELTA 2
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel parameters and options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Round robin interval.
+ * @details This constant is the number of system ticks allowed for the
+ * threads before preemption occurs. Setting this value to zero
+ * disables the preemption for threads with equal priority and the
+ * round robin becomes cooperative. Note that higher priority
+ * threads can still preempt, the kernel is always preemptive.
+ * @note Disabling the round robin preemption makes the kernel more compact
+ * and generally faster.
+ * @note The round robin preemption is not supported in tickless mode and
+ * must be set to zero in that case.
+ */
+#define CH_CFG_TIME_QUANTUM 0
+
+/**
+ * @brief Managed RAM size.
+ * @details Size of the RAM area to be managed by the OS. If set to zero
+ * then the whole available RAM is used. The core memory is made
+ * available to the heap allocator and/or can be used directly through
+ * the simplified core memory allocator.
+ *
+ * @note In order to let the OS manage the whole RAM the linker script must
+ * provide the @p __heap_base__ and @p __heap_end__ symbols.
+ * @note Requires @p CH_CFG_USE_MEMCORE.
+ */
+#define CH_CFG_MEMCORE_SIZE 0
+
+/**
+ * @brief Idle thread automatic spawn suppression.
+ * @details When this option is activated the function @p chSysInit()
+ * does not spawn the idle thread. The application @p main()
+ * function becomes the idle thread and must implement an
+ * infinite loop.
+ */
+#define CH_CFG_NO_IDLE_THREAD FALSE
+
+/* Use __WFI in the idle thread for waiting. Does lower the power
+ * consumption. */
+#define CORTEX_ENABLE_WFI_IDLE TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Performance options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief OS optimization.
+ * @details If enabled then time efficient rather than space efficient code
+ * is used when two possible implementations exist.
+ *
+ * @note This is not related to the compiler optimization options.
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_OPTIMIZE_SPEED TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Subsystem options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Time Measurement APIs.
+ * @details If enabled then the time measurement APIs are included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_TM FALSE
+
+/**
+ * @brief Threads registry APIs.
+ * @details If enabled then the registry APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_REGISTRY TRUE
+
+/**
+ * @brief Threads synchronization APIs.
+ * @details If enabled then the @p chThdWait() function is included in
+ * the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_WAITEXIT TRUE
+
+/**
+ * @brief Semaphores APIs.
+ * @details If enabled then the Semaphores APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_SEMAPHORES TRUE
+
+/**
+ * @brief Semaphores queuing mode.
+ * @details If enabled then the threads are enqueued on semaphores by
+ * priority rather than in FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
+
+/**
+ * @brief Mutexes APIs.
+ * @details If enabled then the mutexes APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MUTEXES TRUE
+
+/**
+ * @brief Enables recursive behavior on mutexes.
+ * @note Recursive mutexes are heavier and have an increased
+ * memory footprint.
+ *
+ * @note The default is @p FALSE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
+
+/**
+ * @brief Conditional Variables APIs.
+ * @details If enabled then the conditional variables APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MUTEXES.
+ */
+#define CH_CFG_USE_CONDVARS TRUE
+
+/**
+ * @brief Conditional Variables APIs with timeout.
+ * @details If enabled then the conditional variables APIs with timeout
+ * specification are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_CONDVARS.
+ */
+#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
+
+/**
+ * @brief Events Flags APIs.
+ * @details If enabled then the event flags APIs are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_EVENTS TRUE
+
+/**
+ * @brief Events Flags APIs with timeout.
+ * @details If enabled then the events APIs with timeout specification
+ * are included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_EVENTS.
+ */
+#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
+
+/**
+ * @brief Synchronous Messages APIs.
+ * @details If enabled then the synchronous messages APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MESSAGES TRUE
+
+/**
+ * @brief Synchronous Messages queuing mode.
+ * @details If enabled then messages are served by priority rather than in
+ * FIFO order.
+ *
+ * @note The default is @p FALSE. Enable this if you have special
+ * requirements.
+ * @note Requires @p CH_CFG_USE_MESSAGES.
+ */
+#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
+
+/**
+ * @brief Mailboxes APIs.
+ * @details If enabled then the asynchronous messages (mailboxes) APIs are
+ * included in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_SEMAPHORES.
+ */
+#define CH_CFG_USE_MAILBOXES TRUE
+
+/**
+ * @brief Core Memory Manager APIs.
+ * @details If enabled then the core memory manager APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMCORE TRUE
+
+/**
+ * @brief Heap Allocator APIs.
+ * @details If enabled then the memory heap allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_MEMCORE and either @p CH_CFG_USE_MUTEXES or
+ * @p CH_CFG_USE_SEMAPHORES.
+ * @note Mutexes are recommended.
+ */
+#define CH_CFG_USE_HEAP TRUE
+
+/**
+ * @brief Memory Pools Allocator APIs.
+ * @details If enabled then the memory pools allocator APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ */
+#define CH_CFG_USE_MEMPOOLS TRUE
+
+/**
+ * @brief Dynamic Threads APIs.
+ * @details If enabled then the dynamic threads creation APIs are included
+ * in the kernel.
+ *
+ * @note The default is @p TRUE.
+ * @note Requires @p CH_CFG_USE_WAITEXIT.
+ * @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
+ */
+#define CH_CFG_USE_DYNAMIC TRUE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Debug options
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Debug option, kernel statistics.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_STATISTICS FALSE
+
+/**
+ * @brief Debug option, system state check.
+ * @details If enabled the correct call protocol for system APIs is checked
+ * at runtime.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_SYSTEM_STATE_CHECK FALSE
+
+/**
+ * @brief Debug option, parameters checks.
+ * @details If enabled then the checks on the API functions input
+ * parameters are activated.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_CHECKS FALSE
+
+/**
+ * @brief Debug option, consistency checks.
+ * @details If enabled then all the assertions in the kernel code are
+ * activated. This includes consistency checks inside the kernel,
+ * runtime anomalies and port-defined checks.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_ENABLE_ASSERTS FALSE
+
+/**
+ * @brief Debug option, trace buffer.
+ * @details If enabled then the trace buffer is activated.
+ *
+ * @note The default is @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_DISABLED
+
+/**
+ * @brief Trace buffer entries.
+ * @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
+ * different from @p CH_DBG_TRACE_MASK_DISABLED.
+ */
+#define CH_DBG_TRACE_BUFFER_SIZE 128
+
+/**
+ * @brief Debug option, stack checks.
+ * @details If enabled then a runtime stack check is performed.
+ *
+ * @note The default is @p FALSE.
+ * @note The stack check is performed in a architecture/port dependent way.
+ * It may not be implemented or some ports.
+ * @note The default failure mode is to halt the system with the global
+ * @p panic_msg variable set to @p NULL.
+ */
+#define CH_DBG_ENABLE_STACK_CHECK FALSE
+
+/**
+ * @brief Debug option, stacks initialization.
+ * @details If enabled then the threads working area is filled with a byte
+ * value when a thread is created. This can be useful for the
+ * runtime measurement of the used stack.
+ *
+ * @note The default is @p FALSE.
+ */
+#define CH_DBG_FILL_THREADS FALSE
+
+/**
+ * @brief Debug option, threads profiling.
+ * @details If enabled then a field is added to the @p thread_t structure that
+ * counts the system ticks occurred while executing the thread.
+ *
+ * @note The default is @p FALSE.
+ * @note This debug option is not currently compatible with the
+ * tickless mode.
+ */
+#define CH_DBG_THREADS_PROFILING FALSE
+
+/** @} */
+
+/*===========================================================================*/
+/**
+ * @name Kernel hooks
+ * @{
+ */
+/*===========================================================================*/
+
+/**
+ * @brief Threads descriptor structure extension.
+ * @details User fields added to the end of the @p thread_t structure.
+ */
+#define CH_CFG_THREAD_EXTRA_FIELDS \
+ /* Add threads custom fields here.*/
+
+/**
+ * @brief Threads initialization hook.
+ * @details User initialization code added to the @p chThdInit() API.
+ *
+ * @note It is invoked from within @p chThdInit() and implicitly from all
+ * the threads creation APIs.
+ */
+#define CH_CFG_THREAD_INIT_HOOK(tp) { \
+ /* Add threads initialization code here.*/ \
+}
+
+/**
+ * @brief Threads finalization hook.
+ * @details User finalization code added to the @p chThdExit() API.
+ */
+#define CH_CFG_THREAD_EXIT_HOOK(tp) { \
+ /* Add threads finalization code here.*/ \
+}
+
+/**
+ * @brief Context switch hook.
+ * @details This hook is invoked just before switching between threads.
+ */
+#define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) { \
+ /* Context switch code here.*/ \
+}
+
+/**
+ * @brief ISR enter hook.
+ */
+#define CH_CFG_IRQ_PROLOGUE_HOOK() { \
+ /* IRQ prologue code here.*/ \
+}
+
+/**
+ * @brief ISR exit hook.
+ */
+#define CH_CFG_IRQ_EPILOGUE_HOOK() { \
+ /* IRQ epilogue code here.*/ \
+}
+
+/**
+ * @brief Idle thread enter hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to activate a power saving mode.
+ */
+#define CH_CFG_IDLE_ENTER_HOOK() { \
+ /* Idle-enter code here.*/ \
+}
+
+/**
+ * @brief Idle thread leave hook.
+ * @note This hook is invoked within a critical zone, no OS functions
+ * should be invoked from here.
+ * @note This macro can be used to deactivate a power saving mode.
+ */
+#define CH_CFG_IDLE_LEAVE_HOOK() { \
+ /* Idle-leave code here.*/ \
+}
+
+/**
+ * @brief Idle Loop hook.
+ * @details This hook is continuously invoked by the idle thread loop.
+ */
+#define CH_CFG_IDLE_LOOP_HOOK() { \
+ /* Idle loop code here.*/ \
+}
+
+/**
+ * @brief System tick event hook.
+ * @details This hook is invoked in the system tick handler immediately
+ * after processing the virtual timers queue.
+ */
+#define CH_CFG_SYSTEM_TICK_HOOK() { \
+ /* System tick event code here.*/ \
+}
+
+/**
+ * @brief System halt hook.
+ * @details This hook is invoked in case to a system halting error before
+ * the system is halted.
+ */
+#define CH_CFG_SYSTEM_HALT_HOOK(reason) { \
+ /* System halt code here.*/ \
+}
+
+/**
+ * @brief Trace hook.
+ * @details This hook is invoked each time a new record is written in the
+ * trace buffer.
+ */
+#define CH_CFG_TRACE_HOOK(tep) { \
+ /* Trace code here.*/ \
+}
+
+/** @} */
+
+/*===========================================================================*/
+/* Port-specific settings (override port settings defaulted in chcore.h). */
+/*===========================================================================*/
+
+#endif /* CHCONF_H */
+
+/** @} */ \ No newline at end of file
diff --git a/keyboards/vinta/config.h b/keyboards/vinta/config.h
new file mode 100644
index 000000000..5f6ea7f06
--- /dev/null
+++ b/keyboards/vinta/config.h
@@ -0,0 +1,70 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0C61
+#define DEVICE_VER 0x00C6
+#define MANUFACTURER PeiorisBoards
+#define PRODUCT Vinta R1
+#define DESCRIPTION Tada68 Replacement PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+#define MATRIX_ROW_PINS { A10, A9, B0, A7, A6 }
+#define MATRIX_COL_PINS { A5, A4, A3, A2, A1, A0, F1, F0, B7, B6, B5, B4, B3, A15, A14, A13 }
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 0
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
diff --git a/keyboards/vinta/halconf.h b/keyboards/vinta/halconf.h
new file mode 100644
index 000000000..bc2b66f2e
--- /dev/null
+++ b/keyboards/vinta/halconf.h
@@ -0,0 +1,350 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+/**
+ * @file templates/halconf.h
+ * @brief HAL configuration header.
+ * @details HAL configuration file, this file allows to enable or disable the
+ * various device drivers from your application. You may also use
+ * this file in order to override the device drivers default settings.
+ *
+ * @addtogroup HAL_CONF
+ * @{
+ */
+
+#ifndef _HALCONF_H_
+#define _HALCONF_H_
+
+#include "mcuconf.h"
+
+/**
+ * @brief Enables the PAL subsystem.
+ */
+#if !defined(HAL_USE_PAL) || defined(__DOXYGEN__)
+#define HAL_USE_PAL TRUE
+#endif
+
+/**
+ * @brief Enables the ADC subsystem.
+ */
+#if !defined(HAL_USE_ADC) || defined(__DOXYGEN__)
+#define HAL_USE_ADC FALSE
+#endif
+
+/**
+ * @brief Enables the CAN subsystem.
+ */
+#if !defined(HAL_USE_CAN) || defined(__DOXYGEN__)
+#define HAL_USE_CAN FALSE
+#endif
+
+/**
+ * @brief Enables the DAC subsystem.
+ */
+#if !defined(HAL_USE_DAC) || defined(__DOXYGEN__)
+#define HAL_USE_DAC FALSE
+#endif
+
+/**
+ * @brief Enables the EXT subsystem.
+ */
+#if !defined(HAL_USE_EXT) || defined(__DOXYGEN__)
+#define HAL_USE_EXT FALSE
+#endif
+
+/**
+ * @brief Enables the GPT subsystem.
+ */
+#if !defined(HAL_USE_GPT) || defined(__DOXYGEN__)
+#define HAL_USE_GPT FALSE
+#endif
+
+/**
+ * @brief Enables the I2C subsystem.
+ */
+#if !defined(HAL_USE_I2C) || defined(__DOXYGEN__)
+#define HAL_USE_I2C FALSE
+#endif
+
+/**
+ * @brief Enables the I2S subsystem.
+ */
+#if !defined(HAL_USE_I2S) || defined(__DOXYGEN__)
+#define HAL_USE_I2S FALSE
+#endif
+
+/**
+ * @brief Enables the ICU subsystem.
+ */
+#if !defined(HAL_USE_ICU) || defined(__DOXYGEN__)
+#define HAL_USE_ICU FALSE
+#endif
+
+/**
+ * @brief Enables the MAC subsystem.
+ */
+#if !defined(HAL_USE_MAC) || defined(__DOXYGEN__)
+#define HAL_USE_MAC FALSE
+#endif
+
+/**
+ * @brief Enables the MMC_SPI subsystem.
+ */
+#if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_MMC_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the PWM subsystem.
+ */
+#if !defined(HAL_USE_PWM) || defined(__DOXYGEN__)
+#define HAL_USE_PWM FALSE
+#endif
+
+/**
+ * @brief Enables the RTC subsystem.
+ */
+#if !defined(HAL_USE_RTC) || defined(__DOXYGEN__)
+#define HAL_USE_RTC FALSE
+#endif
+
+/**
+ * @brief Enables the SDC subsystem.
+ */
+#if !defined(HAL_USE_SDC) || defined(__DOXYGEN__)
+#define HAL_USE_SDC FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL subsystem.
+ */
+#if !defined(HAL_USE_SERIAL) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL FALSE
+#endif
+
+/**
+ * @brief Enables the SERIAL over USB subsystem.
+ */
+#if !defined(HAL_USE_SERIAL_USB) || defined(__DOXYGEN__)
+#define HAL_USE_SERIAL_USB TRUE
+#endif
+
+/**
+ * @brief Enables the SPI subsystem.
+ */
+#if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
+#define HAL_USE_SPI FALSE
+#endif
+
+/**
+ * @brief Enables the UART subsystem.
+ */
+#if !defined(HAL_USE_UART) || defined(__DOXYGEN__)
+#define HAL_USE_UART FALSE
+#endif
+
+/**
+ * @brief Enables the USB subsystem.
+ */
+#if !defined(HAL_USE_USB) || defined(__DOXYGEN__)
+#define HAL_USE_USB TRUE
+#endif
+
+/**
+ * @brief Enables the WDG subsystem.
+ */
+#if !defined(HAL_USE_WDG) || defined(__DOXYGEN__)
+#define HAL_USE_WDG FALSE
+#endif
+
+/*===========================================================================*/
+/* ADC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_WAIT) || defined(__DOXYGEN__)
+#define ADC_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p adcAcquireBus() and @p adcReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(ADC_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define ADC_USE_MUTUAL_EXCLUSION FALSE
+#endif
+
+/*===========================================================================*/
+/* CAN driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Sleep mode related APIs inclusion switch.
+ */
+#if !defined(CAN_USE_SLEEP_MODE) || defined(__DOXYGEN__)
+#define CAN_USE_SLEEP_MODE TRUE
+#endif
+
+/*===========================================================================*/
+/* I2C driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables the mutual exclusion APIs on the I2C bus.
+ */
+#if !defined(I2C_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define I2C_USE_MUTUAL_EXCLUSION TRUE
+#endif
+
+/*===========================================================================*/
+/* MAC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_ZERO_COPY) || defined(__DOXYGEN__)
+#define MAC_USE_ZERO_COPY FALSE
+#endif
+
+/**
+ * @brief Enables an event sources for incoming packets.
+ */
+#if !defined(MAC_USE_EVENTS) || defined(__DOXYGEN__)
+#define MAC_USE_EVENTS TRUE
+#endif
+
+/*===========================================================================*/
+/* MMC_SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ * This option is recommended also if the SPI driver does not
+ * use a DMA channel and heavily loads the CPU.
+ */
+#if !defined(MMC_NICE_WAITING) || defined(__DOXYGEN__)
+#define MMC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SDC driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Number of initialization attempts before rejecting the card.
+ * @note Attempts are performed at 10mS intervals.
+ */
+#if !defined(SDC_INIT_RETRY) || defined(__DOXYGEN__)
+#define SDC_INIT_RETRY 100
+#endif
+
+/**
+ * @brief Include support for MMC cards.
+ * @note MMC support is not yet implemented so this option must be kept
+ * at @p FALSE.
+ */
+#if !defined(SDC_MMC_SUPPORT) || defined(__DOXYGEN__)
+#define SDC_MMC_SUPPORT FALSE
+#endif
+
+/**
+ * @brief Delays insertions.
+ * @details If enabled this options inserts delays into the MMC waiting
+ * routines releasing some extra CPU time for the threads with
+ * lower priority, this may slow down the driver a bit however.
+ */
+#if !defined(SDC_NICE_WAITING) || defined(__DOXYGEN__)
+#define SDC_NICE_WAITING TRUE
+#endif
+
+/*===========================================================================*/
+/* SERIAL driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Default bit rate.
+ * @details Configuration parameter, this is the baud rate selected for the
+ * default configuration.
+ */
+#if !defined(SERIAL_DEFAULT_BITRATE) || defined(__DOXYGEN__)
+#define SERIAL_DEFAULT_BITRATE 38400
+#endif
+
+/**
+ * @brief Serial buffers size.
+ * @details Configuration parameter, you can change the depth of the queue
+ * buffers depending on the requirements of your application.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_BUFFERS_SIZE 16
+#endif
+
+/*===========================================================================*/
+/* SERIAL_USB driver related setting. */
+/*===========================================================================*/
+
+/**
+ * @brief Serial over USB buffers size.
+ * @details Configuration parameter, the buffer size must be a multiple of
+ * the USB data endpoint maximum packet size.
+ * @note The default is 64 bytes for both the transmission and receive
+ * buffers.
+ */
+#if !defined(SERIAL_USB_BUFFERS_SIZE) || defined(__DOXYGEN__)
+#define SERIAL_USB_BUFFERS_SIZE 256
+#endif
+
+/*===========================================================================*/
+/* SPI driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_WAIT) || defined(__DOXYGEN__)
+#define SPI_USE_WAIT FALSE
+#endif
+
+/**
+ * @brief Enables the @p spiAcquireBus() and @p spiReleaseBus() APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(SPI_USE_MUTUAL_EXCLUSION) || defined(__DOXYGEN__)
+#define SPI_USE_MUTUAL_EXCLUSION FALSE
+#endif
+
+/*===========================================================================*/
+/* USB driver related settings. */
+/*===========================================================================*/
+
+/**
+ * @brief Enables synchronous APIs.
+ * @note Disabling this option saves both code and data space.
+ */
+#if !defined(USB_USE_WAIT) || defined(__DOXYGEN__)
+#define USB_USE_WAIT TRUE
+#endif
+
+#endif /* _HALCONF_H_ */
+
+/** @} */ \ No newline at end of file
diff --git a/keyboards/vinta/info.json b/keyboards/vinta/info.json
new file mode 100644
index 000000000..dd972c895
--- /dev/null
+++ b/keyboards/vinta/info.json
@@ -0,0 +1,18 @@
+{
+ "keyboard_name": "vinta",
+ "url": "",
+ "maintainer": "Peioris",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_69_ansi": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"~", "x":13, "y":0}, {"label":"|", "x":14, "y":0}, {"label":"Del", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"PgUp", "x":15, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgDn", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"End", "x":15, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"Reset", "x":11, "y":4}, {"label":"Ctrl", "x":12, "y":4}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
+ },
+ "LAYOUT_68_tada": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"~", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Del", "x":15, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgUp", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"PgDn", "x":15, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"Menu", "x":11, "y":4}, {"label":"Ctrl", "x":12, "y":4}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
+ },
+ "LAYOUT_67_ansi": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"~", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Del", "x":15, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgUp", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"PgDn", "x":15, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Ctrl", "x":11.25, "y":4, "w":1.25}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/vinta/keymaps/default/keymap.c b/keyboards/vinta/keymaps/default/keymap.c
new file mode 100644
index 000000000..80499d73f
--- /dev/null
+++ b/keyboards/vinta/keymaps/default/keymap.c
@@ -0,0 +1,51 @@
+/* Copyright 2018 Peioris
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Keymap _BL: (Base Layer) Default Layer
+ * ,----------------------------------------------------------------.
+ * |Esc | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =| \ | ` |Del |
+ * |----------------------------------------------------------------|
+ * |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| Bspc|PgUp|
+ * |----------------------------------------------------------------|
+ * |CAPS | A| S| D| F| G| H| J| K| L| ;| '|Return |PgDn|
+ * |----------------------------------------------------------------|
+ * |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | Up|End |
+ * |----------------------------------------------------------------|
+ * |Ctrl|Win |Alt | Space |Alt|RST|Ctrl|Lef|Dow|Rig |
+ * `----------------------------------------------------------------'
+ */
+[0] = LAYOUT_69_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, KC_DEL,\
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP,\
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,\
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END, \
+ KC_LCTL, KC_LGUI,KC_LALT, KC_SPC, KC_RALT, RESET, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+};
+
+void matrix_init_user(void) {
+ //user initialization
+}
+
+void matrix_scan_user(void) {
+ //user matrix
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
diff --git a/keyboards/vinta/mcuconf.h b/keyboards/vinta/mcuconf.h
new file mode 100644
index 000000000..4643e9f92
--- /dev/null
+++ b/keyboards/vinta/mcuconf.h
@@ -0,0 +1,168 @@
+/*
+ ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+#ifndef _MCUCONF_H_
+#define _MCUCONF_H_
+
+/*
+ * STM32F0xx drivers configuration.
+ * The following settings override the default settings present in
+ * the various device driver implementation headers.
+ * Note that the settings for each driver only have effect if the whole
+ * driver is enabled in halconf.h.
+ *
+ * IRQ priorities:
+ * 3...0 Lowest...Highest.
+ *
+ * DMA priorities:
+ * 0...3 Lowest...Highest.
+ */
+
+#define STM32F0xx_MCUCONF
+
+/*
+ * HAL driver system settings.
+ */
+#define STM32_NO_INIT FALSE
+#define STM32_PVD_ENABLE FALSE
+#define STM32_PLS STM32_PLS_LEV0
+#define STM32_HSI_ENABLED TRUE
+#define STM32_HSI14_ENABLED TRUE
+#define STM32_HSI48_ENABLED FALSE
+#define STM32_LSI_ENABLED TRUE
+#define STM32_HSE_ENABLED FALSE
+#define STM32_LSE_ENABLED FALSE
+#define STM32_SW STM32_SW_PLL
+#define STM32_PLLSRC STM32_PLLSRC_HSI_DIV2
+#define STM32_PREDIV_VALUE 1
+#define STM32_PLLMUL_VALUE 12
+#define STM32_HPRE STM32_HPRE_DIV1
+#define STM32_PPRE STM32_PPRE_DIV1
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_MCOSEL STM32_MCOSEL_NOCLOCK
+#define STM32_ADCPRE STM32_ADCPRE_DIV4
+#define STM32_ADCSW STM32_ADCSW_HSI14
+#define STM32_USBSW STM32_USBSW_HSI48
+#define STM32_CECSW STM32_CECSW_HSI
+#define STM32_I2C1SW STM32_I2C1SW_HSI
+#define STM32_USART1SW STM32_USART1SW_PCLK
+#define STM32_RTCSEL STM32_RTCSEL_LSI
+
+/*
+ * ADC driver system settings.
+ */
+#define STM32_ADC_USE_ADC1 FALSE
+#define STM32_ADC_ADC1_DMA_PRIORITY 2
+#define STM32_ADC_IRQ_PRIORITY 2
+#define STM32_ADC_ADC1_DMA_IRQ_PRIORITY 2
+
+/*
+ * EXT driver system settings.
+ */
+#define STM32_EXT_EXTI0_1_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI2_3_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI4_15_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI16_IRQ_PRIORITY 3
+#define STM32_EXT_EXTI17_IRQ_PRIORITY 3
+
+/*
+ * GPT driver system settings.
+ */
+#define STM32_GPT_USE_TIM1 FALSE
+#define STM32_GPT_USE_TIM2 FALSE
+#define STM32_GPT_USE_TIM3 FALSE
+#define STM32_GPT_USE_TIM14 FALSE
+#define STM32_GPT_TIM1_IRQ_PRIORITY 2
+#define STM32_GPT_TIM2_IRQ_PRIORITY 2
+#define STM32_GPT_TIM3_IRQ_PRIORITY 2
+#define STM32_GPT_TIM14_IRQ_PRIORITY 2
+
+/*
+ * I2C driver system settings.
+ */
+#define STM32_I2C_USE_I2C1 FALSE
+#define STM32_I2C_USE_I2C2 FALSE
+#define STM32_I2C_BUSY_TIMEOUT 50
+#define STM32_I2C_I2C1_IRQ_PRIORITY 3
+#define STM32_I2C_I2C2_IRQ_PRIORITY 3
+#define STM32_I2C_USE_DMA TRUE
+#define STM32_I2C_I2C1_DMA_PRIORITY 1
+#define STM32_I2C_I2C2_DMA_PRIORITY 1
+#define STM32_I2C_DMA_ERROR_HOOK(i2cp) osalSysHalt("DMA failure")
+
+/*
+ * ICU driver system settings.
+ */
+#define STM32_ICU_USE_TIM1 FALSE
+#define STM32_ICU_USE_TIM2 FALSE
+#define STM32_ICU_USE_TIM3 FALSE
+#define STM32_ICU_TIM1_IRQ_PRIORITY 3
+#define STM32_ICU_TIM2_IRQ_PRIORITY 3
+#define STM32_ICU_TIM3_IRQ_PRIORITY 3
+
+/*
+ * PWM driver system settings.
+ */
+#define STM32_PWM_USE_ADVANCED FALSE
+#define STM32_PWM_USE_TIM1 FALSE
+#define STM32_PWM_USE_TIM2 FALSE
+#define STM32_PWM_USE_TIM3 FALSE
+#define STM32_PWM_TIM1_IRQ_PRIORITY 3
+#define STM32_PWM_TIM2_IRQ_PRIORITY 3
+#define STM32_PWM_TIM3_IRQ_PRIORITY 3
+
+/*
+ * SERIAL driver system settings.
+ */
+#define STM32_SERIAL_USE_USART1 FALSE
+#define STM32_SERIAL_USE_USART2 FALSE
+#define STM32_SERIAL_USART1_PRIORITY 3
+#define STM32_SERIAL_USART2_PRIORITY 3
+
+/*
+ * SPI driver system settings.
+ */
+#define STM32_SPI_USE_SPI1 FALSE
+#define STM32_SPI_USE_SPI2 FALSE
+#define STM32_SPI_SPI1_DMA_PRIORITY 1
+#define STM32_SPI_SPI2_DMA_PRIORITY 1
+#define STM32_SPI_SPI1_IRQ_PRIORITY 2
+#define STM32_SPI_SPI2_IRQ_PRIORITY 2
+#define STM32_SPI_DMA_ERROR_HOOK(spip) osalSysHalt("DMA failure")
+
+/*
+ * ST driver system settings.
+ */
+#define STM32_ST_IRQ_PRIORITY 2
+#define STM32_ST_USE_TIMER 2
+
+/*
+ * UART driver system settings.
+ */
+#define STM32_UART_USE_USART1 FALSE
+#define STM32_UART_USE_USART2 FALSE
+#define STM32_UART_USART1_IRQ_PRIORITY 3
+#define STM32_UART_USART2_IRQ_PRIORITY 3
+#define STM32_UART_USART1_DMA_PRIORITY 0
+#define STM32_UART_USART2_DMA_PRIORITY 0
+#define STM32_UART_DMA_ERROR_HOOK(uartp) osalSysHalt("DMA failure")
+
+/*
+ * USB driver system settings.
+ */
+#define STM32_USB_USE_USB1 TRUE
+#define STM32_USB_LOW_POWER_ON_SUSPEND FALSE
+#define STM32_USB_USB1_LP_IRQ_PRIORITY 3
+
+#endif /* _MCUCONF_H_ */ \ No newline at end of file
diff --git a/keyboards/vinta/readme.md b/keyboards/vinta/readme.md
new file mode 100644
index 000000000..193f36121
--- /dev/null
+++ b/keyboards/vinta/readme.md
@@ -0,0 +1,22 @@
+Vinta
+=========
+
+[Vinta](https://i.imgur.com/huX3lff.jpg)
+
+
+This is an ARM-powered 65% keyboard PCB with USB Mini B connector and breakout for optional RGB underglow.
+
+Keyboard Maintainer: [Peioris](http://peioris.space/) and on [github](https://github.com/coarse)
+Hardware Supported: Vinta with STM32F042K6T6
+Hardware Availability: Private Groupbuy (will post on Reddit once QMK has RGB underglow working)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make vinta:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+#### Developer's Note
+
+STM32F042xx chips does not allow jumping to bootloader without BOOT0 being set to high, therefore it is impossible to enter the bootloader from sending a `RESET` keycode nor using bootmagic or bootmagic lite.
+The only way to enter bootloader is to hold the BOOT0 button while the keyboard is powering up or after a power reset (done by pressing the reset switch or sending a `RESET` keycode). \ No newline at end of file
diff --git a/keyboards/vinta/rules.mk b/keyboards/vinta/rules.mk
new file mode 100644
index 000000000..9d89d9663
--- /dev/null
+++ b/keyboards/vinta/rules.mk
@@ -0,0 +1,47 @@
+# project specific files
+
+## chip/board settings
+# - the next two should match the directories in
+# <chibios>/os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
+MCU_FAMILY = STM32
+MCU_SERIES = STM32F0xx
+
+# Linker script to use
+# - it should exist either in <chibios>/os/common/ports/ARMCMx/compilers/GCC/ld/
+# or <this_dir>/ld/
+MCU_LDSCRIPT = STM32F042x6
+
+# Startup code to use
+# - it should exist in <chibios>/os/common/ports/ARMCMx/compilers/GCC/mk/
+MCU_STARTUP = stm32f0xx
+
+# Board: it should exist either in <chibios>/os/hal/boards/
+# or <this_dir>/boards
+BOARD = GENERIC_STM32_F042X6
+
+# Cortex version
+MCU = cortex-m0
+
+# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
+ARMV = 6
+
+# Vector table for application
+# 0x00000000-0x00001000 area is occupied by bootlaoder.*/
+# The CORTEX_VTOR... is needed only for MCHCK/Infinity KB
+#OPT_DEFS = -DCORTEX_VTOR_INIT=0x00001000
+OPT_DEFS =
+
+# Options to pass to dfu-util when flashing
+DFU_ARGS = -d 0483:df11 -a 0 -s 0x08000000:leave
+
+# Build Options
+# comment out to disable the options.
+#
+BACKLIGHT_ENABLE = no
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # USB Nkey Rollover
+NO_USB_STARTUP_CHECK = no # Disable initialization only when usb is plugged in
diff --git a/keyboards/vinta/vinta.c b/keyboards/vinta/vinta.c
new file mode 100644
index 000000000..b5d40a160
--- /dev/null
+++ b/keyboards/vinta/vinta.c
@@ -0,0 +1,18 @@
+#include "vinta.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) {
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+
+ return process_record_user(keycode, record);
+} \ No newline at end of file
diff --git a/keyboards/vinta/vinta.h b/keyboards/vinta/vinta.h
new file mode 100644
index 000000000..991c981c9
--- /dev/null
+++ b/keyboards/vinta/vinta.h
@@ -0,0 +1,55 @@
+#ifndef VINTA_H
+#define VINTA_H
+
+#define XXX KC_NO
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+
+#define LAYOUT_69_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, K1F, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2E, K2F, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3C, K3E, K3F, \
+ K40, K41, K42, K45, K49, K4A, K4C, K4D, K4E, K4F \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, XXX, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, XXX, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, XXX, K3C, XXX, K3E, K3F }, \
+ { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, XXX, K4C, K4D, K4E, K4F } \
+}
+
+#define LAYOUT_68_tada( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, K1F, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2E, K2F, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3C, K3E, K3F, \
+ K40, K41, K42, K45, K49, K4A, K4C, K4D, K4E, K4F \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, XXX, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, XXX, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, XXX, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, XXX, K3C, XXX, K3E, K3F }, \
+ { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, XXX, XXX, K4D, K4E, K4F } \
+}
+
+#define LAYOUT_67_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0F, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1E, K1F, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2E, K2F, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3C, K3E, K3F, \
+ K40, K41, K42, K45, K49, K4A, K4D, K4E, K4F \
+) \
+{ \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, XXX, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, XXX, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, XXX, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, XXX, K3C, XXX, K3E, K3F }, \
+ { K40, K41, K42, XXX, XXX, K45, XXX, XXX, XXX, K49, K4A, XXX, XXX, K4D, K4E, K4F } \
+}
+
+#endif
diff --git a/keyboards/vision_division/keymaps/default/rules.mk b/keyboards/vision_division/keymaps/default/rules.mk
index 28060947a..342f37453 100644
--- a/keyboards/vision_division/keymaps/default/rules.mk
+++ b/keyboards/vision_division/keymaps/default/rules.mk
@@ -13,7 +13,7 @@ MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = yes # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/vision_division/readme.md b/keyboards/vision_division/readme.md
index 058629db3..350ced334 100644
--- a/keyboards/vision_division/readme.md
+++ b/keyboards/vision_division/readme.md
@@ -3,8 +3,8 @@ Vision Division
Full Size / Split Linear Keyboard PCB
-Keyboard Maintainer: QMK Community
-Hardware Supported: Vision Division PCB
+Keyboard Maintainer: QMK Community
+Hardware Supported: Vision Division PCB
Hardware Availability: https://geekhack.org/index.php?topic=83692.msg2227856#msg2227856
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/vitamins_included/config.h b/keyboards/vitamins_included/config.h
index 27924ae46..bcaf777c7 100644
--- a/keyboards/vitamins_included/config.h
+++ b/keyboards/vitamins_included/config.h
@@ -16,20 +16,12 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
#include "config_common.h"
-#if !defined(NO_DEBUG) && !defined(CONSOLE_ENABLE)
-#define NO_DEBUG
-#endif // !NO_DEBUG
-#if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE)
-#define NO_PRINT
-#endif // !NO_PRINT
#define NO_ACTION_MACRO
#define NO_ACTION_FUNCTION
-#define DISABLE_LEADER
-#endif
+
diff --git a/keyboards/vitamins_included/keymaps/default/config.h b/keyboards/vitamins_included/keymaps/default/config.h
index 35f641a94..aba9fa7d4 100644
--- a/keyboards/vitamins_included/keymaps/default/config.h
+++ b/keyboards/vitamins_included/keymaps/default/config.h
@@ -18,10 +18,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_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
+#pragma once
/* Use I2C or Serial, not both */
@@ -40,5 +37,3 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
SONG(COLEMAK_SOUND) \
}
#endif
-
-#endif
diff --git a/keyboards/vitamins_included/keymaps/default/keymap.c b/keyboards/vitamins_included/keymaps/default/keymap.c
index f25e2fd32..13b48e764 100644
--- a/keyboards/vitamins_included/keymaps/default/keymap.c
+++ b/keyboards/vitamins_included/keymaps/default/keymap.c
@@ -1,6 +1,4 @@
#include QMK_KEYBOARD_H
-#include "action_layer.h"
-#include "eeconfig.h"
extern keymap_config_t keymap_config;
@@ -141,28 +139,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
-void persistent_default_layer_set(uint16_t default_layer) {
- eeconfig_update_default_layer(default_layer);
- default_layer_set(default_layer);
-}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case QWERTY:
if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_QWERTY);
+ set_single_persistent_default_layer(_QWERTY);
}
return false;
break;
case COLEMAK:
if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_COLEMAK);
+ set_single_persistent_default_layer(_COLEMAK);
}
return false;
break;
case DVORAK:
if (record->event.pressed) {
- persistent_default_layer_set(1UL<<_DVORAK);
+ set_single_persistent_default_layer(_DVORAK);
}
return false;
break;
diff --git a/keyboards/vitamins_included/keymaps/default/rules.mk b/keyboards/vitamins_included/keymaps/default/rules.mk
index 457a3d01d..8b1378917 100644
--- a/keyboards/vitamins_included/keymaps/default/rules.mk
+++ b/keyboards/vitamins_included/keymaps/default/rules.mk
@@ -1,3 +1 @@
-ifndef QUANTUM_DIR
- include ../../../../Makefile
-endif
+
diff --git a/keyboards/vitamins_included/rev1/config.h b/keyboards/vitamins_included/rev1/config.h
index 26023bfea..0347477ee 100644
--- a/keyboards/vitamins_included/rev1/config.h
+++ b/keyboards/vitamins_included/rev1/config.h
@@ -59,10 +59,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN F0
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 16 // Number of LEDs
-#define ws2812_PORTREG PORTF
-#define ws2812_DDRREG DDRF
#define RGBLIGHT_ANIMATIONS
/* Audio settings */
diff --git a/keyboards/vitamins_included/rules.mk b/keyboards/vitamins_included/rules.mk
index 2291b2116..34f423f59 100644
--- a/keyboards/vitamins_included/rules.mk
+++ b/keyboards/vitamins_included/rules.mk
@@ -53,18 +53,17 @@ OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
-MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
-COMMAND_ENABLE = yes # Commands for debug and configuration
+COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
MIDI_ENABLE = no # MIDI controls
AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
-USE_I2C = no
+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
@@ -74,4 +73,4 @@ LAYOUTS = ortho_4x12
DEFAULT_FOLDER = vitamins_included/rev1
-EXTRAFLAGS += -flto \ No newline at end of file
+EXTRAFLAGS += -flto
diff --git a/keyboards/viterbi/keymaps/drashna/config.h b/keyboards/viterbi/keymaps/drashna/config.h
index 5bc5598ee..6eb871a50 100644
--- a/keyboards/viterbi/keymaps/drashna/config.h
+++ b/keyboards/viterbi/keymaps/drashna/config.h
@@ -19,28 +19,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifdef RGBLIGHT_ENABLE
#undef RGBLED_NUM
-#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 16
+
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 2
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 2
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1
-#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 300
-#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1
#endif // RGBLIGHT_ENABLE
#undef LOCKING_SUPPORT_ENABLE
#undef LOCKING_RESYNC_ENABLE
-#ifndef NO_DEBUG
-#define NO_DEBUG
-#endif // !NO_DEBUG
-#ifndef NO_PRINT
-#define NO_PRINT
-#endif // !NO_PRINT
/* disable action features */
//#define NO_ACTION_LAYER
@@ -59,6 +51,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define NO_MUSIC_MODE
#endif
+#define STRICT_LAYER_RELEASE
+
#define LAYOUT_ortho_5x7( \
L00, L01, L02, L03, L04, L05, L06, \
L10, L11, L12, L13, L14, L15, L16, \
diff --git a/keyboards/viterbi/keymaps/drashna/keymap.c b/keyboards/viterbi/keymaps/drashna/keymap.c
index 68ca593db..9ca14961b 100644
--- a/keyboards/viterbi/keymaps/drashna/keymap.c
+++ b/keyboards/viterbi/keymaps/drashna/keymap.c
@@ -13,7 +13,7 @@ extern keymap_config_t keymap_config;
#define _______ KC_TRNS
#define XXXXXXX KC_NO
-#define LMACRO TG(_MACROS)
+#define LMACRO OSL(_MACROS)
#define DIABLO TG(_DIABLO)
#define GAMEPAD TG(_GAMEPAD)
#define MEDIA TT(_MEDIA)
@@ -60,7 +60,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_MEDIA] = LAYOUT_ortho_5x7(
KC_MAKE, KC_RESET,MU_TOG, AU_ON, AU_OFF, CK_TOGG, RGB_SAD,
- MEDIA, EPRM, KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI,
+ MEDIA, EEP_RST, KC_RGB_T,RGB_M_P, RGB_M_B, RGB_M_R, RGB_SAI,
RGB_TOG, RGB_MOD, RGB_RMOD,RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_HUD,
KC_MPLY, KC_MPRV, KC_MNXT, RGB_M_X, RGB_M_G, RGB_M_P, RGB_HUI,
KC_MUTE, KC_VOLD, KC_VOLU, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI
@@ -87,12 +87,13 @@ bool process_record_keymap(uint16_t keycode, keyrecord_t *record) {
+
void matrix_init_keymap(void) {
- DDRD &= ~(1<<5);
- PORTD &= ~(1<<5);
+ #ifndef CONVERT_TO_PROTON_C
+ setPinOutput(D5);
+ writePinHigh(D5);
- DDRB &= ~(1<<0);
- PORTB &= ~(1<<0);
+ setPinOutput(B0);
+ writePinHigh(B0);
+ #endif
}
-
-
diff --git a/keyboards/viterbi/rev1/config.h b/keyboards/viterbi/rev1/config.h
index 3400ea31a..d6a66408e 100644
--- a/keyboards/viterbi/rev1/config.h
+++ b/keyboards/viterbi/rev1/config.h
@@ -61,10 +61,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D3
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 16 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
diff --git a/keyboards/viterbi/rev1/rev1.h b/keyboards/viterbi/rev1/rev1.h
index c47b1c4db..9c03e495a 100644
--- a/keyboards/viterbi/rev1/rev1.h
+++ b/keyboards/viterbi/rev1/rev1.h
@@ -63,4 +63,6 @@
}
#endif
+#define LAYOUT_ortho_5x14 LAYOUT
+
#endif
diff --git a/keyboards/viterbi/rev1/rules.mk b/keyboards/viterbi/rev1/rules.mk
index f84561674..2bf03237c 100644
--- a/keyboards/viterbi/rev1/rules.mk
+++ b/keyboards/viterbi/rev1/rules.mk
@@ -1 +1,3 @@
-BACKLIGHT_ENABLE = no \ No newline at end of file
+BACKLIGHT_ENABLE = no
+
+LAYOUTS = ortho_5x14
diff --git a/keyboards/viterbi/rules.mk b/keyboards/viterbi/rules.mk
index 1f77c6374..ee043cca3 100644
--- a/keyboards/viterbi/rules.mk
+++ b/keyboards/viterbi/rules.mk
@@ -41,7 +41,7 @@ F_USB = $(F_CPU)
# Bootloader
# This definition is optional, and if your keyboard supports multiple bootloaders of
-# different sizes, comment this out, and the correct address will be loaded
+# different sizes, comment this out, and the correct address will be loaded
# automatically (+60). See bootloader.mk for all options.
BOOTLOADER = caterina
@@ -63,7 +63,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. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = yes
USE_I2C = yes
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
@@ -71,4 +71,6 @@ SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
CUSTOM_MATRIX = yes
-DEFAULT_FOLDER = viterbi/rev1 \ No newline at end of file
+DEFAULT_FOLDER = viterbi/rev1
+
+LAYOUTS = ortho_5x14
diff --git a/keyboards/viterbi/viterbi.h b/keyboards/viterbi/viterbi.h
index 9081dc3d5..80d2a8f25 100644
--- a/keyboards/viterbi/viterbi.h
+++ b/keyboards/viterbi/viterbi.h
@@ -21,6 +21,8 @@
KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##L45, KC_##L46, KC_##R40, KC_##R41, KC_##R42, KC_##R43, KC_##R44, KC_##R45, KC_##R46 \
)
+#define LAYOUT_ortho_5x14 LAYOUT
+
#include "quantum.h"
#endif
diff --git a/keyboards/wavelet/config.h b/keyboards/wavelet/config.h
new file mode 100644
index 000000000..ac6c96696
--- /dev/null
+++ b/keyboards/wavelet/config.h
@@ -0,0 +1,63 @@
+/*
+Copyright 2012 Jun Wako <wakojun@gmail.com>
+Copyright 2015 Jack Humbert
+Copyright 2018 Danny Nguyen <danny@keeb.io>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CONFIG_H
+#define CONFIG_H
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xCB10
+#define PRODUCT_ID 0x1046
+#define DEVICE_VER 0x0100
+#define MANUFACTURER Keebio
+#define PRODUCT Wavelet
+#define DESCRIPTION 40 percent ortholinear keyboard
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 6
+
+// wiring of each half
+#define MATRIX_ROW_PINS { F4, F5, F7, B3, D2, D1, D4, D7 }
+#define MATRIX_COL_PINS { F6, B1, B2, B6, B4, E6 }
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#define RGBLED_NUM 12 // Number of LEDs
+
+/* Backlight LEDs */
+#define BACKLIGHT_PIN B5
+#define BACKLIGHT_LEVELS 7
+
+#endif
diff --git a/keyboards/wavelet/info.json b/keyboards/wavelet/info.json
new file mode 100644
index 000000000..a71058b95
--- /dev/null
+++ b/keyboards/wavelet/info.json
@@ -0,0 +1,17 @@
+{
+ "keyboard_name": "Wavelet",
+ "url": "https://keeb.io",
+ "maintainer": "Keebio",
+ "width": 12,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"x":0, "y":0}, {"x":1, "y":0}, {"x":2, "y":0}, {"x":3, "y":0}, {"x":4, "y":0}, {"x":5, "y":0}, {"x":6, "y":0}, {"x":7, "y":0}, {"x":8, "y":0}, {"x":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0},
+ {"x":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/wavelet/keymaps/default/keymap.c b/keyboards/wavelet/keymaps/default/keymap.c
new file mode 100644
index 000000000..dac8068a4
--- /dev/null
+++ b/keyboards/wavelet/keymaps/default/keymap.c
@@ -0,0 +1,212 @@
+#include QMK_KEYBOARD_H
+
+extern keymap_config_t keymap_config;
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+#define _QWERTY 0
+#define _COLEMAK 1
+#define _DVORAK 2
+#define _LOWER 3
+#define _RAISE 4
+#define _ADJUST 16
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ ADJUST,
+};
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+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 |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |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_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Colemak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | R | S | T | D | H | N | E | I | O | " |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_COLEMAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Dvorak
+ * ,-----------------------------------------------------------------------------------.
+ * | Tab | " | , | . | P | Y | F | G | C | R | L | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Esc | A | O | E | U | I | D | H | T | N | S | / |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * |Adjust| Ctrl | Alt | GUI |Lower |Space |Space |Raise | Left | Down | Up |Right |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_DVORAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ ADJUST, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+),
+
+/* Lower
+ * ,-----------------------------------------------------------------------------------.
+ * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | | \ | | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_LOWER] = LAYOUT_ortho_4x12( \
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ BL_STEP, 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 | Bksp |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / | | |Enter |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_RAISE] = LAYOUT_ortho_4x12( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+),
+
+/* Adjust (Lower + Raise)
+ * ,-----------------------------------------------------------------------------------.
+ * | | Reset| | | | | | | | | | Del |
+ * |------+------+------+------+------+-------------+------+------+------+------+------|
+ * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak| | |
+ * |------+------+------+------+------+------|------+------+------+------+------+------|
+ * | | | | | | | | | | | | |
+ * |------+------+------+------+------+------+------+------+------+------+------+------|
+ * | | | | | | | | | | | |
+ * `-----------------------------------------------------------------------------------'
+ */
+[_ADJUST] = LAYOUT_ortho_4x12( \
+ _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, \
+ _______, _______, _______, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+)
+
+
+};
+
+#ifdef AUDIO_ENABLE
+float tone_qwerty[][2] = SONG(QWERTY_SOUND);
+float tone_dvorak[][2] = SONG(DVORAK_SOUND);
+float tone_colemak[][2] = SONG(COLEMAK_SOUND);
+#endif
+
+void persistent_default_layer_set(uint16_t default_layer) {
+ eeconfig_update_default_layer(default_layer);
+ default_layer_set(default_layer);
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_qwerty);
+ #endif
+ persistent_default_layer_set(1UL<<_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_colemak);
+ #endif
+ persistent_default_layer_set(1UL<<_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ #ifdef AUDIO_ENABLE
+ PLAY_SONG(tone_dvorak);
+ #endif
+ persistent_default_layer_set(1UL<<_DVORAK);
+ }
+ return false;
+ break;
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/wavelet/keymaps/default/rules.mk b/keyboards/wavelet/keymaps/default/rules.mk
new file mode 100644
index 000000000..d7463419b
--- /dev/null
+++ b/keyboards/wavelet/keymaps/default/rules.mk
@@ -0,0 +1,2 @@
+RGBLIGHT_ENABLE = yes
+BACKLIGHT_ENABLE = yes
diff --git a/keyboards/wavelet/readme.md b/keyboards/wavelet/readme.md
new file mode 100644
index 000000000..bacd57037
--- /dev/null
+++ b/keyboards/wavelet/readme.md
@@ -0,0 +1,20 @@
+Wavelet
+=======
+
+A 4x12 ortholinear keyboard using Kailh Choc Low-Profile switches made and sold by [Keebio](https://keeb.io).
+
+Keyboard Maintainer: [Bakingpy/nooges](https://github.com/nooges)
+Hardware Supported: Pro Micro
+Hardware Availability: [Keebio](https://keeb.io)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wavelet:default
+
+Example of flashing this keyboard:
+
+ make wavelet:default:avrdude
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
+
+A build guide for this keyboard can be found here: [Levinson Build Guide](https://docs.keeb.io)
diff --git a/keyboards/wavelet/rules.mk b/keyboards/wavelet/rules.mk
new file mode 100644
index 000000000..cfff50a41
--- /dev/null
+++ b/keyboards/wavelet/rules.mk
@@ -0,0 +1,30 @@
+MCU = atmega32u4
+F_CPU = 16000000
+ARCH = AVR8
+F_USB = $(F_CPU)
+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 = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
+
+# 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_4x12
diff --git a/keyboards/wavelet/wavelet.c b/keyboards/wavelet/wavelet.c
new file mode 100644
index 000000000..2bc9c65a5
--- /dev/null
+++ b/keyboards/wavelet/wavelet.c
@@ -0,0 +1,29 @@
+#include "wavelet.h"
+
+void matrix_init_kb(void) {
+
+ // // green led on
+ // DDRD |= (1<<5);
+ // PORTD &= ~(1<<5);
+
+ // // orange led on
+ // DDRB |= (1<<0);
+ // PORTB &= ~(1<<0);
+
+ matrix_init_user();
+};
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+
+ {{5, 4}, {4, 4}, {3, 4}, {2, 4}, {1, 4}, {0, 4}},
+ {{5, 5}, {4, 5}, {3, 5}, {2, 5}, {1, 5}, {0, 5}},
+ {{5, 6}, {4, 6}, {3, 6}, {2, 6}, {1, 6}, {0, 6}},
+ {{5, 7}, {4, 7}, {3, 7}, {2, 7}, {1, 7}, {0, 7}},
+ {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}},
+ {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}},
+ {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}},
+ {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}},
+};
+#endif
diff --git a/keyboards/wavelet/wavelet.h b/keyboards/wavelet/wavelet.h
new file mode 100644
index 000000000..69a87a70c
--- /dev/null
+++ b/keyboards/wavelet/wavelet.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { L30, L31, L32, L33, L34, L35 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { R35, R34, R33, R32, R31, R30 } \
+ }
+
+// Used to create a keymap using only KC_ prefixed keys
+#define LAYOUT_kc( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) \
+ LAYOUT( \
+ KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R00, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, \
+ KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R10, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, \
+ KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R20, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, \
+ KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R30, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35 \
+ )
+
+#define LAYOUT_ortho_4x12 LAYOUT
+#define LAYOUT_kc_ortho_4x12 LAYOUT_kc
diff --git a/keyboards/westfoxtrot/cyclops/config.h b/keyboards/westfoxtrot/cyclops/config.h
new file mode 100644
index 000000000..f54f818d5
--- /dev/null
+++ b/keyboards/westfoxtrot/cyclops/config.h
@@ -0,0 +1,212 @@
+/*
+Copyright 2018 westfoxtrot
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 0x21FF
+#define PRODUCT_ID 0x0A66
+#define DEVICE_VER 0x0001
+#define MANUFACTURER westfoxtrot
+#define PRODUCT cyclops
+#define DESCRIPTION AEK66
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { D1, D0, D7, B4, F0 }
+#define MATRIX_COL_PINS { D3, D2, D5, D6, B6, B1, B2, B3, C6, C7, F7, F6, F4, F5, F1 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
+/* Bootmagic Lite key configuration */
+// #define BOOTMAGIC_LITE_ROW 0
+// #define BOOTMAGIC_LITE_COLUMN 0 \ No newline at end of file
diff --git a/keyboards/westfoxtrot/cyclops/cyclops.c b/keyboards/westfoxtrot/cyclops/cyclops.c
new file mode 100644
index 000000000..aea51e6b3
--- /dev/null
+++ b/keyboards/westfoxtrot/cyclops/cyclops.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 westfoxtrot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "cyclops.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+} \ No newline at end of file
diff --git a/keyboards/westfoxtrot/cyclops/cyclops.h b/keyboards/westfoxtrot/cyclops/cyclops.h
new file mode 100644
index 000000000..f32d2fd44
--- /dev/null
+++ b/keyboards/westfoxtrot/cyclops/cyclops.h
@@ -0,0 +1,43 @@
+/* Copyright 2018 westfoxtrot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 CYCLOPS_H
+#define CYCLOPS_H
+
+#include "quantum.h"
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ K00, K01, K02, 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, K2E, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K4A, K4B, K4C, K4D, K4E \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, 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, K2E }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, K46, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D, K4E } \
+}
+
+#endif
diff --git a/keyboards/westfoxtrot/cyclops/info.json b/keyboards/westfoxtrot/cyclops/info.json
new file mode 100644
index 000000000..a215a8a3d
--- /dev/null
+++ b/keyboards/westfoxtrot/cyclops/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "cyclops",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16.5,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Page Up", "x":15.5, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Page Down", "x":15.5, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"~", "x":12.75, "y":2}, {"label":"Shift", "x":0, "y":3, "w":1.5}, {"label":"|", "x":1.5, "y":3}, {"label":"Z", "x":2.5, "y":3}, {"label":"X", "x":3.5, "y":3}, {"label":"C", "x":4.5, "y":3}, {"label":"V", "x":5.5, "y":3}, {"label":"B", "x":6.5, "y":3}, {"label":"N", "x":7.5, "y":3}, {"label":"M", "x":8.5, "y":3}, {"label":"<", "x":9.5, "y":3}, {"label":">", "x":10.5, "y":3}, {"label":"?", "x":11.5, "y":3}, {"x":12.5, "y":3}, {"label":"Shift", "x":13.5, "y":3}, {"label":"\u2191", "x":14.5, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.5}, {"label":"Win", "x":1.5, "y":4, "w":1.25}, {"label":"Alt", "x":2.75, "y":4, "w":1.5}, {"x":4.25, "y":4, "w":6.5}, {"label":"Alt", "x":10.75, "y":4, "w":1.5}, {"label":"Ctrl", "x":12.25, "y":4, "w":1.25}, {"label":"\u2190", "x":13.5, "y":4}, {"label":"\u2193", "x":14.5, "y":4}, {"label":"\u2192", "x":15.5, "y":4}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/westfoxtrot/cyclops/keymaps/default/config.h b/keyboards/westfoxtrot/cyclops/keymaps/default/config.h
new file mode 100644
index 000000000..6278fae65
--- /dev/null
+++ b/keyboards/westfoxtrot/cyclops/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 'mechmerlin'
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/westfoxtrot/cyclops/keymaps/default/keymap.c b/keyboards/westfoxtrot/cyclops/keymaps/default/keymap.c
new file mode 100644
index 000000000..c850b9da0
--- /dev/null
+++ b/keyboards/westfoxtrot/cyclops/keymaps/default/keymap.c
@@ -0,0 +1,53 @@
+/* Copyright 2018 westfoxtrot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include QMK_KEYBOARD_H
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Default layer
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_NO, KC_RSFT, KC_UP,
+ KC_CAPS, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ // Fn1 Layer
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F11, KC_DEL, KC_HOME,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void matrix_init_user(void) {
+
+}
+
+void matrix_scan_user(void) {
+
+}
+
+void led_set_user(uint8_t usb_led) {
+
+}
diff --git a/keyboards/westfoxtrot/cyclops/keymaps/default/readme.md b/keyboards/westfoxtrot/cyclops/keymaps/default/readme.md
new file mode 100644
index 000000000..b1e2b84a3
--- /dev/null
+++ b/keyboards/westfoxtrot/cyclops/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for cyclops
diff --git a/keyboards/westfoxtrot/cyclops/readme.md b/keyboards/westfoxtrot/cyclops/readme.md
new file mode 100644
index 000000000..e026c4119
--- /dev/null
+++ b/keyboards/westfoxtrot/cyclops/readme.md
@@ -0,0 +1,15 @@
+# cyclops
+
+![cyclops](https://github.com/westfoxtrot/Cyclops)
+
+66% Alps Keyboard in ISO layout.
+
+ Keyboard Maintainer: [westfoxtrot](https://github.com/westfoxtrot)
+ Hardware Supported: Cyclops (AEKISO66) PCB
+ Hardware Availability: Files released here (https://github.com/westfoxtrot/Cyclops)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make westfoxtrot/cyclops: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/westfoxtrot/cyclops/rules.mk b/keyboards/westfoxtrot/cyclops/rules.mk
new file mode 100644
index 000000000..10ea51391
--- /dev/null
+++ b/keyboards/westfoxtrot/cyclops/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 = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+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) \ No newline at end of file
diff --git a/keyboards/whitefox/board_is31fl3731c.h b/keyboards/whitefox/board_is31fl3731c.h
index dea643f10..d59b2ff43 100644
--- a/keyboards/whitefox/board_is31fl3731c.h
+++ b/keyboards/whitefox/board_is31fl3731c.h
@@ -31,7 +31,7 @@ static const uint8_t led_mask[] = {
0xFF, 0x00, /* C6-1 -> C6-16 */
0xFF, 0x00, /* C7-1 -> C7-16 */
0xFF, 0x00, /* C8-1 -> C8-16 */
- 0xFE, 0x00, /* C9-1 -> C9-16 */
+ 0xFF, 0x00, /* C9-1 -> C9-16 */
};
// The address of the LED
diff --git a/keyboards/whitefox/config.h b/keyboards/whitefox/config.h
index 9f021fb51..a8047cf54 100644
--- a/keyboards/whitefox/config.h
+++ b/keyboards/whitefox/config.h
@@ -18,8 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#ifndef CONFIG_H
#define CONFIG_H
-#define PREVENT_STUCK_MODIFIERS
-
/* USB Device descriptor parameter */
#define VENDOR_ID 0x1c11
#define PRODUCT_ID 0xb04d
diff --git a/keyboards/whitefox/keymaps/billypython/config.h b/keyboards/whitefox/keymaps/billypython/config.h
new file mode 100644
index 000000000..275f8effb
--- /dev/null
+++ b/keyboards/whitefox/keymaps/billypython/config.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#define FORCE_NKRO
+
+#define MAGIC_KEY_LAYER0_ALT1 BSLS
+#define MAGIC_KEY_BOOTLOADER ESC
+
+#define MOUSEKEY_DELAY 50
+#define MOUSEKEY_INTERVAL 15
+#define MOUSEKEY_MAX_SPEED 4
+#define MOUSEKEY_TIME_TO_MAX 50
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 50
+
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 200
+#define TAPPING_TOGGLE 2
diff --git a/keyboards/whitefox/keymaps/billypython/keymap.c b/keyboards/whitefox/keymaps/billypython/keymap.c
new file mode 100644
index 000000000..dfc7d6a96
--- /dev/null
+++ b/keyboards/whitefox/keymaps/billypython/keymap.c
@@ -0,0 +1,157 @@
+#include QMK_KEYBOARD_H
+
+#define TOP LCTL(KC_HOME)
+#define BOTTOM LCTL(KC_END)
+
+#define FN MO(L_FN)
+#define FN_CAPS LT(L_FN, KC_CAPS)
+#define FN_FNLK TT(L_FN)
+
+#define RSF_RCT TD(TD_RSF_RCT)
+
+#define COMMA UC(0x002C)
+#define L_PAREN UC(0x0028)
+#define R_PAREN UC(0x0029)
+#define EQUALS UC(0x003D)
+#define TIMES UC(0x00D7)
+#define DIVIDE UC(0x00F7)
+#define MINUS UC(0x2212)
+
+void eeconfig_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+}
+
+enum layers {
+ L_BASE,
+ L_FN,
+ L_NUMPAD,
+};
+
+enum custom_keycodes {
+ CLEAR = SAFE_RANGE,
+ NUMPAD,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case CLEAR:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
+ }
+ return false;
+
+ case NUMPAD:
+ if (record->event.pressed) {
+ layer_invert(L_NUMPAD);
+ bool num_lock = host_keyboard_leds() & 1<<USB_LED_NUM_LOCK;
+ if (num_lock != (bool)IS_LAYER_ON(L_NUMPAD)) {
+ tap_code(KC_NLCK); // Toggle Num Lock to match layer state.
+ }
+ }
+ return false;
+
+ default:
+ return true;
+ }
+}
+
+#define ACTION_TAP_DANCE_DOUBLE_MODS(mod1, mod2) { \
+ .fn = { td_double_mods_each, NULL, td_double_mods_reset }, \
+ .user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \
+ }
+
+void td_double_mods_each(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
+ // Single tap → mod1, double tap → mod2, triple tap etc. → mod1+mod2
+ if (state->count == 1 || state->count == 3) {
+ register_code(mods->kc1);
+ } else if (state->count == 2) {
+ unregister_code(mods->kc1);
+ register_code(mods->kc2);
+ }
+ // Prevent tap dance from sending kc1 and kc2 as weak mods
+ state->weak_mods &= ~(MOD_BIT(mods->kc1) | MOD_BIT(mods->kc2));
+}
+
+void td_double_mods_reset(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
+ if (state->count == 1 || state->count > 2) {
+ unregister_code(mods->kc1);
+ }
+ if (state->count >= 2) {
+ unregister_code(mods->kc2);
+ }
+}
+
+enum tap_dance {
+ TD_RSF_RCT,
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_RSF_RCT] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RSFT, KC_RCTL),
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │PSc│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │Del│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │SftCtl│ ↑ │PgD│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │LCtl│LGui│LAlt│ Space │RAlt│FnLk│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [L_BASE] = LAYOUT_truefox( \
+ 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,RSF_RCT, 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│Num│Scr│Pau│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
+ * │ M4 │M2 │M↑ │M1 │M3 │M5 │ │PgU│ ↑ │PgD│Ply│Prv│Nxt│Clear│Ins│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │M← │M↓ │M→ │MW↑│ │Hom│ ← │ ↓ │ → │End│ │ │Top│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │MA0│MA2│MW←│MW→│ │ │ │VoD│VoU│Mut│ App │PgU│Btm│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │ │ │ │ MW↓ │ │ │ │Hom│PgD│End│
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [L_FN] = LAYOUT_truefox( \
+ _______,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,_______,KC_PGUP,KC_UP, KC_PGDN,KC_MPLY,KC_MPRV,KC_MNXT,CLEAR, KC_INS, \
+ _______,KC_MS_L,KC_MS_D,KC_MS_R,KC_WH_U,_______,KC_HOME,KC_LEFT,KC_DOWN,KC_RGHT,KC_END, _______, _______, TOP, \
+ _______, KC_ACL0,KC_ACL2,KC_WH_L,KC_WH_R,_______,_______,_______,KC_VOLD,KC_VOLU,KC_MUTE,KC_APP, KC_PGUP,BOTTOM, \
+ _______,_______,_______, KC_WH_D, _______,_______, KC_HOME,KC_PGDN,KC_END \
+ ),
+
+ /* Numpad layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Num│ │ │ │ │ │ │P7 │P8 │P9 │P- │ − │ = │Num│ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
+ * │ │ │ │ │ │ │ │P4 │P5 │P6 │P+ │ ( │ ) │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │ │ │ │ │ │ │P1 │P2 │P3 │P* │ × │ PEnter │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │ │ │ │ │ │P0 │P0 │ , │P. │P/ │ ÷ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [L_NUMPAD] = LAYOUT_truefox( \
+ NUMPAD, _______,_______,_______,_______,_______,_______,KC_P7, KC_P8, KC_P9, KC_PMNS,MINUS, EQUALS, NUMPAD, _______,_______, \
+ _______,_______,_______,_______,_______,_______,_______,KC_P4, KC_P5, KC_P6, KC_PPLS,L_PAREN,R_PAREN,_______, _______, \
+ _______,_______,_______,_______,_______,_______,_______,KC_P1, KC_P2, KC_P3, KC_PAST,TIMES, KC_PENT, _______, \
+ _______, _______,_______,_______,_______,_______,KC_P0, KC_P0, COMMA, KC_PDOT,KC_PSLS,DIVIDE, _______,_______, \
+ _______,_______,_______, _______, _______,_______, _______,_______,_______ \
+ ),
+};
diff --git a/keyboards/whitefox/keymaps/billypython/rules.mk b/keyboards/whitefox/keymaps/billypython/rules.mk
new file mode 100644
index 000000000..8fbc1f3af
--- /dev/null
+++ b/keyboards/whitefox/keymaps/billypython/rules.mk
@@ -0,0 +1,15 @@
+AUDIO_ENABLE = no
+BACKLIGHT_ENABLE = no
+BLUETOOTH_ENABLE = no
+BOOTMAGIC_ENABLE = no
+COMMAND_ENABLE = yes
+CONSOLE_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+MIDI_ENABLE = no
+MOUSEKEY_ENABLE = yes
+NKRO_ENABLE = yes
+RGBLIGHT_ENABLE = no
+SLEEP_LED_ENABLE = no
+TAP_DANCE_ENABLE = yes
+UNICODE_ENABLE = yes
+VISUALIZER_ENABLE = no
diff --git a/keyboards/whitefox/keymaps/constexpr/config.h b/keyboards/whitefox/keymaps/constexpr/config.h
deleted file mode 100644
index b4bc05acf..000000000
--- a/keyboards/whitefox/keymaps/constexpr/config.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-#define FORCE_NKRO
-
-#define TAPPING_TOGGLE 2
-#define TAPPING_TERM 200
-#define PERMISSIVE_HOLD
-
-#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
diff --git a/keyboards/whitefox/keymaps/constexpr/keymap.c b/keyboards/whitefox/keymaps/constexpr/keymap.c
deleted file mode 100644
index b19f1c81f..000000000
--- a/keyboards/whitefox/keymaps/constexpr/keymap.c
+++ /dev/null
@@ -1,142 +0,0 @@
-#include QMK_KEYBOARD_H
-
-#define FN_CAPS LT(L_FN, KC_CAPS)
-#define FN_CTRL TD(TD_FN_CTRL)
-#define RL_ALT TD(TD_RL_ALT) // Unused
-
-#define TOP LCTL(KC_HOME)
-#define BOTTOM LCTL(KC_END)
-
-#define UC_LPRN UC(0x0028)
-#define UC_RPRN UC(0x0029)
-#define UC_EQLS UC(0x003D)
-#define UC_MULS UC(0x00D7)
-#define UC_DIVS UC(0x00F7)
-#define UC_MINS UC(0x2212)
-
-void matrix_init_user(void)
-{
- set_unicode_input_mode(UC_WIN);
-}
-
-enum layers {
- L_BASE,
- L_FN,
- L_NUMPAD,
-};
-
-enum custom_keycodes {
- CLEAR = SAFE_RANGE,
- NUMPAD,
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record)
-{
- if (!record->event.pressed) { return true; }
-
- switch (keycode) {
- case CLEAR:
- SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
- return false;
-
- case NUMPAD:
- layer_invert(L_NUMPAD);
- bool num_lock = host_keyboard_leds() & 1<<USB_LED_NUM_LOCK;
- if (num_lock != (bool)IS_LAYER_ON(L_NUMPAD)) {
- register_code(KC_NLCK); // Force Num Lock to match layer state.
- unregister_code(KC_NLCK);
- }
- return false;
-
- default:
- return true;
- }
-}
-
-enum tap_dance {
- TD_FN_CTRL,
- TD_RL_ALT, // Unused
-};
-
-void td_fn_ctrl_finished(qk_tap_dance_state_t *state, void *user_data)
-{
- // Single tap → Fn, double tap → RCtrl, triple tap → Fn+RCtrl etc.
- if (state->count & 1) { layer_on(L_FN); }
- if (state->count & 2) { register_code(KC_RCTL); }
-}
-
-void td_fn_ctrl_reset(qk_tap_dance_state_t *state, void *user_data)
-{
- if (state->count & 1) { layer_off(L_FN); }
- if (state->count & 2) { unregister_code(KC_RCTL); }
-}
-
-qk_tap_dance_action_t tap_dance_actions[] = {
- [TD_FN_CTRL] = ACTION_TAP_DANCE_FN_ADVANCED(NULL, td_fn_ctrl_finished, td_fn_ctrl_reset),
- [TD_RL_ALT] = ACTION_TAP_DANCE_DOUBLE(KC_RALT, KC_LALT), // Unused
-};
-
-const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /* Base layer
- * ,---------------------------------------------------------------.
- * |Esc| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |PSc|
- * |---------------------------------------------------------------|
- * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] |Bspc |Del|
- * |---------------------------------------------------------------|
- * |FnCaps| 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|FnCt| | ← | ↓ | → |
- * `---------------------------------------------------------------'
- */
- [L_BASE] = LAYOUT_truefox( \
- 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,KC_RSFT, KC_UP, KC_PGDN, \
- KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,FN_CTRL, KC_LEFT,KC_DOWN,KC_RGHT \
- ),
-
- /* Function layer
- * ,---------------------------------------------------------------.
- * | |F1 |F2 |F3 |F4 |F5 |F6 |F7 |F8 |F9 |F10|F11|F12|Num|Scr|Pau|
- * |---------------------------------------------------------------|
- * | M4 |M2 |M↑ |M1 |M3 |M5 | | | |Stp|Ply|Prv|Nxt|Clear|Ins|
- * |---------------------------------------------------------------|
- * | |M← |M↓ |M→ |MW↑| | | | | | | | |Top|
- * |---------------------------------------------------------------|
- * | |MA0|MA2|MW←|MW→| | | |Vo-|Vo+|Mut| |PgU|Btm|
- * |---------------------------------------------------------------|
- * | | | | MW↓ |App | | |Hom|PgD|End|
- * `---------------------------------------------------------------'
- */
- [L_FN] = LAYOUT_truefox( \
- _______,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,_______,_______,_______,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_PGUP,BOTTOM, \
- _______,_______,_______, KC_WH_D, KC_APP, _______, KC_HOME,KC_PGDN,KC_END \
- ),
-
- /* Numpad layer
- * ,---------------------------------------------------------------.
- * |Num| | | | | | |P7 |P8 |P9 |P- | − | = |Num| | |
- * |---------------------------------------------------------------|
- * | | | | | | | |P4 |P5 |P6 |P+ | ( | ) | | |
- * |---------------------------------------------------------------|
- * | | | | | | | |P1 |P2 |P3 |P* | × | PEnter | |
- * |---------------------------------------------------------------|
- * | | | | | | |P0 |P0 |P, |P. |P/ | ÷ | | |
- * |---------------------------------------------------------------|
- * | | | | | | | | | | |
- * `---------------------------------------------------------------'
- */
- [L_NUMPAD] = LAYOUT_truefox( \
- NUMPAD, _______,_______,_______,_______,_______,_______,KC_P7, KC_P8, KC_P9, KC_PMNS,UC_MINS,UC_EQLS,NUMPAD, _______,_______, \
- _______,_______,_______,_______,_______,_______,_______,KC_P4, KC_P5, KC_P6, KC_PPLS,UC_LPRN,UC_RPRN,_______, _______, \
- _______,_______,_______,_______,_______,_______,_______,KC_P1, KC_P2, KC_P3, KC_PAST,UC_MULS, KC_PENT, _______, \
- _______, _______,_______,_______,_______,_______,KC_P0, KC_P0, KC_PCMM,KC_PDOT,KC_PSLS,UC_DIVS, _______,_______, \
- _______,_______,_______, _______, _______,_______, _______,_______,_______ \
- ),
-};
diff --git a/keyboards/whitefox/keymaps/constexpr/rules.mk b/keyboards/whitefox/keymaps/constexpr/rules.mk
deleted file mode 100644
index f1f3d2378..000000000
--- a/keyboards/whitefox/keymaps/constexpr/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-BOOTMAGIC_ENABLE = no
-CONSOLE_ENABLE = yes
-TAP_DANCE_ENABLE = yes
-UNICODE_ENABLE = yes
diff --git a/keyboards/whitefox/keymaps/konstantin/config.h b/keyboards/whitefox/keymaps/konstantin/config.h
new file mode 100644
index 000000000..ab920a50b
--- /dev/null
+++ b/keyboards/whitefox/keymaps/konstantin/config.h
@@ -0,0 +1,27 @@
+#pragma once
+
+#define FORCE_NKRO
+
+#undef IS_COMMAND
+#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSFT) | MOD_BIT(KC_RCTL)))
+
+#define MAGIC_KEY_LAYER0_ALT1 BSLS
+#define MAGIC_KEY_BOOTLOADER ESC
+
+#define MOUSEKEY_DELAY 50
+#define MOUSEKEY_INTERVAL 15
+#define MOUSEKEY_MAX_SPEED 4
+#define MOUSEKEY_TIME_TO_MAX 50
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 50
+
+#define NO_ACTION_FUNCTION
+#define NO_ACTION_MACRO
+
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 200
+#define TAPPING_TOGGLE 2
+
+#define UNICODE_CYCLE_PERSIST false
+#define UNICODE_SELECTED_MODES UC_WINC, UC_LNX
+#define UNICODE_WINC_KEY KC_RGUI
diff --git a/keyboards/whitefox/keymaps/konstantin/keymap.c b/keyboards/whitefox/keymaps/konstantin/keymap.c
new file mode 100644
index 000000000..54777cfe0
--- /dev/null
+++ b/keyboards/whitefox/keymaps/konstantin/keymap.c
@@ -0,0 +1,198 @@
+#include QMK_KEYBOARD_H
+
+#define TOP LCTL(KC_HOME)
+#define BOTTOM LCTL(KC_END)
+#define DSKTP_L LCTL(LGUI(KC_LEFT))
+#define DSKTP_R LCTL(LGUI(KC_RGHT))
+
+#define FN MO(L_FN)
+#define FN_CAPS LT(L_FN, KC_CAPS)
+#define FN_FNLK TT(L_FN)
+
+#define DESKTOP TD(TD_DESKTOP)
+#define FN_RCTL TD(TD_FN_RCTL)
+#define RAL_LAL TD(TD_RAL_LAL)
+#define RAL_RGU TD(TD_RAL_RGU)
+#define RCT_RSF TD(TD_RCT_RSF)
+
+#define COMMA UC(0x002C)
+#define L_PAREN UC(0x0028)
+#define R_PAREN UC(0x0029)
+#define EQUALS UC(0x003D)
+#define TIMES UC(0x00D7)
+#define DIVIDE UC(0x00F7)
+#define MINUS UC(0x2212)
+
+enum layers {
+ L_BASE,
+ L_FN,
+ L_NUMPAD,
+};
+
+enum custom_keycodes {
+ CLEAR = SAFE_RANGE,
+ NUMPAD,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case CLEAR:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
+ }
+ return false;
+
+ case NUMPAD:
+ if (record->event.pressed) {
+ layer_invert(L_NUMPAD);
+ bool num_lock = host_keyboard_leds() & 1<<USB_LED_NUM_LOCK;
+ if (num_lock != (bool)IS_LAYER_ON(L_NUMPAD)) {
+ tap_code(KC_NLCK); // Toggle Num Lock to match layer state.
+ }
+ }
+ return false;
+
+ default:
+ return true;
+ }
+}
+
+struct {
+ bool fn_on; // Layer state when tap dance started
+ bool started;
+} td_fn_rctrl_data;
+
+void td_fn_rctrl_each(qk_tap_dance_state_t *state, void *user_data) {
+ if (!td_fn_rctrl_data.started) {
+ td_fn_rctrl_data.fn_on = IS_LAYER_ON(L_FN);
+ td_fn_rctrl_data.started = true;
+ }
+ // Single tap → Fn, double tap → RCtrl, triple tap etc. → Fn+RCtrl
+ if (state->count == 1 || state->count == 3) {
+ layer_on(L_FN);
+ } else if (state->count == 2) {
+ if (!td_fn_rctrl_data.fn_on) {
+ layer_off(L_FN);
+ }
+ register_code(KC_RCTL);
+ }
+}
+
+void td_fn_rctrl_reset(qk_tap_dance_state_t *state, void *user_data) {
+ if ((state->count == 1 || state->count > 2) && !td_fn_rctrl_data.fn_on) {
+ layer_off(L_FN);
+ }
+ if (state->count >= 2) {
+ unregister_code(KC_RCTL);
+ }
+ td_fn_rctrl_data.started = false;
+}
+
+#define ACTION_TAP_DANCE_DOUBLE_MODS(mod1, mod2) { \
+ .fn = { td_double_mods_each, NULL, td_double_mods_reset }, \
+ .user_data = &(qk_tap_dance_pair_t){ mod1, mod2 }, \
+ }
+
+void td_double_mods_each(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
+ // Single tap → mod1, double tap → mod2, triple tap etc. → mod1+mod2
+ if (state->count == 1 || state->count == 3) {
+ register_code(mods->kc1);
+ } else if (state->count == 2) {
+ unregister_code(mods->kc1);
+ register_code(mods->kc2);
+ }
+ // Prevent tap dance from sending kc1 and kc2 as weak mods
+ state->weak_mods &= ~(MOD_BIT(mods->kc1) | MOD_BIT(mods->kc2));
+}
+
+void td_double_mods_reset(qk_tap_dance_state_t *state, void *user_data) {
+ qk_tap_dance_pair_t *mods = (qk_tap_dance_pair_t *)user_data;
+ if (state->count == 1 || state->count > 2) {
+ unregister_code(mods->kc1);
+ }
+ if (state->count >= 2) {
+ unregister_code(mods->kc2);
+ }
+}
+
+enum tap_dance {
+ TD_DESKTOP,
+ TD_FN_RCTL,
+ TD_RAL_LAL,
+ TD_RAL_RGU,
+ TD_RCT_RSF,
+};
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_DESKTOP] = ACTION_TAP_DANCE_DOUBLE(LCTL(LGUI(KC_D)), LCTL(LGUI(KC_F4))), // Add/close virtual desktop
+ [TD_FN_RCTL] = ACTION_TAP_DANCE_FN_ADVANCED(td_fn_rctrl_each, NULL, td_fn_rctrl_reset),
+ [TD_RAL_LAL] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_LALT),
+ [TD_RAL_RGU] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RALT, KC_RGUI),
+ [TD_RCT_RSF] = ACTION_TAP_DANCE_DOUBLE_MODS(KC_RCTL, KC_RSFT),
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │PSc│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bspc │Del│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │FnCaps│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │CtlSft│ ↑ │PgD│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │LCtl│LGui│LAlt│ Space │AlGu│FnLk│ │ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [L_BASE] = LAYOUT_truefox( \
+ 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_LCTL, KC_LGUI, KC_LALT, KC_SPC, RAL_RGU, FN_FNLK, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+ /* Function layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Num│Scr│Pau│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
+ * │ M4 │M2 │M↑ │M1 │M3 │M5 │ │UCM│ │Stp│Ply│Prv│Nxt│Clear│Ins│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │M← │M↓ │M→ │MW↑│ │ │ │ │ │ │ │ │Top│
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │MA0│MA2│MW←│MW→│ │ │ │VoD│VoU│Mut│ App │PgU│Btm│
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │ │Dstp│Dst←│ MW↓ │Dst→│ │ │Hom│PgD│End│
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [L_FN] = LAYOUT_truefox( \
+ _______, 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, \
+ _______, DESKTOP, DSKTP_L, KC_WH_D, DSKTP_R, _______, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+ /* Numpad layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Num│ │ │ │ │ │ │P7 │P8 │P9 │P- │ − │ = │Num│ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤
+ * │ │ │ │ │ │ │ │P4 │P5 │P6 │P+ │ ( │ ) │ │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
+ * │ │ │ │ │ │ │ │P1 │P2 │P3 │P* │ × │ PEnter │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
+ * │ │ │ │ │ │ │P0 │P0 │ , │P. │P/ │ ÷ │ │ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │
+ * └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
+ */
+ [L_NUMPAD] = LAYOUT_truefox( \
+ NUMPAD, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, MINUS, EQUALS, NUMPAD, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, L_PAREN, R_PAREN, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PAST, TIMES, KC_PENT, _______, \
+ _______, _______, _______, _______, _______, _______, KC_P0, KC_P0, COMMA, KC_PDOT, KC_PSLS, DIVIDE, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+};
diff --git a/keyboards/whitefox/keymaps/konstantin/rules.mk b/keyboards/whitefox/keymaps/konstantin/rules.mk
new file mode 100644
index 000000000..96722d1d5
--- /dev/null
+++ b/keyboards/whitefox/keymaps/konstantin/rules.mk
@@ -0,0 +1,13 @@
+BACKLIGHT_ENABLE = no
+BOOTMAGIC_ENABLE = no
+COMMAND_ENABLE = yes
+CONSOLE_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+MOUSEKEY_ENABLE = yes
+NKRO_ENABLE = yes
+SLEEP_LED_ENABLE = no
+TAP_DANCE_ENABLE = yes
+UNICODE_ENABLE = yes
+VISUALIZER_ENABLE = no
+
+EXTRAFLAGS += -flto
diff --git a/keyboards/wilba_tech/wt60_a/config.h b/keyboards/wilba_tech/wt60_a/config.h
new file mode 100644
index 000000000..9eff7d7f1
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/config.h
@@ -0,0 +1,208 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6582 // wilba.tech
+#define PRODUCT_ID 0x060A // 60-A
+#define DEVICE_VER 0x0001
+#define MANUFACTURER wilba.tech
+#define PRODUCT wilba.tech WT60-A
+#define DESCRIPTION wilba.tech WT60-A
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, E6, F4, F6, F7 }
+#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION ROW2COL
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+#define WT_MONO_BACKLIGHT
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*5*14*2)) = (35+560)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 595
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 429
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/wilba_tech/wt60_a/info.json b/keyboards/wilba_tech/wt60_a/info.json
new file mode 100644
index 000000000..3b3614a8b
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "wilba.tech WT60-A",
+ "url": "https://wilba.tech",
+ "maintainer": "Wilba",
+ "bootloader": "atmel-dfu",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c b/keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c
new file mode 100644
index 000000000..95e01fc2c
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/keymaps/ansi_split_bs_rshift/keymap.c
@@ -0,0 +1,38 @@
+// ANSI split backspace/right shift layout for WT60-A
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL),
+
+// Fn1 Layer
+[1] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer
+[3] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c b/keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c
new file mode 100644
index 000000000..566736f5e
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/keymaps/default/keymap.c
@@ -0,0 +1,38 @@
+// Default layout for WT60-A
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_60_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_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),
+
+// Fn1 Layer
+[1] = LAYOUT_60_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL ,
+ KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_60_ansi(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer
+[3] = LAYOUT_60_ansi(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/wilba_tech/wt60_a/readme.md b/keyboards/wilba_tech/wt60_a/readme.md
new file mode 100644
index 000000000..d7a73165d
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/readme.md
@@ -0,0 +1,15 @@
+# WILBA.TECH WT60-A
+
+![WILBA.TECH WT60-A](https://wilba.tech)
+
+WT60-A is a keyboard PCB supporting 60% layout. [More info at wilba.tech](https://wilba.tech/)
+
+Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
+Hardware Supported: WILBA.TECH WT65-A
+Hardware Availability: Custom keyboard group buys
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wilba_tech/wt60_a:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt60_a/rules.mk b/keyboards/wilba_tech/wt60_a/rules.mk
new file mode 100644
index 000000000..76a07d7a4
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/rules.mk
@@ -0,0 +1,71 @@
+# project specific files
+SRC = drivers/issi/is31fl3736.c \
+ drivers/avr/i2c_master.c \
+ keyboards/wilba_tech/wt_mono_backlight.c \
+ keyboards/wilba_tech/wt_main.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt60_a/wt60_a.c b/keyboards/wilba_tech/wt60_a/wt60_a.c
new file mode 100644
index 000000000..ccff6d62c
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/wt60_a.c
@@ -0,0 +1,17 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Nothing to see here, move along... ;-)
diff --git a/keyboards/wilba_tech/wt60_a/wt60_a.h b/keyboards/wilba_tech/wt60_a/wt60_a.h
new file mode 100644
index 000000000..8ac8d9216
--- /dev/null
+++ b/keyboards/wilba_tech/wt60_a/wt60_a.h
@@ -0,0 +1,52 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define ____ KC_NO
+
+#define LAYOUT_60_ansi_split_bs_rshift( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K213, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
+ K400, K401, K402, K406, K410, K411, K412, K413 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
+ { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
+ { K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, K410, K411, K412, K413 } \
+}
+
+#define LAYOUT_60_ansi( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
+ K400, K401, K402, K406, K410, K411, K412, K413 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, ____ }, \
+ { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, ____ }, \
+ { K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, K410, K411, K412, K413 } \
+}
+
+
+
diff --git a/keyboards/wilba_tech/wt65_a/config.h b/keyboards/wilba_tech/wt65_a/config.h
new file mode 100644
index 000000000..88366edc0
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/config.h
@@ -0,0 +1,208 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6582 // wilba.tech
+#define PRODUCT_ID 0x065A // 65-A
+#define DEVICE_VER 0x0001
+#define MANUFACTURER wilba.tech
+#define PRODUCT wilba.tech WT65-A
+#define DESCRIPTION wilba.tech WT65-A
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F0, E6, F4, F6, F7 }
+#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION ROW2COL
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+#define WT_MONO_BACKLIGHT
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*5*15*2)) = (35+600)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 635
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 389
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/wilba_tech/wt65_a/info.json b/keyboards/wilba_tech/wt65_a/info.json
new file mode 100644
index 000000000..f2b18dadd
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "wilba.tech WT65-A",
+ "url": "https://wilba.tech",
+ "maintainer": "Wilba",
+ "bootloader": "atmel-dfu",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Home", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"PgUp", "x":15, "y":1}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgDn", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"End", "x":15, "y":3}, {"label":"Fn", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c b/keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c
new file mode 100644
index 000000000..c5ae81168
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // Default layer
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+
+ // Fn1 Layer
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ // Fn2 Layer
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ // Fn3 Layer
+ [3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
+
diff --git a/keyboards/wilba_tech/wt65_a/readme.md b/keyboards/wilba_tech/wt65_a/readme.md
new file mode 100644
index 000000000..1551b55b5
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/readme.md
@@ -0,0 +1,15 @@
+# WILBA.TECH WT65-A
+
+![WILBA.TECH WT65-A](https://wilba.tech)
+
+WT65-A is a keyboard PCB supporting 65% layout with 0.25U blocker. [More info at wilba.tech](https://wilba.tech/)
+
+Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
+Hardware Supported: WILBA.TECH WT65-A
+Hardware Availability: Custom keyboard group buys
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wilba_tech/wt65_a:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt65_a/rules.mk b/keyboards/wilba_tech/wt65_a/rules.mk
new file mode 100644
index 000000000..76a07d7a4
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/rules.mk
@@ -0,0 +1,71 @@
+# project specific files
+SRC = drivers/issi/is31fl3736.c \
+ drivers/avr/i2c_master.c \
+ keyboards/wilba_tech/wt_mono_backlight.c \
+ keyboards/wilba_tech/wt_main.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt65_a/wt65_a.c b/keyboards/wilba_tech/wt65_a/wt65_a.c
new file mode 100644
index 000000000..ccff6d62c
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/wt65_a.c
@@ -0,0 +1,17 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Nothing to see here, move along... ;-)
diff --git a/keyboards/wilba_tech/wt65_a/wt65_a.h b/keyboards/wilba_tech/wt65_a/wt65_a.h
new file mode 100644
index 000000000..9c3e6e12b
--- /dev/null
+++ b/keyboards/wilba_tech/wt65_a/wt65_a.h
@@ -0,0 +1,41 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define ____ KC_NO
+
+// Right switch of split backspace is at 2,13 and is the only switch
+// whose physical position doesn't match switch matrix position :-(
+// However, it also makes no sense to view the physical as 16 columns,
+// so the numbering goes 00 to 14. Deal with it.
+
+#define LAYOUT_all( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K213, K014, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, \
+ K300, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, \
+ K400, K401, K402, K406, K410, K411, K412, K413, K414 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214 }, \
+ { K300, ____, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314 }, \
+ { K400, K401, K402, ____, ____, ____, K406, ____, ____, ____, K410, K411, K412, K413, K414 } \
+}
+
diff --git a/keyboards/wilba_tech/wt80_a/config.h b/keyboards/wilba_tech/wt80_a/config.h
new file mode 100644
index 000000000..7c15e4a5b
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/config.h
@@ -0,0 +1,208 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6582 // wilba.tech
+#define PRODUCT_ID 0x080A // 80-A
+#define DEVICE_VER 0x0001
+#define MANUFACTURER wilba.tech
+#define PRODUCT wilba.tech WT80-A
+#define DESCRIPTION wilba.tech WT80-A
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 17
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { F1, F0, E6, F4, F6, F7 }
+#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4, B7, B0 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION ROW2COL
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+#define WT_MONO_BACKLIGHT
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*6*17*2)) = (35+816)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 851
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 173
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/wilba_tech/wt80_a/info.json b/keyboards/wilba_tech/wt80_a/info.json
new file mode 100644
index 000000000..a43acb2f5
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "wilba.tech WT80-A",
+ "url": "https://wilba.tech",
+ "maintainer": "Wilba",
+ "bootloader": "atmel-dfu",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "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}, {"x":14, "y":1.5}, {"label":"Insert", "x":15.25, "y":1.5}, {"label":"Home", "x":16.25, "y":1.5}, {"label":"PgUp", "x":17.25, "y":1.5}, {"label":"Tab", "x":0, "y":2.5, "w":1.5}, {"label":"Q", "x":1.5, "y":2.5}, {"label":"W", "x":2.5, "y":2.5}, {"label":"E", "x":3.5, "y":2.5}, {"label":"R", "x":4.5, "y":2.5}, {"label":"T", "x":5.5, "y":2.5}, {"label":"Y", "x":6.5, "y":2.5}, {"label":"U", "x":7.5, "y":2.5}, {"label":"I", "x":8.5, "y":2.5}, {"label":"O", "x":9.5, "y":2.5}, {"label":"P", "x":10.5, "y":2.5}, {"label":"{", "x":11.5, "y":2.5}, {"label":"}", "x":12.5, "y":2.5}, {"label":"|", "x":13.5, "y":2.5, "w":1.5}, {"label":"Delete", "x":15.25, "y":2.5}, {"label":"End", "x":16.25, "y":2.5}, {"label":"PgDn", "x":17.25, "y":2.5}, {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75}, {"label":"A", "x":1.75, "y":3.5}, {"label":"S", "x":2.75, "y":3.5}, {"label":"D", "x":3.75, "y":3.5}, {"label":"F", "x":4.75, "y":3.5}, {"label":"G", "x":5.75, "y":3.5}, {"label":"H", "x":6.75, "y":3.5}, {"label":"J", "x":7.75, "y":3.5}, {"label":"K", "x":8.75, "y":3.5}, {"label":"L", "x":9.75, "y":3.5}, {"label":":", "x":10.75, "y":3.5}, {"label":"\"", "x":11.75, "y":3.5}, {"label":"Enter", "x":12.75, "y":3.5, "w":2.25}, {"label":"Shift", "x":0, "y":4.5, "w":2.25}, {"label":"Z", "x":2.25, "y":4.5}, {"label":"X", "x":3.25, "y":4.5}, {"label":"C", "x":4.25, "y":4.5}, {"label":"V", "x":5.25, "y":4.5}, {"label":"B", "x":6.25, "y":4.5}, {"label":"N", "x":7.25, "y":4.5}, {"label":"M", "x":8.25, "y":4.5}, {"label":"<", "x":9.25, "y":4.5}, {"label":">", "x":10.25, "y":4.5}, {"label":"?", "x":11.25, "y":4.5}, {"label":"Shift", "x":12.25, "y":4.5, "w":1.75}, {"x":14, "y":4.5}, {"label":"\u2191", "x":16.25, "y":4.5}, {"label":"Ctrl", "x":0, "y":5.5, "w":1.25}, {"label":"Win", "x":1.25, "y":5.5, "w":1.25}, {"label":"Alt", "x":2.5, "y":5.5, "w":1.25}, {"x":3.75, "y":5.5, "w":6.25}, {"label":"Alt", "x":10, "y":5.5, "w":1.25}, {"label":"Win", "x":11.25, "y":5.5, "w":1.25}, {"label":"Menu", "x":12.5, "y":5.5, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25}, {"label":"\u2190", "x":15.25, "y":5.5}, {"label":"\u2193", "x":16.25, "y":5.5}, {"label":"\u2192", "x":17.25, "y":5.5}]
+ }
+ }
+}
diff --git a/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c b/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c
new file mode 100644
index 000000000..9cbe7ff62
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/keymaps/default/keymap.c
@@ -0,0 +1,38 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_TRNS, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+ [1] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+ [3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
+
diff --git a/keyboards/wilba_tech/wt80_a/readme.md b/keyboards/wilba_tech/wt80_a/readme.md
new file mode 100644
index 000000000..011805748
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/readme.md
@@ -0,0 +1,15 @@
+# WILBA.TECH WT80-A
+
+![WILBA.TECH WT80-A](https://wilba./tech)
+
+WT80-A is a keyboard PCB supporting TKL layout with 0.25U gaps. [More info at wilba.tech](https://wilba.tech/)
+
+Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
+Hardware Supported: WILBA.TECH WT80-A
+Hardware Availability: Custom keyboard group buys
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wilba_tech/wt80_a:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt80_a/rules.mk b/keyboards/wilba_tech/wt80_a/rules.mk
new file mode 100644
index 000000000..76a07d7a4
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/rules.mk
@@ -0,0 +1,71 @@
+# project specific files
+SRC = drivers/issi/is31fl3736.c \
+ drivers/avr/i2c_master.c \
+ keyboards/wilba_tech/wt_mono_backlight.c \
+ keyboards/wilba_tech/wt_main.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt80_a/wt80_a.c b/keyboards/wilba_tech/wt80_a/wt80_a.c
new file mode 100644
index 000000000..ccff6d62c
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/wt80_a.c
@@ -0,0 +1,17 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Nothing to see here, move along... ;-)
diff --git a/keyboards/wilba_tech/wt80_a/wt80_a.h b/keyboards/wilba_tech/wt80_a/wt80_a.h
new file mode 100644
index 000000000..a6fb1cccb
--- /dev/null
+++ b/keyboards/wilba_tech/wt80_a/wt80_a.h
@@ -0,0 +1,58 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define ____ KC_NO
+
+// Right switch of split backspace is at 3,13 and is the only switch
+// whose physical position doesn't match switch matrix position :-(
+// However, it also makes no sense to view the physical as 18 columns,
+// so the numbering goes 00 to 16. Deal with it.
+
+#define LAYOUT_all( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K313, K114, K115, K116, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
+ K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, K415, \
+ K500, K501, K502, K506, K510, K511, K512, K513, K514, K515, K516 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, ____, K014, K015, K016 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, ____, ____, ____ }, \
+ { K400, ____, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, ____, K415, ____ }, \
+ { K500, K501, K502, ____, ____, ____, K506, ____, ____, ____, K510, K511, K512, K513, K514, K515, K516 } \
+}
+
+#define LAYOUT_no_split( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
+ K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K415, \
+ K500, K501, K502, K506, K510, K511, K512, K513, K514, K515, K516 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, ____, K014, K015, K016 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, ____, ____, ____ }, \
+ { K400, ____, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, ____, K415, ____ }, \
+ { K500, K501, K502, ____, ____, ____, K506, ____, ____, ____, K510, K511, K512, K513, K514, K515, K516 } \
+}
diff --git a/keyboards/wilba_tech/wt8_a/config.h b/keyboards/wilba_tech/wt8_a/config.h
new file mode 100644
index 000000000..1c8522a1b
--- /dev/null
+++ b/keyboards/wilba_tech/wt8_a/config.h
@@ -0,0 +1,115 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0x6582 // wilba.tech
+#define PRODUCT_ID 0x008A // 8-A
+#define DEVICE_VER 0x0001
+#define MANUFACTURER wilba.tech
+#define PRODUCT wilba.tech WT8-A
+#define DESCRIPTION wilba.tech WT8-A
+
+/* key matrix size */
+#define MATRIX_ROWS 1
+#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 { E6 }
+#define MATRIX_COL_PINS { F4, F1, B2, B6, F6, F7, D5, B4 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* 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
+
+// Does not use WT_MONO_BACKLIGHT
+// #define WT_MONO_BACKLIGHT
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Dynamic keymap starts after EEPROM version
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 35
+// Dynamic macro starts after dynamic keymaps (35+(4*1*8*2)) = (35+64)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 99
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 925
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
diff --git a/keyboards/wilba_tech/wt8_a/info.json b/keyboards/wilba_tech/wt8_a/info.json
new file mode 100644
index 000000000..c40d44db7
--- /dev/null
+++ b/keyboards/wilba_tech/wt8_a/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "wilba.tech WT8-A",
+ "url": "https://wilba.tech",
+ "maintainer": "Wilba",
+ "bootloader": "atmel-dfu",
+ "width": 4,
+ "height": 2,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"x", "x":0, "y":0}, {"label":"x", "x":1, "y":0}, {"label":"x", "x":2, "y":0}, {"label":"x", "x":3, "y":0}, {"label":"x", "x":0, "y":1}, {"label":"x", "x":1, "y":1}, {"label":"x", "x":2, "y":1}, {"label":"x", "x":3, "y":1}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt8_a/keymaps/default/keymap.c b/keyboards/wilba_tech/wt8_a/keymaps/default/keymap.c
new file mode 100644
index 000000000..a9f40362c
--- /dev/null
+++ b/keyboards/wilba_tech/wt8_a/keymaps/default/keymap.c
@@ -0,0 +1,16 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT(
+ KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8 ),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
+
+ LAYOUT(
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO) };
+
diff --git a/keyboards/wilba_tech/wt8_a/readme.md b/keyboards/wilba_tech/wt8_a/readme.md
new file mode 100644
index 000000000..ab3cfdc55
--- /dev/null
+++ b/keyboards/wilba_tech/wt8_a/readme.md
@@ -0,0 +1,15 @@
+# WILBA.TECH WT8-A
+
+![WILBA.TECH WT8-A](https://wilba.tech)
+
+WT8-A is an 8-key macropad PCB, designed for the Singa Ocelot. [More info at wilba.tech](https://wilba.tech/)
+
+Keyboard Maintainer: [Wilba6582](https://github.com/Wilba6582)
+Hardware Supported: WILBA.TECH WT8-A
+Hardware Availability: Singa Keyboards
+
+Make example for this keyboard (after setting up your build environment):
+
+ make wilba_tech/wt8_a:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt8_a/rules.mk b/keyboards/wilba_tech/wt8_a/rules.mk
new file mode 100644
index 000000000..f072c6719
--- /dev/null
+++ b/keyboards/wilba_tech/wt8_a/rules.mk
@@ -0,0 +1,68 @@
+# project specific files
+SRC = keyboards/wilba_tech/wt_main.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes \ No newline at end of file
diff --git a/keyboards/wilba_tech/wt8_a/wt8_a.c b/keyboards/wilba_tech/wt8_a/wt8_a.c
new file mode 100644
index 000000000..ccff6d62c
--- /dev/null
+++ b/keyboards/wilba_tech/wt8_a/wt8_a.c
@@ -0,0 +1,17 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Nothing to see here, move along... ;-)
diff --git a/keyboards/wilba_tech/wt8_a/wt8_a.h b/keyboards/wilba_tech/wt8_a/wt8_a.h
new file mode 100644
index 000000000..0fb754f0a
--- /dev/null
+++ b/keyboards/wilba_tech/wt8_a/wt8_a.h
@@ -0,0 +1,27 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+#define ____ KC_NO
+
+#define LAYOUT( \
+ K00, K01, K02, K03, K04, K05, K06, K07 ) \
+ { \
+ {K00, K01, K02, K03, K04, K05, K06, K07 }, \
+ }
diff --git a/keyboards/wilba_tech/wt_main.c b/keyboards/wilba_tech/wt_main.c
new file mode 100644
index 000000000..7a63ab5b7
--- /dev/null
+++ b/keyboards/wilba_tech/wt_main.c
@@ -0,0 +1,282 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "quantum.h"
+#ifdef WT_MONO_BACKLIGHT
+#include "keyboards/wilba_tech/wt_mono_backlight.h"
+#endif
+#include "keyboards/zeal60/zeal60_api.h" // Temporary hack
+#include "keyboards/zeal60/zeal60_keycodes.h" // Temporary hack
+
+#include "raw_hid.h"
+#include "dynamic_keymap.h"
+#include "timer.h"
+#include "tmk_core/common/eeprom.h"
+
+bool eeprom_is_valid(void)
+{
+ return (eeprom_read_word(((void*)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC &&
+ eeprom_read_byte(((void*)EEPROM_VERSION_ADDR)) == EEPROM_VERSION);
+}
+
+void eeprom_set_valid(bool valid)
+{
+ eeprom_update_word(((void*)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF);
+ eeprom_update_byte(((void*)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF);
+}
+
+void eeprom_reset(void)
+{
+ // Set the Zeal60 specific EEPROM state as invalid.
+ eeprom_set_valid(false);
+ // Set the TMK/QMK EEPROM state as invalid.
+ eeconfig_disable();
+}
+
+#ifdef RAW_ENABLE
+
+void raw_hid_receive( uint8_t *data, uint8_t length )
+{
+ uint8_t *command_id = &(data[0]);
+ uint8_t *command_data = &(data[1]);
+ switch ( *command_id )
+ {
+ case id_get_protocol_version:
+ {
+ command_data[0] = PROTOCOL_VERSION >> 8;
+ command_data[1] = PROTOCOL_VERSION & 0xFF;
+ break;
+ }
+ case id_get_keyboard_value:
+ {
+ if ( command_data[0] == id_uptime )
+ {
+ uint32_t value = timer_read32();
+ command_data[1] = (value >> 24 ) & 0xFF;
+ command_data[2] = (value >> 16 ) & 0xFF;
+ command_data[3] = (value >> 8 ) & 0xFF;
+ command_data[4] = value & 0xFF;
+ }
+ else
+ {
+ *command_id = id_unhandled;
+ }
+ break;
+ }
+#ifdef DYNAMIC_KEYMAP_ENABLE
+ case id_dynamic_keymap_get_keycode:
+ {
+ uint16_t keycode = dynamic_keymap_get_keycode( command_data[0], command_data[1], command_data[2] );
+ command_data[3] = keycode >> 8;
+ command_data[4] = keycode & 0xFF;
+ break;
+ }
+ case id_dynamic_keymap_set_keycode:
+ {
+ dynamic_keymap_set_keycode( command_data[0], command_data[1], command_data[2], ( command_data[3] << 8 ) | command_data[4] );
+ break;
+ }
+ case id_dynamic_keymap_reset:
+ {
+ dynamic_keymap_reset();
+ break;
+ }
+ case id_dynamic_keymap_macro_get_count:
+ {
+ command_data[0] = dynamic_keymap_macro_get_count();
+ break;
+ }
+ case id_dynamic_keymap_macro_get_buffer_size:
+ {
+ uint16_t size = dynamic_keymap_macro_get_buffer_size();
+ command_data[0] = size >> 8;
+ command_data[1] = size & 0xFF;
+ break;
+ }
+ case id_dynamic_keymap_macro_get_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_macro_get_buffer( offset, size, &command_data[3] );
+ break;
+ }
+ case id_dynamic_keymap_macro_set_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_macro_set_buffer( offset, size, &command_data[3] );
+ break;
+ }
+ case id_dynamic_keymap_macro_reset:
+ {
+ dynamic_keymap_macro_reset();
+ break;
+ }
+ case id_dynamic_keymap_get_layer_count:
+ {
+ command_data[0] = dynamic_keymap_get_layer_count();
+ break;
+ }
+ case id_dynamic_keymap_get_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_get_buffer( offset, size, &command_data[3] );
+ break;
+ }
+ case id_dynamic_keymap_set_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_set_buffer( offset, size, &command_data[3] );
+ break;
+ }
+#endif // DYNAMIC_KEYMAP_ENABLE
+ case id_eeprom_reset:
+ {
+ eeprom_reset();
+ break;
+ }
+ case id_bootloader_jump:
+ {
+ // Need to send data back before the jump
+ // Informs host that the command is handled
+ raw_hid_send( data, length );
+ // Give host time to read it
+ wait_ms(100);
+ bootloader_jump();
+ break;
+ }
+ default:
+ {
+ // Unhandled message.
+ *command_id = id_unhandled;
+ break;
+ }
+ }
+
+ // Return same buffer with values changed
+ raw_hid_send( data, length );
+
+}
+
+#endif
+
+void main_init(void)
+{
+ // If the EEPROM has the magic, the data is good.
+ // OK to load from EEPROM.
+ if (eeprom_is_valid()) {
+ //backlight_config_load();
+ } else {
+ // If the EEPROM has not been saved before, or is out of date,
+ // save the default values to the EEPROM. Default values
+ // come from construction of the zeal_backlight_config instance.
+ //backlight_config_save();
+#ifdef DYNAMIC_KEYMAP_ENABLE
+ // This resets the keymaps in EEPROM to what is in flash.
+ dynamic_keymap_reset();
+ // This resets the macros in EEPROM to nothing.
+ dynamic_keymap_macro_reset();
+#endif
+ // Save the magic number last, in case saving was interrupted
+ eeprom_set_valid(true);
+ }
+
+#ifdef WT_MONO_BACKLIGHT
+ // Initialize LED drivers for backlight.
+ backlight_init_drivers();
+
+ backlight_timer_init();
+ backlight_timer_enable();
+#endif
+}
+
+void bootmagic_lite(void)
+{
+ // The lite version of TMK's bootmagic.
+ // 100% less potential for accidentally making the
+ // keyboard do stupid things.
+
+ // We need multiple scans because debouncing can't be turned off.
+ matrix_scan();
+ wait_ms(DEBOUNCING_DELAY);
+ wait_ms(DEBOUNCING_DELAY);
+ matrix_scan();
+
+ // If the Esc (matrix 0,0) is held down on power up,
+ // reset the EEPROM valid state and jump to bootloader.
+ if ( matrix_get_row(0) & (1<<0) ) {
+ eeprom_reset();
+ bootloader_jump();
+ }
+}
+
+void matrix_init_kb(void)
+{
+ bootmagic_lite();
+ main_init();
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void)
+{
+#ifdef WT_MONO_BACKLIGHT
+ // This only updates the LED driver buffers if something has changed.
+ backlight_update_pwm_buffers();
+#endif
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record)
+{
+ switch(keycode) {
+ case FN_MO13:
+ if (record->event.pressed) {
+ layer_on(1);
+ update_tri_layer(1, 2, 3);
+ } else {
+ layer_off(1);
+ update_tri_layer(1, 2, 3);
+ }
+ return false;
+ break;
+ case FN_MO23:
+ if (record->event.pressed) {
+ layer_on(2);
+ update_tri_layer(1, 2, 3);
+ } else {
+ layer_off(2);
+ update_tri_layer(1, 2, 3);
+ }
+ return false;
+ break;
+ }
+
+#ifdef DYNAMIC_KEYMAP_ENABLE
+ // Handle macros
+ if (record->event.pressed) {
+ if ( keycode >= MACRO00 && keycode <= MACRO15 )
+ {
+ uint8_t id = keycode - MACRO00;
+ dynamic_keymap_macro_send(id);
+ return false;
+ }
+ }
+#endif //DYNAMIC_KEYMAP_ENABLE
+
+ return process_record_user(keycode, record);
+}
diff --git a/keyboards/wilba_tech/wt_mono_backlight.c b/keyboards/wilba_tech/wt_mono_backlight.c
new file mode 100644
index 000000000..bf485bce1
--- /dev/null
+++ b/keyboards/wilba_tech/wt_mono_backlight.c
@@ -0,0 +1,116 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "wt_mono_backlight.h"
+#include "drivers/avr/i2c_master.h"
+#include "drivers/issi/is31fl3736.h"
+
+#include <avr/interrupt.h>
+
+#define ISSI_ADDR_DEFAULT 0x50
+
+bool g_suspend_state = false;
+
+// Global tick at 20 Hz
+uint32_t g_tick = 0;
+uint8_t g_config_effect_speed = 0;
+uint8_t g_config_brightness = 255;
+
+void backlight_init_drivers(void)
+{
+ // Initialize I2C
+ i2c_init();
+ IS31FL3736_init( ISSI_ADDR_DEFAULT );
+
+ for ( uint8_t index = 0; index < 96; index++ ) {
+ IS31FL3736_mono_set_led_control_register( index, true );
+ }
+ IS31FL3736_update_led_control_registers( ISSI_ADDR_DEFAULT, 0x00 );
+}
+
+
+// This is (F_CPU/1024) / 20 Hz
+// = 15625 Hz / 20 Hz
+// = 781
+#define TIMER3_TOP 781
+
+void backlight_timer_init(void)
+{
+ static uint8_t backlight_timer_is_init = 0;
+ if ( backlight_timer_is_init ) {
+ return;
+ }
+ backlight_timer_is_init = 1;
+
+ // Timer 3 setup
+ TCCR3B = _BV(WGM32) | // CTC mode OCR3A as TOP
+ _BV(CS32) | _BV(CS30); // prescale by /1024
+ // Set TOP value
+ uint8_t sreg = SREG;
+ cli();
+
+ OCR3AH = (TIMER3_TOP >> 8) & 0xff;
+ OCR3AL = TIMER3_TOP & 0xff;
+ SREG = sreg;
+}
+
+void backlight_timer_enable(void)
+{
+ TIMSK3 |= _BV(OCIE3A);
+}
+
+void backlight_timer_disable(void)
+{
+ TIMSK3 &= ~_BV(OCIE3A);
+}
+
+void backlight_set_suspend_state(bool state)
+{
+ g_suspend_state = state;
+}
+
+void backlight_effect_cycle_all(void)
+{
+ uint8_t offset = ( g_tick << g_config_effect_speed ) & 0xFF;
+
+ backlight_set_brightness_all( offset );
+}
+
+ISR(TIMER3_COMPA_vect)
+{
+ // delay 1 second before driving LEDs or doing anything else
+ static uint8_t startup_tick = 0;
+ if ( startup_tick < 20 ) {
+ startup_tick++;
+ return;
+ }
+
+ g_tick++;
+
+ //backlight_effect_cycle_all();
+ backlight_set_brightness_all( 255 );
+}
+
+void backlight_update_pwm_buffers(void)
+{
+ IS31FL3736_update_pwm_buffers(ISSI_ADDR_DEFAULT,0x00);
+}
+
+void backlight_set_brightness_all( uint8_t value )
+{
+ IS31FL3736_mono_set_brightness_all( value );
+}
+
diff --git a/keyboards/wilba_tech/wt_mono_backlight.h b/keyboards/wilba_tech/wt_mono_backlight.h
new file mode 100644
index 000000000..70031bedc
--- /dev/null
+++ b/keyboards/wilba_tech/wt_mono_backlight.h
@@ -0,0 +1,33 @@
+/* Copyright 2018 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include <stdint.h>
+#include <stdbool.h>
+
+void backlight_init_drivers(void);
+
+void backlight_timer_init(void);
+void backlight_timer_enable(void);
+void backlight_timer_disable(void);
+
+void backlight_set_suspend_state(bool state);
+
+void backlight_update_pwm_buffers(void);
+
+void backlight_set_brightness_all( uint8_t value );
+
diff --git a/keyboards/xd60/keymaps/crd_ansi/README.md b/keyboards/xd60/keymaps/crd_ansi/README.md
new file mode 100644
index 000000000..80e455024
--- /dev/null
+++ b/keyboards/xd60/keymaps/crd_ansi/README.md
@@ -0,0 +1,52 @@
+# ANSI Layout
+
+This is the standard ANSI keymap that I use on all of my 60% boards. This keymap
+includes a single function layer available by holding the designated key on the
+bottom row.
+
+I don't ever use Caps Lock, so that keycode is not mapped anywhere. In place of
+the usual Caps Lock key, I have the following bnehaviour encoded: Escape when tapped
+and Control when held.
+
+I also have the bottom right mod cluster mapped to navigational direction keys when tapped.
+Shift = Up, Alt = Down, Ctrl = Right, Fn = Left. When held, these keys send the usual modifier
+signals.
+
+```
+/* Base layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | Backspace |
+ * |-----------------------------------------------------------------------------------------+
+ * | Tab | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ |
+ * |-----------------------------------------------------------------------------------------+
+ * | Esc/Ctrl| A | S | D | F | G | H | J | K | L | ; | ' | Enter |
+ * |-----------------------------------------------------------------------------------------+
+ * | Shift | Z | X | C | V | B | N | M | , | . | ? | Shift |
+ * |-----------------------------------------------------------------------------------------+
+ * | Ctrl | Alt | Cmd | Space | Cmd | Fn | Alt | Ctrl |
+ * `-----------------------------------------------------------------------------------------'
+ */
+```
+
+While holding the function key, you have access to the following layout. Any key
+not indicated is considered "transparent" and sends the signal indicated in the
+layer below. This function later gets you dedicated access to Escape and Delete
+keys, function keys on numbers, WASD directions, other navigation, multimedia
+controls, RGB (underglow) controls, and firmware reset (DFU mode).
+
+```
+/* Fn layer
+ * ,-----------------------------------------------------------------------------------------.
+ * | Esc | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | Del |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Home| Up | End | | | | | Mute| | | Pg+ | Pg- | Reset |
+ * |-----------------------------------------------------------------------------------------+
+ * | | Left| Down|Right| | | |Brt- |Vol- |Vol+ |Brt+ | | RGB Toggle |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | |R(Bt-)|R(Bt+)|R(Rot)| |
+ * |-----------------------------------------------------------------------------------------+
+ * | | | | | | | | |
+ * `-----------------------------------------------------------------------------------------'
+ */
+
+``` \ No newline at end of file
diff --git a/keyboards/xd60/keymaps/crd_ansi/keymap.c b/keyboards/xd60/keymaps/crd_ansi/keymap.c
new file mode 100644
index 000000000..6964ca315
--- /dev/null
+++ b/keyboards/xd60/keymaps/crd_ansi/keymap.c
@@ -0,0 +1,30 @@
+#include QMK_KEYBOARD_H
+
+enum keyboard_layers {
+ _BL = 0, // Base Layer
+ _FL // Function Layer
+};
+
+// Custom #defined keycodes (shorter macros for readability)
+#define KC_CTES CTL_T(KC_ESC)
+#define KC_RSUP RSFT_T(KC_UP)
+#define KC_FNLT LT(_FL, KC_LEFT)
+#define KC_RADN RALT_T(KC_DOWN)
+#define KC_RCRT RCTL_T(KC_RIGHT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_60_ansi(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP,
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_FNLT, KC_RADN, KC_RCRT
+ ),
+ [_FL] = LAYOUT_60_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, RESET,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, RGB_MOD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/xd60/keymaps/edulpn64/keymap.c b/keyboards/xd60/keymaps/edulpn64/keymap.c
new file mode 100644
index 000000000..95d80ffb7
--- /dev/null
+++ b/keyboards/xd60/keymaps/edulpn64/keymap.c
@@ -0,0 +1,46 @@
+#include QMK_KEYBOARD_H
+#include "action_layer.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ // 0: Base Layer
+ LAYOUT_all(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_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_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_DEL, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, F(0) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ // 1: Function Layer
+ LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_BSPC, \
+ KC_TAB, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_PSCR,KC_SLCK,KC_PAUS, RGB_RMOD,RGB_MOD, RGB_VAD, RGB_VAI, \
+ KC_CAPS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_INS, KC_HOME,KC_PGUP, RGB_HUD, RGB_HUI, KC_NO, KC_ENT, \
+ KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_END, KC_PGDN, KC_NO, KC_RSFT, KC_UP, KC_DEL, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, F(0), KC_RCTRL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+};
+
+// Custom Actions
+const uint16_t PROGMEM fn_actions[] = {
+ [0] = ACTION_LAYER_MOMENTARY(1), // to Fn overlay
+};
+
+// 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/edulpn64/readme.md b/keyboards/xd60/keymaps/edulpn64/readme.md
new file mode 100644
index 000000000..a3208564a
--- /dev/null
+++ b/keyboards/xd60/keymaps/edulpn64/readme.md
@@ -0,0 +1,9 @@
+# Edulpn64 Keymap for XIUDI's 60% XD60 PCB
+
+![Edulpn64 Keymap for XD60](https://dl2.pushbulletusercontent.com/K6bdlBlP5ix7jdMAr8QKes4johmpUfPI/image.png)
+
+## Additional Notes
+This keymap uses the Default XD60 base layer, but follows the GK64 function layer (one of my XD60 boards use GK64 keycaps).
+
+## Build
+To build the default keymap, simply run `make xd60:edulpn64`.
diff --git a/keyboards/xd60/keymaps/kmontag42/rules.mk b/keyboards/xd60/keymaps/kmontag42/rules.mk
new file mode 100644
index 000000000..d0d2ef6d5
--- /dev/null
+++ b/keyboards/xd60/keymaps/kmontag42/rules.mk
@@ -0,0 +1 @@
+LEADER_ENABLE = yes
diff --git a/keyboards/xd60/readme.md b/keyboards/xd60/readme.md
index 389423ed0..19c22dac6 100644
--- a/keyboards/xd60/readme.md
+++ b/keyboards/xd60/readme.md
@@ -5,8 +5,8 @@ Compact 60% with arrows.
![Top View of a pair of XD60 Keyboard](https://i.imgur.com/3Jq2743.jpg)
-Keyboard Maintainer: QMK Community
-Hardware Supported: XD60 PCB
+Keyboard Maintainer: QMK Community
+Hardware Supported: XD60 PCB
Hardware Availability: https://www.massdrop.com/buy/xd60-xd64-custom-mechanical-keyboard-kit?mode=guest_open
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/xd60/rules.mk b/keyboards/xd60/rules.mk
index 50fba97e5..8a60252dc 100644
--- a/keyboards/xd60/rules.mk
+++ b/keyboards/xd60/rules.mk
@@ -61,7 +61,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+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
diff --git a/keyboards/xd75/keymaps/billypython/config.h b/keyboards/xd75/keymaps/billypython/config.h
new file mode 100644
index 000000000..275f8effb
--- /dev/null
+++ b/keyboards/xd75/keymaps/billypython/config.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#define FORCE_NKRO
+
+#define MAGIC_KEY_LAYER0_ALT1 BSLS
+#define MAGIC_KEY_BOOTLOADER ESC
+
+#define MOUSEKEY_DELAY 50
+#define MOUSEKEY_INTERVAL 15
+#define MOUSEKEY_MAX_SPEED 4
+#define MOUSEKEY_TIME_TO_MAX 50
+#define MOUSEKEY_WHEEL_MAX_SPEED 1
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 50
+
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM 200
+#define TAPPING_TOGGLE 2
diff --git a/keyboards/xd75/keymaps/billypython/keymap.c b/keyboards/xd75/keymaps/billypython/keymap.c
new file mode 100644
index 000000000..8a06074ca
--- /dev/null
+++ b/keyboards/xd75/keymaps/billypython/keymap.c
@@ -0,0 +1,119 @@
+#include QMK_KEYBOARD_H
+
+#define TOP LCTL(KC_HOME)
+#define BOTTOM LCTL(KC_END)
+
+#define FN MO(L_FN)
+#define FN_CAPS LT(L_FN, KC_CAPS)
+#define FN_FNLK TT(L_FN)
+
+#define COMMA UC(0x002C)
+#define L_PAREN UC(0x0028)
+#define R_PAREN UC(0x0029)
+#define EQUALS UC(0x003D)
+#define TIMES UC(0x00D7)
+#define DIVIDE UC(0x00F7)
+#define MINUS UC(0x2212)
+
+void eeconfig_init_user(void) {
+ set_unicode_input_mode(UC_LNX);
+}
+
+enum layers {
+ L_BASE,
+ L_FN,
+ L_NUMPAD,
+};
+
+enum custom_keycodes {
+ CLEAR = SAFE_RANGE,
+ NUMPAD,
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case CLEAR:
+ if (record->event.pressed) {
+ SEND_STRING(SS_LCTRL("a") SS_TAP(X_DELETE));
+ }
+ return false;
+
+ case NUMPAD:
+ if (record->event.pressed) {
+ layer_invert(L_NUMPAD);
+ bool num_lock = host_keyboard_leds() & 1<<USB_LED_NUM_LOCK;
+ if (num_lock != (bool)IS_LAYER_ON(L_NUMPAD)) {
+ tap_code(KC_NLCK); // Toggle Num Lock to match layer state.
+ }
+ }
+ return false;
+
+ default:
+ return true;
+ }
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* Base layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ \ │ ` │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │Tab│ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │Bsp│Del│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │FnC│ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │Ent│Ent│PgU│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │LSf│ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RSf│RSf│ ↑ │PgD│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │LCt│LGu│LAl│Spc│Spc│Spc│Spc│Spc│Spc│RAl│FnL│RCt│ ← │ ↓ │ → │
+ * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
+ [L_BASE] = LAYOUT_ortho_5x15( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_DEL, \
+ 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_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, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, FN_FNLK, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+ /* Base layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │ │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│Num│Scr│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │M4 │M2 │M↑ │M1 │M3 │M5 │ │PgU│ ↑ │PgD│Ply│Prv│Nxt│Clr│Ins│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ │M← │M↓ │M→ │MW↑│ │Hom│ ← │ ↓ │ → │End│ │ │ │Top│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ │MA0│MA2│MW←│MW→│ │ │ │VoD│VoU│Mut│ │ │PgU│Btm│
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ │ │ │MW↓│MW↓│MW↓│ │ │ │ │ │App│Hom│PgD│End│
+ * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
+ [L_FN] = LAYOUT_ortho_5x15( \
+ _______, 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_PSCR, \
+ KC_BTN4, KC_BTN2, KC_MS_U, KC_BTN1, KC_BTN3, KC_BTN5, _______, KC_PGUP, KC_UP, KC_PGDN, KC_MPLY, KC_MPRV, KC_MNXT, CLEAR, KC_INS, \
+ _______, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_U, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RGHT, KC_END, _______, _______, _______, TOP, \
+ _______, KC_ACL0, KC_ACL2, KC_WH_L, KC_WH_R, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, KC_PGUP, BOTTOM, \
+ _______, _______, _______, KC_WH_D, KC_WH_D, KC_WH_D, _______, _______, _______, _______, _______, KC_APP, KC_HOME, KC_PGDN, KC_END \
+ ),
+
+ /* Numpad layer
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Num│ │ │ │ │ │ │P7 │P8 │P9 │P- │ − │ = │Num│ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │ │ │P4 │P5 │P6 │P+ │ ( │ ) │ │ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │ │ │P1 │P2 │P3 │P* │ × │PEn│PEn│ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │ │ │P0 │ , │P. │P/ │ ÷ │ │ │ │
+ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+ */
+ [L_NUMPAD] = LAYOUT_ortho_5x15( \
+ NUMPAD, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PMNS, MINUS, EQUALS, NUMPAD, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P4, KC_P5, KC_P6, KC_PPLS, L_PAREN, R_PAREN, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_PAST, TIMES, KC_PENT, KC_PENT, _______, \
+ _______, _______, _______, _______, _______, _______, _______, KC_P0, COMMA, KC_PDOT, KC_PSLS, DIVIDE, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+};
diff --git a/keyboards/xd75/keymaps/billypython/rules.mk b/keyboards/xd75/keymaps/billypython/rules.mk
new file mode 100644
index 000000000..c935bbac1
--- /dev/null
+++ b/keyboards/xd75/keymaps/billypython/rules.mk
@@ -0,0 +1,15 @@
+AUDIO_ENABLE = no
+BACKLIGHT_ENABLE = no
+BLUETOOTH_ENABLE = no
+BOOTMAGIC_ENABLE = no
+COMMAND_ENABLE = yes
+CONSOLE_ENABLE = yes
+EXTRAKEY_ENABLE = yes
+MIDI_ENABLE = no
+MOUSEKEY_ENABLE = yes
+NKRO_ENABLE = yes
+RGBLIGHT_ENABLE = no
+SLEEP_LED_ENABLE = no
+TAP_DANCE_ENABLE = no
+UNICODE_ENABLE = yes
+VISUALIZER_ENABLE = no
diff --git a/keyboards/xd75/keymaps/boy_314/config.h b/keyboards/xd75/keymaps/boy_314/config.h
new file mode 100644
index 000000000..7b9637ef9
--- /dev/null
+++ b/keyboards/xd75/keymaps/boy_314/config.h
@@ -0,0 +1 @@
+#pragma once \ No newline at end of file
diff --git a/keyboards/xd75/keymaps/boy_314/keymap.c b/keyboards/xd75/keymaps/boy_314/keymap.c
new file mode 100644
index 000000000..d807d1d86
--- /dev/null
+++ b/keyboards/xd75/keymaps/boy_314/keymap.c
@@ -0,0 +1,165 @@
+#include QMK_KEYBOARD_H
+
+// Layer shorthand
+#define _DV 0
+#define _QW 1
+#define _NP 2
+#define _FN1 3
+#define _FN2 4
+
+#define RGBLIGHT_LIGHT_VAL 255
+const uint8_t RGBLED_RAINBOW_SWIRL_INTERVALS[] PROGMEM = {10, 10, 10};
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* DVORAK
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | - | ` | = | 6 | 7 | 8 | 9 | 0 | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | ' | . | . | P | Y | [ | \ | ] | F | G | C | R | L | / |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | O | E | U | I | HOME | DEL | PG UP | D | H | T | N | S | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | ; | Q | J | K | X | END | UP | PG DN | M | W | W | V | Z | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL | DEL | LALT | WIN | FN1 | SPACE | LEFT | DOWN | RIGHT | SPACE | FN2 | LEFT | DOWN | UP | RIGHT |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_DV] = { /* DVORAK */
+ { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_GRV, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC },
+ { KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_LBRC, KC_BSLS, KC_RBRC, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH },
+ { KC_CAPS, KC_A, KC_O, KC_E, KC_U, KC_I, KC_HOME, KC_DEL, KC_PGUP, KC_D, KC_H, KC_T, KC_N, KC_S, KC_ENT },
+ { KC_LSPO, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_END, KC_UP, KC_PGDN, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSPC },
+ { KC_LCTL, KC_DEL, KC_LALT, KC_LGUI, MO(_FN1),KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC, MO(_FN2),KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT },
+ },
+
+/* QWERTY
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | 5 | - | ` | = | 6 | 7 | 8 | 9 | 0 | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | [ | \ | ] | Y | U | I | O | P | ENTER |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | HOME | DEL | PG UP | H | J | K | L | ; | ' |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | END | UP | PG DN | N | M | , | . | / | RSHIFT |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LCTRL | DEL | LALT | WIN | FN1 | SPACE | LEFT | DOWN | RIGHT | SPACE | FN2 | LEFT | DOWN | UP | RIGHT |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW] = { /* QWERTY */
+ { KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_GRV, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC },
+ { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_BSLS, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_ENT },
+ { KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HOME, KC_DEL, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT },
+ { KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, KC_UP, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC },
+ { KC_LCTL, KC_DEL, KC_LALT, KC_LGUI, MO(_FN1),KC_SPC, KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC, MO(_FN2),KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT },
+ },
+
+/* NUMPAD
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | | | | | | | / | * | - | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | 7 | 8 | 9 | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | 4 | 5 | 6 | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | 1 | 2 | 3 | | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | + | 0 | . | | | | | | |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_NP] = { /* NUMPAD */
+ { _______, _______, _______, _______, _______, _______, KC_SLSH, KC_ASTR, KC_MINS, _______, _______, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______, _______, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, KC_1, KC_2, KC_3, _______, _______, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, KC_PLUS, KC_0, KC_DOT, _______, _______, _______, _______, _______, _______ },
+ },
+
+/* FUNCTION1
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ` | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ~ | ! | @ | # | $ | % | RESET |RGB HUE-|RGB HUE+| ^ | & | * | ( | ) | DEL |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | DEL | F1 | F2 | F3 | F4 | F5 | F6 |RGB SAT-|RGB SAT+| DVORAK | _ | + | { | } | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | F7 | F8 | F9 | F10 | F11 | F12 |BRIGHT- |BRIGHT+ | QWERTY | | | HOME | END | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | |RGB MODE|RGB MODE| | | PREV | VOL UP |VOL DOWN| NEXT |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_FN1] = { /* FUNCTION1 */
+ { KC_GRV , KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC },
+ { KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, RESET, RGB_HUD, RGB_HUI, 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, RGB_SAD, RGB_SAI, TO(_DV), KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE },
+ { _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, RGB_VAD, RGB_VAI, TO(_QW), _______, _______, KC_HOME, KC_END, _______ },
+ { _______, _______, _______, _______, _______, _______, _______,RGB_RMOD, RGB_MOD, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY },
+ },
+
+
+/* FUNCTION2
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | ` | | | UP | | | RESET |RGB HUE-|RGB HUE+| NUMPAD | | | | | |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | DEL | | LEFT | DOWN | RIGHT | | |RGB SAT-|RGB SAT+| DVORAK | - | = | [ | ] | \ |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | |BRIGHT- |BRIGHT+ | QWERTY | | | PAGE UP| PAGE DN| |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
+ * | | | | | | | |RGB MODE|RGB MODE| | | PREV | VOL UP |VOL DOWN| NEXT |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_FN2] = { /* FUNCTION2 */
+ { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC },
+ { KC_GRV, _______, _______, KC_UP, _______, _______, RESET, RGB_HUD, RGB_HUI, TG(_NP), _______, _______, _______, _______, KC_DEL },
+ { KC_DEL, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, RGB_SAD, RGB_SAI, TG(_DV), KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS },
+ { _______, _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, TG(_QW), _______, _______, KC_PGDN, KC_PGUP, _______ },
+ { _______, _______, _______, _______, _______, _______, _______,RGB_RMOD, RGB_MOD, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY },
+ }
+};
+
+
+
+const uint16_t PROGMEM fn_actions[] = {
+
+};
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ // MACRODOWN only works in this function
+ switch(id) {
+ case 0:
+ if (record->event.pressed) {
+ register_code(KC_RSFT);
+ #ifdef BACKLIGHT_ENABLE
+ backlight_step();
+ #endif
+ } else {
+ unregister_code(KC_RSFT);
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+void matrix_init_user(void) {
+ if (!(host_keyboard_leds() & (1<<USB_LED_NUM_LOCK))) {
+ register_code(KC_NUMLOCK);
+ unregister_code(KC_NUMLOCK);
+ }
+}
+
+void led_set_user(uint8_t usb_led) {
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ rgblight_mode(18);
+ } else {
+ rgblight_mode(14);
+ }
+}
diff --git a/keyboards/xd75/keymaps/boy_314/readme.md b/keyboards/xd75/keymaps/boy_314/readme.md
new file mode 100644
index 000000000..4008aff1c
--- /dev/null
+++ b/keyboards/xd75/keymaps/boy_314/readme.md
@@ -0,0 +1,8 @@
+# Boy_314's XD75RE Layout
+- Default is DVORAK, FN+N to switch to QWERTY, FN+H to switch to DVORAK (N and H on QWERTY layout)
+- Features many symbols and function keys in secondary layers.
+- Dedicated bracket and braces keys on bottom right 4 keys, useful for programming
+- RGB underglow changes to a fast cycle mode when CAPS LOCK is activated
+- NOTE: WORK IN PROGRESS
+# THINGS TO DO
+- add numpad toggle layer \ No newline at end of file
diff --git a/keyboards/xd75/keymaps/boy_314/rules.mk b/keyboards/xd75/keymaps/boy_314/rules.mk
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/keyboards/xd75/keymaps/boy_314/rules.mk
diff --git a/keyboards/xd75/keymaps/bramver/README.md b/keyboards/xd75/keymaps/bramver/README.md
new file mode 100644
index 000000000..2dcac5f0e
--- /dev/null
+++ b/keyboards/xd75/keymaps/bramver/README.md
@@ -0,0 +1,43 @@
+# XD75 Layout
+
+Standard qwerty layout.
+Limited emoji support and proper mouse settings.
+
+## Keymap
+
+```
+_BASE
+ | GESC | 1 | 2 | 3 | 4 | 5 | MPRV | MPLY | MNXT | 6 | 7 | 8 | 9 | 0 | BSPC |
+ | TAB | Q | W | E | R | T | MINS | EQL | BSLS | Y | U | I | O | P | ENT |
+ | MO(3) | A | S | D | F | G | LBRC | MUTE | RBRC | H | J | K | L | SCLN | QUOT |
+ | LSFT | Z | X | C | V | B | HOME | SLEP | END | N | M | COMM | DOT | SLSH | RSFT |
+ | LCTL | MO(4) | LALT | LGUI | SPC | SPC | MO(1) | DEL | MO(2) | SPC | LEFT | DOWN | UP | RGHT | RGUI |
+
+_LOWER
+ | _______ | _______ | _______ | _______ | _______ | _______ | BL_TOGG | BL_DEC | BL_INC | _______ | _______ | _______ | _______ | _______ | _______ |
+ | _______ | WH_L | BTN1 | MS_U | BTN2 | WH_U | BL_STEP | RGB_TOG | RGB_MOD | _______ | _______ | _______ | _______ | _______ | _______ |
+ | _______ | WH_R | MS_L | MS_D | MS_R | WH_D | RGB_HUI | RGB_HUD | RGB_SAI | _______ | LEFT | DOWN | UP | RGHT | _______ |
+ | _______ | _______ | _______ | _______ | _______ | _______ | RGB_SAD | RGB_VAI | RGB_VAD | _______ | _______ | _______ | _______ | _______ | _______ |
+ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+
+_LINVERT
+ | _______ | _______ | _______ | _______ | _______ | _______ | BL_TOGG | BL_DEC | BL_INC | _______ | _______ | _______ | _______ | _______ | _______ |
+ | _______ | _______ | _______ | _______ | _______ | _______ | BL_STEP | RGB_TOG | RGB_MOD | WH_U | BTN1 | MS_U | BTN2 | WH_L | _______ |
+ | _______ | LEFT | DOWN | UP | RGHT | _______ | RGB_SAI | RGB_HUI | RGB_HUD | WH_D | MS_L | MS_D | MS_R | WH_R | _______ |
+ | _______ | _______ | _______ | _______ | _______ | _______ | RGB_SAD | RGB_VAI | RGB_VAD | _______ | _______ | _______ | _______ | _______ | _______ |
+ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+
+_RAISE
+ | F1 | F2 | F3 | F4 | F5 | F6 | _______ | _______ | _______ | F7 | F8 | F9 | F10 | F11 | F12 |
+ | _______ | _______ | 7 | 8 | 9 | _______ | _______ | _______ | _______ | _______ | MUTE | VOLD | VOLU | _______ | _______ |
+ | _______ | _______ | 4 | 5 | 6 | _______ | _______ | _______ | _______ | _______ | MPRV | MPLY | MNXT | _______ | _______ |
+ | _______ | _______ | 1 | 2 | 3 | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+ | _______ | _______ | _______ | 0 | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+
+_EMOJIFY
+ | TO(0) | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | RESET |
+ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+ | _______ | X(CELE) | X(PRAY) | X(NAIL) | X(OK) | X(THNK) | _______ | _______ | _______ | X(UNAM) | X(HEYE) | X(COOL) | X(EYES) | X(SMIR) | _______ |
+ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ | _______ |
+``` \ No newline at end of file
diff --git a/keyboards/xd75/keymaps/bramver/config.h b/keyboards/xd75/keymaps/bramver/config.h
new file mode 100644
index 000000000..2264af74c
--- /dev/null
+++ b/keyboards/xd75/keymaps/bramver/config.h
@@ -0,0 +1,25 @@
+/* Copyright 2018 darm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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 MOUSEKEY_DELAY 0
+#define MOUSEKEY_INTERVAL 16
+#define MOUSEKEY_MAX_SPEED 7
+#define MOUSEKEY_TIME_TO_MAX 60
+#define MOUSEKEY_WHEEL_MAX_SPEED 8
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 40
+#define MOUSEKEY_WHEEL_DELAY 0
diff --git a/keyboards/xd75/keymaps/bramver/keymap.c b/keyboards/xd75/keymaps/bramver/keymap.c
new file mode 100644
index 000000000..831278d00
--- /dev/null
+++ b/keyboards/xd75/keymaps/bramver/keymap.c
@@ -0,0 +1,115 @@
+/* Copyright 2018 darm
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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
+
+// Fillers to make layering more clear
+#define _______ KC_TRNS
+#define XXXXXXX KC_NO
+
+// Layer shorthand
+#define _BASE 0
+#define _LOWER 1
+#define _LINVERT 2
+#define _RAISE 3
+#define _EMOJIFY 4
+
+enum emoji_map {
+ UNAM, // unamused 😒
+ HEYE, // smiling face with heart shaped eyes 😍
+ OK, // ok hand sign 👌
+ SMIR, // smirk 😏
+ PRAY, // pray 🙏
+ CELE, // celebration 🙌
+ COOL, // smile with sunglasses 😎
+ EYES, // eyes
+ THNK, // BIG THONK
+ NAIL, // Nailcare 💅
+};
+
+const uint32_t PROGMEM unicode_map[] = {
+ [UNAM] = 0x1F612,
+ [HEYE] = 0x1f60d,
+ [OK] = 0x1F44C,
+ [SMIR] = 0x1F60F,
+ [PRAY] = 0x1F64F,
+ [CELE] = 0x1F64C,
+ [COOL] = 0x1F60E,
+ [EYES] = 0x1F440,
+ [THNK] = 0x1F914,
+ [NAIL] = 0x1F485,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_BASE] = {
+ { KC_GESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_MPRV , KC_MPLY , KC_MNXT , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_BSPC },
+ { KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_MINS , KC_EQL , KC_BSLS , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_ENT },
+ { MO(3) , KC_A , KC_S , KC_D , KC_F , KC_G , KC_LBRC , KC_MUTE , KC_RBRC , KC_H , KC_J , KC_K , KC_L , KC_SCLN , KC_QUOT },
+ { KC_LSFT , KC_Z , KC_X , KC_C , KC_V , KC_B , KC_HOME , KC_SLEP , KC_END , KC_N , KC_M , KC_COMM , KC_DOT , KC_SLSH , KC_RSFT },
+ { KC_LCTL , MO(4) , KC_LALT , KC_LGUI , KC_SPC , KC_SPC , MO(1) , KC_DEL , MO(2) , KC_SPC , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , KC_RGUI },
+ },
+
+ [_LOWER] = {
+ { _______ , _______ , _______ , _______ , _______ , _______ , BL_TOGG , BL_DEC , BL_INC , _______ , _______ , _______ , _______ , _______ , _______ },
+ { _______ , KC_WH_L , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_U , BL_STEP , RGB_TOG , RGB_MOD , _______ , _______ , _______ , _______ , _______ , _______ },
+ { _______ , KC_WH_R , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_D , RGB_HUI , RGB_HUD , RGB_SAI , _______ , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , _______ },
+ { _______ , _______ , _______ , _______ , _______ , _______ , RGB_SAD , RGB_VAI , RGB_VAD , _______ , _______ , _______ , _______ , _______ , _______ },
+ { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ },
+ },
+
+ [_LINVERT] = {
+ { _______ , _______ , _______ , _______ , _______ , _______ , BL_TOGG , BL_DEC , BL_INC , _______ , _______ , _______ , _______ , _______ , _______ },
+ { _______ , _______ , _______ , _______ , _______ , _______ , BL_STEP , RGB_TOG , RGB_MOD , KC_WH_U , KC_BTN1 , KC_MS_U , KC_BTN2 , KC_WH_L , _______ },
+ { _______ , KC_LEFT , KC_DOWN , KC_UP , KC_RGHT , _______ , RGB_SAI , RGB_HUI , RGB_HUD , KC_WH_D , KC_MS_L , KC_MS_D , KC_MS_R , KC_WH_R , _______ },
+ { _______ , _______ , _______ , _______ , _______ , _______ , RGB_SAD , RGB_VAI , RGB_VAD , _______ , _______ , _______ , _______ , _______ , _______ },
+ { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ },
+ },
+
+ [_RAISE] = {
+ { KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , _______ , _______ , _______ , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 },
+ { _______ , _______ , KC_7 , KC_8 , KC_9 , _______ , _______ , _______ , _______ , _______ , KC_MUTE , KC_VOLD , KC_VOLU , _______ , _______ },
+ { _______ , _______ , KC_4 , KC_5 , KC_6 , _______ , _______ , _______ , _______ , _______ , KC_MPRV , KC_MPLY , KC_MNXT , _______ , _______ },
+ { _______ , _______ , KC_1 , KC_2 , KC_3 , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ },
+ { _______ , _______ , _______ , KC_0 , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ },
+ },
+
+ [_EMOJIFY] = {
+ { TO(0) , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , RESET },
+ { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ },
+ { _______ , X(CELE) , X(PRAY) , X(NAIL) , X(OK) , X(THNK) , _______ , _______ , _______ , X(UNAM) , X(HEYE) , X(COOL) , X(EYES) , X(SMIR) , _______ },
+ { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ },
+ { _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ , _______ },
+ },
+
+};
+
+const uint16_t PROGMEM fn_actions[] = {};
+
+void matrix_init_user(void) {
+ _delay_ms(20); // Gets rid of tick
+ set_unicode_input_mode(UC_LNX);
+}
+
+/* Template for future layers
+ [_LAYER_NAME] = {
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ }
+};
+*/
diff --git a/keyboards/xd75/keymaps/bramver/rules.mk b/keyboards/xd75/keymaps/bramver/rules.mk
new file mode 100644
index 000000000..1c3d4d8cd
--- /dev/null
+++ b/keyboards/xd75/keymaps/bramver/rules.mk
@@ -0,0 +1,7 @@
+# Build options
+BACKLIGHT_ENABLE = yes # Switch LEDs
+MOUSEKEY_ENABLE = yes # Emulates mouse key using keypresses
+RGBLIGHT_ENABLE = yes # LED strips
+EXTRAKEY_ENABLE = yes # Use system and audio control key codes
+TAP_DANCE_ENABLE = no # Use multi-tap features
+UNICODEMAP_ENABLE = yes # Emojify me pls
diff --git a/keyboards/xd75/keymaps/daniel/keymap.c b/keyboards/xd75/keymaps/daniel/keymap.c
new file mode 100644
index 000000000..2804a6cd0
--- /dev/null
+++ b/keyboards/xd75/keymaps/daniel/keymap.c
@@ -0,0 +1,29 @@
+#include QMK_KEYBOARD_H
+
+#define _QW 0
+#define _NV 1
+#define _NM 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QW] = {
+ { KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_GRV , KC_BSPC },
+ { KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL },
+ { MO(_NV), KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT , MO(_NM), 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_SPC , KC_SPC , KC_SPC , KC_SPC , KC_SPC , KC_RALT, KC_RGUI, KC_APP , KC_LEFT, KC_DOWN, KC_RGHT },
+ },
+ [_NV] = {
+ { KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , _______, _______, _______ },
+ { _______, _______, _______, _______, KC_DEL , KC_BSPC, _______, KC_HOME, KC_UP , KC_END , KC_INS , _______, _______, _______, _______ },
+ { _______, _______, _______, KC_LSFT, KC_LCTL, KC_ENT , _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL , _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, _______, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ },
+ [_NM] = {
+ { _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ { _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ { _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ { _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ { RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ }
+};
diff --git a/keyboards/xd75/keymaps/daniel/readme.md b/keyboards/xd75/keymaps/daniel/readme.md
new file mode 100644
index 000000000..3305d0f30
--- /dev/null
+++ b/keyboards/xd75/keymaps/daniel/readme.md
@@ -0,0 +1 @@
+# Daniels xd75 keymap
diff --git a/keyboards/xd75/keymaps/davidrambo/config.h b/keyboards/xd75/keymaps/davidrambo/config.h
index e87ccde79..f21914703 100644
--- a/keyboards/xd75/keymaps/davidrambo/config.h
+++ b/keyboards/xd75/keymaps/davidrambo/config.h
@@ -20,7 +20,6 @@
#include "../../config.h"
#define TAPPING_TERM 200
-#define PERMISSIVE_HOLD
-#define PREVENT_STUCK_MODIFIERS
+#define PERMISSIVE_HOLD
#endif
diff --git a/keyboards/xd75/keymaps/default/readme.md b/keyboards/xd75/keymaps/default/readme.md
index b29295c74..a1c0236ed 100644
--- a/keyboards/xd75/keymaps/default/readme.md
+++ b/keyboards/xd75/keymaps/default/readme.md
@@ -1 +1 @@
-# The default keymap for xd75, with led controls
+# The default keymap for xd75, with led controls \ No newline at end of file
diff --git a/keyboards/xd75/keymaps/fabian/rules.mk b/keyboards/xd75/keymaps/fabian/rules.mk
index 6e8941fdf..f1ae8d44a 100644
--- a/keyboards/xd75/keymaps/fabian/rules.mk
+++ b/keyboards/xd75/keymaps/fabian/rules.mk
@@ -29,7 +29,7 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
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 this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
ifndef QUANTUM_DIR
diff --git a/keyboards/xd75/keymaps/germanized/config.h b/keyboards/xd75/keymaps/germanized/config.h
index 5b19bddb0..dd3f32275 100644
--- a/keyboards/xd75/keymaps/germanized/config.h
+++ b/keyboards/xd75/keymaps/germanized/config.h
@@ -27,10 +27,6 @@
//Tap Dancing
#define TAPPING_TERM 200
-// Alt gr
-#define ALGR(kc) RALT(kc)
-#define DE_ALGR KC_RALT
-
// normal characters
#define DE_Z KC_Y
#define DE_Y KC_Z
diff --git a/keyboards/xd75/keymaps/germanized/rules.mk b/keyboards/xd75/keymaps/germanized/rules.mk
index d72bcf575..f57fb8c54 100644
--- a/keyboards/xd75/keymaps/germanized/rules.mk
+++ b/keyboards/xd75/keymaps/germanized/rules.mk
@@ -29,7 +29,7 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
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 this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
TAP_DANCE_ENABLE = yes # Enable Tap Dancing
diff --git a/keyboards/xd75/keymaps/jarred/keymap.c b/keyboards/xd75/keymaps/jarred/keymap.c
new file mode 100644
index 000000000..f85178711
--- /dev/null
+++ b/keyboards/xd75/keymaps/jarred/keymap.c
@@ -0,0 +1,37 @@
+#include QMK_KEYBOARD_H
+
+#define _QW 0
+#define _LW 1
+#define _NV 2
+#define _NM 3
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QW] = {
+ { KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_MUTE, KC_VOLD, KC_VOLU, 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_INS , KC_HOME, KC_PGUP, KC_Y , KC_U , KC_I , KC_O , KC_P , KC_BSPC },
+ { MO(_NV), KC_A , KC_S , KC_D , KC_F , KC_G , KC_DEL , KC_END , KC_PGDN, 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_UP , _______, KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT },
+ { KC_LCTL, KC_LGUI, MO(_NM), KC_LALT, MO(_LW), KC_SPC , KC_LEFT, KC_DOWN, KC_RGHT, KC_ENT , MO(_LW), KC_RALT, KC_RGUI, KC_APP , KC_RCTL },
+ },
+ [_LW] = {
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ { KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , _______, _______, _______, KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , _______ },
+ { _______, KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , _______, _______, _______, KC_F11 , KC_MINS, KC_EQL , KC_LBRC, KC_RBRC, KC_BSLS },
+ { _______, KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , _______, _______, _______, KC_F12 , KC_GRV , _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ },
+ [_NV] = {
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, KC_DEL , KC_BSPC, _______, _______, _______, _______, KC_HOME, KC_UP , KC_END , KC_INS , _______ },
+ { _______, _______, _______, KC_LSFT, KC_LCTL, KC_ENT , _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL , _______ },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ },
+ [_NM] = {
+ { _______, _______, _______, _______, _______, _______, RGB_TOG, RGB_MOD, _______, _______, _______, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______ },
+ { _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, _______, _______, _______ },
+ { RESET , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
+ }
+};
diff --git a/keyboards/xd75/keymaps/jarred/readme.md b/keyboards/xd75/keymaps/jarred/readme.md
new file mode 100644
index 000000000..4070bb3ee
--- /dev/null
+++ b/keyboards/xd75/keymaps/jarred/readme.md
@@ -0,0 +1 @@
+# Jarreds xd75 keymap
diff --git a/keyboards/xd75/keymaps/kim-kim/keymap.c b/keyboards/xd75/keymaps/kim-kim/keymap.c
index 85c000230..0ec506e17 100644
--- a/keyboards/xd75/keymaps/kim-kim/keymap.c
+++ b/keyboards/xd75/keymaps/kim-kim/keymap.c
@@ -67,7 +67,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_LW] = { /* LOWERED */
{ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, _______, _______, _______, _______, _______, _______, _______, _______ },
{ _______, KC_MPRV, KC_MNXT, KC_VOLU, _______, _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______ },
- { _______, KC_MPLY, KC_MSTP, KC_VOLD, _______, _______, RGB_SMOD, _______, _______, _______, _______, _______, _______, _______, _______ },
+ { _______, KC_MPLY, KC_MSTP, KC_VOLD, _______, _______, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______ },
{ _______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
{ _______, MO(_RT), MO(_RT), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
},
diff --git a/keyboards/xd75/keymaps/revok75/config.h b/keyboards/xd75/keymaps/revok75/config.h
new file mode 100644
index 000000000..a5484876e
--- /dev/null
+++ b/keyboards/xd75/keymaps/revok75/config.h
@@ -0,0 +1,20 @@
+/* Copyright 2017 Benjamin Kesselring
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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
+#undef BACKLIGHT_BREATHING
diff --git a/keyboards/xd75/keymaps/revok75/keymap.c b/keyboards/xd75/keymaps/revok75/keymap.c
new file mode 100644
index 000000000..44e2c5203
--- /dev/null
+++ b/keyboards/xd75/keymaps/revok75/keymap.c
@@ -0,0 +1,90 @@
+/* Copyright 2017 Wunder
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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
+
+// Layer shorthand
+#define _QW_M 0
+#define _QW_W 1
+#define _FN 2
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+/* QWERTY-Mac
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | % | 6 | 7 | 8 | 9 | 0 | - | = | Cut | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | Copy | Paste |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | ENTER | REF |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | \ | RSHIFT| UP | SAVE |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LALT | LGUI | LALT | FIND | CMD T | SPACE | SPACE | ALFRED | FN-MO | RALT | RGUI | RCTRL | LEFT | DOWN | RIGHT |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW_M] = LAYOUT_ortho_5x15( /* QWERTY MAC*/
+ 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, LGUI(KC_X), 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_LCBR, KC_RCBR, LGUI(KC_C), LGUI(KC_V), \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, LGUI(KC_R), KC_NO, 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_BSLS, KC_RSFT, KC_UP, LGUI(KC_S), \
+ KC_LCTL, KC_LALT, KC_LGUI, LGUI(KC_F), LGUI(KC_T), KC_SPC, KC_NO, LALT(KC_SPACE), MO(_FN), KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+ /* QWERTY-Win
+ * .--------------------------------------------------------------------------------------------------------------------------------------.
+ * | ESC | 1 | 2 | 3 | 4 | % | 6 | 7 | 8 | 9 | 0 | - | = | Cut | BACKSP |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+ * | TAB | Q | W | E | R | T | Y | U | I | O | P | { | } | Copy | Paste |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+ * | CAP LK | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | ENTER | REF |
+ * |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+ * | LSHIFT | Z | X | C | V | B | N | M | , | . | / | \ | RSHIFT | UP | SAVE |
+ * |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+ * | LALT | LGUI | LALT | FIND | CMD T | SPACE | SPACE | START | FN-MO | RALT | RGUI | RCTRL | LEFT | DOWN | RIGHT |
+ * '--------------------------------------------------------------------------------------------------------------------------------------'
+ */
+
+ [_QW_W] = LAYOUT_ortho_5x15( /* QWERTY WIN*/
+ 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, LCTL(KC_X), 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_LCBR, KC_RCBR, LCTL(KC_C), LCTL(KC_V), \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, LCTL(KC_R), KC_NO, 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_BSLS, KC_RSFT, KC_UP, LCTL(KC_S), \
+ KC_LCTL, KC_LALT, KC_LGUI, LCTL(KC_F), LCTL(KC_T), KC_SPC, KC_NO, LCTL(KC_GESC), MO(_FN), KC_RGUI, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+/* FUNCTION
+* .--------------------------------------------------------------------------------------------------------------------------------------.
+* | ESC | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | VOLDN | VOLUP | MUTE | DEL |
+* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
+* | TAB | - | WIN | - | - | RGB_TOG| - | - | OPTION | RESET | - | [ | ] | - | - |
+* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
+* | CAP LK | MAC | RAINBOW| PLAIN | - | - | - | - | - | - | ; | ' | ENTER | ENTER | REF |
+* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
+* | LSHIFT | INC | DEC | HUE I | HUE D | SAT I | SAT D | - | - | . | / | \ | RSHIFT| HOME | SAVE |
+* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
+* | LALT | LGUI | LALT | FIND | CMD T | SPACE | SPACE | ALFRED | FN-MO | RALT | RGUI | RCTRL | PGUP | END | PGDN |
+* '--------------------------------------------------------------------------------------------------------------------------------------'
+*/
+
+ [_FN] = LAYOUT_ortho_5x15( /* OSLAYOUT + NUMPAD + MEDIA + LIGHTING */
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_VOLD, KC_VOLU, KC_MUTE, KC_DEL, \
+ KC_TRNS, KC_NO, DF(_QW_W), KC_NO, KC_NO, RGB_TOG, KC_NO, KC_NO, KC_RALT, RESET, KC_NO, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, \
+ KC_TRNS, DF(_QW_M), RGB_MODE_RAINBOW, RGB_MODE_PLAIN, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \
+ KC_TRNS, RGB_VAI, RGB_VAD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_NO, KC_NO, KC_DOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_TRNS, \
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_END, KC_PGDN \
+ )
+};
diff --git a/keyboards/xd75/keymaps/revok75/readme.md b/keyboards/xd75/keymaps/revok75/readme.md
new file mode 100644
index 000000000..ecec8c962
--- /dev/null
+++ b/keyboards/xd75/keymaps/revok75/readme.md
@@ -0,0 +1 @@
+# The default keymap for Revok 75
diff --git a/keyboards/xd75/keymaps/revok75/rules.mk b/keyboards/xd75/keymaps/revok75/rules.mk
new file mode 100644
index 000000000..7472e8c64
--- /dev/null
+++ b/keyboards/xd75/keymaps/revok75/rules.mk
@@ -0,0 +1,18 @@
+# Copyright 2013 Jun Wako <wakojun@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+BOOTMAGIC_ENABLE = yes
+BACKLIGHT_ENABLE = yes
+RGBLIGHT_ENABLE = yes
diff --git a/keyboards/xd75/keymaps/skewwhiffy/config.h b/keyboards/xd75/keymaps/skewwhiffy/config.h
deleted file mode 100644
index f52a97bbc..000000000
--- a/keyboards/xd75/keymaps/skewwhiffy/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2017 REPLACE_WITH_YOUR_NAME
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "../../config.h"
-
-// place overrides here
-
-#endif
diff --git a/keyboards/xd75/keymaps/skewwhiffy/keymap.c b/keyboards/xd75/keymaps/skewwhiffy/keymap.c
index 11fa2f0e6..33f386808 100644
--- a/keyboards/xd75/keymaps/skewwhiffy/keymap.c
+++ b/keyboards/xd75/keymaps/skewwhiffy/keymap.c
@@ -13,41 +13,49 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "xd75.h"
+#include QMK_KEYBOARD_H
#include "keymap_uk.h"
-// Fillers to make layering more clear
-#define _______ KC_TRNS
// Layer shorthand
-#define _CM 0 // Colemak
-#define _DV 1 // Dvorak
-#define _QW 2 // QWERTY
-#define _NB 3 // Numbers
-#define _SY 4 // Symbols
-#define _NAV 5 // Navigation
+enum Layers {
+ cm, // colemak
+ dv, // dvorak
+ qw, // qwerty
+ nbl, // numbers left
+ nbr, // numbers right
+ syl, // symbols left
+ syr, // symbols right
+ nal, // navigation left
+ nar // navigation right
+};
// Layer buttons
#define _Z_SFT SFT_T(UK_Z)
#define _SCLSH SFT_T(UK_SCLN)
#define _SLSH SFT_T(UK_SLSH)
-#define _X_NB LT(_NB, UK_X)
-#define _Q_NB LT(_NB, UK_Q)
-#define _DOT_NB LT(_NB, UK_DOT)
-#define _V_NB LT(_NB, UK_V)
-#define _C_SY LT(_SY, UK_C)
-#define _J_SY LT(_SY, UK_J)
-#define _W_SY LT(_SY, UK_W)
-#define _COM_SY LT(_SY, UK_COMM)
-#define _AST_SY LT(_SY, UK_PAST)
-#define _B_NAV LT(_NAV, UK_B)
-#define _X_NAV LT(_NAV, UK_X)
-#define _K_NAV LT(_NAV, UK_K)
-#define _N_NAV LT(_NAV, UK_N)
-#define _F1_NB LT(_NB, UK_F1)
-#define _3_NB LT(_NB, UK_3)
+
+#define _X_NB LT(nbl, UK_X)
+#define _Q_NB LT(nbl, UK_Q)
+#define _DOT_NB LT(nbr, UK_DOT)
+#define _V_NB LT(nbr, UK_V)
+#define __NBL LT(nbl, _______)
+#define __NBR LT(nbr, _______)
+
+#define _C_SY LT(syl, UK_C)
+#define _J_SY LT(syl, UK_J)
+#define _W_SY LT(syr, UK_W)
+#define _COM_SY LT(syr, UK_COMM)
+#define __SYL LT(syl, _______)
+#define __SYR LT(syr, _______)
+
+#define _V_NAL LT(nal, UK_V)
+#define _K_NAL LT(nal, UK_K)
+#define _M_NAR LT(nar, UK_M)
+#define __NAL LT(nal, _______)
+#define __NAR LT(nar, _______)
// Custom hotkeys
-#define _TERM LCTL(UK_QUOT) // Hotkey for Cmder or iTerm
+#define _TERM LCTL(UK_QUOT) // Hotkey for terminal
#define _S_TAB S(UK_TAB)
#define _C_LEFT LCTL(UK_LEFT)
#define _C_RGHT LCTL(UK_RGHT)
@@ -55,35 +63,34 @@
#define _A_RGHT LALT(UK_RGHT)
enum custom_keycodes {
- L_NEXT = SAFE_RANGE,
- L_SB
+ IJ_OMN = SAFE_RANGE // IntelliJ Omnibox
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Colemak _CM
+/* Colemak
* .--------------------------------------------------------------------------------------------------------------------------------------.
- * | | | | | | | | | | | | | | L_NEXT | L_SB |
+ * | | | | | | | | | | | | | | | |
* |--------------------------------------------------------------------------------------------------------------------------------------|
* | Q | W | F | P | G | | | | | | J | L | U | Y | ; |
* |--------------------------------------------------------------------------------------------------------------------------------------|
* | A | R | S | T | D | | | | | | H | N | E | I | O |
* |--------------------------------------------------------------------------------------------------------------------------------------|
* | Z | X | C | V | B | | | | | | K | M | , | . | / |
- * | SHIFT | NUMBER | SYMBOL | | NAV | | | | | | NAV | | SYMBOL | FUNC | SHIFT |
+ * | SHIFT | NUMBER | SYMBOL | NAV | | | | | | | | NAV | SYMBOL | FUNC | SHIFT |
* |--------------------------------------------------------------------------------------------------------------------------------------|
* | LSHIFT | LCTRL | LALT | LGUI | SPACE | ENT | | | | DEL | BKSPC | RGUI | RALT | RCTRL | RSHIFT |
* .--------------------------------------------------------------------------------------------------------------------------------------.
*/
- [_CM] = {
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, L_NEXT, L_SB },
- { UK_Q, UK_W, UK_F, UK_P, UK_G, _______, _______, _______, _______, _______, UK_J, UK_L, UK_U, UK_Y, UK_SCLN },
- { UK_A, UK_R, UK_S, UK_T, UK_D, _______, _______, _______, _______, _______, UK_H, UK_N, UK_E, UK_I, UK_O },
- { _Z_SFT, _X_NB, _C_SY, UK_V, _B_NAV, _______, _______, _______, _______, _______, _K_NAV, UK_M, _COM_SY, _DOT_NB, _SLSH },
- { UK_LSFT, UK_LCTL, UK_LALT, UK_LGUI, UK_SPC, UK_ENT, _______, _______, _______, UK_DEL, UK_BSPC, UK_RGUI, UK_RALT, UK_RCTL, UK_RSFT }
- },
-
-/* DVORAK _DV
+ [cm] = LAYOUT_ortho_5x15( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ UK_Q, UK_W, UK_F, UK_P, UK_G, _______, _______, _______, _______, _______, UK_J, UK_L, UK_U, UK_Y, UK_SCLN, \
+ UK_A, UK_R, UK_S, UK_T, UK_D, _______, _______, _______, _______, _______, UK_H, UK_N, UK_E, UK_I, UK_O , \
+ _Z_SFT, _X_NB, _C_SY, _V_NAL, UK_B, _______, _______, _______, _______, _______, UK_K, _M_NAR, _COM_SY, _DOT_NB, _SLSH , \
+ UK_LSFT, UK_LCTL, UK_LALT, UK_LGUI, UK_SPC, UK_ENT, _______, _______, _______, UK_DEL, UK_BSPC, UK_RGUI, UK_RALT, UK_RCTL, UK_RSFT \
+ ),
+
+/* Dvorak
* .--------------------------------------------------------------------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------------------------------------------------------------------------------------------------------------------------------------|
@@ -92,18 +99,18 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | A | O | E | U | I | | | | | | D | H | T | N | S |
* |--------------------------------------------------------------------------------------------------------------------------------------|
* | ; | Q | J | K | X | | | | | | B | M | W | V | Z |
- * | SHIFT | NUMBER | SYMBOL | | NAV | | | | | | NAV | | SYMBOL | FUNC | SHIFT |
+ * | SHIFT | NUMBER | SYMBOL | NAV | | | | | | | | NAV | SYMBOL | FUNC | SHIFT |
* |--------------------------------------------------------------------------------------------------------------------------------------|
* | | | | | | | | | | | | | | | |
* |--------------------------------------------------------------------------------------------------------------------------------------|
*/
- [_DV] = {
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { UK_QUOT, UK_COMM, UK_DOT, UK_P, UK_Y, _______, _______, _______, _______, _______, UK_F, UK_G, UK_C, UK_R, UK_L },
- { UK_A, UK_O, UK_E, UK_U, UK_I, _______, _______, _______, _______, _______, UK_D, UK_H, UK_T, UK_N, UK_S },
- { _SCLSH, _Q_NB, _J_SY, UK_K, _X_NAV, _______, _______, _______, _______, _______, _B_NAV, UK_M, _W_SY, _V_NB, _Z_SFT },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
- },
+ [dv] = LAYOUT_ortho_5x15( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ UK_QUOT, UK_COMM, UK_DOT, UK_P, UK_Y, _______, _______, _______, _______, _______, UK_F, UK_G, UK_C, UK_R, UK_L , \
+ UK_A, UK_O, UK_E, UK_U, UK_I, _______, _______, _______, _______, _______, UK_D, UK_H, UK_T, UK_N, UK_S , \
+ _SCLSH, _Q_NB, _J_SY, _K_NAL, UK_X, _______, _______, _______, _______, _______, UK_B, _M_NAR, _W_SY, _V_NB, _Z_SFT , \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
/* QWERTY _QW
* .--------------------------------------------------------------------------------------------------------------------------------------.
@@ -114,20 +121,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | A | S | D | F | G | | | | | | H | J | K | L | ; |
* |--------------------------------------------------------------------------------------------------------------------------------------|
* | Z | X | C | V | B | | | | | | N | M | , | . | / |
- * | SHIFT | NUMBER | SYMBOL | | NAV | | | | | | NAV | | SYMBOL | FUNC | SHIFT |
+ * | SHIFT | NUMBER | SYMBOL | NAV | | | | | | | | NAV | SYMBOL | FUNC | SHIFT |
* |--------------------------------------------------------------------------------------------------------------------------------------|
* | | | | | | | | | | | | | | | |
* |--------------------------------------------------------------------------------------------------------------------------------------|
* | LSHIFT | LCTRL | LALT | LGUI | SPACE | ENT | | | | DEL | BKSPC | RGUI | RALT | RCTRL | RSHIFT |
* .--------------------------------------------------------------------------------------------------------------------------------------.
*/
- [_QW] = {
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { UK_Q, UK_W, UK_E, UK_R, UK_T, _______, _______, _______, _______, _______, UK_Y, UK_U, UK_I, UK_O, UK_P },
- { UK_A, UK_S, UK_D, UK_F, UK_G, _______, _______, _______, _______, _______, UK_H, UK_J, UK_K, UK_L, UK_SCLN },
- { _Z_SFT, _X_NB, _C_SY, UK_V, _B_NAV, _______, _______, _______, _______, _______, _N_NAV, UK_M, _COM_SY, _DOT_NB, _SLSH },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
- },
+ [qw] = LAYOUT_ortho_5x15( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ UK_Q, UK_W, UK_E, UK_R, UK_T, _______, _______, _______, _______, _______, UK_Y, UK_U, UK_I, UK_O, UK_P , \
+ UK_A, UK_S, UK_D, UK_F, UK_G, _______, _______, _______, _______, _______, UK_H, UK_J, UK_K, UK_L, UK_SCLN, \
+ _Z_SFT, _X_NB, _C_SY, _V_NAL, UK_B, _______, _______, _______, _______, _______, UK_N, _M_NAR, _COM_SY, _DOT_NB, _SLSH , \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
/* Numbers _NB
* .--------------------------------------------------------------------------------------------------------------------------------------.
@@ -142,15 +149,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | | | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
- [_NB] = {
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, _______, _______, _______, UK_7, UK_8, UK_9, _______ },
- { _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, _______, _______, _______, UK_4, UK_5, UK_6, _______ },
- { _______, _F1_NB, UK_F2, UK_F3, UK_F12, _______, _______, _______, _______, _______, UK_0, UK_1, UK_2, _3_NB, UK_DOT },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
- },
-
-/* Symbols _SY
+ [nbl] = LAYOUT_ortho_5x15( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, _______, _______, _______, UK_7, UK_8, UK_9, _______, \
+ _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, _______, _______, _______, UK_4, UK_5, UK_6, _______, \
+ _______, __NBL, UK_F2, UK_F3, UK_F12, _______, _______, _______, _______, _______, UK_0, UK_1, UK_2, UK_3, UK_DOT, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [nbr] = LAYOUT_ortho_5x15( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, UK_F7, UK_F8, UK_F9, UK_F10, _______, _______, _______, _______, _______, _______, UK_7, UK_8, UK_9, _______, \
+ _______, UK_F4, UK_F5, UK_F6, UK_F11, _______, _______, _______, _______, _______, _______, UK_4, UK_5, UK_6, _______, \
+ _______, UK_F1, UK_F2, UK_F3, UK_F12, _______, _______, _______, _______, _______, UK_0, UK_1, UK_2, __NBR, UK_DOT , \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+ /* Symbols _SY
* .--------------------------------------------------------------------------------------------------------------------------------------.
* | | | | | | | | | | | | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
@@ -163,17 +177,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | | | | | | | | | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
- [_SY] = {
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, _______, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH },
- { UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT },
- { UK_CIRC, UK_AMPR, _AST_SY, UK_PIPE, _______, _______, _______, _______, _______, _______, UK_LABK, UK_LBRC, _COM_SY, UK_RABK, UK_GRV },
- { _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ }
- },
+ [syl] = LAYOUT_ortho_5x15( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, _______, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH, \
+ UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT , \
+ UK_CIRC, UK_AMPR, __SYL, UK_PIPE, _______, _______, _______, _______, _______, _______, UK_LABK, UK_LBRC, UK_RBRC, UK_RABK, UK_GRV , \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [syr] = LAYOUT_ortho_5x15( \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ UK_EXLM, UK_PND, UK_UNDS, UK_MINS, UK_TILD, _______, _______, _______, _______, _______, UK_BSLS, UK_LCBR, UK_RCBR, UK_SLSH, UK_HASH, \
+ UK_DLR, UK_PERC, UK_PLUS, UK_EQL, _______, _______, _______, _______, _______, _______, UK_DQUO, UK_LPRN, UK_RPRN, UK_QUOT, UK_AT , \
+ UK_CIRC, UK_AMPR, UK_ASTR, UK_PIPE, _______, _______, _______, _______, _______, _______, UK_LABK, UK_LBRC, __SYR, UK_RABK, UK_GRV , \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
/*
- * Navigation
+ * Navigation _NA
* .--------------------------------------------------------------------------------------------------------------------------------------.
- * | RESET | COLEMA | DVORAK | QWERTY | | | | | | | | | | | |
+ * | RESET | COLEMA | DVORAK | QWERTY | | RGB_TG | | | | | | | | | |
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
* | Esc | Ctrl L | Up | Ctrl R | | RGB HD | RGB HI | | | | | PtSn | ScLk | Pause | |
* +--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
@@ -184,105 +205,29 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | RGB RMD| RGB MD | | | | | | | | |
* '--------------------------------------------------------------------------------------------------------------------------------------'
*/
- [_NAV] = {
- { RESET, DF(_CM), DF(_DV), DF(_QW), _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ },
- { UK_ESC, _C_LEFT, UK_UP , _C_RGHT, _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, UK_PSCR, UK_SLCK, UK_PAUS, _______ },
- { UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, UK_INS, UK_HOME, UK_PGUP, _TERM },
- { _S_TAB, _A_LEFT, UK_LSFT, _A_RGHT, _B_NAV, RGB_VAD, RGB_VAI, _______, _______, _______, _K_NAV, UK_SLCK, UK_END, UK_PGDN, _______ },
- { _______, _______, _______, _______, _______, RGB_RMOD,RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______ }
- },
-};
-
-const uint16_t PROGMEM fn_actions[] = {
-
-};
-
-const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt)
-{
- // MACRODOWN only works in this function
- switch(id) {
- case 0:
- if (record->event.pressed) {
- register_code(KC_RSFT);
- #ifdef BACKLIGHT_ENABLE
- backlight_step();
- #endif
- } else {
- unregister_code(KC_RSFT);
- }
- break;
- }
- return MACRO_NONE;
+ [nal] = LAYOUT_ortho_5x15( \
+ RESET, DF(cm), DF(dv), DF(qw), _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ UK_ESC, _C_LEFT, UK_UP , _C_RGHT, _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, UK_PSCR, UK_SLCK, UK_PAUS, _______, \
+ UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, UK_INS, UK_HOME, UK_PGUP, _TERM , \
+ _S_TAB, _A_LEFT, IJ_OMN, __NAL, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, UK_SLCK, UK_END, UK_PGDN, _______, \
+ _______, _______, _______, _______, _______, RGB_RMOD,RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+ [nar] = LAYOUT_ortho_5x15( \
+ RESET, DF(cm), DF(dv), DF(qw), _______, RGB_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ UK_ESC, _C_LEFT, UK_UP , _C_RGHT, _______, RGB_HUD, RGB_HUI, _______, _______, _______, _______, UK_PSCR, UK_SLCK, UK_PAUS, _______, \
+ UK_TAB, UK_LEFT, UK_DOWN, UK_RGHT, _______, RGB_SAD, RGB_SAI, _______, _______, _______, _______, UK_INS, UK_HOME, UK_PGUP, _TERM , \
+ _S_TAB, _A_LEFT, IJ_OMN, _A_RGHT, _______, RGB_VAD, RGB_VAI, _______, _______, _______, _______, __NAR, UK_END, UK_PGDN, _______, \
+ _______, _______, _______, _______, _______, RGB_RMOD,RGB_MOD, _______, _______, _______, _______, _______, _______, _______, _______ \
+ )
};
-bool lightsOn = true;
-int keyPresses = 0;
-int effect = 0;
-uint32_t key_timer;
-
-void resetCounts(void) {
- effect++;
- keyPresses = 0;
- key_timer = timer_read32();
-}
-
-void matrix_scan_user(void) {
- if (!lightsOn) {
- rgblight_setrgb(0, 0, 0);
- return;
- }
- if (timer_elapsed32(key_timer) > 60000) {
- resetCounts();
- }
- switch (effect) {
- case 0:
- rgblight_effect_breathing(3);
- break;
- case 1:
- rgblight_effect_knight(3);
- break;
- case 2:
- rgblight_effect_rainbow_swirl(128);
- break;
- case 3:
- rgblight_effect_snake(30);
- break;
- case 4:
- rgblight_effect_rainbow_swirl(128);
- break;
- case 5:
- rgblight_effect_rainbow_mood(128);
- break;
- case 6:
- rgblight_effect_christmas();
- break;
- case 7:
- rgblight_effect_rgbtest();
- break;
- default:
- effect = 0;
- break;
- }
-}
-
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- if (!record->event.pressed) return true;
- if (keycode == L_SB) {
- lightsOn = !lightsOn;
- if (!lightsOn) {
- keyPresses = 0;
- } else {
- resetCounts();
+ if (record->event.pressed) {
+ switch(keycode) {
+ case IJ_OMN:
+ SEND_STRING(SS_TAP(X_LSHIFT)SS_TAP(X_LSHIFT));
+ return false;
}
- return true;
- }
- if (keycode == L_NEXT) {
- resetCounts();
- return true;
- }
- keyPresses++;
- if (keyPresses > 100) {
- resetCounts();
}
return true;
}
diff --git a/keyboards/xd75/keymaps/tdl-jturner/config.h b/keyboards/xd75/keymaps/tdl-jturner/config.h
index 561a48d7e..985247bb2 100644
--- a/keyboards/xd75/keymaps/tdl-jturner/config.h
+++ b/keyboards/xd75/keymaps/tdl-jturner/config.h
@@ -26,7 +26,6 @@
#define TAPPING_TOGGLE 2
//#define PERMISSIVE_HOLD
//#define QMK_KEYS_PER_SCAN 4
-#define PREVENT_STUCK_MODIFIERS
#define FORCE_NKRO
#define MOUSEKEY_INTERVAL 16
diff --git a/keyboards/xd75/rules.mk b/keyboards/xd75/rules.mk
index 5f6e85648..e99272943 100644
--- a/keyboards/xd75/rules.mk
+++ b/keyboards/xd75/rules.mk
@@ -62,7 +62,7 @@ MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
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 this with audio at the same time.
+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
diff --git a/keyboards/xd87/config.h b/keyboards/xd87/config.h
new file mode 100644
index 000000000..3682af740
--- /dev/null
+++ b/keyboards/xd87/config.h
@@ -0,0 +1,227 @@
+/*
+Copyright 2018 Alexander Fougner <fougner89 at gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x0000
+#define DEVICE_VER 0x0001
+#define MANUFACTURER KP Republic
+#define PRODUCT XD87 TKL
+#define DESCRIPTION KP Republic XD87
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 17
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+
+
+#define MATRIX_ROW_PINS { D1, B0, B1, C7, D3, D5 }
+
+#define MATRIX_COL_PINS { E6, F0, F1, F4, F5, F6, F7, B5, B6, C6, D4, D6, D7, B4, B2, B3, D2 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN D0
+// #define BACKLIGHT_BREATHING
+#define BACKLIGHT_LEVELS 3
+
+// #define RGB_DI_PIN E2
+// #ifdef RGB_DI_PIN
+// #define RGBLIGHT_ANIMATIONS
+// #define RGBLED_NUM 16
+// #define RGBLIGHT_HUE_STEP 8
+// #define RGBLIGHT_SAT_STEP 8
+// #define RGBLIGHT_VAL_STEP 8
+// #endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/xd87/info.json b/keyboards/xd87/info.json
new file mode 100644
index 000000000..3837358cd
--- /dev/null
+++ b/keyboards/xd87/info.json
@@ -0,0 +1,291 @@
+{
+ "keyboard_name": "XD87",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 7.25,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ { "label": "K00", "x": 0, "y": 0 },
+ { "label": "K01", "x": 1, "y": 0 },
+ { "label": "K02", "x": 2, "y": 0 },
+ { "label": "K03", "x": 3, "y": 0 },
+ { "label": "K04", "x": 4, "y": 0 },
+ { "label": "K05", "x": 5, "y": 0 },
+ { "label": "K06", "x": 6.5, "y": 0 },
+ { "label": "K07", "x": 7.5, "y": 0 },
+ { "label": "K08", "x": 8.5, "y": 0 },
+ { "label": "K09", "x": 9.5, "y": 0 },
+ { "label": "K0A", "x": 11, "y": 0 },
+ { "label": "K0B", "x": 12, "y": 0 },
+ { "label": "K0C", "x": 13, "y": 0 },
+ { "label": "K0D", "x": 14, "y": 0 },
+ { "label": "K0E", "x": 15.25, "y": 0 },
+ { "label": "K0F", "x": 16.25, "y": 0 },
+ { "label": "K0G", "x": 17.25, "y": 0 },
+ { "label": "K10", "x": 0, "y": 1.25 },
+ { "label": "K11", "x": 1, "y": 1.25 },
+ { "label": "K12", "x": 2, "y": 1.25 },
+ { "label": "K13", "x": 3, "y": 1.25 },
+ { "label": "K14", "x": 4, "y": 1.25 },
+ { "label": "K15", "x": 5, "y": 1.25 },
+ { "label": "K16", "x": 6, "y": 1.25 },
+ { "label": "K17", "x": 7, "y": 1.25 },
+ { "label": "K18", "x": 8, "y": 1.25 },
+ { "label": "K19", "x": 9, "y": 1.25 },
+ { "label": "K1A", "x": 10, "y": 1.25 },
+ { "label": "K1B", "x": 11, "y": 1.25 },
+ { "label": "K1C", "x": 12, "y": 1.25 },
+ { "label": "K1D", "x": 13, "y": 1.25 },
+ { "label": "K3E", "x": 14, "y": 1.25 },
+ { "label": "K1E", "x": 15.25, "y": 1.25 },
+ { "label": "K1F", "x": 16.25, "y": 1.25 },
+ { "label": "K1G", "x": 17.25, "y": 1.25 },
+ { "label": "K20", "x": 0, "y": 2.25, "w": 1.5 },
+ { "label": "K21", "x": 1.5, "y": 2.25 },
+ { "label": "K22", "x": 2.5, "y": 2.25 },
+ { "label": "K23", "x": 3.5, "y": 2.25 },
+ { "label": "K24", "x": 4.5, "y": 2.25 },
+ { "label": "K25", "x": 5.5, "y": 2.25 },
+ { "label": "K26", "x": 6.5, "y": 2.25 },
+ { "label": "K27", "x": 7.5, "y": 2.25 },
+ { "label": "K28", "x": 8.5, "y": 2.25 },
+ { "label": "K29", "x": 9.5, "y": 2.25 },
+ { "label": "K2A", "x": 10.5, "y": 2.25 },
+ { "label": "K2B", "x": 11.5, "y": 2.25 },
+ { "label": "K2C", "x": 12.5, "y": 2.25 },
+ { "label": "K2D", "x": 13.5, "y": 2.25, "w": 1.5 },
+ { "label": "K2E", "x": 15.25, "y": 2.25 },
+ { "label": "K2F", "x": 16.25, "y": 2.25 },
+ { "label": "K2G", "x": 17.25, "y": 2.25 },
+ { "label": "K30", "x": 0, "y": 3.25, "w": 1.75 },
+ { "label": "K31", "x": 1.75, "y": 3.25 },
+ { "label": "K32", "x": 2.75, "y": 3.25 },
+ { "label": "K33", "x": 3.75, "y": 3.25 },
+ { "label": "K34", "x": 4.75, "y": 3.25 },
+ { "label": "K35", "x": 5.75, "y": 3.25 },
+ { "label": "K36", "x": 6.75, "y": 3.25 },
+ { "label": "K37", "x": 7.75, "y": 3.25 },
+ { "label": "K38", "x": 8.75, "y": 3.25 },
+ { "label": "K39", "x": 9.75, "y": 3.25 },
+ { "label": "K3A", "x": 10.75, "y": 3.25 },
+ { "label": "K3B", "x": 11.75, "y": 3.25 },
+ { "label": "K3C", "x": 12.75, "y": 3.25 },
+ { "label": "K3D", "x": 13.75, "y": 3.25, "w": 1.25 },
+ { "label": "K40", "x": 0, "y": 4.25, "w": 1.25 },
+ { "label": "K41", "x": 1.25, "y": 4.25 },
+ { "label": "K42", "x": 2.25, "y": 4.25 },
+ { "label": "K43", "x": 3.25, "y": 4.25 },
+ { "label": "K44", "x": 4.25, "y": 4.25 },
+ { "label": "K45", "x": 5.25, "y": 4.25 },
+ { "label": "K46", "x": 6.25, "y": 4.25 },
+ { "label": "K47", "x": 7.25, "y": 4.25 },
+ { "label": "K48", "x": 8.25, "y": 4.25 },
+ { "label": "K49", "x": 9.25, "y": 4.25 },
+ { "label": "K4A", "x": 10.25, "y": 4.25 },
+ { "label": "K4B", "x": 11.25, "y": 4.25 },
+ { "label": "K4C", "x": 12.25, "y": 4.25, "w": 1.75 },
+ { "label": "K4D", "x": 14, "y": 4.25 },
+ { "label": "K4E", "x": 15.25, "y": 4.25 },
+ { "label": "K4F", "x": 16.25, "y": 4.25 },
+ { "label": "K4G", "x": 17.25, "y": 4.25 },
+ { "label": "K50", "x": 0, "y": 5.25, "w": 1.5 },
+ { "label": "K51", "x": 1.5, "y": 5.25 },
+ { "label": "K52", "x": 2.5, "y": 5.25, "w": 1.5 },
+ { "label": "K55", "x": 4, "y": 5.25, "w": 3 },
+ { "label": "K58", "x": 7, "y": 5.25, "w": 3 },
+ { "label": "K5A", "x": 10, "y": 5.25, "w": 1.25 },
+ { "label": "K5B", "x": 11.25, "y": 5.25, "w": 1.25 },
+ { "label": "K5C", "x": 12.5, "y": 5.25, "w": 1.25 },
+ { "label": "K5D", "x": 13.75, "y": 5.25, "w": 1.25 },
+ { "label": "K5E", "x": 15.25, "y": 5.25 },
+ { "label": "K5F", "x": 16.25, "y": 5.25 },
+ { "label": "K5G", "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ { "label": "Esc", "x": 0, "y": 0 },
+ { "label": "F1", "x": 2, "y": 0 },
+ { "label": "F2", "x": 3, "y": 0 },
+ { "label": "F3", "x": 4, "y": 0 },
+ { "label": "F4", "x": 5, "y": 0 },
+ { "label": "F5", "x": 6.5, "y": 0 },
+ { "label": "F6", "x": 7.5, "y": 0 },
+ { "label": "F7", "x": 8.5, "y": 0 },
+ { "label": "F8", "x": 9.5, "y": 0 },
+ { "label": "F9", "x": 11, "y": 0 },
+ { "label": "F10", "x": 12, "y": 0 },
+ { "label": "F11", "x": 13, "y": 0 },
+ { "label": "F12", "x": 14, "y": 0 },
+ { "label": "Print Screen", "x": 15.25, "y": 0 },
+ { "label": "Scroll Lock", "x": 16.25, "y": 0 },
+ { "label": "Pause", "x": 17.25, "y": 0 },
+ { "label": "`", "x": 0, "y": 1.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": 7, "y": 1.25 },
+ { "label": "8", "x": 8, "y": 1.25 },
+ { "label": "9", "x": 9, "y": 1.25 },
+ { "label": "0", "x": 10, "y": 1.25 },
+ { "label": "-", "x": 11, "y": 1.25 },
+ { "label": "=", "x": 12, "y": 1.25 },
+ { "label": "Backspace", "x": 13, "y": 1.25, "w": 2 },
+ { "label": "Insert", "x": 15.25, "y": 1.25 },
+ { "label": "Home", "x": 16.25, "y": 1.25 },
+ { "label": "PgUp", "x": 17.25, "y": 1.25 },
+ { "label": "Tab", "x": 0, "y": 2.25, "w": 1.5 },
+ { "label": "Q", "x": 1.5, "y": 2.25 },
+ { "label": "W", "x": 2.5, "y": 2.25 },
+ { "label": "E", "x": 3.5, "y": 2.25 },
+ { "label": "R", "x": 4.5, "y": 2.25 },
+ { "label": "T", "x": 5.5, "y": 2.25 },
+ { "label": "Y", "x": 6.5, "y": 2.25 },
+ { "label": "U", "x": 7.5, "y": 2.25 },
+ { "label": "I", "x": 8.5, "y": 2.25 },
+ { "label": "O", "x": 9.5, "y": 2.25 },
+ { "label": "P", "x": 10.5, "y": 2.25 },
+ { "label": "[", "x": 11.5, "y": 2.25 },
+ { "label": "]", "x": 12.5, "y": 2.25 },
+ { "label": "\\", "x": 13.5, "y": 2.25, "w": 1.5 },
+ { "label": "Delete", "x": 15.25, "y": 2.25 },
+ { "label": "End", "x": 16.25, "y": 2.25 },
+ { "label": "PgDn", "x": 17.25, "y": 2.25 },
+ { "label": "Caps Lock", "x": 0, "y": 3.25, "w": 1.75 },
+ { "label": "A", "x": 1.75, "y": 3.25 },
+ { "label": "S", "x": 2.75, "y": 3.25 },
+ { "label": "D", "x": 3.75, "y": 3.25 },
+ { "label": "F", "x": 4.75, "y": 3.25 },
+ { "label": "G", "x": 5.75, "y": 3.25 },
+ { "label": "H", "x": 6.75, "y": 3.25 },
+ { "label": "J", "x": 7.75, "y": 3.25 },
+ { "label": "K", "x": 8.75, "y": 3.25 },
+ { "label": "L", "x": 9.75, "y": 3.25 },
+ { "label": ";", "x": 10.75, "y": 3.25 },
+ { "label": "'", "x": 11.75, "y": 3.25 },
+ { "label": "Enter", "x": 12.75, "y": 3.25, "w": 2.25 },
+ { "label": "Shift", "x": 0, "y": 4.25, "w": 2.25 },
+ { "label": "Z", "x": 2.25, "y": 4.25 },
+ { "label": "X", "x": 3.25, "y": 4.25 },
+ { "label": "C", "x": 4.25, "y": 4.25 },
+ { "label": "V", "x": 5.25, "y": 4.25 },
+ { "label": "B", "x": 6.25, "y": 4.25 },
+ { "label": "N", "x": 7.25, "y": 4.25 },
+ { "label": "M", "x": 8.25, "y": 4.25 },
+ { "label": ",", "x": 9.25, "y": 4.25 },
+ { "label": ".", "x": 10.25, "y": 4.25 },
+ { "label": "/", "x": 11.25, "y": 4.25 },
+ { "label": "Shift", "x": 12.25, "y": 4.25, "w": 2.75 },
+ { "label": "Up", "x": 16.25, "y": 4.25 },
+ { "label": "Ctrl", "x": 0, "y": 5.25, "w": 1.25 },
+ { "label": "Win", "x": 1.25, "y": 5.25, "w": 1.25 },
+ { "label": "Alt", "x": 2.5, "y": 5.25, "w": 1.25 },
+ { "label": "Space", "x": 3.75, "y": 5.25, "w": 6.25 },
+ { "label": "Alt", "x": 10, "y": 5.25, "w": 1.25 },
+ { "label": "Win", "x": 11.25, "y": 5.25, "w": 1.25 },
+ { "label": "Menu", "x": 12.5, "y": 5.25, "w": 1.25 },
+ { "label": "Ctrl", "x": 13.75, "y": 5.25, "w": 1.25 },
+ { "label": "Left", "x": 15.25, "y": 5.25 },
+ { "label": "Down", "x": 16.25, "y": 5.25 },
+ { "label": "Right", "x": 17.25, "y": 5.25 }
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "layout": [
+ { "label": "Esc", "x": 0, "y": 0 },
+ { "label": "F1", "x": 2, "y": 0 },
+ { "label": "F2", "x": 3, "y": 0 },
+ { "label": "F3", "x": 4, "y": 0 },
+ { "label": "F4", "x": 5, "y": 0 },
+ { "label": "F5", "x": 6.5, "y": 0 },
+ { "label": "F6", "x": 7.5, "y": 0 },
+ { "label": "F7", "x": 8.5, "y": 0 },
+ { "label": "F8", "x": 9.5, "y": 0 },
+ { "label": "F9", "x": 11, "y": 0 },
+ { "label": "F10", "x": 12, "y": 0 },
+ { "label": "F11", "x": 13, "y": 0 },
+ { "label": "F12", "x": 14, "y": 0 },
+ { "label": "Print Screen", "x": 15.25, "y": 0 },
+ { "label": "Scroll Lock", "x": 16.25, "y": 0 },
+ { "label": "Pause", "x": 17.25, "y": 0 },
+ { "label": "`", "x": 0, "y": 1.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": 7, "y": 1.25 },
+ { "label": "8", "x": 8, "y": 1.25 },
+ { "label": "9", "x": 9, "y": 1.25 },
+ { "label": "0", "x": 10, "y": 1.25 },
+ { "label": "-", "x": 11, "y": 1.25 },
+ { "label": "=", "x": 12, "y": 1.25 },
+ { "label": "Backspace", "x": 13, "y": 1.25, "w": 2 },
+ { "label": "Insert", "x": 15.25, "y": 1.25 },
+ { "label": "Home", "x": 16.25, "y": 1.25 },
+ { "label": "PgUp", "x": 17.25, "y": 1.25 },
+ { "label": "Tab", "x": 0, "y": 2.25, "w": 1.5 },
+ { "label": "Q", "x": 1.5, "y": 2.25 },
+ { "label": "W", "x": 2.5, "y": 2.25 },
+ { "label": "E", "x": 3.5, "y": 2.25 },
+ { "label": "R", "x": 4.5, "y": 2.25 },
+ { "label": "T", "x": 5.5, "y": 2.25 },
+ { "label": "Y", "x": 6.5, "y": 2.25 },
+ { "label": "U", "x": 7.5, "y": 2.25 },
+ { "label": "I", "x": 8.5, "y": 2.25 },
+ { "label": "O", "x": 9.5, "y": 2.25 },
+ { "label": "P", "x": 10.5, "y": 2.25 },
+ { "label": "[", "x": 11.5, "y": 2.25 },
+ { "label": "]", "x": 12.5, "y": 2.25 },
+ { "label": "Delete", "x": 15.25, "y": 2.25 },
+ { "label": "End", "x": 16.25, "y": 2.25 },
+ { "label": "PgDn", "x": 17.25, "y": 2.25 },
+ { "label": "Caps Lock", "x": 0, "y": 3.25, "w": 1.75 },
+ { "label": "A", "x": 1.75, "y": 3.25 },
+ { "label": "S", "x": 2.75, "y": 3.25 },
+ { "label": "D", "x": 3.75, "y": 3.25 },
+ { "label": "F", "x": 4.75, "y": 3.25 },
+ { "label": "G", "x": 5.75, "y": 3.25 },
+ { "label": "H", "x": 6.75, "y": 3.25 },
+ { "label": "J", "x": 7.75, "y": 3.25 },
+ { "label": "K", "x": 8.75, "y": 3.25 },
+ { "label": "L", "x": 9.75, "y": 3.25 },
+ { "label": ";", "x": 10.75, "y": 3.25 },
+ { "label": "'", "x": 11.75, "y": 3.25 },
+ { "label": "#", "x": 12.75, "y": 3.25 },
+ { "label": "Enter", "x": 13.75, "y": 2.25, "w": 1.25, "h": 2 },
+ { "label": "Shift", "x": 0, "y": 4.25, "w": 1.25 },
+ { "label": "\\", "x": 1.25, "y": 4.25 },
+ { "label": "Z", "x": 2.25, "y": 4.25 },
+ { "label": "X", "x": 3.25, "y": 4.25 },
+ { "label": "C", "x": 4.25, "y": 4.25 },
+ { "label": "V", "x": 5.25, "y": 4.25 },
+ { "label": "B", "x": 6.25, "y": 4.25 },
+ { "label": "N", "x": 7.25, "y": 4.25 },
+ { "label": "M", "x": 8.25, "y": 4.25 },
+ { "label": ",", "x": 9.25, "y": 4.25 },
+ { "label": ".", "x": 10.25, "y": 4.25 },
+ { "label": "/", "x": 11.25, "y": 4.25 },
+ { "label": "Shift", "x": 12.25, "y": 4.25, "w": 2.75 },
+ { "label": "Up", "x": 16.25, "y": 4.25 },
+ { "label": "Ctrl", "x": 0, "y": 5.25, "w": 1.25 },
+ { "label": "Win", "x": 1.25, "y": 5.25, "w": 1.25 },
+ { "label": "Alt", "x": 2.5, "y": 5.25, "w": 1.25 },
+ { "label": "Space", "x": 3.75, "y": 5.25, "w": 6.25 },
+ { "label": "AltGr", "x": 10, "y": 5.25, "w": 1.25 },
+ { "label": "Win", "x": 11.25, "y": 5.25, "w": 1.25 },
+ { "label": "Menu", "x": 12.5, "y": 5.25, "w": 1.25 },
+ { "label": "Ctrl", "x": 13.75, "y": 5.25, "w": 1.25 },
+ { "label": "Left", "x": 15.25, "y": 5.25 },
+ { "label": "Down", "x": 16.25, "y": 5.25 },
+ { "label": "Right", "x": 17.25, "y": 5.25 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/xd87/keymaps/default/config.h b/keyboards/xd87/keymaps/default/config.h
new file mode 100644
index 000000000..ed56340c3
--- /dev/null
+++ b/keyboards/xd87/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 Alexander Fougner <fougner89 at gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+// place overrides here
diff --git a/keyboards/xd87/keymaps/default/keymap.c b/keyboards/xd87/keymaps/default/keymap.c
new file mode 100644
index 000000000..b31db9b57
--- /dev/null
+++ b/keyboards/xd87/keymaps/default/keymap.c
@@ -0,0 +1,68 @@
+/* Copyright 2018 Alexander Fougner <fougner89 at gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include QMK_KEYBOARD_H
+
+// 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_tkl_iso(\
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, \
+ KC_CAPS,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, \
+ KC_LSFT,KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT )
+};
+
+
+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/xd87/keymaps/default/readme.md b/keyboards/xd87/keymaps/default/readme.md
new file mode 100644
index 000000000..41baff943
--- /dev/null
+++ b/keyboards/xd87/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for xd87 \ No newline at end of file
diff --git a/keyboards/xd87/readme.md b/keyboards/xd87/readme.md
new file mode 100644
index 000000000..0b9389740
--- /dev/null
+++ b/keyboards/xd87/readme.md
@@ -0,0 +1,26 @@
+# XD87
+
+![XD87](https://i.imgur.com/qVyOies.jpg)
+
+
+- Keyboard Maintainer: [Alexander Fougner](https://github.com/fougner)
+- Hardware Supported: XD87 PCB v1.1
+- Hardware Availability:
+ - [KPrepublic.com](https://kprepublic.com/products/xd87-xd87-xd80-custom-mechanical-keyboard-kit80-supports-tkg-tools-support-underglow-rgb-pcb-programmed-gh80-kle)
+ - [AliExpress](https://www.aliexpress.com/item/xd87-XD87-XD80-Custom-Mechanical-Keyboard-Kit80-Supports-TKG-TOOLS-Support-Underglow-RGB-PCB-programmed-gh80/32892540743.html)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make xd87:default
+
+It also supports the tkl_ansi and tkl_iso community layouts:
+
+ # Build firmware with ANSI layout
+ make xd87:default_tkl_ansi
+ # Build firmware with ISO layout
+ make xd87:default_tkl_iso
+
+
+The keyboard can be reset to bootloader by using bootmagic (space+b by default) or short out the small connector between the Delete and End keys.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.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/xd87/rules.mk b/keyboards/xd87/rules.mk
new file mode 100644
index 000000000..39540e701
--- /dev/null
+++ b/keyboards/xd87/rules.mk
@@ -0,0 +1,84 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = yes # Console for debug(+400)
+COMMAND_ENABLE = yes # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = 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)
+
+# Supported layouts
+LAYOUTS = tkl_ansi tkl_iso
diff --git a/keyboards/xd87/xd87.c b/keyboards/xd87/xd87.c
new file mode 100644
index 000000000..da07c71d8
--- /dev/null
+++ b/keyboards/xd87/xd87.c
@@ -0,0 +1,43 @@
+/* Copyright 2018 Alexander Fougner <fougner89 at 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 "xd87.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/xd87/xd87.h b/keyboards/xd87/xd87.h
new file mode 100644
index 000000000..c4df290a3
--- /dev/null
+++ b/keyboards/xd87/xd87.h
@@ -0,0 +1,70 @@
+/* Copyright 2018 Alexander Fougner <fougner89 at gmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef XD87_H
+#define XD87_H
+
+#include "quantum.h"
+
+#define LAYOUT_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K3E, K1E, K1F, K1G, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G, \
+ K50, K51, K52, K55, K58, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
+) { \
+/* 0 1 2 3 4 5 6 7 8 9 A B C D E F G */ \
+/* 0 */ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \
+/* 1 */ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \
+/* 2 */ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G }, \
+/* 3 */ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, KC_NO, KC_NO }, \
+/* 4 */ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G }, \
+/* 5 */ { K50, K51, K52, KC_NO, KC_NO, K55, KC_NO, KC_NO, K58, KC_NO, K5A, K5B, K5C, K5D, K5E, K5F, K5G } \
+}
+
+#define LAYOUT_tkl_ansi( \
+ K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
+ K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1D, K1E, K1F, K1G, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4F, \
+ K50, K51, K52, K58, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
+) LAYOUT_all( \
+ K00, KC_NO, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, KC_NO, K1D, KC_NO, K1E, K1F, K1G, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, \
+ K40, KC_NO, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, KC_NO, KC_NO, K4F, KC_NO, \
+ K50, K51, K52, KC_NO, K58, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
+)
+
+#define LAYOUT_tkl_iso( \
+ K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K2G, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4F, \
+ K50, K51, K52, K58, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
+) LAYOUT_all( \
+ K00, KC_NO, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, KC_NO, K1E, K1F, K1G, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, KC_NO, K2E, K2F, K2G, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, KC_NO, KC_NO, K4F, KC_NO, \
+ K50, K51, K52, KC_NO, K58, K5A, K5B, K5C, K5D, K5E, K5F, K5G \
+)
+
+#endif \ No newline at end of file
diff --git a/keyboards/xmmx/config.h b/keyboards/xmmx/config.h
index f3f893e28..8cb2cf82d 100644
--- a/keyboards/xmmx/config.h
+++ b/keyboards/xmmx/config.h
@@ -43,10 +43,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
-
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
#define RGBLED_NUM 0
@@ -55,4 +51,4 @@
#define RGBLIGHT_VAL_STEP 8
#endif
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/xmmx/info.json b/keyboards/xmmx/info.json
new file mode 100644
index 000000000..28bd06bbf
--- /dev/null
+++ b/keyboards/xmmx/info.json
@@ -0,0 +1,475 @@
+{
+ "keyboard_name": "XMMX",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 18.25,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT_all": {
+ "key_count": 96,
+ "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":"Back Space", "x":13, "y":1.5},
+ {"label":"Back Space", "x":14, "y":1.5},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"PgUp", "x":17.25, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"{", "x":11.5, "y":2.5},
+ {"label":"}", "x":12.5, "y":2.5},
+ {"label":"|", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"PgDn", "x":17.25, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":":", "x":10.75, "y":3.5},
+ {"label":"\"", "x":11.75, "y":3.5},
+ {"label":"~", "x":12.75, "y":3.5},
+ {"label":"Enter", "x":13.75, "y":3.5, "w":1.25},
+ {"x":15.25, "y":3.5},
+ {"x":16.25, "y":3.5},
+ {"x":17.25, "y":3.5},
+ {"label":"Shift", "x":0, "y":4.5, "w":1.25},
+ {"label":"|", "x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":"<", "x":9.25, "y":4.5},
+ {"label":">", "x":10.25, "y":4.5},
+ {"label":"?", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":1.75},
+ {"label":"Fn", "x":14, "y":4.5},
+ {"x":15.25, "y":4.5},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"x":17.25, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"Alt", "x":10, "y":5.5, "w":1.25},
+ {"label":"Win", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5}
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "key_count": 87,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"PrtSc", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"~", "x":0, "y":1.5},
+ {"label":"!", "x":1, "y":1.5},
+ {"label":"@", "x":2, "y":1.5},
+ {"label":"#", "x":3, "y":1.5},
+ {"label":"$", "x":4, "y":1.5},
+ {"label":"%", "x":5, "y":1.5},
+ {"label":"^", "x":6, "y":1.5},
+ {"label":"&", "x":7, "y":1.5},
+ {"label":"*", "x":8, "y":1.5},
+ {"label":"(", "x":9, "y":1.5},
+ {"label":")", "x":10, "y":1.5},
+ {"label":"_", "x":11, "y":1.5},
+ {"label":"+", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"PgUp", "x":17.25, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"{", "x":11.5, "y":2.5},
+ {"label":"}", "x":12.5, "y":2.5},
+ {"label":"|", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"PgDn", "x":17.25, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":":", "x":10.75, "y":3.5},
+ {"label":"\"", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":"<", "x":9.25, "y":4.5},
+ {"label":">", "x":10.25, "y":4.5},
+ {"label":"?", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"Alt", "x":10, "y":5.5, "w":1.25},
+ {"label":"Win", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5}
+ ]
+ },
+ "LAYOUT_tkl_ansi_wkl": {
+ "key_count": 84,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"PrtSc", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"~", "x":0, "y":1.5},
+ {"label":"!", "x":1, "y":1.5},
+ {"label":"@", "x":2, "y":1.5},
+ {"label":"#", "x":3, "y":1.5},
+ {"label":"$", "x":4, "y":1.5},
+ {"label":"%", "x":5, "y":1.5},
+ {"label":"^", "x":6, "y":1.5},
+ {"label":"&", "x":7, "y":1.5},
+ {"label":"*", "x":8, "y":1.5},
+ {"label":"(", "x":9, "y":1.5},
+ {"label":")", "x":10, "y":1.5},
+ {"label":"_", "x":11, "y":1.5},
+ {"label":"+", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"PgUp", "x":17.25, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"{", "x":11.5, "y":2.5},
+ {"label":"}", "x":12.5, "y":2.5},
+ {"label":"|", "x":13.5, "y":2.5, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"PgDn", "x":17.25, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":":", "x":10.75, "y":3.5},
+ {"label":"\"", "x":11.75, "y":3.5},
+ {"label":"Enter", "x":12.75, "y":3.5, "w":2.25},
+ {"label":"Shift", "x":0, "y":4.5, "w":2.25},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":"<", "x":9.25, "y":4.5},
+ {"label":">", "x":10.25, "y":4.5},
+ {"label":"?", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.5},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.5},
+ {"label":"Space", "x":4, "y":5.5, "w":7},
+ {"label":"Alt", "x":11, "y":5.5, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5}
+ ]
+ },
+ "LAYOUT_tkl_iso": {
+ "key_count": 88,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"PrtSc", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"\u00ac", "x":0, "y":1.5},
+ {"label":"!", "x":1, "y":1.5},
+ {"label":"\"", "x":2, "y":1.5},
+ {"label":"\u00a3", "x":3, "y":1.5},
+ {"label":"$", "x":4, "y":1.5},
+ {"label":"%", "x":5, "y":1.5},
+ {"label":"^", "x":6, "y":1.5},
+ {"label":"&", "x":7, "y":1.5},
+ {"label":"*", "x":8, "y":1.5},
+ {"label":"(", "x":9, "y":1.5},
+ {"label":")", "x":10, "y":1.5},
+ {"label":"_", "x":11, "y":1.5},
+ {"label":"+", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"PgUp", "x":17.25, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"{", "x":11.5, "y":2.5},
+ {"label":"}", "x":12.5, "y":2.5},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"PgDn", "x":17.25, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":":", "x":10.75, "y":3.5},
+ {"label":"@", "x":11.75, "y":3.5},
+ {"label":"~", "x":12.75, "y":3.5},
+ {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2},
+ {"label":"Shift", "x":0, "y":4.5, "w":1.25},
+ {"label":"|", "x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":"<", "x":9.25, "y":4.5},
+ {"label":">", "x":10.25, "y":4.5},
+ {"label":"?", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.25},
+ {"label":"Win", "x":1.25, "y":5.5, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.25},
+ {"label":"Space", "x":3.75, "y":5.5, "w":6.25},
+ {"label":"AltGr", "x":10, "y":5.5, "w":1.25},
+ {"label":"Win", "x":11.25, "y":5.5, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":5.5, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":5.5, "w":1.25},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5}
+ ]
+ },
+ "LAYOUT_tkl_iso_wkl": {
+ "key_count": 85,
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"F1", "x":2, "y":0},
+ {"label":"F2", "x":3, "y":0},
+ {"label":"F3", "x":4, "y":0},
+ {"label":"F4", "x":5, "y":0},
+ {"label":"F5", "x":6.5, "y":0},
+ {"label":"F6", "x":7.5, "y":0},
+ {"label":"F7", "x":8.5, "y":0},
+ {"label":"F8", "x":9.5, "y":0},
+ {"label":"F9", "x":11, "y":0},
+ {"label":"F10", "x":12, "y":0},
+ {"label":"F11", "x":13, "y":0},
+ {"label":"F12", "x":14, "y":0},
+ {"label":"PrtSc", "x":15.25, "y":0},
+ {"label":"Scroll Lock", "x":16.25, "y":0},
+ {"label":"Pause", "x":17.25, "y":0},
+ {"label":"\u00ac", "x":0, "y":1.5},
+ {"label":"!", "x":1, "y":1.5},
+ {"label":"\"", "x":2, "y":1.5},
+ {"label":"\u00a3", "x":3, "y":1.5},
+ {"label":"$", "x":4, "y":1.5},
+ {"label":"%", "x":5, "y":1.5},
+ {"label":"^", "x":6, "y":1.5},
+ {"label":"&", "x":7, "y":1.5},
+ {"label":"*", "x":8, "y":1.5},
+ {"label":"(", "x":9, "y":1.5},
+ {"label":")", "x":10, "y":1.5},
+ {"label":"_", "x":11, "y":1.5},
+ {"label":"+", "x":12, "y":1.5},
+ {"label":"Backspace", "x":13, "y":1.5, "w":2},
+ {"label":"Insert", "x":15.25, "y":1.5},
+ {"label":"Home", "x":16.25, "y":1.5},
+ {"label":"PgUp", "x":17.25, "y":1.5},
+ {"label":"Tab", "x":0, "y":2.5, "w":1.5},
+ {"label":"Q", "x":1.5, "y":2.5},
+ {"label":"W", "x":2.5, "y":2.5},
+ {"label":"E", "x":3.5, "y":2.5},
+ {"label":"R", "x":4.5, "y":2.5},
+ {"label":"T", "x":5.5, "y":2.5},
+ {"label":"Y", "x":6.5, "y":2.5},
+ {"label":"U", "x":7.5, "y":2.5},
+ {"label":"I", "x":8.5, "y":2.5},
+ {"label":"O", "x":9.5, "y":2.5},
+ {"label":"P", "x":10.5, "y":2.5},
+ {"label":"{", "x":11.5, "y":2.5},
+ {"label":"}", "x":12.5, "y":2.5},
+ {"label":"Delete", "x":15.25, "y":2.5},
+ {"label":"End", "x":16.25, "y":2.5},
+ {"label":"PgDn", "x":17.25, "y":2.5},
+ {"label":"Caps Lock", "x":0, "y":3.5, "w":1.75},
+ {"label":"A", "x":1.75, "y":3.5},
+ {"label":"S", "x":2.75, "y":3.5},
+ {"label":"D", "x":3.75, "y":3.5},
+ {"label":"F", "x":4.75, "y":3.5},
+ {"label":"G", "x":5.75, "y":3.5},
+ {"label":"H", "x":6.75, "y":3.5},
+ {"label":"J", "x":7.75, "y":3.5},
+ {"label":"K", "x":8.75, "y":3.5},
+ {"label":"L", "x":9.75, "y":3.5},
+ {"label":":", "x":10.75, "y":3.5},
+ {"label":"@", "x":11.75, "y":3.5},
+ {"label":"~", "x":12.75, "y":3.5},
+ {"label":"Enter", "x":13.75, "y":2.5, "w":1.25, "h":2},
+ {"label":"Shift", "x":0, "y":4.5, "w":1.25},
+ {"label":"|", "x":1.25, "y":4.5},
+ {"label":"Z", "x":2.25, "y":4.5},
+ {"label":"X", "x":3.25, "y":4.5},
+ {"label":"C", "x":4.25, "y":4.5},
+ {"label":"V", "x":5.25, "y":4.5},
+ {"label":"B", "x":6.25, "y":4.5},
+ {"label":"N", "x":7.25, "y":4.5},
+ {"label":"M", "x":8.25, "y":4.5},
+ {"label":"<", "x":9.25, "y":4.5},
+ {"label":">", "x":10.25, "y":4.5},
+ {"label":"?", "x":11.25, "y":4.5},
+ {"label":"Shift", "x":12.25, "y":4.5, "w":2.75},
+ {"label":"Up", "x":16.25, "y":4.5},
+ {"label":"Ctrl", "x":0, "y":5.5, "w":1.5},
+ {"label":"Alt", "x":2.5, "y":5.5, "w":1.5},
+ {"label":"Space", "x":4, "y":5.5, "w":7},
+ {"label":"AltGr", "x":11, "y":5.5, "w":1.5},
+ {"label":"Ctrl", "x":13.5, "y":5.5, "w":1.5},
+ {"label":"Left", "x":15.25, "y":5.5},
+ {"label":"Down", "x":16.25, "y":5.5},
+ {"label":"Right", "x":17.25, "y":5.5}
+ ]
+ }
+ }
+}
+
diff --git a/keyboards/xmmx/keymaps/ansi_wk/keymap.c b/keyboards/xmmx/keymaps/ansi_wk/keymap.c
new file mode 100644
index 000000000..213f65a4a
--- /dev/null
+++ b/keyboards/xmmx/keymaps/ansi_wk/keymap.c
@@ -0,0 +1,14 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_tkl_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
+ )
+};
+
diff --git a/keyboards/xmmx/keymaps/ansi_wkl/keymap.c b/keyboards/xmmx/keymaps/ansi_wkl/keymap.c
new file mode 100644
index 000000000..d566f1a21
--- /dev/null
+++ b/keyboards/xmmx/keymaps/ansi_wkl/keymap.c
@@ -0,0 +1,14 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_tkl_ansi_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
+ )
+};
+
diff --git a/keyboards/xmmx/keymaps/default/keymap.c b/keyboards/xmmx/keymaps/default/keymap.c
index 6b0a11432..a4c38cd54 100644
--- a/keyboards/xmmx/keymaps/default/keymap.c
+++ b/keyboards/xmmx/keymaps/default/keymap.c
@@ -1,30 +1,14 @@
-#include "xmmx.h"
+#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- KEYMAP(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
+ LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, KC_NO, KC_NO, KC_NO, \
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_NO, KC_UP, KC_NO, \
KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
- )
+ )
};
-void led_set_user(uint8_t usb_led) {
-
- //LED1
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 6); PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
- }
-
- //LED2
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- DDRB |= (1 << 5); PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
- }
-}
diff --git a/keyboards/xmmx/keymaps/iso_wk/keymap.c b/keyboards/xmmx/keymaps/iso_wk/keymap.c
new file mode 100644
index 000000000..a71795ccf
--- /dev/null
+++ b/keyboards/xmmx/keymaps/iso_wk/keymap.c
@@ -0,0 +1,14 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_tkl_iso(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
+ )
+};
+
diff --git a/keyboards/xmmx/keymaps/iso_wkl/keymap.c b/keyboards/xmmx/keymaps/iso_wkl/keymap.c
new file mode 100644
index 000000000..d40257177
--- /dev/null
+++ b/keyboards/xmmx/keymaps/iso_wkl/keymap.c
@@ -0,0 +1,14 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT_tkl_iso_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, \
+ KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
+ )
+};
+
diff --git a/keyboards/xmmx/keymaps/toad/keymap.c b/keyboards/xmmx/keymaps/toad/keymap.c
deleted file mode 100644
index c13dc8f67..000000000
--- a/keyboards/xmmx/keymaps/toad/keymap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "xmmx.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- TOAD_KEYMAP(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, \
- KC_LSFT,KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, \
- KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL
- )
-};
-
-void led_set_user(uint8_t usb_led) {
-
- //LED1
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 6); PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
- }
-
- //LED2
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- DDRB |= (1 << 5); PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
- }
-}
diff --git a/keyboards/xmmx/keymaps/toad_ansi_wk/keymap.c b/keyboards/xmmx/keymaps/toad_ansi_wk/keymap.c
deleted file mode 100644
index 5e61dfffb..000000000
--- a/keyboards/xmmx/keymaps/toad_ansi_wk/keymap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "xmmx.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- TOAD_KEYMAP_ANSI_WK(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
- KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL
- )
-};
-
-void led_set_user(uint8_t usb_led) {
-
- //LED1
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 6); PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
- }
-
- //LED2
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- DDRB |= (1 << 5); PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
- }
-}
diff --git a/keyboards/xmmx/keymaps/toad_ansi_wkl/keymap.c b/keyboards/xmmx/keymaps/toad_ansi_wkl/keymap.c
deleted file mode 100644
index 7778b0652..000000000
--- a/keyboards/xmmx/keymaps/toad_ansi_wkl/keymap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "xmmx.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- TOAD_KEYMAP_ANSI_WKL(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
- KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
- )
-};
-
-void led_set_user(uint8_t usb_led) {
-
- //LED1
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 6); PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
- }
-
- //LED2
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- DDRB |= (1 << 5); PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
- }
-}
diff --git a/keyboards/xmmx/keymaps/toad_iso_wk/keymap.c b/keyboards/xmmx/keymaps/toad_iso_wk/keymap.c
deleted file mode 100644
index c51ff862a..000000000
--- a/keyboards/xmmx/keymaps/toad_iso_wk/keymap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "xmmx.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- TOAD_KEYMAP_ISO_WK(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, \
- KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
- KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL
- )
-};
-
-void led_set_user(uint8_t usb_led) {
-
- //LED1
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 6); PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
- }
-
- //LED2
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- DDRB |= (1 << 5); PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
- }
-}
diff --git a/keyboards/xmmx/keymaps/toad_iso_wkl/keymap.c b/keyboards/xmmx/keymaps/toad_iso_wkl/keymap.c
deleted file mode 100644
index efcebc713..000000000
--- a/keyboards/xmmx/keymaps/toad_iso_wkl/keymap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "xmmx.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- TOAD_KEYMAP_ISO_WKL(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, \
- KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, \
- KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
- )
-};
-
-void led_set_user(uint8_t usb_led) {
-
- //LED1
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 6); PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
- }
-
- //LED2
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- DDRB |= (1 << 5); PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
- }
-}
diff --git a/keyboards/xmmx/keymaps/xmmx_ansi_wk/keymap.c b/keyboards/xmmx/keymaps/xmmx_ansi_wk/keymap.c
deleted file mode 100644
index 20d55c1fd..000000000
--- a/keyboards/xmmx/keymaps/xmmx_ansi_wk/keymap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "xmmx.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- KEYMAP_ANSI_WK(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
- )
-};
-
-void led_set_user(uint8_t usb_led) {
-
- //LED1
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 6); PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
- }
-
- //LED2
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- DDRB |= (1 << 5); PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
- }
-}
diff --git a/keyboards/xmmx/keymaps/xmmx_ansi_wkl/keymap.c b/keyboards/xmmx/keymaps/xmmx_ansi_wkl/keymap.c
deleted file mode 100644
index 3c8ba436f..000000000
--- a/keyboards/xmmx/keymaps/xmmx_ansi_wkl/keymap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "xmmx.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- KEYMAP_ANSI_WKL(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_ENT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
- )
-};
-
-void led_set_user(uint8_t usb_led) {
-
- //LED1
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 6); PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
- }
-
- //LED2
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- DDRB |= (1 << 5); PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
- }
-}
diff --git a/keyboards/xmmx/keymaps/xmmx_iso_wk/keymap.c b/keyboards/xmmx/keymaps/xmmx_iso_wk/keymap.c
deleted file mode 100644
index ee68253c7..000000000
--- a/keyboards/xmmx/keymaps/xmmx_iso_wk/keymap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "xmmx.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- KEYMAP_ISO_WK(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, \
- KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL,KC_LGUI,KC_LALT, KC_SPC, KC_RALT,KC_RGUI, KC_APP,KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
- )
-};
-
-void led_set_user(uint8_t usb_led) {
-
- //LED1
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 6); PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
- }
-
- //LED2
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- DDRB |= (1 << 5); PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
- }
-}
diff --git a/keyboards/xmmx/keymaps/xmmx_iso_wkl/keymap.c b/keyboards/xmmx/keymaps/xmmx_iso_wkl/keymap.c
deleted file mode 100644
index c27914e45..000000000
--- a/keyboards/xmmx/keymaps/xmmx_iso_wkl/keymap.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "xmmx.h"
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- KEYMAP_ISO_WKL(
- KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0,KC_MINS, KC_EQL, KC_BSPC, KC_INS,KC_HOME, KC_PGUP, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN, \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,KC_QUOT, KC_NUHS, KC_ENT, \
- KC_LSFT, KC_NUBS,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
- KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT,KC_DOWN,KC_RGHT
- )
-};
-
-void led_set_user(uint8_t usb_led) {
-
- //LED1
- if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
- DDRB |= (1 << 6); PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
- }
-
- //LED2
- if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
- DDRB |= (1 << 5); PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
- }
-}
diff --git a/keyboards/xmmx/readme.md b/keyboards/xmmx/readme.md
index cf16231e1..51775f241 100644
--- a/keyboards/xmmx/readme.md
+++ b/keyboards/xmmx/readme.md
@@ -1,20 +1,14 @@
-XMMX and Toad
-========
+# XMMX
-XMMX: Tenkeyless Mechanical Keyboard PCB designed to fit Filco Majestouch TKL and Cooler Master Quickfire Rapid cases
-Toad: 70% Mechanical Keyboard PCB.
+XMMX is a Tenkeyless Mechanical Keyboard PCB designed to fit Filco Majestouch TKL and Cooler Master Quickfire Rapid cases.
-XMMX schematic and PCB are available opensource under Creative Commons BY-SA 3.0 license on EasyEDA at [this link](https://easyeda.com/farmakon/XMMX-0447d28c1e4644b88fd04905d983684d)
-Toad schematic and PCB are available opensource under Creative Commons BY-SA 3.0 license on EasyEDA at [this link](https://easyeda.com/farmakon/70_Keyboard-d4f6baf4792d4ada9c0571fa3713e461)
+XMMX schematic and PCB are available opensource under Creative Commons BY-SA 3.0 license on EasyEDA at [this link](https://easyeda.com/farmakon/XMMX-0447d28c1e4644b88fd04905d983684d).
-For more informations on the XMMX please visit this [geekhack.org thread](https://geekhack.org/index.php?topic=93422.0)
-For more informations on the Toad please visit this [geekhack.org thread](https://geekhack.org/index.php?topic=91388.0)
+For more informations on the XMMX please visit [this geekhack.org thread](https://geekhack.org/index.php?topic=93422.0).
-Make examples for these keyboards (after setting up your build environment):
+Make example for this keyboard (after setting up your build environment):
make xmmx:default
- make xmmx:toad
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
-
-See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/xmmx/xmmx.c b/keyboards/xmmx/xmmx.c
index 399ae4eb4..4d410e90a 100644
--- a/keyboards/xmmx/xmmx.c
+++ b/keyboards/xmmx/xmmx.c
@@ -1 +1,18 @@
#include "xmmx.h"
+
+void led_set_user(uint8_t usb_led) {
+
+ //LED1
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ DDRB |= (1 << 6); PORTB &= ~(1 << 6);
+ } else {
+ DDRB &= ~(1 << 6); PORTB &= ~(1 << 6);
+ }
+
+ //LED2
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ DDRB |= (1 << 5); PORTB &= ~(1 << 5);
+ } else {
+ DDRB &= ~(1 << 5); PORTB &= ~(1 << 5);
+ }
+}
diff --git a/keyboards/xmmx/xmmx.h b/keyboards/xmmx/xmmx.h
index ad6ae3014..82c3fb588 100644
--- a/keyboards/xmmx/xmmx.h
+++ b/keyboards/xmmx/xmmx.h
@@ -1,10 +1,9 @@
-#ifndef XMMX
-#define XMMX
+#pragma once
#include "quantum.h"
// 80% keyboard: default - all keys
-#define KEYMAP( \
+#define LAYOUT_all( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K013, K114, K115, K116, \
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \
@@ -21,7 +20,7 @@
}
// 80% keyboard: ANSI Winkey
-#define KEYMAP_ANSI_WK( \
+#define LAYOUT_tkl_ansi( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \
@@ -38,7 +37,7 @@
}
// 80% keyboard: ANSI Winkeyless
-#define KEYMAP_ANSI_WKL( \
+#define LAYOUT_tkl_ansi_wkl( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K215, K216, \
@@ -55,7 +54,7 @@
}
// 80% keyboard: ISO Winkey
-#define KEYMAP_ISO_WK( \
+#define LAYOUT_tkl_iso( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, \
@@ -72,7 +71,7 @@
}
// 80% keyboard: ISO Winkeyless
-#define KEYMAP_ISO_WKL( \
+#define LAYOUT_tkl_iso_wkl( \
K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K014, K015, K016, \
K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, \
K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K214, K215, K216, \
@@ -88,90 +87,3 @@
{ K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513, K514, K515, K516 } \
}
-
-// 70% keyboard: default - all keys
-#define TOAD_KEYMAP( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \
- K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K013, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
- K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413, \
- K500, K501, K502, K507, K510, K511, K512, K513 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
- { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113 }, \
- { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
- { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, K413 }, \
- { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \
-}
-
-// 70% keyboard: ANSI Winkey
-#define TOAD_KEYMAP_ANSI_WK( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \
- K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
- K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \
- K500, K501, K502, K507, K510, K511, K512, K513 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
- { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \
- { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO,K313 }, \
- { K400, KC_NO,K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \
- { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \
-}
-
-// 70% keyboard: ANSI Winkeyless
-#define TOAD_KEYMAP_ANSI_WKL( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \
- K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K313, \
- K400, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \
- K500, K502, K507, K511, K513 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
- { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \
- { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213 }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, KC_NO,K313 }, \
- { K400, KC_NO,K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \
- { K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513 } \
-}
-
-// 70% keyboard: ISO Winkey
-#define TOAD_KEYMAP_ISO_WK( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \
- K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
- K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \
- K500, K501, K502, K507, K510, K511, K512, K513 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
- { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \
- { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO}, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
- { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \
- { K500, K501, K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,K510, K511, K512, K513 } \
-}
-
-// 70% keyboard: ISO Winkeyless
-#define TOAD_KEYMAP_ISO_WKL( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, \
- K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K013, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, \
- K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, \
- K500, K502, K507, K511, K513 \
-) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013 }, \
- { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, KC_NO}, \
- { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, KC_NO}, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313 }, \
- { K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411, K412, KC_NO}, \
- { K500, KC_NO,K502, KC_NO,KC_NO,KC_NO,KC_NO,K507, KC_NO,KC_NO,KC_NO,K511, KC_NO,K513 } \
-}
-
-#endif
diff --git a/keyboards/yd68/config.h b/keyboards/yd68/config.h
new file mode 100644
index 000000000..1b4d7f7a1
--- /dev/null
+++ b/keyboards/yd68/config.h
@@ -0,0 +1,224 @@
+/*
+Copyright 2018 Ryan "Izzy" Bales
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should 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 0x0002
+#define MANUFACTURER YANG
+#define PRODUCT YD68v2
+#define DESCRIPTION 65% board with Bluetooth
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+#define MATRIX_ROW_PINS { B5, C6, C7, D7, B4 }
+#define MATRIX_COL_PINS { B6, F7, F6, F5, F4, F1, F0, E6, B0, B7, D0, D1, D2, D3, D5 }
+#define UNUSED_PINS
+
+/* COL2ROW, ROW2COL, or CUSTOM_MATRIX */
+#define DIODE_DIRECTION COL2ROW
+
+// #define BACKLIGHT_PIN B7
+// #define BACKLIGHT_BREATHING
+// #define BACKLIGHT_LEVELS 3
+
+#define RGB_DI_PIN B3
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 10
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCING_DELAY 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Magic Key Options
+ *
+ * Magic keys are hotkey commands that allow control over firmware functions of
+ * the keyboard. They are best used in combination with the HID Listen program,
+ * found here: https://www.pjrc.com/teensy/hid_listen.html
+ *
+ * The options below allow the magic key functionality to be changed. This is
+ * useful if your keyboard/keypad is missing keys and you want magic key support.
+ *
+ */
+
+/* key combination for magic key command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* control how magic key switches layers */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
+
+/* override magic key keymap */
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
+//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
+//#define MAGIC_KEY_HELP1 H
+//#define MAGIC_KEY_HELP2 SLASH
+//#define MAGIC_KEY_DEBUG D
+//#define MAGIC_KEY_DEBUG_MATRIX X
+//#define MAGIC_KEY_DEBUG_KBD K
+//#define MAGIC_KEY_DEBUG_MOUSE M
+//#define MAGIC_KEY_VERSION V
+//#define MAGIC_KEY_STATUS S
+//#define MAGIC_KEY_CONSOLE C
+//#define MAGIC_KEY_LAYER0_ALT1 ESC
+//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
+//#define MAGIC_KEY_LAYER0 0
+//#define MAGIC_KEY_LAYER1 1
+//#define MAGIC_KEY_LAYER2 2
+//#define MAGIC_KEY_LAYER3 3
+//#define MAGIC_KEY_LAYER4 4
+//#define MAGIC_KEY_LAYER5 5
+//#define MAGIC_KEY_LAYER6 6
+//#define MAGIC_KEY_LAYER7 7
+//#define MAGIC_KEY_LAYER8 8
+//#define MAGIC_KEY_LAYER9 9
+//#define MAGIC_KEY_BOOTLOADER PAUSE
+//#define MAGIC_KEY_LOCK CAPS
+//#define MAGIC_KEY_EEPROM E
+//#define MAGIC_KEY_NKRO N
+//#define MAGIC_KEY_SLEEP_LED Z
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+/*
+ * MIDI options
+ */
+
+/* Prevent use of disabled MIDI features in the keymap */
+//#define MIDI_ENABLE_STRICT 1
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+//#define MIDI_ADVANCED
+
+/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
+//#define MIDI_TONE_KEYCODE_OCTAVES 1
+
+/*
+ * HD44780 LCD Display Configuration
+ */
+/*
+#define LCD_LINES 2 //< number of visible lines of the display
+#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
+
+#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
+
+#if LCD_IO_MODE
+#define LCD_PORT PORTB //< port for the LCD lines
+#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
+#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
+#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
+#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
+#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
+#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
+#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
+#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
+#define LCD_RS_PORT LCD_PORT //< port for RS line
+#define LCD_RS_PIN 3 //< pin for RS line
+#define LCD_RW_PORT LCD_PORT //< port for RW line
+#define LCD_RW_PIN 2 //< pin for RW line
+#define LCD_E_PORT LCD_PORT //< port for Enable line
+#define LCD_E_PIN 1 //< pin for Enable line
+#endif
+*/
+
diff --git a/keyboards/yd68/info.json b/keyboards/yd68/info.json
new file mode 100644
index 000000000..b392f0386
--- /dev/null
+++ b/keyboards/yd68/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "YD68",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_ansi": {
+ "key_count": 68,
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"x":15, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"x":15, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"Win", "x":11, "y":4}, {"x":12, "y":4}, {"x":13, "y":4}, {"x":14, "y":4}, {"x":15, "y":4}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/yd68/keymaps/default/config.h b/keyboards/yd68/keymaps/default/config.h
new file mode 100644
index 000000000..405f93550
--- /dev/null
+++ b/keyboards/yd68/keymaps/default/config.h
@@ -0,0 +1,19 @@
+/* Copyright 2018 Ryan "Izzy" Bales
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should 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/yd68/keymaps/default/keymap.c b/keyboards/yd68/keymaps/default/keymap.c
new file mode 100644
index 000000000..290aa0d61
--- /dev/null
+++ b/keyboards/yd68/keymaps/default/keymap.c
@@ -0,0 +1,65 @@
+/* Copyright 2018 Ryan "Izzy" Bales
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You 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 {
+ YD68_BT_PWR = SAFE_RANGE,
+ YD68_RGB_PWR,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ansi( /* Base */
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,KC_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,KC_RGUI,KC_RCTRL,KC_LEFT,KC_DOWN,KC_RGHT \
+ ),
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case YD68_BT_PWR:
+ if (record->event.pressed) {
+ // when keycode YD68_BT_PWR is pressed
+ } else {
+ // when keycode YD68_BT_PWR is released
+ }
+ break;
+ case YD68_RGB_PWR:
+ if (record->event.pressed) {
+ // when keycode YD68_RGB_PWR is pressed
+ PORTE ^= (1<<2);
+ } else {
+ // when keycode YD68_RGB_PWR 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/yd68/keymaps/default/readme.md b/keyboards/yd68/keymaps/default/readme.md
new file mode 100644
index 000000000..877e64f18
--- /dev/null
+++ b/keyboards/yd68/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for yd68 \ No newline at end of file
diff --git a/keyboards/yd68/readme.md b/keyboards/yd68/readme.md
new file mode 100644
index 000000000..7e5e83bcc
--- /dev/null
+++ b/keyboards/yd68/readme.md
@@ -0,0 +1,15 @@
+# yd68
+
+[yd68](https://imgur.com/gallery/Ygo668L)
+
+A 68-key board with RGB underlighting and bluetooth.
+
+Keyboard Maintainer: [Izzy84075](https://github.com/izzy84075)
+Hardware Supported: YD68/YD68v2
+Hardware Availability: [KBDFans](https://kbdfans.cn/collections/diy-kit/products/yd68-65-bluetooth-custom-keyboard-pcb)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make yd68: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/yd68/rules.mk b/keyboards/yd68/rules.mk
new file mode 100644
index 000000000..197402e8a
--- /dev/null
+++ b/keyboards/yd68/rules.mk
@@ -0,0 +1,81 @@
+# MCU name
+#MCU = at90usb1286
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+
+# Bootloader selection
+# Teensy halfkay
+# Pro Micro caterina
+# Atmel DFU atmel-dfu
+# LUFA DFU lufa-dfu
+# QMK DFU qmk-dfu
+# atmega32a bootloadHID
+BOOTLOADER = atmel-dfu
+
+
+# If you don't know the bootloader type, then you can specify the
+# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
+# Teensy halfKay 512
+# Teensy++ halfKay 1024
+# Atmel DFU loader 4096
+# LUFA bootloader 4096
+# USBaspLoader 2048
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = no # USB Nkey Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+AUDIO_ENABLE = no # Audio output on port C6
+FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
+HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
diff --git a/keyboards/yd68/yd68.c b/keyboards/yd68/yd68.c
new file mode 100644
index 000000000..f34661dd3
--- /dev/null
+++ b/keyboards/yd68/yd68.c
@@ -0,0 +1,73 @@
+/* Copyright 2018 Ryan "Izzy" Bales
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "yd68.h"
+
+void matrix_init_kb(void) {
+ // put your keyboard start-up code here
+ // runs once when the firmware starts up
+
+ //Capslock LED Output Low
+ DDRD |= (1<<4);
+ PORTD &= ~(1<<4);
+
+ //Backlight LEDs Output Low
+ DDRD |= (1<<6);
+ PORTD &= ~(1<<6);
+
+ //RGB power output low
+ DDRE |= (1<<2);
+ PORTE &= ~(1<<2);
+
+ //Bluetooth power output high
+ DDRB |= (1<<2);
+ PORTB |= (1<<2);
+
+ //RGB data output low
+ DDRB |= (1<<3);
+ PORTB &= ~(1<<3);
+
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void) {
+ // put your looping keyboard code here
+ // runs every cycle (a lot)
+
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
+ // put your per-action keyboard code here
+ // runs for every action, just before processing by the firmware
+
+ return process_record_user(keycode, record);
+}
+
+void led_set_kb(uint8_t usb_led) {
+ // put your keyboard LED indicator (ex: Caps Lock LED) toggling code here
+
+ if (usb_led & (1<<USB_LED_CAPS_LOCK)) {
+ // output low
+ DDRD |= (1<<4);
+ PORTD &= ~(1<<4);
+ } else {
+ // output high
+ DDRD |= (1<<4);
+ PORTD |= (1<<4);
+ }
+
+ led_set_user(usb_led);
+}
diff --git a/keyboards/yd68/yd68.h b/keyboards/yd68/yd68.h
new file mode 100644
index 000000000..d5d98dec0
--- /dev/null
+++ b/keyboards/yd68/yd68.h
@@ -0,0 +1,62 @@
+/* Copyright 2018 Ryan "Izzy" Bales
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * 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 YD68_H
+#define YD68_H
+
+#include "quantum.h"
+
+#define XXX KC_NO
+
+/* This a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+/* YD68 ANSI layout
+ * ,----------------------------------------------------------------.
+ * | 00 |01| 02| 03| 04| 05| 06| 07| 08| 09| 0a| 0b| 0c| 0e | 48 |
+ * |----------------------------------------------------------------|
+ * | 10 | 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1c| 1d | 1e |
+ * |----------------------------------------------------------------|
+ * | 20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2d | 2e |
+ * |----------------------------------------------------------------|
+ * | 30 | 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3c | 3d| 3e |
+ * |----------------------------------------------------------------|
+ * | 40 | 41 | 42 | 46 | 49| 4a| 4b| 4c| 4d| 4e |
+ * `----------------------------------------------------------------'
+ */
+// The first section contains all of the arguments
+// The second converts the arguments into a two-dimensional array
+
+#define LAYOUT_ansi( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0e, k48, \
+ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
+ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2d, k2e, \
+ k30, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e, \
+ k40, k41, k42, k46, k49, k4a, k4b, k4c, k4d, k4e \
+) \
+{ \
+ {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, XXX, k0e}, \
+ {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e}, \
+ {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, XXX, k2d, k2e}, \
+ {k30, XXX, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, k3e}, \
+ {k40, k41, k42, XXX, XXX, XXX, k46, XXX, k48, k49, k4a, k4b, k4c, k4d, k4e} \
+}
+
+#endif
diff --git a/keyboards/ymd96/README.md b/keyboards/ymd96/README.md
index 7a950223b..9cb376058 100644
--- a/keyboards/ymd96/README.md
+++ b/keyboards/ymd96/README.md
@@ -31,17 +31,23 @@ This firmware was modified from [ps2avrGB](https://github.com/qmk/qmk_firmware/t
## Installing and Building
-Since the YMD96 uses an ATmega32a chip instead of the 32u4, you need to download [HIDBootFlash v.1.0](http://vusb.wikidot.com/project:hidbootflash) for Windows. If anyone knows of a Linux/Mac bootflasher that works, edit this readme!
+Since the YMD96 uses an ATmega32a chip instead of the 32u4, you need to download [HIDBootFlash v.1.0](http://vusb.wikidot.com/project:hidbootflash) for Windows. For Linux you can use the [bootloadHID](https://www.obdev.at/products/vusb/bootloadhid.html) utility (which will require building). Arch Linux users can alternatively install this from the [AUR](https://aur.archlinux.org/packages/bootloadhid/).
On Windows, I use [MINGw](http://www.mingw.org/) to compile the keymaps. On Linux, you can simply use the terminal.
Once you have those two pieces of software:
-Build the keyboard with
+Build the keyboard by navigating to the root folder of the QMK repo and running
```
-$ make ymd96-default
+$ make ymd96:default
```
If you make your own layout, change the `default` word to whatever your layout is.
-And flash the compiled hex file with `HIDBootFlash`. Simply put the board in flashing mode by plugging it in while holding control, and click `find device`. Then you can specify the .hex file and flash it to the device.
+To flash the compiled hex file, simply put the board in flashing mode by plugging it in while holding control.
+In `HIDBootFlash` first click `find device`, then you can specify the .hex file and flash it to the device.
+For `bootloadHID`, from a terminal that is in the same folder as your firmware file, run
+```
+$ sudo bootloadHID ymd96_default.hex
+```
+Again replacing default with your custom keymap name if required.
## Troubleshooting
diff --git a/keyboards/ymd96/config.h b/keyboards/ymd96/config.h
index 3122c694e..1e9497fac 100644
--- a/keyboards/ymd96/config.h
+++ b/keyboards/ymd96/config.h
@@ -23,7 +23,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define VENDOR_ID 0x20A0
#define PRODUCT_ID 0x422D
-// TODO: share these strings with usbconfig.h
// Edit usbconfig.h to change these.
#define MANUFACTURER ymdkey
#define PRODUCT ymd96
diff --git a/keyboards/ymd96/keymaps/AnthonyWharton/README.md b/keyboards/ymd96/keymaps/AnthonyWharton/README.md
new file mode 100644
index 000000000..973e336cb
--- /dev/null
+++ b/keyboards/ymd96/keymaps/AnthonyWharton/README.md
@@ -0,0 +1,16 @@
+# Personal Config by @AnthonyWharton
+
+The keymap and layout macro's in the main repository are for the following
+keyboard:
+
+![@AnthonyWharton's YMD96](https://i.imgur.com/uhKmkBz.jpg)
+
+**Note:** This setup has locking Caps Lock and Num Lock keys, so if you wish
+to use this layout and do not have such keys, you should :
+
+ - Change the keys `KC_LCAP` and `KC_LNUM` to `KC_CAPS` and `KC_NUMLOCK`
+ respectively.
+ - Remove the `LOCKING_SUPPORT_ENABLE` and `LOCKING_RESYNC_ENABLE` lines
+ from `config.h`.
+
+For any other questions, find my latest contact information on my github page.
diff --git a/keyboards/ymd96/keymaps/AnthonyWharton/config.h b/keyboards/ymd96/keymaps/AnthonyWharton/config.h
new file mode 100644
index 000000000..715e2c9a5
--- /dev/null
+++ b/keyboards/ymd96/keymaps/AnthonyWharton/config.h
@@ -0,0 +1,63 @@
+/*
+Base Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+Modified 2017 Andrew Novak <ndrw.nvk@gmail.com>
+Modified 2018 Anthony Wharton <th3ant@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#define VENDOR_ID 0x20A0
+#define PRODUCT_ID 0x422D
+// Edit usbconfig.h to change these.
+#define MANUFACTURER ymdkey
+#define PRODUCT ymd96
+
+/* Matrix Size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 15
+#define DIODE_DIRECTION COL2ROW
+
+/* Required for MX Locks installed */
+#define LOCKING_SUPPORT_ENABLE
+#define LOCKING_RESYNC_ENABLE
+
+#define PREVENT_STUCK_MODIFIERS
+#define TAPPING_TOGGLE 3
+#define NO_UART 1
+
+#define BACKLIGHT_LEVELS 12
+
+/* RGB Underglow */
+// The RGB_DI_PING value seems to be shared between all PS2AVRGB boards.
+// The same pin is used on the JJ40, at least.
+#define RGBLED_NUM 18
+#define RGB_DI_PIN E2 // NOTE: for PS2AVRGB boards, underglow commands are send
+ // via I2C to 0xB0
+
+#define RGBLIGHT_ANIMATIONS
+
+#define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1.0-2.7
+#define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 1-255
+#define RGBLIGHT_EFFECT_SNAKE_LENGTH 7
+#define RGBLIGHT_EFFECT_KNIGHT_LENGTH 3
+#define RGBLIGHT_EFFECT_KNIGHT_OFFSET 0
+#define RGBLIGHT_EFFECT_KNIGHT_LED_NUM RGBLED_NUM
+#define RGBLIGHT_EFFECT_CHRISTMAS_STEP 1
+#define RGBLIGHT_EFFECT_CHRISTMAS_INTERVAL 500
+
+/* key combination for command */
+#define IS_COMMAND() (keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
+
diff --git a/keyboards/ymd96/keymaps/AnthonyWharton/keymap.c b/keyboards/ymd96/keymaps/AnthonyWharton/keymap.c
new file mode 100644
index 000000000..2b3e2e2c7
--- /dev/null
+++ b/keyboards/ymd96/keymaps/AnthonyWharton/keymap.c
@@ -0,0 +1,47 @@
+/*
+Base Copyright 2017 Luiz Ribeiro <luizribeiro@gmail.com>
+Modified 2017 Andrew Novak <ndrw.nvk@gmail.com>
+Modified 2018 Anthony Wharton <th3ant@gmail.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public LicensezZZ
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include QMK_KEYBOARD_H
+
+#define _DEFLT 0
+#define _RAISE 1
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ /* Layer 0, default layer */
+ [_DEFLT] = LAYOUT_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_HOME, KC_END, KC_INS, KC_DEL, KC_PGUP, \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_LNUM, KC_PSLS, KC_PAST, KC_PGDN, \
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_P7, KC_P8, KC_P9, KC_PMNS, \
+ KC_LCAP, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_P4, KC_P5, KC_P6, KC_PPLS, \
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(_RAISE), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT \
+ ),
+
+ /* Layer 1, raise layer */
+ [_RAISE] = LAYOUT_iso(
+ _______, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17, KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24, _______, KC_PAUS, KC_SLCK, _______, _______, _______, \
+ _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW,RGB_M_SN,RGB_M_K, RGB_M_X, RGB_M_G, BL_OFF, BL_ON, BL_DEC, BL_INC, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_VAD, RGB_VAI, KC_MUTE, _______, KC_VOLU, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_TOG, BL_TOGG, KC_MPRV, KC_MPLY, KC_MNXT, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, KC_VOLD, _______, KC_LOCK, \
+ _______, _______, KC_RALT, _______, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, _______ \
+ )
+};
diff --git a/keyboards/ymd96/keymaps/hgoel89/config.h b/keyboards/ymd96/keymaps/hgoel89/config.h
index 52aaa8f24..b1d74e1e6 100644
--- a/keyboards/ymd96/keymaps/hgoel89/config.h
+++ b/keyboards/ymd96/keymaps/hgoel89/config.h
@@ -3,7 +3,6 @@
#include "../../config.h"
-#define PREVENT_STUCK_MODIFIERS
#define TAPPING_TERM 300
#endif
diff --git a/keyboards/ymd96/matrix.c b/keyboards/ymd96/matrix.c
index f2ecf4d33..2932976dd 100644
--- a/keyboards/ymd96/matrix.c
+++ b/keyboards/ymd96/matrix.c
@@ -50,20 +50,8 @@ void matrix_init(void) {
matrix[row] = 0x00;
matrix_debouncing[row] = 0x00;
}
-/*}
matrix_init_quantum(); // missing from original port by Luiz
-void matrix_set_row_status(uint8_t row) {
- DDRB = (1 << row);
- PORTB = ~(1 << row);
-}*/
-
-
-/*uint8_t bit_reverse(uint8_t x) {
- x = ((x >> 1) & 0x55) | ((x << 1) & 0xaa);
- x = ((x >> 2) & 0x33) | ((x << 2) & 0xcc);
- x = ((x >> 4) & 0x0f) | ((x << 4) & 0xf0);
- return x;*/
}
uint8_t matrix_scan(void) {
diff --git a/keyboards/ymd96/rules.mk b/keyboards/ymd96/rules.mk
index 42b3d1155..1cc4060b0 100644
--- a/keyboards/ymd96/rules.mk
+++ b/keyboards/ymd96/rules.mk
@@ -35,7 +35,7 @@ BOOTMAGIC_ENABLE = no
MOUSEKEY_ENABLE = no
EXTRAKEY_ENABLE = yes
CONSOLE_ENABLE = no
-COMMAND_ENABLE = yes
+COMMAND_ENABLE = no
BACKLIGHT_ENABLE = yes
BACKLIGHT_CUSTOM_DRIVER = yes
diff --git a/keyboards/ymd96/usbconfig.h b/keyboards/ymd96/usbconfig.h
index 50fe4ed11..a90a36f08 100644
--- a/keyboards/ymd96/usbconfig.h
+++ b/keyboards/ymd96/usbconfig.h
@@ -242,8 +242,8 @@ section at the end of this file).
#define USB_CFG_DEVICE_VERSION 0x00, 0x02
/* Version number of the device: Minor number first, then major number.
*/
-#define USB_CFG_VENDOR_NAME 'w', 'i', 'n', 'k', 'e', 'y', 'l', 'e', 's', 's', '.', 'k', 'r'
-#define USB_CFG_VENDOR_NAME_LEN 13
+#define USB_CFG_VENDOR_NAME 'y','m','d','k','e','y'
+#define USB_CFG_VENDOR_NAME_LEN 6
/* 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.
@@ -252,8 +252,8 @@ section at the end of this file).
* obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
* details.
*/
-#define USB_CFG_DEVICE_NAME 'p', 's', '2', 'a', 'v', 'r', 'G', 'B'
-#define USB_CFG_DEVICE_NAME_LEN 8
+#define USB_CFG_DEVICE_NAME 'y','m','d','9','6'
+#define USB_CFG_DEVICE_NAME_LEN 5
/* 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.
diff --git a/keyboards/ymd96/ymd96.h b/keyboards/ymd96/ymd96.h
index ee0926eee..9c25f2219 100644
--- a/keyboards/ymd96/ymd96.h
+++ b/keyboards/ymd96/ymd96.h
@@ -76,5 +76,22 @@ K411, K410, K409, K408, K404, K405, K406, K407, K403, K402, K401, K400 \
{ K400, K401, K402, K403, K404, K405, K406, K407, K408, K409, K410, K411 }, \
}
+#define LAYOUT_iso( \
+ K0500, K0502, K0503, K0504, K0505, K0600, K0610, K0710, K0700, K0511, K0512, K0513, K0514, K0113, K0214, K0013, K0706, K0709, K0708, \
+ K0400, K0401, K0402, K0403, K0404, K0405, K0601, K0611, K0711, K0701, K0410, K0411, K0412, K0414, K0406, K0407, K0408, K0409, \
+ K0300, K0301, K0302, K0303, K0304, K0305, K0602, K0612, K0712, K0702, K0310, K0311, K0312, K0213, K0306, K0307, K0308, K0309, \
+ K0200, K0201, K0202, K0203, K0204, K0205, K0603, K0613, K0713, K0703, K0210, K0211, K0212, K0206, K0207, K0208, K0209, \
+ K0100, K0003, K0101, K0102, K0103, K0104, K0105, K0604, K0614, K0714, K0704, K0110, K0111, K0608, K0106, K0107, K0108, K0009, \
+ K0000, K0001, K0002, K0605, K0705, K0011, K0606, K0607, K0609, K0006, K0008 \
+) { \
+ { K0000, K0001, K0002, K0003, KC_NO, KC_NO, K0006, KC_NO, K0008, K0009, KC_NO, K0011, KC_NO, K0013, KC_NO, }, \
+ { K0100, K0101, K0102, K0103, K0104, K0105, K0106, K0107, K0108, KC_NO, K0110, K0111, KC_NO, K0113, KC_NO, }, \
+ { K0200, K0201, K0202, K0203, K0204, K0205, K0206, K0207, K0208, K0209, K0210, K0211, K0212, K0213, K0214, }, \
+ { K0300, K0301, K0302, K0303, K0304, K0305, K0306, K0307, K0308, K0309, K0310, K0311, K0312, KC_NO, KC_NO, }, \
+ { K0400, K0401, K0402, K0403, K0404, K0405, K0406, K0407, K0408, K0409, K0410, K0411, K0412, KC_NO, K0414, }, \
+ { K0500, KC_NO, K0502, K0503, K0504, K0505, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K0511, K0512, K0513, K0514, }, \
+ { K0600, K0601, K0602, K0603, K0604, K0605, K0606, K0607, K0608, K0609, K0610, K0611, K0612, K0613, K0614, }, \
+ { K0700, K0701, K0702, K0703, K0704, K0705, K0706, KC_NO, K0708, K0709, K0710, K0711, K0712, K0713, K0714 } \
+}
#endif
diff --git a/keyboards/ymdk_np21/keymaps/default/keymap.c b/keyboards/ymdk_np21/keymaps/default/keymap.c
index e79d326b7..3ade30479 100644
--- a/keyboards/ymdk_np21/keymaps/default/keymap.c
+++ b/keyboards/ymdk_np21/keymaps/default/keymap.c
@@ -1,5 +1,4 @@
-#include "ymdk_np21.h"
-#include "action_layer.h"
+#include QMK_KEYBOARD_H
#define _NP 0
#define _BL 1
@@ -21,7 +20,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Enter| Enter| + | + | - | FN |
* `-----------------------------------------'
*/
-[_NP] = KEYMAP( \
+[_NP] = LAYOUT( \
KC_KP_0, KC_KP_1, KC_KP_4, KC_KP_7, KC_NUMLOCK, KC_ESC, \
KC_DOT, KC_KP_2, KC_KP_5, KC_KP_8, KC_KP_SLASH, KC_TAB, \
KC_KP_DOT, KC_KP_3, KC_KP_6, KC_KP_9, KC_KP_ASTERISK, KC_BSPACE, \
@@ -38,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | BL_DEC | BL_DEC | BL_INC | BL_INC | | |
* `---------------------------------------------'
*/
-[_BL] = KEYMAP( \
+[_BL] = LAYOUT( \
BL_BRTG, _______, _______, _______, _______, _______, \
_______, BL_OFF, BL_TOGG, BL_ON, _______, _______, \
_______, _______, _______, _______, _______, _______, \
diff --git a/keyboards/ymdk_np21/matrix.c b/keyboards/ymdk_np21/matrix.c
index a9e9cb539..b2bfb2f0b 100644
--- a/keyboards/ymdk_np21/matrix.c
+++ b/keyboards/ymdk_np21/matrix.c
@@ -91,12 +91,23 @@ uint8_t matrix_scan(void) {
return 1;
}
+__attribute__ ((weak))
+void matrix_scan_user(void) {};
+
+__attribute__ ((weak))
void matrix_scan_kb(void) {
// Looping keyboard code goes here
// This runs every cycle (a lot)
matrix_scan_user();
};
+__attribute__ ((weak))
+void matrix_init_user(void) {};
+
+__attribute__ ((weak))
+void matrix_init_kb(void) {
+ matrix_init_user();
+}
// declarations
void matrix_set_row_status(uint8_t row) {
DDRB = (1 << row);
diff --git a/keyboards/ymdk_np21/ymdk_np21.c b/keyboards/ymdk_np21/ymdk_np21.c
index 670083a11..c1b11b404 100644
--- a/keyboards/ymdk_np21/ymdk_np21.c
+++ b/keyboards/ymdk_np21/ymdk_np21.c
@@ -34,7 +34,7 @@ extern rgblight_config_t rgblight_config;
// @Override
void matrix_init_kb(void) {
// call user level keymaps, if any
- // matrix_init_user();
+ matrix_init_user();
}
#ifdef BACKLIGHT_ENABLE
@@ -67,7 +67,7 @@ void rgblight_set(void) {
}
bool rgb_init = false;
-void matrix_scan_user(void) {
+void matrix_scan_kb(void) {
// if LEDs were previously on before poweroff, turn them back on
if (rgb_init == false && rgblight_config.enable) {
i2c_init();
@@ -77,4 +77,6 @@ void matrix_scan_user(void) {
rgblight_task();
/* Nothing else for now. */
+
+ matrix_scan_user();
}
diff --git a/keyboards/ymdk_np21/ymdk_np21.h b/keyboards/ymdk_np21/ymdk_np21.h
index babdc8483..728406d6e 100644
--- a/keyboards/ymdk_np21/ymdk_np21.h
+++ b/keyboards/ymdk_np21/ymdk_np21.h
@@ -25,7 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
void matrix_init_user(void); // TODO port this to other PS2AVRGB boards
-#define KEYMAP_GRID( \
+#define LAYOUT( \
K01, K02, K03, K04, K05, K06, \
K11, K12, K13, K14, K15, K16, \
K21, K22, K23, K24, K25, K26, \
@@ -38,6 +38,4 @@ void matrix_init_user(void); // TODO port this to other PS2AVRGB boards
{ K36, K35, K34, K33, K32, K31 } \
}
-#define KEYMAP KEYMAP_GRID
-
#endif
diff --git a/keyboards/z150_blackheart/config.h b/keyboards/z150_blackheart/config.h
new file mode 100644
index 000000000..362153652
--- /dev/null
+++ b/keyboards/z150_blackheart/config.h
@@ -0,0 +1,48 @@
+#pragma once
+
+#include "config_common.h"
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x6060
+#define DEVICE_VER 0x0001
+#define MANUFACTURER blindassassin111
+#define PRODUCT Z-150 PCB
+#define DESCRIPTION Replacement for Zenith Z-150 PCB
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 20
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { C3, C2, C1, C0, E1 }
+#define MATRIX_COL_PINS { D0, D1, D2, D3, D4, D5, D7, E0, C7, C6, C5, C4, F0, F1, F2, F3, F4, F5, F6, F7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* force n-key rollover*/
+#define FORCE_NKRO
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_ANIMATIONS
+#define RGBLED_NUM 0
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
diff --git a/keyboards/z150_blackheart/keymaps/default/keymap.c b/keyboards/z150_blackheart/keymaps/default/keymap.c
new file mode 100644
index 000000000..e93802052
--- /dev/null
+++ b/keyboards/z150_blackheart/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ LAYOUT(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_SLCK, MO(1),
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_P7, KC_P8, KC_P9, KC_PAST,
+ KC_F5, KC_F6, KC_LCTRL,KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_P4, KC_P5, KC_P6, KC_PMNS,
+ KC_F7, KC_F8, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT,KC_SLSH, KC_RSFT, KC_BSLS, KC_P1, KC_P2, KC_P3, KC_PPLS,
+ KC_F9, KC_F10, KC_LALT, KC_GRV, KC_SPC, KC_CAPS, KC_P0, KC_PDOT
+ ),
+
+ LAYOUT(
+ _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ LAYOUT_z150_tkl(
+ KC_F1, KC_F2, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_F3, KC_F4, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_F5, KC_F6, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX,
+ KC_F7, KC_F8, KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH, KC_RSFT, MO(1), XXXXXXX, KC_UP, XXXXXXX,
+ KC_F9, KC_F10, KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ LAYOUT_z150_tkl(
+ _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
+
+void matrix_init_user(void) {
+}
+
+void matrix_scan_user(void) {
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ return true;
+}
+
+void led_set_user(uint8_t usb_led) {
+ DDRB |= (1 << 0);
+ DDRE |= (1 << 6) | (1 << 7);
+
+ if (usb_led & (1 << USB_LED_NUM_LOCK)) {
+ PORTE |= (1 << 7);
+ } else {
+ PORTE &= ~(1 << 7);
+ }
+
+ if (usb_led & (1 << USB_LED_CAPS_LOCK)) {
+ PORTB |= (1 << 0);
+ } else {
+ PORTB &= ~(1 << 0);
+ }
+
+ if (usb_led & (1 << USB_LED_SCROLL_LOCK)) {
+ PORTE |= (1 << 6);
+ } else {
+ PORTE &= ~(1 << 6);
+ }
+} \ No newline at end of file
diff --git a/keyboards/z150_blackheart/readme.md b/keyboards/z150_blackheart/readme.md
new file mode 100644
index 000000000..5e87b6c8f
--- /dev/null
+++ b/keyboards/z150_blackheart/readme.md
@@ -0,0 +1,14 @@
+Z-150 Blackheart PCB
+===
+
+A replacement PCB for Zenith Z-150 keyboards.
+
+Keyboard Maintainer: QMK Community and blindassassin111
+Hardware Supported: Z-150 blackheart PCB
+Hardware Availability: https://deskthority.net/group-buys-f50/programmable-vintage-board-pcbs-omnikey-at101-and-z-150-t19325.html
+
+Make example for this keyboard (after setting up your build environment):
+
+ make z150_blackheart: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/z150_blackheart/rules.mk b/keyboards/z150_blackheart/rules.mk
new file mode 100644
index 000000000..b258bf35f
--- /dev/null
+++ b/keyboards/z150_blackheart/rules.mk
@@ -0,0 +1,58 @@
+# MCU name
+MCU = at90usb1286
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Bootloader selection
+BOOTLOADER = halfkay
+
+# Boot Section Size in *bytes*
+# OPT_DEFS += -DBOOTLOADER_SIZE=4096
+
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = yes # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+AUDIO_ENABLE = no
+RGBLIGHT_ENABLE = no \ No newline at end of file
diff --git a/keyboards/z150_blackheart/z150_blackheart.c b/keyboards/z150_blackheart/z150_blackheart.c
new file mode 100644
index 000000000..10f388cf6
--- /dev/null
+++ b/keyboards/z150_blackheart/z150_blackheart.c
@@ -0,0 +1 @@
+#include "z150_blackheart.h"
diff --git a/keyboards/z150_blackheart/z150_blackheart.h b/keyboards/z150_blackheart/z150_blackheart.h
new file mode 100644
index 000000000..baf187fd2
--- /dev/null
+++ b/keyboards/z150_blackheart/z150_blackheart.h
@@ -0,0 +1,34 @@
+#ifndef z150_blackheart_H
+#define z150_blackheart_H
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, K019, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, K216, K217, K218, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, K318, \
+ K400, K401, K402, K403, K407, K414, K415, K417 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K016, K017, KC_NO, K019 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K116, K117, K118, K119 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO, K215, K216, K217, K218, KC_NO }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K315, K316, K317, K318, KC_NO }, \
+ { K400, K401, K402, K403, KC_NO, KC_NO, KC_NO, K407, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, K414, K415, KC_NO, K417, KC_NO, KC_NO } \
+}
+
+#define LAYOUT_z150_tkl( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, K017, K018, K019, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, K117, K118, K119, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, K216, K217, K218, \
+ K300, K301, K302, K405, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, K316, K317, K318, \
+ K400, K401, K402, K403, K404, K407, K412, K413, K414, K415, K416, K417, K418 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, KC_NO, K017, K018, K019 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, K115, KC_NO, K117, K118, K119 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K214, KC_NO, K216, K217, K218, KC_NO }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K314, KC_NO, K316, K317, K318, KC_NO }, \
+ { K400, K401, K402, K403, K404, K405, KC_NO, K407, KC_NO, KC_NO, KC_NO, KC_NO, K412, K413, K414, K415, K416, K417, K418, KC_NO } \
+}
+
+#endif \ No newline at end of file
diff --git a/keyboards/zeal60/config.h b/keyboards/zeal60/config.h
new file mode 100644
index 000000000..6f3d43473
--- /dev/null
+++ b/keyboards/zeal60/config.h
@@ -0,0 +1,129 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "config_common.h"
+
+// USB Device descriptor parameter
+#define VENDOR_ID 0x5A45 // ZealPC ("ZE")
+#define PRODUCT_ID 0x0060 // Zeal60
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ZealPC
+#define PRODUCT Zeal60
+#define DESCRIPTION Zeal60
+
+// key matrix size
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+// Zeal60 PCB default pin-out
+#define MATRIX_ROW_PINS { F0, F1, F4, F6, F7 }
+#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6 }
+#define UNUSED_PINS
+
+// IS31FL3731 driver
+#define DRIVER_COUNT 2
+#define DRIVER_LED_TOTAL 72
+
+// COL2ROW or ROW2COL
+#define DIODE_DIRECTION COL2ROW
+
+// Set 0 if debouncing isn't needed
+#define DEBOUNCING_DELAY 5
+
+// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
+#define LOCKING_SUPPORT_ENABLE
+// Locking resynchronize hack
+#define LOCKING_RESYNC_ENABLE
+
+// key combination for command
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+// disable debug print
+//#define NO_DEBUG
+
+// disable print
+//#define NO_PRINT
+
+// disable action features
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#define RGB_BACKLIGHT_ENABLED 1
+
+// This conditionally compiles the backlight code for Zeal60 specifics
+#define RGB_BACKLIGHT_ZEAL60
+
+// enable/disable LEDs based on layout
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
+
+// disable backlight when USB suspended (PC sleep/hibernate/shutdown)
+#define RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED 0
+
+// disable backlight after timeout in minutes, 0 = no timeout
+#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 0
+
+// the default effect (RGB test)
+#define RGB_BACKLIGHT_EFFECT 255
+
+// These define which keys in the matrix are alphas/mods
+// Used for backlight effects so colors are different for
+// alphas vs. mods
+// Each value is for a row, bit 0 is column 0
+// Alpha=0 Mod=1
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_0 0b0010000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0b0000000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0b0001000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0b0011000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0b0011110000000111
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Backlight config starts after EEPROM version
+#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35
+// Dynamic keymap starts after backlight config (35+31)
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 66
+// Dynamic macro starts after dynamic keymaps (66+(4*5*14*2)) = (66+560)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 626
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 398
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+
diff --git a/keyboards/zeal60/info.json b/keyboards/zeal60/info.json
new file mode 100644
index 000000000..c4234e49a
--- /dev/null
+++ b/keyboards/zeal60/info.json
@@ -0,0 +1,25 @@
+{
+ "keyboard_name": "Zeal60",
+ "url": "",
+ "maintainer": "Wilba",
+ "bootloader": "DFU",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"x":1.25, "y":3}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_ansi": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":2.75}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [{"label":"\u00ac", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"\"", "x":2, "y":0}, {"label":"\u00a3", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"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}]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"~", "x":14, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Delete", "x":13.5, "y":1, "w":1.5}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"Fn", "x":14, "y":3}, {"label":"Os", "x":1.5, "y":4}, {"label":"Alt", "x":2.5, "y":4, "w":1.5}, {"x":4, "y":4, "w":7}, {"label":"Alt", "x":11, "y":4, "w":1.5}, {"label":"Os", "x":12.5, "y":4}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/zeal60/keymaps/ansi_split_bs_rshift/config.h b/keyboards/zeal60/keymaps/ansi_split_bs_rshift/config.h
new file mode 100644
index 000000000..011cf5c5a
--- /dev/null
+++ b/keyboards/zeal60/keymaps/ansi_split_bs_rshift/config.h
@@ -0,0 +1,21 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
+
+#undef RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+
+#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0
+
+#undef RGB_BACKLIGHT_USE_7U_SPACEBAR
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+
+#undef RGB_BACKLIGHT_USE_ISO_ENTER
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+
+#undef RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
+
diff --git a/keyboards/zeal60/keymaps/ansi_split_bs_rshift/keymap.c b/keyboards/zeal60/keymaps/ansi_split_bs_rshift/keymap.c
new file mode 100644
index 000000000..edb4f256b
--- /dev/null
+++ b/keyboards/zeal60/keymaps/ansi_split_bs_rshift/keymap.c
@@ -0,0 +1,38 @@
+// ANSI split backspace/right shift layout for Zeal60
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_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, FN_MO13,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, FN_MO23, KC_RCTL),
+
+// Fn1 Layer
+[1] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/zeal60/keymaps/crd/config.h b/keyboards/zeal60/keymaps/crd/config.h
new file mode 100644
index 000000000..a70f9da7e
--- /dev/null
+++ b/keyboards/zeal60/keymaps/crd/config.h
@@ -0,0 +1,29 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
+
+#undef RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+
+#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 1
+
+#undef RGB_BACKLIGHT_USE_7U_SPACEBAR
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 1
+
+#undef RGB_BACKLIGHT_USE_ISO_ENTER
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+
+#undef RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
+
+#undef RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED 1
+
+#undef RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT
+#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 3
+
+#undef RGB_BACKLIGHT_EFFECT
+#define RGB_BACKLIGHT_EFFECT 0 \ No newline at end of file
diff --git a/keyboards/zeal60/keymaps/crd/keymap.c b/keyboards/zeal60/keymaps/crd/keymap.c
new file mode 100644
index 000000000..971782561
--- /dev/null
+++ b/keyboards/zeal60/keymaps/crd/keymap.c
@@ -0,0 +1,39 @@
+// tsangan layout for Zeal60
+#include QMK_KEYBOARD_H
+
+enum keyboard_layers {
+ _BL = 0, // Base Layer
+ _FL, // Function Layer
+ _CL // Control Layer
+};
+
+// Custom #defined keycodes (shorter macros for readability)
+#define KC_CTES CTL_T(KC_ESC)
+#define KC_RSUP RSFT_T(KC_UP)
+#define KC_RGLT RCMD_T(KC_LEFT)
+#define KC_RADN LT(_CL, KC_DOWN)
+#define KC_RCRT RCTL_T(KC_RIGHT)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BL] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, XXXXXXX,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CTES, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSUP, MO(_FL),
+ KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, XXXXXXX, KC_RGLT, KC_RADN, KC_RCRT
+ ),
+ [_FL] = LAYOUT_60_ansi_split_bs_rshift(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, _______,
+ _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, KC_MUTE, _______, _______, KC_PGDN, KC_PGUP, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, KC_SLCK, KC_VOLD, KC_VOLU, KC_PAUS, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ [_CL] = LAYOUT_60_ansi_split_bs_rshift(
+ _______, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, _______, _______, _______, _______, BR_DEC, BR_INC, _______, _______,
+ _______, _______, _______, S1_DEC, S1_INC, S2_DEC, S2_INC, _______, _______, _______, _______, ES_DEC, ES_INC, RESET,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+};
diff --git a/keyboards/zeal60/keymaps/default/config.h b/keyboards/zeal60/keymaps/default/config.h
new file mode 100644
index 000000000..f8478a3df
--- /dev/null
+++ b/keyboards/zeal60/keymaps/default/config.h
@@ -0,0 +1,20 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
+
+#undef RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+
+#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0
+
+#undef RGB_BACKLIGHT_USE_7U_SPACEBAR
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+
+#undef RGB_BACKLIGHT_USE_ISO_ENTER
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+
+#undef RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
diff --git a/keyboards/zeal60/keymaps/default/keymap.c b/keyboards/zeal60/keymaps/default/keymap.c
new file mode 100644
index 000000000..3a13cf4d5
--- /dev/null
+++ b/keyboards/zeal60/keymaps/default/keymap.c
@@ -0,0 +1,38 @@
+// Default layout for Zeal60
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_60_ansi(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_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, FN_MO13, FN_MO23, KC_RCTL),
+
+// Fn1 Layer
+[1] = LAYOUT_60_ansi(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL ,
+ KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_60_ansi(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = LAYOUT_60_ansi(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/zeal60/keymaps/hhkb/config.h b/keyboards/zeal60/keymaps/hhkb/config.h
new file mode 100644
index 000000000..25f74d3d2
--- /dev/null
+++ b/keyboards/zeal60/keymaps/hhkb/config.h
@@ -0,0 +1,20 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 1
+
+#undef RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+
+#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 1
+
+#undef RGB_BACKLIGHT_USE_7U_SPACEBAR
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 1
+
+#undef RGB_BACKLIGHT_USE_ISO_ENTER
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+
+#undef RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 1
diff --git a/keyboards/zeal60/keymaps/hhkb/keymap.c b/keyboards/zeal60/keymaps/hhkb/keymap.c
new file mode 100644
index 000000000..5cedc6e5e
--- /dev/null
+++ b/keyboards/zeal60/keymaps/hhkb/keymap.c
@@ -0,0 +1,38 @@
+// HHKB layout for Zeal60
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_60_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, FN_MO13,
+ KC_LGUI, KC_LALT, KC_SPC, KC_RALT, FN_MO23),
+
+// Fn1 Layer
+[1] = LAYOUT_60_hhkb(
+ KC_PWR, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_EJCT, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_60_hhkb(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = LAYOUT_60_hhkb(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/zeal60/keymaps/iso/config.h b/keyboards/zeal60/keymaps/iso/config.h
new file mode 100644
index 000000000..c96ef1f05
--- /dev/null
+++ b/keyboards/zeal60/keymaps/iso/config.h
@@ -0,0 +1,20 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
+
+#undef RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 1
+
+#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0
+
+#undef RGB_BACKLIGHT_USE_7U_SPACEBAR
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+
+#undef RGB_BACKLIGHT_USE_ISO_ENTER
+#define RGB_BACKLIGHT_USE_ISO_ENTER 1
+
+#undef RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
diff --git a/keyboards/zeal60/keymaps/iso/keymap.c b/keyboards/zeal60/keymaps/iso/keymap.c
new file mode 100644
index 000000000..55120f05e
--- /dev/null
+++ b/keyboards/zeal60/keymaps/iso/keymap.c
@@ -0,0 +1,38 @@
+// ISO layout for Zeal60
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_60_iso(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_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_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, FN_MO13, FN_MO23, KC_RCTL),
+
+// Fn1 Layer
+[1] = LAYOUT_60_iso(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL ,
+ KC_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_60_iso(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = LAYOUT_60_iso(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, ES_DEC, ES_INC, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/zeal60/keymaps/ryanmaclean/config.h b/keyboards/zeal60/keymaps/ryanmaclean/config.h
new file mode 100644
index 000000000..f1531eb34
--- /dev/null
+++ b/keyboards/zeal60/keymaps/ryanmaclean/config.h
@@ -0,0 +1,21 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 1
+
+#undef RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+
+#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 1
+
+#undef RGB_BACKLIGHT_USE_7U_SPACEBAR
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+
+#undef RGB_BACKLIGHT_USE_ISO_ENTER
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+
+#undef RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
+
diff --git a/keyboards/zeal60/keymaps/ryanmaclean/keymap.c b/keyboards/zeal60/keymaps/ryanmaclean/keymap.c
new file mode 100644
index 000000000..2e342b497
--- /dev/null
+++ b/keyboards/zeal60/keymaps/ryanmaclean/keymap.c
@@ -0,0 +1,84 @@
+// Ryan MacLean's layout for Zeal60
+// Note that LGUI and RGUI are swapped with LALT and RALT respectively, for use with Macs
+// Also note that Control has replaced Caps Lock, and that pressing left or right shift once
+// will output left parenthese and right parenthese respectively.
+#include QMK_KEYBOARD_H
+
+// [0,13] is either left key of split backspace (e.g. HHKB \| key) or 2U backspace
+// [1,13] is either backslash or ISO Enter
+// [2,12] is either ANSI Enter or key left of ISO Enter
+// [2,13] is right key of split backspace (e.g. HHKB `~ key)
+// [3,1] is right key of split left-shift (e.g ISO key)
+// [3,13] is right key of split right-shift (e.g. HHKB Fn key)
+
+
+
+const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) // this is the function signature -- just copy/paste it into your keymap file as it is. KC_LSFT KC_LALT KC_LGUI KC_4
+{
+ switch(id) {
+ case 0: // macOS screenshot to capture are to clipboard - this would trigger when you hit a key mapped as M(0)
+ if (record->event.pressed) {
+ return MACRO( D(LSFT), D(LCTL), D(LGUI), T(4), U(LSFT), U(LCTL), U(LGUI), W(255), END ); // this sends the string 'hello' when the macro executes
+ }
+ break;
+ case 1: // macOS screenshot capture area to file - this would trigger when you hit a key mapped as M(1)
+ if (record->event.pressed) {
+ return MACRO( D(LSFT), D(LGUI), T(4), U(LSFT), U(LGUI), W(255), END ); // this sends the string 'hello' when the macro executes
+ }
+ break;
+ case 2: // macOS screenshot to clipboard - this would trigger when you hit a key mapped as M(2)
+ if (record->event.pressed) {
+ return MACRO( D(LSFT), D(LCTL), D(LGUI), T(3), U(LSFT), U(LCTL), U(LGUI), W(255), END ); // this sends the string 'hello' when the macro executes
+ }
+ break;
+ case 3: // macOS screenshot to file - this would trigger when you hit a key mapped as M(3)
+ if (record->event.pressed) {
+ return MACRO( D(LSFT), D(LGUI), T(3), U(LSFT), U(LGUI), W(255), END ); // this sends the string 'hello' when the macro executes
+ }
+ break;
+ }
+ return MACRO_NONE;
+};
+
+#define CADETL MT(KC_LSFT, KC_LBRC)
+#define CADETR MT(KC_RSFT, KC_RBRC)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = {
+ {KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS},
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC},
+ {KC_LGUI, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_GRV},
+ {KC_LSPO, KC_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSPC, FN_MO13},
+ {KC_LCTL, KC_LALT, KC_LGUI, KC_NO, KC_NO, KC_NO, KC_NO, KC_SPC, KC_NO, KC_NO, KC_RGUI, KC_RALT, KC_RCTL, FN_MO23}
+},
+
+// Fn1 Layer
+[1] = {
+ {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_CAPS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_DEL},
+ {KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_HOME, KC_PGUP, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_END, KC_PGDN, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+},
+
+// Fn2 Layer
+[2] = {
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+ {KC_TRNS, M(2), M(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+ {KC_TRNS, M(1), M(0), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+},
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = {
+ {KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS},
+ {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}
+}
+
+};
diff --git a/keyboards/zeal60/keymaps/tusing/Makefile b/keyboards/zeal60/keymaps/tusing/Makefile
new file mode 100644
index 000000000..762905da0
--- /dev/null
+++ b/keyboards/zeal60/keymaps/tusing/Makefile
@@ -0,0 +1,6 @@
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+RGBLIGHT_ENABLE = yes
+AUDIO_ENABLE = no # Underglow cannot be used with audio.
diff --git a/keyboards/zeal60/keymaps/tusing/README.md b/keyboards/zeal60/keymaps/tusing/README.md
new file mode 100644
index 000000000..edddf1c58
--- /dev/null
+++ b/keyboards/zeal60/keymaps/tusing/README.md
@@ -0,0 +1,80 @@
+# RGB Underglow Strip on the Zeal60: A Guide
+
+<img src="https://i.imgur.com/UuUdOCb.jpg" width="800">
+
+## Requirements
+
+- WS2812B RGB strip, preferably 60 LEDs/meter
+- Wire, solder
+- Tape, hot glue, or some sort of adhesive
+
+## A. Connecting the strip
+You might find the [**full PCB image**](https://cdn.shopify.com/s/files/1/0490/7329/files/zeal60jumpers.png) helpful. Ignore the red boxes!
+
+1. Connect V+ to the receiving end of the thermistor labeled F1; connect GND to the board's GND pin. (*Avoid connecting +V to the board's +5V pin* - you will likely overload the thermistor, and you will limit your maximum brightness.)
+
+ <img src="https://i.imgur.com/jd7qivh.png" width="300">
+
+2. Connect DI to PB0.
+
+ <img src="https://i.imgur.com/BiMyMLv.jpg" width="300">
+
+3. Should look something like this when finished:
+
+ <img src="https://i.imgur.com/ngxYMuA.jpg" width="600">
+
+*Optional:* To allow considerably more light to escape, consider angling the strip outwards by using some sort of fulcrum under the strip. (I used a thick wire.)
+
+## B. Enabling the strip
+1. If it is not present already, add the following to your ***keymap's*** ```Makefile```:
+
+ ```Makefile
+ RGBLIGHT_ENABLE = yes
+ AUDIO_ENABLE = no #Underglow animations cannot be used with audio.
+ ```
+2. If it is not present already, add the following to your *keymap's* ```config.h```, and edit the values as necessary:
+
+ ```c
+ // Set up RGB underglow.
+ #define RGB_DI_PIN B0 // The pin your RGB strip is wired to
+ #define RGBLIGHT_ANIMATIONS // Require for fancier stuff (not compatible with audio)
+ #define RGBLED_NUM 35 // Number of LEDs
+ #define RGBLIGHT_HUE_STEP 5 // How much each press of rgb_hue changes hue
+ #define RGBLIGHT_SAT_STEP 10 // How much each press of rgb_sat changes sat
+ #define RGBLIGHT_VAL_STEP 10 // How much each press of rgb_val changes val
+ ```
+3. If they are not present already, add the following keycodes to your keymap to control the RGB strip: ```RGB_TOG``` (on/off), ```RGB_MOD``` (step through modes), ```RGB_HUI```, ```RGB_HUD```, ```RGB_SAI```, ```RGB_SAD```, ```RGB_VAI```, ```RGB_VAD``` (HSV increase/decrease). Add these to your keymap.
+
+## C. Dealing with current limits
+USB 2.0 ports on laptops provide up to 500mA max, but USB 3.0 ports can provide up to 900mA; USB 3.1 up to 1.5A; and powered USB hubs even more. We can run our keyboard at a higher brightness if we draw more power. **The Zeal60 uses 500mA at max brightness.** This means that **you have about 400mA remaining for the strip to use on a USB 3.0 port**; 1000mA free on a USB 3.1 port, so on and so forth.
+
+***Warning:*** **This means you will need to turn *off* your RGB strip before connecting to a USB 2.0 port**, as USB 2.0 cannot sustain the current necessary!
+
+1. If not present already, add the following to your keymap's ```config.h```. Change the numbers based on your needs. The ones below are safe underestimates.
+
+ ```c
+ // Enable current limiting for RGB underglow.
+ #define RGBSTRIP_CURRENT_LIMIT 400 // Strip current limit in mA. (USB amperage - 500mA for keyboard)
+ #define RGBSTRIP_MAX_CURRENT_PER_LIGHT 50 // mA per light when at max brightness.
+ ```
+ *Example:* I use a USB port capable of providing 1800 mA. The keyboard uses 500mA, so my personal value (in the `tusing` keymap) for `RGBSTRIP_CURRENT_LIMIT` is 1300. The particular WS2812B RGB strip I have uses a maximum of 60 mA per LED, so that is my personal value for `RGBSTRIP_MAX_CURRENT_PER_LIGHT`.
+2. Toggle on the LED strip (```RGB_TOG```) and step through animations (```RGB_MOD```) to test it out!
+
+## D. Sources and resources
+### A. Connecting the strip.
+* [In-depth description of connecting an RGB strip to the GH60](https://www.reddit.com/r/MechanicalKeyboards/comments/4d5or2/my_first_custom_build_satan_gh60_rbg_underglow_in/d1nz3o7/)
+* [32U4 Pinout](https://40.media.tumblr.com/93b6bbd4113418c2b45459bb177e67c5/tumblr_mi49a20QMB1s5t695o1_1280.png)
+* [Redditor describes connecting RGB strips on his Satan GH60](https://www.reddit.com/r/MechanicalKeyboards/comments/4hbjw4/finally_finished_my_satan_gh60_also_granite_o/d2qn8zx/?context=3)
+* [Another Redditor on RGB with the Satan GH60](https://www.reddit.com/r/MechanicalKeyboards/comments/4ewzdx/gh60_satan_with_the_rgb_mod/d251uu6/ )
+
+### B. Enabling the strip.
+* [QMK Wiki portion on underglow](https://github.com/jackhumbert/qmk_firmware/wiki#rgb-under-glow-mod)
+* [Planck ```Makefile```, ```config.h```, and ```keymap.c``` config example](https://github.com/jackhumbert/qmk_firmware/tree/master/keyboards/planck/keymaps/yang)
+* [Video demonstrating keycode functions and RGB modes on a KC60](https://www.youtube.com/watch?v=VKrpPAHlisY)
+
+### C. Dealing with current limits.
+* [Discussion of cutting jumpers and adding resistors to lower current from Zeal60](https://www.reddit.com/r/MechanicalKeyboards/comments/5hou92/photos_zeal60_lets_just_say_santa_came_early_this/db23qid/)
+* [A selection of 900mA-1.5A current hold fuses - look for an SMD 0805-sized fuse.](https://goo.gl/748avG)
+* [Video detailing technique to solder 0805 resistors](https://www.youtube.com/watch?v=PU7wLcuqc-I&t=123s&list=FLheMlKEVQ5cmVXazUt6HrxQ&index=2)
+* [QMK feature request to implement max power draw limits in ```config.h```](https://github.com/jackhumbert/qmk_firmware/issues/954)
+* [Commit enabling max power draw limits in ```config.h```](https://github.com/jackhumbert/qmk_firmware/commit/83e613ad239459582ae28f78b6c81535b9b138d7) \ No newline at end of file
diff --git a/keyboards/zeal60/keymaps/tusing/config.h b/keyboards/zeal60/keymaps/tusing/config.h
new file mode 100644
index 000000000..64aaece50
--- /dev/null
+++ b/keyboards/zeal60/keymaps/tusing/config.h
@@ -0,0 +1,36 @@
+#pragma once
+
+/* Enable/disable LEDs based on layout. */
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
+
+#undef RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0
+
+#undef RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0
+
+#undef RGB_BACKLIGHT_USE_7U_SPACEBAR
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 0
+
+#undef RGB_BACKLIGHT_USE_ISO_ENTER
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0
+
+#undef RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
+
+// Set up RGB underglow.
+#define RGB_DI_PIN B0 // The pin your RGB strip is wired to
+#define RGBLIGHT_ANIMATIONS // Require for fancier stuff (not compatible with audio)
+#define RGBLED_NUM 35 // Number of LEDs
+#define RGBLIGHT_HUE_STEP 5 // How much each press of rgb_hue changes hue
+#define RGBLIGHT_SAT_STEP 10 // How much each press of rgb_sat changes sat
+#define RGBLIGHT_VAL_STEP 10 // How much each press of rgb_val changes val
+
+// Enable current limiting for RGB underglow.
+#define RGBSTRIP_CURRENT_LIMIT 1300 // Strip current limit in mA. (USB amperage - 500mA for keyboard)
+#define RGBSTRIP_MAX_CURRENT_PER_LIGHT 40 // mA per light when at max brightness.
+
+// Scale brightnes according to BRIGHTNESS_CORRECTION_TABLE in quantum/rgblight.c.
+// This allows to mitigate uneven brightness from LED underglow strips.
+// #define LED_BRIGHTNESS_CORRECTION
diff --git a/keyboards/zeal60/keymaps/tusing/keymap.c b/keyboards/zeal60/keymaps/tusing/keymap.c
new file mode 100644
index 000000000..41d2effd4
--- /dev/null
+++ b/keyboards/zeal60/keymaps/tusing/keymap.c
@@ -0,0 +1,49 @@
+// Default layout for Zeal60
+#include QMK_KEYBOARD_H
+
+// For readability.
+#define _______ KC_TRNS
+#define _x_ KC_NO
+#define AUD_PRV LCTL(KC_MPRV) // Previous music track
+#define AUD_PLY LCTL(KC_MPLY) // Pause music
+#define AUD_NXT LCTL(KC_MNXT) // Next music track
+
+// Zeal60-specific keys:
+// EF_INC, EF_DEC, // next/previous backlight effect
+// H1_INC, H1_DEC, // Color 1 hue increase/decrease
+// S1_INC, S1_DEC, // Color 1 saturation increase/decrease
+// H2_INC, H2_DEC, // Color 2 hue increase/decrease
+// S2_INC, S2_DEC, // Color 2 saturation increase/decrease
+// BR_INC, BR_DEC, // backlight brightness increase/decrease
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+// Default layer: Pressing caps-lock momentarily switches to Layer 1.
+// This is the default layer. Pressing an empty keycode on another layer will take you here.
+ [0] = {
+ {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC},
+ {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS},
+ {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, _x_ },
+ {KC_LSFT, _x_ , KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, _x_ },
+ {KC_LCTL, KC_LGUI, KC_LALT, _x_ , _x_ , _x_ , _x_ , KC_SPC, _x_ , _x_ , KC_LEFT, KC_UP, KC_DOWN, KC_RGHT}
+ },
+
+// Layer 1: Pressing enter switches to layer 2, where backlight controls live.
+// This is a momentary layer: once you let go of caps, you'll be back in layer 1.
+ [1] = {
+ {KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL },
+ {_______, KC_VOLD, KC_MUTE, KC_VOLU, _______, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, KC_INS, KC_DEL, _______},
+ {_______, AUD_PRV, AUD_PLY, AUD_NXT, _______, _______, _______, _______, _______, _______, _______, _______, TO(2) , _x_ },
+ {KC_CAPS, _x_ , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _x_ },
+ {KC_RCTL, KC_RGUI, KC_RALT, _x_ , _x_ , _x_ , _x_ , _______, _x_ , _x_ , KC_HOME, KC_PGUP, KC_PGDN, KC_END}
+ },
+
+// Layer 2: Zeal60 and backlight configuration. (Get here quickly by pressing Caps+Enter from Layer 1.)
+// This is a persistent layer. Get back to the default layer by pressing enter.
+ [2] = {
+ {RESET, EF_DEC, EF_INC, BR_DEC, BR_INC, ES_DEC, ES_INC, _______, _______, _______, _______, _______, _______, _______},
+ {_______, H1_DEC, H1_INC, S1_DEC, S1_INC, _______, _______, _______, _______, _______, _______, _______, _______, _______},
+ {_______, H2_DEC, H2_INC, S2_DEC, S2_INC, _______, _______, _______, _______, _______, _______, _______, TO(0) , _x_ },
+ {RGB_MOD, _x_ , RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, _______, _______, _______, _______, _______, _______, _______, _x_ },
+ {RGB_TOG, RGB_VAD, RGB_VAI, _x_ , _x_ , _x_ , _x_ , _______, _x_ , _x_ , _______, _______, _______, _______}
+ }
+};
diff --git a/keyboards/zeal60/readme.md b/keyboards/zeal60/readme.md
new file mode 100644
index 000000000..9eca28f83
--- /dev/null
+++ b/keyboards/zeal60/readme.md
@@ -0,0 +1,47 @@
+Zeal60
+====
+
+![Zeal60](https://cdn.shopify.com/s/files/1/0490/7329/products/Zeal60.jpg)
+
+This is a 60% PCB with per-key RGB LEDs and supports ANSI, ISO, winkey/winkeyless bottom row, HHKB-layout (split right shift and backspace).
+
+Keyboard Maintainer: [Wilba](http://wilba.tech/) and on [github](https://github.com/Wilba6582)
+Hardware Supported: Zeal60 PCB Rev 0-3
+Hardware Availability: https://zealpc.net/collections/group-buy-pre-orders/products/zeal60rgb
+
+Make example for this keyboard (after setting up your build environment):
+
+ make zeal60: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).
+
+
+RGB Backlight Configuration
+====
+
+A keymap (in the keymaps directory) can optionally configure which RGB backlight LEDs are used, depending on the needs of the layout, by adding a config.h file in the keymap's directory.
+The following #define symbols will enable/disable a feature using 1 or 0.
+
+ RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+
+Split backspace is being used, enables the right LED of the split backspace (the top-right corner)
+
+ RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT
+
+Split left shift is being used (i.e. ISO layout), enables the right LED of the split left shift (the ISO key)
+
+ RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT
+
+Split right shift is being used (i.e. HHKB style layouts), enables the right LED of the split right shift (the Fn key)
+
+ RGB_BACKLIGHT_USE_7U_SPACEBAR
+
+A 7U spacebar is being used, controls the LEDs under the right stabilizer (of 7U spacebar) and right Alt (if 6.25U spacebar).
+
+ RGB_BACKLIGHT_USE_ISO_ENTER
+
+An ISO Enter is being used. Only used to tweak the location of the LED being used under ANSI Enter/backslash
+
+ RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS
+
+Disables the LEDs under HHKB corner blockers, useful for transparent cases.
diff --git a/keyboards/zeal60/rgb_backlight.c b/keyboards/zeal60/rgb_backlight.c
new file mode 100644
index 000000000..64b95059e
--- /dev/null
+++ b/keyboards/zeal60/rgb_backlight.c
@@ -0,0 +1,1689 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#if RGB_BACKLIGHT_ENABLED
+
+#if defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_ZEAL65) || defined (RGB_BACKLIGHT_M60_A) || defined(RGB_BACKLIGHT_M6_B) || defined(RGB_BACKLIGHT_KOYU)
+#else
+#error None of the following was defined: RGB_BACKLIGHT_ZEAL60, RGB_BACKLIGHT_ZEAL65, RGB_BACKLIGHT_M60_A, RGB_BACKLIGHT_M6_B, RGB_BACKLIGHT_KOYU
+#endif
+
+#include "quantum.h"
+#include "rgb_backlight.h"
+#include "rgb_backlight_api.h"
+#include "rgb_backlight_keycodes.h"
+
+#include <avr/io.h>
+#include <util/delay.h>
+#include <avr/interrupt.h>
+#include "progmem.h"
+
+#include "quantum/color.h"
+#include "drivers/avr/i2c_master.h"
+
+#if defined (RGB_BACKLIGHT_M6_B)
+#include "drivers/issi/is31fl3218.h"
+#define BACKLIGHT_LED_COUNT 6
+#else
+#include "drivers/issi/is31fl3731.h"
+#define BACKLIGHT_LED_COUNT 72
+#endif
+
+#define BACKLIGHT_EFFECT_MAX 10
+
+backlight_config g_config = {
+ .use_split_backspace = RGB_BACKLIGHT_USE_SPLIT_BACKSPACE,
+ .use_split_left_shift = RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT,
+ .use_split_right_shift = RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT,
+ .use_7u_spacebar = RGB_BACKLIGHT_USE_7U_SPACEBAR,
+ .use_iso_enter = RGB_BACKLIGHT_USE_ISO_ENTER,
+ .disable_hhkb_blocker_leds = RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS,
+ .disable_when_usb_suspended = RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED,
+ .disable_after_timeout = RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT,
+ .brightness = 255,
+ .effect = RGB_BACKLIGHT_EFFECT,
+ .effect_speed = 0,
+ .color_1 = { .h = 0, .s = 255 },
+ .color_2 = { .h = 127, .s = 255 },
+ .caps_lock_indicator = { .color = { .h = 0, .s = 0 }, .index = 255 },
+ .layer_1_indicator = { .color = { .h = 0, .s = 0 }, .index = 255 },
+ .layer_2_indicator = { .color = { .h = 0, .s = 0 }, .index = 255 },
+ .layer_3_indicator = { .color = { .h = 0, .s = 0 }, .index = 255 },
+ .alphas_mods = {
+ RGB_BACKLIGHT_ALPHAS_MODS_ROW_0,
+ RGB_BACKLIGHT_ALPHAS_MODS_ROW_1,
+ RGB_BACKLIGHT_ALPHAS_MODS_ROW_2,
+ RGB_BACKLIGHT_ALPHAS_MODS_ROW_3,
+ RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 },
+#if defined(RGB_BACKLIGHT_M6_B)
+ .custom_color = { { 0, 255 }, { 43, 255 }, { 85, 255 }, { 128, 255 }, { 171, 255 }, { 213, 255 } }
+#endif
+};
+
+bool g_suspend_state = false;
+uint8_t g_indicator_state = 0;
+
+// Global tick at 20 Hz
+uint32_t g_tick = 0;
+
+// Ticks since this key was last hit.
+uint8_t g_key_hit[BACKLIGHT_LED_COUNT];
+
+// Ticks since any key was last hit.
+uint32_t g_any_key_hit = 0;
+
+#if !defined(RGB_BACKLIGHT_M6_B)
+// This is a 7-bit address, that gets left-shifted and bit 0
+// set to 0 for write, 1 for read (as per I2C protocol)
+#define ISSI_ADDR_1 0x74
+#define ISSI_ADDR_2 0x76
+
+const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
+/* Refer to IS31 manual for these locations
+ * driver
+ * | R location
+ * | | G location
+ * | | | B location
+ * | | | | */
+ {0, C2_1, C3_1, C4_1}, // LA0
+ {0, C1_1, C3_2, C4_2}, // LA1
+ {0, C1_2, C2_2, C4_3}, // LA2
+ {0, C1_3, C2_3, C3_3}, // LA3
+ {0, C1_4, C2_4, C3_4}, // LA4
+ {0, C1_5, C2_5, C3_5}, // LA5
+ {0, C1_6, C2_6, C3_6}, // LA6
+ {0, C1_7, C2_7, C3_7}, // LA7
+ {0, C1_8, C2_8, C3_8}, // LA8
+ {0, C9_1, C8_1, C7_1}, // LA9
+ {0, C9_2, C8_2, C7_2}, // LA10
+ {0, C9_3, C8_3, C7_3}, // LA11
+ {0, C9_4, C8_4, C7_4}, // LA12
+ {0, C9_5, C8_5, C7_5}, // LA13
+ {0, C9_6, C8_6, C7_6}, // LA14
+ {0, C9_7, C8_7, C6_6}, // LA15
+ {0, C9_8, C7_7, C6_7}, // LA16
+ {0, C8_8, C7_8, C6_8}, // LA17
+
+ {0, C2_9, C3_9, C4_9}, // LB0
+ {0, C1_9, C3_10, C4_10}, // LB1
+ {0, C1_10, C2_10, C4_11}, // LB2
+ {0, C1_11, C2_11, C3_11}, // LB3
+ {0, C1_12, C2_12, C3_12}, // LB4
+ {0, C1_13, C2_13, C3_13}, // LB5
+ {0, C1_14, C2_14, C3_14}, // LB6
+ {0, C1_15, C2_15, C3_15}, // LB7
+ {0, C1_16, C2_16, C3_16}, // LB8
+ {0, C9_9, C8_9, C7_9}, // LB9
+ {0, C9_10, C8_10, C7_10}, // LB10
+ {0, C9_11, C8_11, C7_11}, // LB11
+ {0, C9_12, C8_12, C7_12}, // LB12
+ {0, C9_13, C8_13, C7_13}, // LB13
+ {0, C9_14, C8_14, C7_14}, // LB14
+ {0, C9_15, C8_15, C6_14}, // LB15
+ {0, C9_16, C7_15, C6_15}, // LB16
+ {0, C8_16, C7_16, C6_16}, // LB17
+
+ {1, C2_1, C3_1, C4_1}, // LC0
+ {1, C1_1, C3_2, C4_2}, // LC1
+ {1, C1_2, C2_2, C4_3}, // LC2
+ {1, C1_3, C2_3, C3_3}, // LC3
+ {1, C1_4, C2_4, C3_4}, // LC4
+ {1, C1_5, C2_5, C3_5}, // LC5
+ {1, C1_6, C2_6, C3_6}, // LC6
+ {1, C1_7, C2_7, C3_7}, // LC7
+ {1, C1_8, C2_8, C3_8}, // LC8
+ {1, C9_1, C8_1, C7_1}, // LC9
+ {1, C9_2, C8_2, C7_2}, // LC10
+ {1, C9_3, C8_3, C7_3}, // LC11
+ {1, C9_4, C8_4, C7_4}, // LC12
+ {1, C9_5, C8_5, C7_5}, // LC13
+ {1, C9_6, C8_6, C7_6}, // LC14
+ {1, C9_7, C8_7, C6_6}, // LC15
+ {1, C9_8, C7_7, C6_7}, // LC16
+ {1, C8_8, C7_8, C6_8}, // LC17
+
+ {1, C2_9, C3_9, C4_9}, // LD0
+ {1, C1_9, C3_10, C4_10}, // LD1
+ {1, C1_10, C2_10, C4_11}, // LD2
+ {1, C1_11, C2_11, C3_11}, // LD3
+ {1, C1_12, C2_12, C3_12}, // LD4
+ {1, C1_13, C2_13, C3_13}, // LD5
+ {1, C1_14, C2_14, C3_14}, // LD6
+ {1, C1_15, C2_15, C3_15}, // LD7
+ {1, C1_16, C2_16, C3_16}, // LD8
+ {1, C9_9, C8_9, C7_9}, // LD9
+ {1, C9_10, C8_10, C7_10}, // LD10
+ {1, C9_11, C8_11, C7_11}, // LD11
+ {1, C9_12, C8_12, C7_12}, // LD12
+ {1, C9_13, C8_13, C7_13}, // LD13
+ {1, C9_14, C8_14, C7_14}, // LD14
+ {1, C9_15, C8_15, C6_14}, // LD15
+ {1, C9_16, C7_15, C6_15}, // LD16
+ {1, C8_16, C7_16, C6_16}, // LD17
+};
+#endif // !defined(RGB_BACKLIGHT_M6_B)
+
+
+typedef struct Point {
+ uint8_t x;
+ uint8_t y;
+} Point;
+
+
+// index in range 0..71 (LA0..LA17, LB0..LB17, LC0..LC17, LD0..LD17)
+// point values in range x=0..224 y=0..64
+// origin is center of top-left key (i.e Esc)
+#if defined (RGB_BACKLIGHT_ZEAL65)
+const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA0..LA17
+ {120,16}, {104,16}, {88,16}, {72,16}, {56,16}, {40,16}, {24,16}, {4,16}, {4,32},
+ {128,0}, {112,0}, {96,0}, {80,0}, {64,0}, {48,0}, {32,0}, {16,0}, {0,0},
+ // LB0..LB17
+ {144,0}, {160,0}, {176,0}, {192,0}, {216,0}, {224,0}, {240,0}, {240,16}, {240,32},
+ {136,16}, {152,16}, {168,16}, {184,16}, {200,16}, {220,16}, {240,48}, {240,64}, {224,64},
+ // LC0..LC17
+ {96,64}, {100,48}, {84,48}, {68,48}, {52,48}, {36,48}, {255,255}, {48,60}, {28,64},
+ {108,32}, {92,32}, {76,32}, {60,32}, {44,32}, {28,32}, {20,44}, {10,48}, {4,64},
+ // LD0..LD17
+ {124,32}, {140,32}, {156,32}, {172,32}, {188,32}, {214,32}, {180,48}, {202,48}, {224,48},
+ {116,48}, {132,48}, {148,48}, {164,48}, {255,255}, {144,60}, {164,64}, {188,64}, {208,64}
+};
+const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA0..LA17
+ {64,128}, {75,132}, {84,145}, {91,164}, {97,187}, {102,213}, {105,242}, {109,255}, {128,243},
+ {61,255}, {67,255}, {72,255}, {77,255}, {82,255}, {86,255}, {90,255}, {93,255}, {96,255},
+ // LB0..LB17
+ {56,255}, {51,255}, {46,255}, {42,255}, {37,255}, {35,255}, {32,255}, {19,255}, {0,255},
+ {53,132}, {44,145}, {37,164}, {31,187}, {26,213}, {22,249}, {237,255}, {224,255}, {221,255},
+ // LC0..LC17
+ {184,255}, {179,135}, {170,149}, {163,169}, {157,193}, {153,220}, {255,255}, {167,255}, {165,255},
+ {128,26}, {128,60}, {128,94}, {128,128}, {128,162}, {128,196}, {145,233}, {148,255}, {161,255},
+ // LD0..LD17
+ {0,9}, {0,43}, {0,77}, {0,111}, {0,145}, {0,201}, {224,181}, {230,217}, {235,255},
+ {189,128}, {200,131}, {210,141}, {218,159}, {255,255}, {201,228}, {206,255}, {213,255}, {218,255}
+};
+#elif defined (RGB_BACKLIGHT_KOYU)
+const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA0..LA17
+ {120,16}, {104,16}, {88,16}, {72,16}, {56,16}, {40,16}, {24,16}, {4,16}, {4,32},
+ {128,0}, {112,0}, {96,0}, {80,0}, {64,0}, {48,0}, {32,0}, {16,0}, {0,0},
+ // LB0..LB17
+ {144,0}, {160,0}, {176,0}, {192,0}, {208,0}, {224,0}, {240,0}, {240,16}, {240,32},
+ {136,16}, {152,16}, {168,16}, {184,16}, {200,16}, {220,16}, {240,48}, {240,64}, {224,64},
+ // LC0..LC17
+ {112,64}, {100,48}, {84,48}, {68,48}, {52,48}, {36,48}, {64,60}, {44,60}, {24,64},
+ {108,32}, {92,32}, {76,32}, {60,32}, {44,32}, {28,32}, {255,255}, {10,48}, {4,64},
+ // LD0..LD17
+ {124,32}, {140,32}, {156,32}, {172,32}, {188,32}, {214,32}, {180,48}, {202,48}, {224,48},
+ {116,48}, {132,48}, {148,48}, {164,48}, {255,255}, {160,60}, {180,64}, {208,64}, {255,255}
+};
+const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA0..LA17
+ {64,128}, {75,132}, {84,145}, {91,164}, {97,187}, {102,213}, {105,242}, {109,255}, {128,243},
+ {61,255}, {67,255}, {72,255}, {77,255}, {82,255}, {86,255}, {90,255}, {93,255}, {96,255},
+ // LB0..LB17
+ {56,255}, {51,255}, {46,255}, {42,255}, {38,255}, {35,255}, {32,255}, {19,255}, {0,255},
+ {53,132}, {44,145}, {37,164}, {31,187}, {26,213}, {22,249}, {237,255}, {224,255}, {221,255},
+ // LC0..LC17
+ {189,255}, {179,135}, {170,149}, {163,169}, {157,193}, {153,220}, {172,252}, {169,255}, {165,255},
+ {128,26}, {128,60}, {128,94}, {128,128}, {128,162}, {128,196}, {255,255}, {148,255}, {161,255},
+ // LD0..LD17
+ {0,9}, {0,43}, {0,77}, {0,111}, {0,145}, {0,201}, {224,181}, {230,217}, {235,255},
+ {189,128}, {200,131}, {210,141}, {218,159}, {255,255}, {207,238}, {211,255}, {218,255}, {255,255}
+};
+#elif defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_M60_A)
+const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA0..LA17
+ {120,16}, {104,16}, {88,16}, {72,16}, {56,16}, {40,16}, {24,16}, {4,16}, {4,32},
+ {128,0}, {112,0}, {96,0}, {80,0}, {64,0}, {48,0}, {32,0}, {16,0}, {0,0},
+ // LB0..LB17
+ {144,0}, {160,0}, {176,0}, {192,0}, {216,0}, {224,0}, {255,255}, {255,255}, {255,255},
+ {136,16}, {152,16}, {168,16}, {184,16}, {200,16}, {220,16}, {255,255}, {255,255}, {255,255},
+ // LC0..LC17
+ {102,64}, {100,48}, {84,48}, {68,48}, {52,48}, {36,48}, {60,64}, {43,64}, {23,64},
+ {108,32}, {92,32}, {76,32}, {60,32}, {44,32}, {28,32}, {20,48}, {2,48}, {3,64},
+ // LD0..LD17
+ {124,32}, {140,32}, {156,32}, {172,32}, {188,32}, {214,32}, {180,48}, {210,48}, {224,48},
+ {116,48}, {132,48}, {148,48}, {164,48}, {144,64}, {161,64}, {181,64}, {201,64}, {221,64}
+};
+const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
+ // LA0..LA17
+ {58,129}, {70,129}, {80,139}, {89,157}, {96,181}, {101,208}, {105,238}, {109,255}, {128,247}, {58,255},
+ {64,255}, {70,255}, {75,255}, {80,255}, {85,255}, {89,255}, {93,255}, {96,255},
+ // LB0..LB17
+ {53,255}, {48,255}, {43,255}, {39,255}, {34,255}, {32,255}, {255,255}, {255,255}, {255,255},
+ {48,139}, {39,157}, {32,181}, {27,208}, {23,238}, {19,255}, {255,255}, {255,255}, {255,255},
+ // LC0..LC17
+ {188,255}, {183,131}, {173,143}, {165,163}, {159,188}, {154,216}, {172,252}, {170,255}, {165,255},
+ {128,9}, {128,46}, {128,82}, {128,119}, {128,155}, {128,192}, {150,244}, {147,255}, {161,255},
+ // LD0..LD17
+ {0,27}, {0,64}, {0,101}, {0,137}, {0,174}, {255,233}, {228,201}, {235,255}, {237,255},
+ {195,128}, {206,136}, {215,152}, {222,175}, {205,234}, {209,255}, {214,255}, {219,255}, {223,255}
+};
+#elif defined (RGB_BACKLIGHT_M6_B)
+// M6-B is really simple:
+// 0 3 5
+// 1 2 4
+const Point g_map_led_to_point[BACKLIGHT_LED_COUNT] PROGMEM = {
+ {0,0}, {0,16}, {16,16}, {16,0}, {32,16}, {32,0}
+};
+const Point g_map_led_to_point_polar[BACKLIGHT_LED_COUNT] PROGMEM = {
+ {160,255}, {96,255}, {77,255}, {179,255}, {51,255}, {205,255}
+};
+#endif
+
+// This may seem counter-intuitive, but it's quite flexible.
+// For each LED, get it's position to decide what color to make it.
+// This solves the issue of LEDs (and switches) not aligning to a grid,
+// or having a large "bitmap" and sampling them.
+void map_led_to_point( uint8_t index, Point *point )
+{
+ // Slightly messy way to get Point structs out of progmem.
+ uint8_t *addr = (uint8_t*)&g_map_led_to_point[index];
+ point->x = pgm_read_byte(addr);
+ point->y = pgm_read_byte(addr+1);
+
+#if defined (RGB_BACKLIGHT_M6_B)
+ return;
+#endif
+
+ switch (index)
+ {
+ case 18+4: // LB4A
+ if ( g_config.use_split_backspace )
+ point->x -= 8;
+ break;
+#if defined (RGB_BACKLIGHT_ZEAL60)
+ case 18+14: // LB14A
+ if ( g_config.use_iso_enter )
+ point->y += 8; // extremely pedantic
+ break;
+ case 54+5: // LD5A
+ if ( !g_config.use_iso_enter )
+ point->x -= 10;
+ break;
+ case 36+16: // LC16A
+ if ( !g_config.use_split_left_shift )
+ point->x += 8;
+ break;
+#endif
+#if defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_M60_A)
+ case 36+0: // LC0A
+ if ( g_config.use_7u_spacebar )
+ point->x += 10;
+ break;
+ case 36+6: // LC6A
+ if ( g_config.use_7u_spacebar )
+ point->x += 4;
+ break;
+ case 54+7: // LD7A
+ if ( !g_config.use_split_right_shift )
+ point->x -= 8;
+ break;
+#endif
+ }
+}
+
+void map_led_to_point_polar( uint8_t index, Point *point )
+{
+ // Slightly messy way to get Point structs out of progmem.
+ uint8_t *addr = (uint8_t*)&g_map_led_to_point_polar[index];
+ point->x = pgm_read_byte(addr);
+ point->y = pgm_read_byte(addr+1);
+}
+
+//
+// Maps switch matrix coordinate (row,col) to LED index
+//
+
+
+#if defined (RGB_BACKLIGHT_ZEAL65)
+// Note: Left spacebar stab is at 4,2 (LC7)
+// Right spacebar stab is at 4,9 (D14)
+//
+// A17, A16, A15, A14, A13, A12, A11, A10, A9, B0, B1, B2, B3, B4, B6
+// A7, A6, A5, A4, A3, A2, A1, A0, B9, B10, B11, B12, B13, B14, B7
+// A8, C14, C13, C12, C11, C10, C9, D0, D1, D2, D3, D4, D5, B5, B8
+// C16, C15, C5, C4, C3, C2, C1, D9, D10, D11, D12, D6, D7, D8, B15
+// C17, C8, C7, ---, ---, ---, ---, C0, ---, D14, D15, D16, D17, B17, B16
+const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+ { 0+17, 0+16, 0+15, 0+14, 0+13, 0+12, 0+11, 0+10, 0+9, 18+0, 18+1, 18+2, 18+3, 18+4, 18+6 },
+ { 0+7, 0+6, 0+5, 0+4, 0+3, 0+2, 0+1, 0+0, 18+9, 18+10, 18+11, 18+12, 18+13, 18+14, 18+7 },
+ { 0+8, 36+14, 36+13, 36+12, 36+11, 36+10, 36+9, 54+0, 54+1, 54+2, 54+3, 54+4, 54+5, 18+5, 18+8 },
+ { 36+16, 36+15, 36+5, 36+4, 36+3, 36+2, 36+1, 54+9, 54+10, 54+11, 54+12, 54+6, 54+7, 54+8, 18+15 },
+ { 36+17, 36+8, 36+7, 255, 255, 255, 255, 36+0, 255, 54+14, 54+15, 54+16, 54+17, 18+17, 18+16 }
+};
+#elif defined(RGB_BACKLIGHT_KOYU)
+// Note: Left spacebar stab is at 4,4 (LC6)
+// Right spacebar stab is at 4,10 (D14)
+//
+// A17, A16, A15, A14, A13, A12, A11, A10, A9, B0, B1, B2, B3, B4, B6
+// A7, A6, A5, A4, A3, A2, A1, A0, B9, B10, B11, B12, B13, B14, B7
+// A8, C14, C13, C12, C11, C10, C9, D0, D1, D2, D3, D4, D5, B5, B8
+// C16, C15, C5, C4, C3, C2, C1, D9, D10, D11, D12, D6, D7, D8, B15
+// C17, C8, C7, C6, ---, ---, ---, C0, ---, ---, D14, D15, D16, B17, B16
+const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+ { 0+17, 0+16, 0+15, 0+14, 0+13, 0+12, 0+11, 0+10, 0+9, 18+0, 18+1, 18+2, 18+3, 18+4, 18+6 },
+ { 0+7, 0+6, 0+5, 0+4, 0+3, 0+2, 0+1, 0+0, 18+9, 18+10, 18+11, 18+12, 18+13, 18+14, 18+7 },
+ { 0+8, 36+14, 36+13, 36+12, 36+11, 36+10, 36+9, 54+0, 54+1, 54+2, 54+3, 54+4, 54+5, 18+5, 18+8 },
+ { 36+16, 36+15, 36+5, 36+4, 36+3, 36+2, 36+1, 54+9, 54+10, 54+11, 54+12, 54+6, 54+7, 54+8, 18+15 },
+ { 36+17, 36+8, 36+7, 36+6, 255, 255, 255, 36+0, 255, 255, 54+14, 54+15, 54+16, 18+17, 18+16 }
+};
+#elif defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_M60_A)
+// Note: Left spacebar stab is at 4,3 (LC6)
+// Right spacebar stab is at 4,9 (LD13) or 4,10 (LD14)
+//
+// A17, A16, A15, A14, A13, A12, A11, A10, A9, B0, B1, B2, B3, B4,
+// A7, A6, A5, A4, A3, A2, A1, A0, B9, B10, B11, B12, B13, B14,
+// A8, C14, C13, C12, C11, C10, C9, D0, D1, D2, D3, D4, D5, B5,
+// C16, C15, C5, C4, C3, C2, C1, D9, D10, D11, D12, D6, D7, D8,
+// C17, C8, C7, C6, ---, ---, ---, C0, ---, D13, D14, D15, D16, D17,
+const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+ { 0+17, 0+16, 0+15, 0+14, 0+13, 0+12, 0+11, 0+10, 0+9, 18+0, 18+1, 18+2, 18+3, 18+4 },
+ { 0+7, 0+6, 0+5, 0+4, 0+3, 0+2, 0+1, 0+0, 18+9, 18+10, 18+11, 18+12, 18+13, 18+14 },
+ { 0+8, 36+14, 36+13, 36+12, 36+11, 36+10, 36+9, 54+0, 54+1, 54+2, 54+3, 54+4, 54+5, 18+5 },
+ { 36+16, 36+15, 36+5, 36+4, 36+3, 36+2, 36+1, 54+9, 54+10, 54+11, 54+12, 54+6, 54+7, 54+8 },
+ { 36+17, 36+8, 36+7, 36+6, 255, 255, 255, 36+0, 255, 54+13, 54+14, 54+15, 54+16, 54+17 }
+};
+#elif defined (RGB_BACKLIGHT_M6_B)
+// M6-B is really simple:
+// 0 3 5
+// 1 2 4
+const uint8_t g_map_row_column_to_led[MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
+ { 0, 3, 5, 1, 2, 4 }
+};
+#endif
+
+void map_row_column_to_led( uint8_t row, uint8_t column, uint8_t *led )
+{
+ *led = 255;
+ if ( row < MATRIX_ROWS && column < MATRIX_COLS )
+ {
+ *led = pgm_read_byte(&g_map_row_column_to_led[row][column]);
+ }
+}
+
+void backlight_update_pwm_buffers(void)
+{
+#if defined (RGB_BACKLIGHT_M6_B)
+ IS31FL3218_update_pwm_buffers();
+#else
+ IS31FL3731_update_pwm_buffers( ISSI_ADDR_1, ISSI_ADDR_2 );
+ IS31FL3731_update_led_control_registers( ISSI_ADDR_1, ISSI_ADDR_2 );
+#endif
+}
+
+void backlight_set_color( int index, uint8_t red, uint8_t green, uint8_t blue )
+{
+#if defined (RGB_BACKLIGHT_M6_B)
+ IS31FL3218_set_color( index, red, green, blue );
+#else
+ IS31FL3731_set_color( index, red, green, blue );
+#endif
+}
+
+void backlight_set_color_all( uint8_t red, uint8_t green, uint8_t blue )
+{
+#if defined (RGB_BACKLIGHT_M6_B)
+ IS31FL3218_set_color_all( red, green, blue );
+#else
+ IS31FL3731_set_color_all( red, green, blue );
+#endif
+}
+
+void backlight_set_key_hit(uint8_t row, uint8_t column)
+{
+ uint8_t led;
+ map_row_column_to_led(row,column,&led);
+ g_key_hit[led] = 0;
+
+ g_any_key_hit = 0;
+}
+
+// This is (F_CPU/1024) / 20 Hz
+// = 15625 Hz / 20 Hz
+// = 781
+#define TIMER3_TOP 781
+
+void backlight_timer_init(void)
+{
+ static uint8_t backlight_timer_is_init = 0;
+ if ( backlight_timer_is_init )
+ {
+ return;
+ }
+ backlight_timer_is_init = 1;
+
+ // Timer 3 setup
+ TCCR3B = _BV(WGM32) | // CTC mode OCR3A as TOP
+ _BV(CS32) | _BV(CS30); // prescale by /1024
+ // Set TOP value
+ uint8_t sreg = SREG;
+ cli();
+
+ OCR3AH = (TIMER3_TOP >> 8) & 0xff;
+ OCR3AL = TIMER3_TOP & 0xff;
+ SREG = sreg;
+}
+
+void backlight_timer_enable(void)
+{
+ TIMSK3 |= _BV(OCIE3A);
+}
+
+void backlight_timer_disable(void)
+{
+ TIMSK3 &= ~_BV(OCIE3A);
+}
+
+void backlight_set_suspend_state(bool state)
+{
+ g_suspend_state = state;
+}
+
+void backlight_set_indicator_state(uint8_t state)
+{
+ g_indicator_state = state;
+}
+
+void backlight_effect_rgb_test(void)
+{
+ // Mask out bits 4 and 5
+ // This 2-bit value will stay the same for 16 ticks.
+ switch ( (g_tick & 0x30) >> 4 )
+ {
+ case 0:
+ {
+ backlight_set_color_all( 255, 0, 0 );
+ break;
+ }
+ case 1:
+ {
+ backlight_set_color_all( 0, 255, 0 );
+ break;
+ }
+ case 2:
+ {
+ backlight_set_color_all( 0, 0, 255 );
+ break;
+ }
+ case 3:
+ {
+ backlight_set_color_all( 255, 255, 255 );
+ break;
+ }
+ }
+}
+
+#if defined(RGB_DEBUGGING_ONLY)
+// This tests the LEDs
+// Note that it will change the LED control registers
+// in the LED drivers, and leave them in an invalid
+// state for other backlight effects.
+// ONLY USE THIS FOR TESTING LEDS!
+void backlight_effect_single_LED_test(void)
+{
+ static uint8_t color = 0; // 0,1,2 for R,G,B
+ static uint8_t row = 0;
+ static uint8_t column = 0;
+
+ static uint8_t tick = 0;
+ tick++;
+
+ if ( tick > 2 )
+ {
+ tick = 0;
+ column++;
+ }
+ if ( column > 14 )
+ {
+ column = 0;
+ row++;
+ }
+ if ( row > 4 )
+ {
+ row = 0;
+ color++;
+ }
+ if ( color > 2 )
+ {
+ color = 0;
+ }
+
+ uint8_t led;
+ map_row_column_to_led( row, column, &led );
+ backlight_set_color_all( 255, 255, 255 );
+ backlight_test_led( led, color==0, color==1, color==2 );
+}
+#endif // defined(RGB_DEBUGGING_ONLY)
+
+// All LEDs off
+void backlight_effect_all_off(void)
+{
+ backlight_set_color_all( 0, 0, 0 );
+}
+
+// Solid color
+void backlight_effect_solid_color(void)
+{
+ HSV hsv = { .h = g_config.color_1.h, .s = g_config.color_1.s, .v = g_config.brightness };
+ RGB rgb = hsv_to_rgb( hsv );
+ backlight_set_color_all( rgb.r, rgb.g, rgb.b );
+}
+
+// alphas = color1, mods = color2
+void backlight_effect_alphas_mods(void)
+{
+ RGB rgb1 = hsv_to_rgb( (HSV){ .h = g_config.color_1.h, .s = g_config.color_1.s, .v = g_config.brightness } );
+ RGB rgb2 = hsv_to_rgb( (HSV){ .h = g_config.color_2.h, .s = g_config.color_2.s, .v = g_config.brightness } );
+
+ for ( int row = 0; row < MATRIX_ROWS; row++ )
+ {
+ for ( int column = 0; column < MATRIX_COLS; column++ )
+ {
+ uint8_t index;
+ map_row_column_to_led( row, column, &index );
+ if ( index < BACKLIGHT_LED_COUNT )
+ {
+ if ( ( g_config.alphas_mods[row] & (1<<column) ) == 0 )
+ {
+ backlight_set_color( index, rgb1.r, rgb1.g, rgb1.b );
+ }
+ else
+ {
+ backlight_set_color( index, rgb2.r, rgb2.g, rgb2.b );
+ }
+ }
+ }
+ }
+}
+
+void backlight_effect_gradient_up_down(void)
+{
+ int16_t h1 = g_config.color_1.h;
+ int16_t h2 = g_config.color_2.h;
+ int16_t deltaH = h2 - h1;
+
+ // Take the shortest path between hues
+ if ( deltaH > 127 )
+ {
+ deltaH -= 256;
+ }
+ else if ( deltaH < -127 )
+ {
+ deltaH += 256;
+ }
+ // Divide delta by 4, this gives the delta per row
+ deltaH /= 4;
+
+ int16_t s1 = g_config.color_1.s;
+ int16_t s2 = g_config.color_2.s;
+ int16_t deltaS = ( s2 - s1 ) / 4;
+
+ HSV hsv = { .h = 0, .s = 255, .v = g_config.brightness };
+ RGB rgb;
+ Point point;
+ for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
+ {
+ map_led_to_point( i, &point );
+ // The y range will be 0..64, map this to 0..4
+ uint8_t y = (point.y>>4);
+ // Relies on hue being 8-bit and wrapping
+ hsv.h = g_config.color_1.h + ( deltaH * y );
+ hsv.s = g_config.color_1.s + ( deltaS * y );
+ rgb = hsv_to_rgb( hsv );
+ backlight_set_color( i, rgb.r, rgb.g, rgb.b );
+ }
+}
+
+void backlight_effect_raindrops(bool initialize)
+{
+ int16_t h1 = g_config.color_1.h;
+ int16_t h2 = g_config.color_2.h;
+ int16_t deltaH = h2 - h1;
+ deltaH /= 4;
+
+ // Take the shortest path between hues
+ if ( deltaH > 127 )
+ {
+ deltaH -= 256;
+ }
+ else if ( deltaH < -127 )
+ {
+ deltaH += 256;
+ }
+
+ int16_t s1 = g_config.color_1.s;
+ int16_t s2 = g_config.color_2.s;
+ int16_t deltaS = ( s2 - s1 ) / 4;
+
+ HSV hsv;
+ RGB rgb;
+
+ // Change one LED every tick
+ uint8_t led_to_change = ( g_tick & 0x000 ) == 0 ? rand() % BACKLIGHT_LED_COUNT : 255;
+
+ for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
+ {
+ // If initialize, all get set to random colors
+ // If not, all but one will stay the same as before.
+ if ( initialize || i == led_to_change )
+ {
+ hsv.h = h1 + ( deltaH * ( rand() & 0x03 ) );
+ hsv.s = s1 + ( deltaS * ( rand() & 0x03 ) );
+ // Override brightness with global brightness control
+ hsv.v = g_config.brightness;;
+
+ rgb = hsv_to_rgb( hsv );
+ backlight_set_color( i, rgb.r, rgb.g, rgb.b );
+ }
+ }
+}
+
+void backlight_effect_cycle_all(void)
+{
+ uint8_t offset = ( g_tick << g_config.effect_speed ) & 0xFF;
+
+ // Relies on hue being 8-bit and wrapping
+ for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
+ {
+ uint16_t offset2 = g_key_hit[i]<<2;
+ // stabilizer LEDs use spacebar hits
+ if ( i == 36+6 || i == 54+13 || // LC6, LD13
+ ( g_config.use_7u_spacebar && i == 54+14 ) ) // LD14
+ {
+ offset2 = g_key_hit[36+0]<<2;
+ }
+ offset2 = (offset2<=63) ? (63-offset2) : 0;
+
+ HSV hsv = { .h = offset+offset2, .s = 255, .v = g_config.brightness };
+ RGB rgb = hsv_to_rgb( hsv );
+ backlight_set_color( i, rgb.r, rgb.g, rgb.b );
+ }
+}
+
+void backlight_effect_cycle_left_right(void)
+{
+ uint8_t offset = ( g_tick << g_config.effect_speed ) & 0xFF;
+ HSV hsv = { .h = 0, .s = 255, .v = g_config.brightness };
+ RGB rgb;
+ Point point;
+ for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
+ {
+ uint16_t offset2 = g_key_hit[i]<<2;
+ // stabilizer LEDs use spacebar hits
+ if ( i == 36+6 || i == 54+13 || // LC6, LD13
+ ( g_config.use_7u_spacebar && i == 54+14 ) ) // LD14
+ {
+ offset2 = g_key_hit[36+0]<<2;
+ }
+ offset2 = (offset2<=63) ? (63-offset2) : 0;
+
+ map_led_to_point( i, &point );
+ // Relies on hue being 8-bit and wrapping
+ hsv.h = point.x + offset + offset2;
+ rgb = hsv_to_rgb( hsv );
+ backlight_set_color( i, rgb.r, rgb.g, rgb.b );
+ }
+}
+
+void backlight_effect_cycle_up_down(void)
+{
+ uint8_t offset = ( g_tick << g_config.effect_speed ) & 0xFF;
+ HSV hsv = { .h = 0, .s = 255, .v = g_config.brightness };
+ RGB rgb;
+ Point point;
+ for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
+ {
+ uint16_t offset2 = g_key_hit[i]<<2;
+ // stabilizer LEDs use spacebar hits
+ if ( i == 36+6 || i == 54+13 || // LC6, LD13
+ ( g_config.use_7u_spacebar && i == 54+14 ) ) // LD14
+ {
+ offset2 = g_key_hit[36+0]<<2;
+ }
+ offset2 = (offset2<=63) ? (63-offset2) : 0;
+
+ map_led_to_point( i, &point );
+ // Relies on hue being 8-bit and wrapping
+ hsv.h = point.y + offset + offset2;
+ rgb = hsv_to_rgb( hsv );
+ backlight_set_color( i, rgb.r, rgb.g, rgb.b );
+ }
+}
+
+void backlight_effect_jellybean_raindrops( bool initialize )
+{
+ HSV hsv;
+ RGB rgb;
+
+ // Change one LED every tick
+ uint8_t led_to_change = ( g_tick & 0x000 ) == 0 ? rand() % BACKLIGHT_LED_COUNT : 255;
+
+ for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
+ {
+ // If initialize, all get set to random colors
+ // If not, all but one will stay the same as before.
+ if ( initialize || i == led_to_change )
+ {
+ hsv.h = rand() & 0xFF;
+ hsv.s = rand() & 0xFF;
+ // Override brightness with global brightness control
+ hsv.v = g_config.brightness;;
+
+ rgb = hsv_to_rgb( hsv );
+ backlight_set_color( i, rgb.r, rgb.g, rgb.b );
+ }
+ }
+}
+
+void backlight_effect_cycle_radial1(void)
+{
+ uint8_t offset = ( g_tick << g_config.effect_speed ) & 0xFF;
+ HSV hsv = { .h = 0, .s = 255, .v = g_config.brightness };
+ RGB rgb;
+ Point point;
+ for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
+ {
+ map_led_to_point_polar( i, &point );
+ // Relies on hue being 8-bit and wrapping
+ hsv.h = point.x + offset;
+ hsv.s = point.y;
+ rgb = hsv_to_rgb( hsv );
+ backlight_set_color( i, rgb.r, rgb.g, rgb.b );
+ }
+}
+
+void backlight_effect_cycle_radial2(void)
+{
+ uint8_t offset = ( g_tick << g_config.effect_speed ) & 0xFF;
+
+ HSV hsv = { .h = 0, .s = g_config.color_1.s, .v = g_config.brightness };
+ RGB rgb;
+ Point point;
+ for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
+ {
+ map_led_to_point_polar( i, &point );
+ uint8_t offset2 = offset + point.x;
+ if ( offset2 & 0x80 )
+ {
+ offset2 = ~offset2;
+ }
+ offset2 = offset2 >> 2;
+ hsv.h = g_config.color_1.h + offset2;
+ hsv.s = 127 + ( point.y >> 1 );
+ rgb = hsv_to_rgb( hsv );
+ backlight_set_color( i, rgb.r, rgb.g, rgb.b );
+ }
+}
+
+#if defined(RGB_BACKLIGHT_M6_B)
+void backlight_effect_custom_colors(void)
+{
+ RGB rgb;
+ for ( uint8_t i = 0; i < 6; i++ )
+ {
+ HSV hsv = { .h = g_config.custom_color[i].h, .s = g_config.custom_color[i].s, .v = g_config.brightness };
+ rgb = hsv_to_rgb( hsv );
+ uint8_t led;
+ map_row_column_to_led( 0, i, &led );
+ backlight_set_color( led, rgb.r, rgb.g, rgb.b );
+ }
+}
+#endif
+
+void backlight_effect_indicators_set_colors( uint8_t index, HS color )
+{
+ HSV hsv = { .h = color.h, .s = color.s, .v = g_config.brightness };
+ RGB rgb = hsv_to_rgb( hsv );
+ if ( index == 254 )
+ {
+ backlight_set_color_all( rgb.r, rgb.g, rgb.b );
+ }
+ else
+ {
+ backlight_set_color( index, rgb.r, rgb.g, rgb.b );
+
+ // If the spacebar LED is the indicator,
+ // do the same for the spacebar stabilizers
+ if ( index == 36+0 ) // LC0
+ {
+#if defined (RGB_BACKLIGHT_ZEAL65)
+ backlight_set_color( 36+7, rgb.r, rgb.g, rgb.b ); // LC7
+ backlight_set_color( 54+14, rgb.r, rgb.g, rgb.b ); // LD14
+#elif defined (RGB_BACKLIGHT_KOYU)
+ backlight_set_color( 36+6, rgb.r, rgb.g, rgb.b ); // LC6
+ backlight_set_color( 54+14, rgb.r, rgb.g, rgb.b ); // LD14
+#elif defined (RGB_BACKLIGHT_ZEAL60) || defined (RGB_BACKLIGHT_M60_A)
+ backlight_set_color( 36+6, rgb.r, rgb.g, rgb.b ); // LC6
+ backlight_set_color( 54+13, rgb.r, rgb.g, rgb.b ); // LD13
+ if ( g_config.use_7u_spacebar )
+ {
+ backlight_set_color( 54+14, rgb.r, rgb.g, rgb.b ); // LD14
+ }
+#endif
+ }
+ }
+}
+
+// This runs after another backlight effect and replaces
+// colors already set
+void backlight_effect_indicators(void)
+{
+ if ( g_config.caps_lock_indicator.index != 255 &&
+ ( g_indicator_state & (1<<USB_LED_CAPS_LOCK) ) )
+ {
+ backlight_effect_indicators_set_colors( g_config.caps_lock_indicator.index, g_config.caps_lock_indicator.color );
+ }
+
+ // This if/else if structure allows higher layers to
+ // override lower ones. If we set layer 3's indicator
+ // to none, then it will NOT show layer 2 or layer 1
+ // indicators, even if those layers are on via the
+ // MO13/MO23 Fn combo magic.
+ //
+ // Basically we want to handle the case where layer 3 is
+ // still the backlight configuration layer and we don't
+ // want "all LEDs" indicators hiding the backlight effect,
+ // but still allow end users to do whatever they want.
+ if ( IS_LAYER_ON(3) )
+ {
+ if ( g_config.layer_3_indicator.index != 255 )
+ {
+ backlight_effect_indicators_set_colors( g_config.layer_3_indicator.index, g_config.layer_3_indicator.color );
+ }
+ }
+ else if ( IS_LAYER_ON(2) )
+ {
+ if ( g_config.layer_2_indicator.index != 255 )
+ {
+ backlight_effect_indicators_set_colors( g_config.layer_2_indicator.index, g_config.layer_2_indicator.color );
+ }
+ }
+ else if ( IS_LAYER_ON(1) )
+ {
+ if ( g_config.layer_1_indicator.index != 255 )
+ {
+ backlight_effect_indicators_set_colors( g_config.layer_1_indicator.index, g_config.layer_1_indicator.color );
+ }
+ }
+}
+
+ISR(TIMER3_COMPA_vect)
+{
+ // delay 1 second before driving LEDs or doing anything else
+ static uint8_t startup_tick = 0;
+ if ( startup_tick < 20 )
+ {
+ startup_tick++;
+ return;
+ }
+
+ g_tick++;
+
+ if ( g_any_key_hit < 0xFFFFFFFF )
+ {
+ g_any_key_hit++;
+ }
+
+ for ( int led = 0; led < BACKLIGHT_LED_COUNT; led++ )
+ {
+ if ( g_key_hit[led] < 255 )
+ {
+ g_key_hit[led]++;
+ }
+ }
+
+ // Factory default magic value
+ if ( g_config.effect == 255 )
+ {
+ backlight_effect_rgb_test();
+ return;
+ }
+
+ // Ideally we would also stop sending zeros to the LED driver PWM buffers
+ // while suspended and just do a software shutdown. This is a cheap hack for now.
+ bool suspend_backlight = ((g_suspend_state && g_config.disable_when_usb_suspended) ||
+ (g_config.disable_after_timeout > 0 && g_any_key_hit > g_config.disable_after_timeout * 60 * 20));
+ uint8_t effect = suspend_backlight ? 0 : g_config.effect;
+
+ // Keep track of the effect used last time,
+ // detect change in effect, so each effect can
+ // have an optional initialization.
+ static uint8_t effect_last = 255;
+ bool initialize = effect != effect_last;
+ effect_last = effect;
+
+ // this gets ticked at 20 Hz.
+ // each effect can opt to do calculations
+ // and/or request PWM buffer updates.
+ switch ( effect )
+ {
+ case 0:
+ backlight_effect_all_off();
+ break;
+ case 1:
+ backlight_effect_solid_color();
+ break;
+ case 2:
+#if defined(RGB_BACKLIGHT_M6_B)
+ backlight_effect_custom_colors();
+#else
+ backlight_effect_alphas_mods();
+#endif
+ break;
+ case 3:
+ backlight_effect_gradient_up_down();
+ break;
+ case 4:
+ backlight_effect_raindrops( initialize );
+ break;
+ case 5:
+ backlight_effect_cycle_all();
+ break;
+ case 6:
+ backlight_effect_cycle_left_right();
+ break;
+ case 7:
+ backlight_effect_cycle_up_down();
+ break;
+ case 8:
+ backlight_effect_jellybean_raindrops( initialize );
+ break;
+ case 9:
+ backlight_effect_cycle_radial1();
+ break;
+ case 10:
+ backlight_effect_cycle_radial2();
+ break;
+ default:
+ backlight_effect_all_off();
+ break;
+ }
+
+ if ( ! suspend_backlight )
+ {
+#if !defined(RGB_BACKLIGHT_M6_B)
+ backlight_effect_indicators();
+#endif
+ }
+}
+
+void backlight_set_indicator_index( uint8_t *index, uint8_t row, uint8_t column )
+{
+ if ( row >= MATRIX_ROWS )
+ {
+ // Special value, 255=none, 254=all
+ *index = row;
+ }
+ else
+ {
+ map_row_column_to_led( row, column, index );
+ }
+}
+
+void backlight_get_indicator_row_col( uint8_t index, uint8_t *row, uint8_t *column )
+{
+ if ( index == 255 || index == 254 )
+ {
+ // Special value, 255=none, 254=all
+ *row = index;
+ *column = 0;
+ return;
+ }
+ for ( uint8_t r = 0; r < MATRIX_ROWS; r++ )
+ {
+ for ( uint8_t c = 0; c < MATRIX_COLS; c++ )
+ {
+ uint8_t i = 255;
+ map_row_column_to_led( r, c, &i );
+ if ( i == index )
+ {
+ *row = r;
+ *column = c;
+ return;
+ }
+ }
+ }
+}
+
+// Some helpers for setting/getting HSV
+void _set_color( HS *color, uint8_t *data )
+{
+ color->h = data[0];
+ color->s = data[1];
+}
+
+void _get_color( HS *color, uint8_t *data )
+{
+ data[0] = color->h;
+ data[1] = color->s;
+}
+
+void backlight_config_set_value( uint8_t *data )
+{
+ bool reinitialize = false;
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+ switch ( *value_id )
+ {
+#if defined (RGB_BACKLIGHT_ZEAL60) || defined(RGB_BACKLIGHT_ZEAL65)
+ case id_use_split_backspace:
+ {
+ g_config.use_split_backspace = (bool)*value_data;
+ reinitialize = true;
+ break;
+ }
+#endif
+#if defined (RGB_BACKLIGHT_ZEAL60)
+ case id_use_split_left_shift:
+ {
+ g_config.use_split_left_shift = (bool)*value_data;
+ reinitialize = true;
+ break;
+ }
+ case id_use_split_right_shift:
+ {
+ g_config.use_split_right_shift = (bool)*value_data;
+ reinitialize = true;
+ break;
+ }
+ case id_use_7u_spacebar:
+ {
+ g_config.use_7u_spacebar = (bool)*value_data;
+ reinitialize = true;
+ break;
+ }
+ case id_use_iso_enter:
+ {
+ g_config.use_iso_enter = (bool)*value_data;
+ reinitialize = true;
+ break;
+ }
+ case id_disable_hhkb_blocker_leds:
+ {
+ g_config.disable_hhkb_blocker_leds = (bool)*value_data;
+ reinitialize = true;
+ break;
+ }
+#endif
+ case id_disable_when_usb_suspended:
+ {
+ g_config.disable_when_usb_suspended = (bool)*value_data;
+ break;
+ }
+ case id_disable_after_timeout:
+ {
+ g_config.disable_after_timeout = *value_data;
+ break;
+ }
+ case id_brightness:
+ {
+ g_config.brightness = *value_data;
+ break;
+ }
+ case id_effect:
+ {
+ g_config.effect = *value_data;
+ break;
+ }
+ case id_effect_speed:
+ {
+ g_config.effect_speed = *value_data;
+ break;
+ }
+ case id_color_1:
+ {
+ _set_color( &(g_config.color_1), value_data );
+ break;
+ }
+ case id_color_2:
+ {
+ _set_color( &(g_config.color_2), value_data );
+ break;
+ }
+ case id_caps_lock_indicator_color:
+ {
+ _set_color( &(g_config.caps_lock_indicator.color), value_data );
+ break;
+ }
+ case id_caps_lock_indicator_row_col:
+ {
+ backlight_set_indicator_index( &(g_config.caps_lock_indicator.index), value_data[0], value_data[1] );
+ break;
+ }
+ case id_layer_1_indicator_color:
+ {
+ _set_color( &(g_config.layer_1_indicator.color), value_data );
+ break;
+ }
+ case id_layer_1_indicator_row_col:
+ {
+ backlight_set_indicator_index( &(g_config.layer_1_indicator.index), value_data[0], value_data[1] );
+ break;
+ }
+ case id_layer_2_indicator_color:
+ {
+ _set_color( &(g_config.layer_2_indicator.color), value_data );
+ break;
+ }
+ case id_layer_2_indicator_row_col:
+ {
+ backlight_set_indicator_index( &(g_config.layer_2_indicator.index), value_data[0], value_data[1] );
+ break;
+ }
+ case id_layer_3_indicator_color:
+ {
+ _set_color( &(g_config.layer_3_indicator.color), value_data );
+ break;
+ }
+ case id_layer_3_indicator_row_col:
+ {
+ backlight_set_indicator_index( &(g_config.layer_3_indicator.index), value_data[0], value_data[1] );
+ break;
+ }
+ case id_alphas_mods:
+ {
+ for ( int i=0; i<5; i++ )
+ {
+ g_config.alphas_mods[i] = ( *(value_data+i*2) << 8 ) | ( *(value_data+i*2+1) );
+ }
+ }
+#if defined(RGB_BACKLIGHT_M6_B)
+ case id_custom_color:
+ {
+ uint8_t index = value_data[0];
+ if ( index >= 0 && index <= 6 )
+ {
+ _set_color( &(g_config.custom_color[index]), &(value_data[1]) );
+ }
+ }
+#endif
+ }
+
+ if ( reinitialize )
+ {
+ backlight_init_drivers();
+ }
+}
+
+void backlight_config_get_value( uint8_t *data )
+{
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+ switch ( *value_id )
+ {
+ case id_use_split_backspace:
+ {
+ *value_data = ( g_config.use_split_backspace ? 1 : 0 );
+ break;
+ }
+ case id_use_split_left_shift:
+ {
+ *value_data = ( g_config.use_split_left_shift ? 1 : 0 );
+ break;
+ }
+ case id_use_split_right_shift:
+ {
+ *value_data = ( g_config.use_split_right_shift ? 1 : 0 );
+ break;
+ }
+ case id_use_7u_spacebar:
+ {
+ *value_data = ( g_config.use_7u_spacebar ? 1 : 0 );
+ break;
+ }
+ case id_use_iso_enter:
+ {
+ *value_data = ( g_config.use_iso_enter ? 1 : 0 );
+ break;
+ }
+ case id_disable_when_usb_suspended:
+ {
+ *value_data = ( g_config.disable_when_usb_suspended ? 1 : 0 );
+ break;
+ }
+ case id_disable_hhkb_blocker_leds:
+ {
+ *value_data = ( g_config.disable_hhkb_blocker_leds ? 1 : 0 );
+ break;
+ }
+ case id_disable_after_timeout:
+ {
+ *value_data = g_config.disable_after_timeout;
+ break;
+ }
+ case id_brightness:
+ {
+ *value_data = g_config.brightness;
+ break;
+ }
+ case id_effect:
+ {
+ *value_data = g_config.effect;
+ break;
+ }
+ case id_effect_speed:
+ {
+ *value_data = g_config.effect_speed;
+ break;
+ }
+ case id_color_1:
+ {
+ _get_color( &(g_config.color_1), value_data );
+ break;
+ }
+ case id_color_2:
+ {
+ _get_color( &(g_config.color_2), value_data );
+ break;
+ }
+ case id_caps_lock_indicator_color:
+ {
+ _get_color( &(g_config.caps_lock_indicator.color), value_data );
+ break;
+ }
+ case id_caps_lock_indicator_row_col:
+ {
+ backlight_get_indicator_row_col( g_config.caps_lock_indicator.index, &(value_data[0]), &(value_data[1]) );
+ break;
+ }
+ case id_layer_1_indicator_color:
+ {
+ _get_color( &(g_config.layer_1_indicator.color), value_data );
+ break;
+ }
+ case id_layer_1_indicator_row_col:
+ {
+ backlight_get_indicator_row_col( g_config.layer_1_indicator.index, &(value_data[0]), &(value_data[1]) );
+ break;
+ }
+ case id_layer_2_indicator_color:
+ {
+ _get_color( &(g_config.layer_2_indicator.color), value_data );
+ break;
+ }
+ case id_layer_2_indicator_row_col:
+ {
+ backlight_get_indicator_row_col( g_config.layer_2_indicator.index, &(value_data[0]), &(value_data[1]) );
+ break;
+ }
+ case id_layer_3_indicator_color:
+ {
+ _get_color( &(g_config.layer_3_indicator.color), value_data );
+ break;
+ }
+ case id_layer_3_indicator_row_col:
+ {
+ backlight_get_indicator_row_col( g_config.layer_3_indicator.index, &(value_data[0]), &(value_data[1]) );
+ break;
+ }
+ case id_alphas_mods:
+ {
+ for ( int i=0; i<5; i++ )
+ {
+ *(value_data+i*2) = g_config.alphas_mods[i] >> 8;
+ *(value_data+i*2+1) = g_config.alphas_mods[i] & 0xFF;
+ }
+ }
+#if defined(RGB_BACKLIGHT_M6_B)
+ case id_custom_color:
+ {
+ uint8_t index = value_data[0];
+ if ( index >= 0 && index <= 6 )
+ {
+ _get_color( &(g_config.custom_color[index]), &(value_data[1]) );
+ }
+ }
+#endif
+ }
+}
+
+void backlight_config_set_alphas_mods( uint16_t *alphas_mods )
+{
+ for ( int i=0; i<5; i++ )
+ {
+ g_config.alphas_mods[i] = alphas_mods[i];
+ }
+
+ backlight_config_save();
+}
+
+void backlight_config_load(void)
+{
+ eeprom_read_block( &g_config, ((void*)RGB_BACKLIGHT_CONFIG_EEPROM_ADDR), sizeof(backlight_config) );
+}
+
+void backlight_config_save(void)
+{
+ eeprom_update_block( &g_config, ((void*)RGB_BACKLIGHT_CONFIG_EEPROM_ADDR), sizeof(backlight_config) );
+}
+
+void backlight_init_drivers(void)
+{
+ // Initialize I2C
+ i2c_init();
+
+#if defined(RGB_BACKLIGHT_M6_B)
+ IS31FL3218_init();
+#else
+ IS31FL3731_init( ISSI_ADDR_1 );
+ IS31FL3731_init( ISSI_ADDR_2 );
+
+ for ( int index = 0; index < BACKLIGHT_LED_COUNT; index++ )
+ {
+ // OR the possible "disabled" cases together, then NOT the result to get the enabled state
+ // LC6 LD13 not present on Zeal65
+#if defined (RGB_BACKLIGHT_ZEAL65)
+ bool enabled = !( ( index == 18+5 && !g_config.use_split_backspace ) || // LB5
+ ( index == 36+6 ) || // LC6
+ ( index == 54+13 ) ); // LD13
+#elif defined (RGB_BACKLIGHT_KOYU)
+ bool enabled = !( ( index == 36+15 ) || // LC15
+ ( index == 54+13 ) || // LD13
+ ( index == 54+17 ) ); // LD17
+#elif defined (RGB_BACKLIGHT_M60_A)
+ bool enabled = !(
+ // LB6 LB7 LB8 LB15 LB16 LB17 not present on M60-A
+ ( index == 18+6 ) || // LB6
+ ( index == 18+7 ) || // LB7
+ ( index == 18+8 ) || // LB8
+ ( index == 18+15 ) || // LB15
+ ( index == 18+16 ) || // LB16
+ ( index == 18+17 ) || // LB17
+ // HHKB blockers (LC17, LD17) and ISO extra keys (LC15,LD13) not present on M60-A
+ ( index == 36+17 ) || // LC17
+ ( index == 54+17 ) || // LD17
+ ( index == 36+15 ) || // LC15
+ ( index == 54+13 ) ); // LD13
+#elif defined (RGB_BACKLIGHT_ZEAL60)
+ // LB6 LB7 LB8 LB15 LB16 LB17 not present on Zeal60
+ bool enabled = !( ( index == 18+5 && !g_config.use_split_backspace ) || // LB5
+ ( index == 36+15 && !g_config.use_split_left_shift ) || // LC15
+ ( index == 54+8 && !g_config.use_split_right_shift ) || // LD8
+ ( index == 54+13 && g_config.use_7u_spacebar ) || // LD13
+ ( index == 36+17 && g_config.disable_hhkb_blocker_leds ) || // LC17
+ ( index == 54+17 && g_config.disable_hhkb_blocker_leds ) || // LD17
+ ( index == 18+6 ) || // LB6
+ ( index == 18+7 ) || // LB7
+ ( index == 18+8 ) || // LB8
+ ( index == 18+15 ) || // LB15
+ ( index == 18+16 ) || // LB16
+ ( index == 18+17 ) ); // LB17
+#endif
+ // This only caches it for later
+ IS31FL3731_set_led_control_register( index, enabled, enabled, enabled );
+ }
+ // This actually updates the LED drivers
+ IS31FL3731_update_led_control_registers( ISSI_ADDR_1, ISSI_ADDR_2 );
+#endif // !defined(RGB_BACKLIGHT_M6_B)
+
+ // TODO: put the 1 second startup delay here?
+
+ // clear the key hits
+ for ( int led=0; led<BACKLIGHT_LED_COUNT; led++ )
+ {
+ g_key_hit[led] = 255;
+ }
+}
+
+bool process_record_backlight(uint16_t keycode, keyrecord_t *record)
+{
+ // Record keypresses for backlight effects
+ if ( record->event.pressed )
+ {
+ backlight_set_key_hit( record->event.key.row, record->event.key.col );
+ }
+
+ switch(keycode)
+ {
+ case BR_INC:
+ if (record->event.pressed)
+ {
+ backlight_brightness_increase();
+ }
+ return false;
+ break;
+ case BR_DEC:
+ if (record->event.pressed)
+ {
+ backlight_brightness_decrease();
+ }
+ return false;
+ break;
+ case EF_INC:
+ if (record->event.pressed)
+ {
+ backlight_effect_increase();
+ }
+ return false;
+ break;
+ case EF_DEC:
+ if (record->event.pressed)
+ {
+ backlight_effect_decrease();
+ }
+ return false;
+ break;
+ case ES_INC:
+ if (record->event.pressed)
+ {
+ backlight_effect_speed_increase();
+ }
+ return false;
+ break;
+ case ES_DEC:
+ if (record->event.pressed)
+ {
+ backlight_effect_speed_decrease();
+ }
+ return false;
+ break;
+ case H1_INC:
+ if (record->event.pressed)
+ {
+ backlight_color_1_hue_increase();
+ }
+ return false;
+ break;
+ case H1_DEC:
+ if (record->event.pressed)
+ {
+ backlight_color_1_hue_decrease();
+ }
+ return false;
+ break;
+ case S1_INC:
+ if (record->event.pressed)
+ {
+ backlight_color_1_sat_increase();
+ }
+ return false;
+ break;
+ case S1_DEC:
+ if (record->event.pressed)
+ {
+ backlight_color_1_sat_decrease();
+ break;
+ }
+ return false;
+ break;
+ case H2_INC:
+ if (record->event.pressed)
+ {
+ backlight_color_2_hue_increase();
+ }
+ return false;
+ break;
+ case H2_DEC:
+ if (record->event.pressed)
+ {
+ backlight_color_2_hue_decrease();
+ }
+ return false;
+ break;
+ case S2_INC:
+ if (record->event.pressed)
+ {
+ backlight_color_2_sat_increase();
+ }
+ return false;
+ break;
+ case S2_DEC:
+ if (record->event.pressed)
+ {
+ backlight_color_2_sat_decrease();
+ break;
+ }
+ return false;
+ break;
+ }
+
+ return true;
+}
+
+// Deals with the messy details of incrementing an integer
+uint8_t increment( uint8_t value, uint8_t step, uint8_t min, uint8_t max )
+{
+ int16_t new_value = value;
+ new_value += step;
+ return MIN( MAX( new_value, min ), max );
+}
+
+uint8_t decrement( uint8_t value, uint8_t step, uint8_t min, uint8_t max )
+{
+ int16_t new_value = value;
+ new_value -= step;
+ return MIN( MAX( new_value, min ), max );
+}
+
+void backlight_effect_increase(void)
+{
+ g_config.effect = increment( g_config.effect, 1, 0, BACKLIGHT_EFFECT_MAX );
+ backlight_config_save();
+}
+
+void backlight_effect_decrease(void)
+{
+ g_config.effect = decrement( g_config.effect, 1, 0, BACKLIGHT_EFFECT_MAX );
+ backlight_config_save();
+}
+
+void backlight_effect_speed_increase(void)
+{
+ g_config.effect_speed = increment( g_config.effect_speed, 1, 0, 3 );
+ backlight_config_save();
+}
+
+void backlight_effect_speed_decrease(void)
+{
+ g_config.effect_speed = decrement( g_config.effect_speed, 1, 0, 3 );
+ backlight_config_save();
+}
+
+void backlight_brightness_increase(void)
+{
+ g_config.brightness = increment( g_config.brightness, 8, 0, 255 );
+ backlight_config_save();
+}
+
+void backlight_brightness_decrease(void)
+{
+ g_config.brightness = decrement( g_config.brightness, 8, 0, 255 );
+ backlight_config_save();
+}
+
+void backlight_color_1_hue_increase(void)
+{
+ g_config.color_1.h = increment( g_config.color_1.h, 8, 0, 255 );
+ backlight_config_save();
+}
+
+void backlight_color_1_hue_decrease(void)
+{
+ g_config.color_1.h = decrement( g_config.color_1.h, 8, 0, 255 );
+ backlight_config_save();
+}
+
+void backlight_color_1_sat_increase(void)
+{
+ g_config.color_1.s = increment( g_config.color_1.s, 8, 0, 255 );
+ backlight_config_save();
+}
+
+void backlight_color_1_sat_decrease(void)
+{
+ g_config.color_1.s = decrement( g_config.color_1.s, 8, 0, 255 );
+ backlight_config_save();
+}
+
+void backlight_color_2_hue_increase(void)
+{
+ g_config.color_2.h = increment( g_config.color_2.h, 8, 0, 255 );
+ backlight_config_save();
+}
+
+void backlight_color_2_hue_decrease(void)
+{
+ g_config.color_2.h = decrement( g_config.color_2.h, 8, 0, 255 );
+ backlight_config_save();
+}
+
+void backlight_color_2_sat_increase(void)
+{
+ g_config.color_2.s = increment( g_config.color_2.s, 8, 0, 255 );
+ backlight_config_save();
+}
+
+void backlight_color_2_sat_decrease(void)
+{
+ g_config.color_2.s = decrement( g_config.color_2.s, 8, 0, 255 );
+ backlight_config_save();
+}
+
+#if defined(RGB_DEBUGGING_ONLY)
+void backlight_test_led( uint8_t index, bool red, bool green, bool blue )
+{
+ for ( int i=0; i<BACKLIGHT_LED_COUNT; i++ )
+ {
+ if ( i == index )
+ {
+ IS31FL3731_set_led_control_register( i, red, green, blue );
+ }
+ else
+ {
+ IS31FL3731_set_led_control_register( i, false, false, false );
+ }
+ }
+}
+#endif // defined(RGB_DEBUGGING_ONLY)
+
+void backlight_debug_led( bool state )
+{
+ if (state)
+ {
+ // Output high.
+ DDRE |= (1<<6);
+ PORTE |= (1<<6);
+ }
+ else
+ {
+ // Output low.
+ DDRE &= ~(1<<6);
+ PORTE &= ~(1<<6);
+ }
+}
+
+#endif // BACKLIGHT_ENABLED
diff --git a/keyboards/zeal60/rgb_backlight.h b/keyboards/zeal60/rgb_backlight.h
new file mode 100644
index 000000000..aa24e3491
--- /dev/null
+++ b/keyboards/zeal60/rgb_backlight.h
@@ -0,0 +1,110 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#if RGB_BACKLIGHT_ENABLED
+#else
+#error rgb_backlight.h included when RGB_BACKLIGHT_ENABLED == 0
+#endif // RGB_BACKLIGHT_ENABLED
+
+#include <stdint.h>
+#include <stdbool.h>
+
+#include "quantum/color.h"
+
+typedef struct PACKED
+{
+ uint8_t h;
+ uint8_t s;
+} HS;
+
+typedef struct
+{
+ HS color;
+ uint8_t index;
+} backlight_config_indicator;
+
+typedef struct
+{
+ bool use_split_backspace:1; // |
+ bool use_split_left_shift:1; // |
+ bool use_split_right_shift:1; // |
+ bool use_7u_spacebar:1; // |
+ bool use_iso_enter:1; // |
+ bool disable_when_usb_suspended:1; // |
+ bool disable_hhkb_blocker_leds:1; // |
+ bool __pad7:1; // 1 byte
+ uint8_t disable_after_timeout; // 1 byte
+ uint8_t brightness; // 1 byte
+ uint8_t effect; // 1 byte
+ uint8_t effect_speed; // 1 byte
+ HS color_1; // 2 bytes
+ HS color_2; // 2 bytes
+ backlight_config_indicator caps_lock_indicator; // 3 bytes
+ backlight_config_indicator layer_1_indicator; // 3 bytes
+ backlight_config_indicator layer_2_indicator; // 3 bytes
+ backlight_config_indicator layer_3_indicator; // 3 bytes
+ uint16_t alphas_mods[5]; // 10 bytes
+#if defined(RGB_BACKLIGHT_M6_B)
+ HS custom_color[6]; // 12 bytes
+#endif
+} backlight_config; // = 31 bytes (M6-B = 43 bytes)
+
+void backlight_config_load(void);
+void backlight_config_save(void);
+void backlight_config_set_value( uint8_t *data );
+void backlight_config_get_value( uint8_t *data );
+
+void backlight_init_drivers(void);
+
+void backlight_timer_init(void);
+void backlight_timer_enable(void);
+void backlight_timer_disable(void);
+
+void backlight_set_suspend_state(bool state);
+void backlight_set_indicator_state(uint8_t state);
+
+// 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 backlight_update_pwm_buffers(void);
+
+// Handle backlight specific keycodes
+bool process_record_backlight(uint16_t keycode, keyrecord_t *record);
+
+void backlight_set_key_hit(uint8_t row, uint8_t col);
+
+void backlight_effect_increase(void);
+void backlight_effect_decrease(void);
+void backlight_effect_speed_increase(void);
+void backlight_effect_speed_decrease(void);
+
+void backlight_brightness_increase(void);
+void backlight_brightness_decrease(void);
+
+void backlight_color_1_hue_increase(void);
+void backlight_color_1_hue_decrease(void);
+void backlight_color_1_sat_increase(void);
+void backlight_color_1_sat_decrease(void);
+void backlight_color_2_hue_increase(void);
+void backlight_color_2_hue_decrease(void);
+void backlight_color_2_sat_increase(void);
+void backlight_color_2_sat_decrease(void);
+
+void backlight_test_led( uint8_t index, bool red, bool green, bool blue );
+void backlight_debug_led(bool state);
+
diff --git a/keyboards/zeal60/rgb_backlight_api.h b/keyboards/zeal60/rgb_backlight_api.h
new file mode 100644
index 000000000..680ba4d99
--- /dev/null
+++ b/keyboards/zeal60/rgb_backlight_api.h
@@ -0,0 +1,43 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+enum backlight_config_value
+{
+ id_use_split_backspace = 0x01,
+ id_use_split_left_shift = 0x02,
+ id_use_split_right_shift = 0x03,
+ id_use_7u_spacebar = 0x04,
+ id_use_iso_enter = 0x05,
+ id_disable_hhkb_blocker_leds = 0x06,
+ id_disable_when_usb_suspended = 0x07,
+ id_disable_after_timeout = 0x08,
+ id_brightness = 0x09,
+ id_effect = 0x0A,
+ id_effect_speed = 0x0B,
+ id_color_1 = 0x0C,
+ id_color_2 = 0x0D,
+ id_caps_lock_indicator_color = 0x0E,
+ id_caps_lock_indicator_row_col = 0x0F,
+ id_layer_1_indicator_color = 0x10,
+ id_layer_1_indicator_row_col = 0x11,
+ id_layer_2_indicator_color = 0x12,
+ id_layer_2_indicator_row_col = 0x13,
+ id_layer_3_indicator_color = 0x14,
+ id_layer_3_indicator_row_col = 0x15,
+ id_alphas_mods = 0x16,
+ id_custom_color = 0x17
+};
diff --git a/keyboards/zeal60/rgb_backlight_keycodes.h b/keyboards/zeal60/rgb_backlight_keycodes.h
new file mode 100644
index 000000000..ba7f03f89
--- /dev/null
+++ b/keyboards/zeal60/rgb_backlight_keycodes.h
@@ -0,0 +1,34 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+// This is hardcoded at 0x5F00 so it's well after keycode value SAFE_RANGE
+enum backlight_keycodes {
+ BR_INC = 0x5F00, // backlight brightness increase
+ BR_DEC, // backlight brightness decrease
+ EF_INC, // backlight effect increase
+ EF_DEC, // backlight effect decrease
+ ES_INC,
+ ES_DEC,
+ H1_INC,
+ H1_DEC,
+ S1_INC,
+ S1_DEC,
+ H2_INC,
+ H2_DEC,
+ S2_INC,
+ S2_DEC
+};
diff --git a/keyboards/zeal60/rules.mk b/keyboards/zeal60/rules.mk
new file mode 100644
index 000000000..1327d8821
--- /dev/null
+++ b/keyboards/zeal60/rules.mk
@@ -0,0 +1,79 @@
+
+
+# project specific files
+SRC = rgb_backlight.c \
+ quantum/color.c \
+ drivers/issi/is31fl3731.c \
+ drivers/avr/i2c_master.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = yes
+
+LAYOUTS = 60_ansi 60_iso 60_hhkb 60_ansi_split_bs_rshift
diff --git a/keyboards/zeal60/zeal60.c b/keyboards/zeal60/zeal60.c
new file mode 100644
index 000000000..5f93c571a
--- /dev/null
+++ b/keyboards/zeal60/zeal60.c
@@ -0,0 +1,377 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#include "zeal60.h"
+#include "zeal60_api.h"
+
+// Check that no backlight functions are called
+#if RGB_BACKLIGHT_ENABLED
+#include "rgb_backlight.h"
+#endif // BACKLIGHT_ENABLED
+
+#include "raw_hid.h"
+#include "dynamic_keymap.h"
+#include "timer.h"
+#include "tmk_core/common/eeprom.h"
+
+bool eeprom_is_valid(void)
+{
+ return (eeprom_read_word(((void*)EEPROM_MAGIC_ADDR)) == EEPROM_MAGIC &&
+ eeprom_read_byte(((void*)EEPROM_VERSION_ADDR)) == EEPROM_VERSION);
+}
+
+void eeprom_set_valid(bool valid)
+{
+ eeprom_update_word(((void*)EEPROM_MAGIC_ADDR), valid ? EEPROM_MAGIC : 0xFFFF);
+ eeprom_update_byte(((void*)EEPROM_VERSION_ADDR), valid ? EEPROM_VERSION : 0xFF);
+}
+
+void eeprom_reset(void)
+{
+ // Set the Zeal60 specific EEPROM state as invalid.
+ eeprom_set_valid(false);
+ // Set the TMK/QMK EEPROM state as invalid.
+ eeconfig_disable();
+}
+
+#ifdef RAW_ENABLE
+
+void raw_hid_receive( uint8_t *data, uint8_t length )
+{
+ uint8_t *command_id = &(data[0]);
+ uint8_t *command_data = &(data[1]);
+ switch ( *command_id )
+ {
+ case id_get_protocol_version:
+ {
+ command_data[0] = PROTOCOL_VERSION >> 8;
+ command_data[1] = PROTOCOL_VERSION & 0xFF;
+ break;
+ }
+ case id_get_keyboard_value:
+ {
+ if ( command_data[0] == id_uptime )
+ {
+ uint32_t value = timer_read32();
+ command_data[1] = (value >> 24 ) & 0xFF;
+ command_data[2] = (value >> 16 ) & 0xFF;
+ command_data[3] = (value >> 8 ) & 0xFF;
+ command_data[4] = value & 0xFF;
+ }
+ else
+ {
+ *command_id = id_unhandled;
+ }
+ break;
+ }
+#ifdef DYNAMIC_KEYMAP_ENABLE
+ case id_dynamic_keymap_get_keycode:
+ {
+ uint16_t keycode = dynamic_keymap_get_keycode( command_data[0], command_data[1], command_data[2] );
+ command_data[3] = keycode >> 8;
+ command_data[4] = keycode & 0xFF;
+ break;
+ }
+ case id_dynamic_keymap_set_keycode:
+ {
+ dynamic_keymap_set_keycode( command_data[0], command_data[1], command_data[2], ( command_data[3] << 8 ) | command_data[4] );
+ break;
+ }
+ case id_dynamic_keymap_reset:
+ {
+ dynamic_keymap_reset();
+ break;
+ }
+ case id_dynamic_keymap_macro_get_count:
+ {
+ command_data[0] = dynamic_keymap_macro_get_count();
+ break;
+ }
+ case id_dynamic_keymap_macro_get_buffer_size:
+ {
+ uint16_t size = dynamic_keymap_macro_get_buffer_size();
+ command_data[0] = size >> 8;
+ command_data[1] = size & 0xFF;
+ break;
+ }
+ case id_dynamic_keymap_macro_get_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_macro_get_buffer( offset, size, &command_data[3] );
+ break;
+ }
+ case id_dynamic_keymap_macro_set_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_macro_set_buffer( offset, size, &command_data[3] );
+ break;
+ }
+ case id_dynamic_keymap_macro_reset:
+ {
+ dynamic_keymap_macro_reset();
+ break;
+ }
+ case id_dynamic_keymap_get_layer_count:
+ {
+ command_data[0] = dynamic_keymap_get_layer_count();
+ break;
+ }
+ case id_dynamic_keymap_get_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_get_buffer( offset, size, &command_data[3] );
+ break;
+ }
+ case id_dynamic_keymap_set_buffer:
+ {
+ uint16_t offset = ( command_data[0] << 8 ) | command_data[1];
+ uint16_t size = command_data[2]; // size <= 28
+ dynamic_keymap_set_buffer( offset, size, &command_data[3] );
+ break;
+ }
+#endif // DYNAMIC_KEYMAP_ENABLE
+#if RGB_BACKLIGHT_ENABLED
+ case id_backlight_config_set_value:
+ {
+ backlight_config_set_value(command_data);
+ break;
+ }
+ case id_backlight_config_get_value:
+ {
+ backlight_config_get_value(command_data);
+ break;
+ }
+ case id_backlight_config_save:
+ {
+ backlight_config_save();
+ break;
+ }
+#endif // RGB_BACKLIGHT_ENABLED
+ case id_eeprom_reset:
+ {
+ eeprom_reset();
+ break;
+ }
+ case id_bootloader_jump:
+ {
+ // Need to send data back before the jump
+ // Informs host that the command is handled
+ raw_hid_send( data, length );
+ // Give host time to read it
+ wait_ms(100);
+ bootloader_jump();
+ break;
+ }
+ default:
+ {
+ // Unhandled message.
+ *command_id = id_unhandled;
+ break;
+ }
+ }
+
+ // Return same buffer with values changed
+ raw_hid_send( data, length );
+
+}
+
+#endif
+
+void main_init(void)
+{
+ // If the EEPROM has the magic, the data is good.
+ // OK to load from EEPROM.
+ if (eeprom_is_valid()) {
+#if RGB_BACKLIGHT_ENABLED
+ backlight_config_load();
+#endif // RGB_BACKLIGHT_ENABLED
+ } else {
+#if RGB_BACKLIGHT_ENABLED
+ // If the EEPROM has not been saved before, or is out of date,
+ // save the default values to the EEPROM. Default values
+ // come from construction of the zeal_backlight_config instance.
+ backlight_config_save();
+#endif // RGB_BACKLIGHT_ENABLED
+#ifdef DYNAMIC_KEYMAP_ENABLE
+ // This resets the keymaps in EEPROM to what is in flash.
+ dynamic_keymap_reset();
+ // This resets the macros in EEPROM to nothing.
+ dynamic_keymap_macro_reset();
+#endif
+ // Save the magic number last, in case saving was interrupted
+ eeprom_set_valid(true);
+ }
+
+#if RGB_BACKLIGHT_ENABLED
+ // Initialize LED drivers for backlight.
+ backlight_init_drivers();
+
+ backlight_timer_init();
+ backlight_timer_enable();
+#endif // RGB_BACKLIGHT_ENABLED
+}
+
+void bootmagic_lite(void)
+{
+ // The lite version of TMK's bootmagic.
+ // 100% less potential for accidentally making the
+ // keyboard do stupid things.
+
+ // We need multiple scans because debouncing can't be turned off.
+ matrix_scan();
+ wait_ms(DEBOUNCING_DELAY);
+ wait_ms(DEBOUNCING_DELAY);
+ matrix_scan();
+
+ // If the Esc (matrix 0,0) is held down on power up,
+ // reset the EEPROM valid state and jump to bootloader.
+ if ( matrix_get_row(0) & (1<<0) ) {
+ eeprom_reset();
+ bootloader_jump();
+ }
+}
+
+void matrix_init_kb(void)
+{
+ bootmagic_lite();
+ main_init();
+ matrix_init_user();
+}
+
+void matrix_scan_kb(void)
+{
+#if RGB_BACKLIGHT_ENABLED
+ // This only updates the LED driver buffers if something has changed.
+ backlight_update_pwm_buffers();
+#endif // BACKLIGHT_ENABLED
+ matrix_scan_user();
+}
+
+bool process_record_kb(uint16_t keycode, keyrecord_t *record)
+{
+#if RGB_BACKLIGHT_ENABLED
+ process_record_backlight(keycode, record);
+#endif // BACKLIGHT_ENABLED
+
+ switch(keycode) {
+ case FN_MO13:
+ if (record->event.pressed) {
+ layer_on(1);
+ update_tri_layer(1, 2, 3);
+ } else {
+ layer_off(1);
+ update_tri_layer(1, 2, 3);
+ }
+ return false;
+ break;
+ case FN_MO23:
+ if (record->event.pressed) {
+ layer_on(2);
+ update_tri_layer(1, 2, 3);
+ } else {
+ layer_off(2);
+ update_tri_layer(1, 2, 3);
+ }
+ return false;
+ break;
+ }
+
+#ifdef DYNAMIC_KEYMAP_ENABLE
+ // Handle macros
+ if (record->event.pressed) {
+ if ( keycode >= MACRO00 && keycode <= MACRO15 )
+ {
+ uint8_t id = keycode - MACRO00;
+ dynamic_keymap_macro_send(id);
+ return false;
+ }
+ }
+#endif //DYNAMIC_KEYMAP_ENABLE
+
+ return process_record_user(keycode, record);
+}
+
+// This overrides the one in quantum/keymap_common.c
+uint16_t keymap_function_id_to_action( uint16_t function_id )
+{
+ // Zeal60 specific "action functions" are 0xF00 to 0xFFF
+ // i.e. F(0xF00) to F(0xFFF) are mapped to
+ // enum zeal60_action_functions by masking last 8 bits.
+ if ( function_id >= 0x0F00 && function_id <= 0x0FFF )
+ {
+ uint8_t id = function_id & 0xFF;
+ switch ( id ) {
+ case TRIPLE_TAP_1_3:
+ case TRIPLE_TAP_2_3:
+ {
+ return ACTION_FUNCTION_TAP(id);
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+ return pgm_read_word(&fn_actions[function_id]);
+}
+
+
+// Zeal60 specific "action functions"
+void action_function(keyrecord_t *record, uint8_t id, uint8_t opt)
+{
+ switch (id)
+ {
+ case TRIPLE_TAP_1_3:
+ case TRIPLE_TAP_2_3:
+ if (record->event.pressed) {
+ layer_on( id == TRIPLE_TAP_1_3 ? 1 : 2 );
+ if (record->tap.count && !record->tap.interrupted) {
+ if (record->tap.count >= 3) {
+ layer_invert(3);
+ }
+ } else {
+ record->tap.count = 0;
+ }
+ } else {
+ layer_off( id == TRIPLE_TAP_1_3 ? 1 : 2 );
+ }
+ break;
+ }
+}
+
+void led_set_kb(uint8_t usb_led)
+{
+#if RGB_BACKLIGHT_ENABLED
+ backlight_set_indicator_state(usb_led);
+#endif // RGB_BACKLIGHT_ENABLED
+}
+
+void suspend_power_down_kb(void)
+{
+#if RGB_BACKLIGHT_ENABLED
+ backlight_set_suspend_state(true);
+#endif // RGB_BACKLIGHT_ENABLED
+}
+
+void suspend_wakeup_init_kb(void)
+{
+#if RGB_BACKLIGHT_ENABLED
+ backlight_set_suspend_state(false);
+#endif // RGB_BACKLIGHT_ENABLED
+}
+
diff --git a/keyboards/zeal60/zeal60.h b/keyboards/zeal60/zeal60.h
new file mode 100644
index 000000000..ef9de7989
--- /dev/null
+++ b/keyboards/zeal60/zeal60.h
@@ -0,0 +1,93 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+#include "rgb_backlight_keycodes.h"
+#include "zeal60_keycodes.h"
+
+#define XXX KC_NO
+
+#define LAYOUT_60_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K47, 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, XXX, K47, XXX, XXX, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
+ K40, K41, K42, K47, 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, XXX }, \
+ { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX }, \
+ { K40, K41, K42, XXX, XXX, XXX, XXX, K47, XXX, XXX, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_iso( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
+ K40, K41, K42, K47, 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, XXX }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX }, \
+ { K40, K41, K42, XXX, XXX, XXX, XXX, K47, 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, K2D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K47, 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, XXX, K47, XXX, XXX, K4A, K4B, K4C, K4D } \
+}
+
+#define LAYOUT_60_hhkb( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K41, K42, K47, K4B, K4C \
+) { \
+ { 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 }, \
+ { XXX, K41, K42, XXX, XXX, XXX, XXX, K47, XXX, XXX, XXX, K4B, K4C, XXX } \
+}
+
diff --git a/keyboards/zeal60/zeal60_api.h b/keyboards/zeal60/zeal60_api.h
new file mode 100644
index 000000000..8061146fd
--- /dev/null
+++ b/keyboards/zeal60/zeal60_api.h
@@ -0,0 +1,48 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#define PROTOCOL_VERSION 0x0008
+
+enum zeal60_command_id
+{
+ id_get_protocol_version = 0x01, // always 0x01
+ id_get_keyboard_value,
+ id_set_keyboard_value,
+ id_dynamic_keymap_get_keycode,
+ id_dynamic_keymap_set_keycode,
+ id_dynamic_keymap_reset,
+ id_backlight_config_set_value,
+ id_backlight_config_get_value,
+ id_backlight_config_save,
+ id_eeprom_reset,
+ id_bootloader_jump,
+ id_dynamic_keymap_macro_get_count,
+ id_dynamic_keymap_macro_get_buffer_size,
+ id_dynamic_keymap_macro_get_buffer,
+ id_dynamic_keymap_macro_set_buffer,
+ id_dynamic_keymap_macro_reset,
+ id_dynamic_keymap_get_layer_count,
+ id_dynamic_keymap_get_buffer,
+ id_dynamic_keymap_set_buffer,
+ id_unhandled = 0xFF,
+};
+
+enum zeal60_keyboard_value_id
+{
+ id_uptime = 0x01
+};
+
diff --git a/keyboards/zeal60/zeal60_keycodes.h b/keyboards/zeal60/zeal60_keycodes.h
new file mode 100644
index 000000000..d9abf602b
--- /dev/null
+++ b/keyboards/zeal60/zeal60_keycodes.h
@@ -0,0 +1,58 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+// Can't use SAFE_RANGE here, it might change if someone adds
+// new values to enum quantum_keycodes.
+// Need to keep checking 0x5F10 is still in the safe range.
+// TODO: merge this into quantum_keycodes
+// Backlight keycodes are in range 0x5F00-0x5F0F
+enum zeal60_keycodes {
+ FN_MO13 = 0x5F10,
+ FN_MO23,
+ MACRO00,
+ MACRO01,
+ MACRO02,
+ MACRO03,
+ MACRO04,
+ MACRO05,
+ MACRO06,
+ MACRO07,
+ MACRO08,
+ MACRO09,
+ MACRO10,
+ MACRO11,
+ MACRO12,
+ MACRO13,
+ MACRO14,
+ MACRO15,
+};
+
+// Zeal60 specific "action functions"
+// These are only valid IDs in action_function()
+// Use FN_TT13, FN_TT23, etc. in keymaps
+enum zeal60_action_functions {
+ TRIPLE_TAP_1_3 = 0x31,
+ TRIPLE_TAP_2_3 = 0x32
+};
+
+// Bitwise OR the above with 0x0F00 to use in F(x) macro
+// This reserves the top 256 of the 4096 range of F(x) keycodes,
+// leaving the rest for use in fn_actions[] or actions in EEPROM.
+#define FN_TT13 F((0x0F00|TRIPLE_TAP_1_3))
+#define FN_TT23 F((0x0F00|TRIPLE_TAP_2_3))
+
+#define TG_NKRO MAGIC_TOGGLE_NKRO
diff --git a/keyboards/zeal65/config.h b/keyboards/zeal65/config.h
new file mode 100644
index 000000000..24aae5e36
--- /dev/null
+++ b/keyboards/zeal65/config.h
@@ -0,0 +1,129 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "config_common.h"
+
+// USB Device descriptor parameter
+#define VENDOR_ID 0x5A45 // ZealPC ("ZE")
+#define PRODUCT_ID 0x0065 // Zeal65
+#define DEVICE_VER 0x0001
+#define MANUFACTURER ZealPC
+#define PRODUCT Zeal65
+#define DESCRIPTION Zeal65
+
+// key matrix size
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+// Zeal60 PCB default pin-out
+#define MATRIX_ROW_PINS { F0, F1, F4, F6, F7 }
+#define MATRIX_COL_PINS { F5, D5, B1, B2, B3, D3, D2, C7, C6, B6, B5, B4, D7, D6, D4 }
+#define UNUSED_PINS
+
+// IS31FL3731 driver
+#define DRIVER_COUNT 2
+#define DRIVER_LED_TOTAL 72
+
+// COL2ROW or ROW2COL
+#define DIODE_DIRECTION COL2ROW
+
+// Set 0 if debouncing isn't needed
+#define DEBOUNCING_DELAY 5
+
+// Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap
+#define LOCKING_SUPPORT_ENABLE
+// Locking resynchronize hack
+#define LOCKING_RESYNC_ENABLE
+
+// key combination for command
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+// disable debug print
+//#define NO_DEBUG
+
+// disable print
+//#define NO_PRINT
+
+// disable action features
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+//#define NO_ACTION_MACRO
+//#define NO_ACTION_FUNCTION
+
+#define RGB_BACKLIGHT_ENABLED 1
+
+// This conditionally compiles the backlight code for Zeal65 specifics
+#define RGB_BACKLIGHT_ZEAL65
+
+// enable/disable LEDs based on layout
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
+#define RGB_BACKLIGHT_USE_SPLIT_LEFT_SHIFT 0 // Unused
+#define RGB_BACKLIGHT_USE_SPLIT_RIGHT_SHIFT 0 // Unused
+#define RGB_BACKLIGHT_USE_7U_SPACEBAR 1 // Used only for stab LED matching spacebar LED
+#define RGB_BACKLIGHT_USE_ISO_ENTER 0 // Unused
+#define RGB_BACKLIGHT_DISABLE_HHKB_BLOCKER_LEDS 0
+
+// disable backlight when USB suspended (PC sleep/hibernate/shutdown)
+#define RGB_BACKLIGHT_DISABLE_WHEN_USB_SUSPENDED 0
+
+// disable backlight after timeout in minutes, 0 = no timeout
+#define RGB_BACKLIGHT_DISABLE_AFTER_TIMEOUT 0
+
+// the default effect (RGB test)
+#define RGB_BACKLIGHT_EFFECT 255
+
+// These define which keys in the matrix are alphas/mods
+// Used for backlight effects so colors are different for
+// alphas vs. mods
+// Each value is for a row, bit 0 is column 0
+// Alpha=0 Mod=1
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_0 0b0110000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_1 0b0100000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_2 0b0101000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_3 0b0111000000000001
+#define RGB_BACKLIGHT_ALPHAS_MODS_ROW_4 0b0111110000000011
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 4
+
+// EEPROM usage
+
+// TODO: refactor with new user EEPROM code (coming soon)
+#define EEPROM_MAGIC 0x451F
+#define EEPROM_MAGIC_ADDR 32
+// Bump this every time we change what we store
+// This will automatically reset the EEPROM with defaults
+// and avoid loading invalid data from the EEPROM
+#define EEPROM_VERSION 0x08
+#define EEPROM_VERSION_ADDR 34
+
+// Backlight config starts after EEPROM version
+#define RGB_BACKLIGHT_CONFIG_EEPROM_ADDR 35
+// Dynamic keymap starts after backlight config (35+31)
+#define DYNAMIC_KEYMAP_EEPROM_ADDR 66
+// Dynamic macro starts after dynamic keymaps (66+(4*5*15*2)) = (66+600)
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR 666
+#define DYNAMIC_KEYMAP_MACRO_EEPROM_SIZE 358
+#define DYNAMIC_KEYMAP_MACRO_COUNT 16
+
diff --git a/keyboards/zeal65/info.json b/keyboards/zeal65/info.json
new file mode 100644
index 000000000..94a090689
--- /dev/null
+++ b/keyboards/zeal65/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "Zeal65",
+ "url": "",
+ "maintainer": "Wilba",
+ "bootloader": "DFU",
+ "width": 16,
+ "height": 5,
+ "layouts": {
+ "LAYOUT_65_split_bs": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"|", "x":13, "y":0}, {"label":"Del", "x":14, "y":0}, {"label":"Home", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"Backspace", "x":13.5, "y":1, "w":1.5}, {"label":"PgUp", "x":15, "y":1}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgDn", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"End", "x":15, "y":3}, {"label":"Win", "x":0, "y":4, "w":1.5}, {"label":"Alt", "x":1.5, "y":4, "w":1.5}, {"x":3, "y":4, "w":7}, {"label":"Fn2", "x":10, "y":4, "w":1.5}, {"label":"Fn1", "x":11.5, "y":4, "w":1.5}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
+ },
+ "LAYOUT_65_normie": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Home", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"PgUp", "x":15, "y":1}, {"label":"Control", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"PgDn", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"End", "x":15, "y":3}, {"label":"Win", "x":0, "y":4, "w":1.5}, {"label":"Alt", "x":1.5, "y":4, "w":1.5}, {"x":3, "y":4, "w":7}, {"label":"Fn2", "x":10, "y":4, "w":1.5}, {"label":"Fn1", "x":11.5, "y":4, "w":1.5}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
+ }
+ }
+} \ No newline at end of file
diff --git a/keyboards/zeal65/keymaps/default/config.h b/keyboards/zeal65/keymaps/default/config.h
new file mode 100644
index 000000000..f579dfaa7
--- /dev/null
+++ b/keyboards/zeal65/keymaps/default/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 0
diff --git a/keyboards/zeal65/keymaps/default/keymap.c b/keyboards/zeal65/keymaps/default/keymap.c
new file mode 100644
index 000000000..dd1a715d0
--- /dev/null
+++ b/keyboards/zeal65/keymaps/default/keymap.c
@@ -0,0 +1,38 @@
+// Default layout for Zeal65
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_65_normie(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LALT, KC_SPC, FN_MO23, FN_MO13, KC_LEFT, KC_DOWN, KC_RGHT),
+
+// Fn1 Layer
+[1] = LAYOUT_65_normie(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_65_normie(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = LAYOUT_65_normie(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, 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/zeal65/keymaps/split_bs/config.h b/keyboards/zeal65/keymaps/split_bs/config.h
new file mode 100644
index 000000000..018be8d7c
--- /dev/null
+++ b/keyboards/zeal65/keymaps/split_bs/config.h
@@ -0,0 +1,5 @@
+#pragma once
+
+/* enable/disable LEDs based on layout */
+#undef RGB_BACKLIGHT_USE_SPLIT_BACKSPACE
+#define RGB_BACKLIGHT_USE_SPLIT_BACKSPACE 1
diff --git a/keyboards/zeal65/keymaps/split_bs/keymap.c b/keyboards/zeal65/keymaps/split_bs/keymap.c
new file mode 100644
index 000000000..96b04c358
--- /dev/null
+++ b/keyboards/zeal65/keymaps/split_bs/keymap.c
@@ -0,0 +1,38 @@
+// Split-backspace layout for Zeal65
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+// Default layer
+[0] = LAYOUT_65_split_bs(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC, KC_PGUP,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LGUI, KC_LALT, KC_SPC, FN_MO23, FN_MO13, KC_LEFT, KC_DOWN, KC_RGHT),
+
+// Fn1 Layer
+[1] = LAYOUT_65_split_bs(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL, KC_TRNS,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn2 Layer
+[2] = LAYOUT_65_split_bs(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+// Fn3 Layer (zeal60 Configuration)
+[3] = LAYOUT_65_split_bs(
+ KC_TRNS, EF_DEC, EF_INC, H1_DEC, H1_INC, H2_DEC, H2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BR_DEC, BR_INC, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, S1_DEC, S1_INC, S2_DEC, S2_INC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+};
diff --git a/keyboards/zeal65/readme.md b/keyboards/zeal65/readme.md
new file mode 100644
index 000000000..8f43dc243
--- /dev/null
+++ b/keyboards/zeal65/readme.md
@@ -0,0 +1,16 @@
+Zeal65
+====
+
+![Zeal65](https://cdn.shopify.com/s/files/1/0490/7329/products/Zeal65_PCB2.jpg)
+
+This is a 65% PCB with per-key RGB LEDs and supports fixed, 1800-like bottom row and split backspace. It was designed for the Zephyr custom keyboard.
+
+Keyboard Maintainer: [Wilba](http://wilba.tech/) and on [github](https://github.com/Wilba6582)
+Hardware Supported: Zeal65 PCB Rev 1
+Hardware Availability: https://zealpc.net/collections/group-buy-pre-orders/products/zephyr
+
+Make example for this keyboard (after setting up your build environment):
+
+ make zeal65: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/zeal65/rules.mk b/keyboards/zeal65/rules.mk
new file mode 100644
index 000000000..596c1e649
--- /dev/null
+++ b/keyboards/zeal65/rules.mk
@@ -0,0 +1,78 @@
+
+
+# project specific files
+SRC = keyboards/zeal60/zeal60.c \
+ keyboards/zeal60/rgb_backlight.c \
+ quantum/color.c \
+ drivers/issi/is31fl3731.c \
+ drivers/avr/i2c_master.c
+
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency.
+# This will define a symbol, F_CPU, in all source code files equal to the
+# processor frequency in Hz. You can then use this symbol in your source code to
+# calculate timings. Do NOT tack on a 'UL' at the end, this will be done
+# automatically to create a 32-bit value in your source code.
+#
+# This will be an integer division of F_USB below, as it is sourced by
+# F_USB after it has run through any CPU prescalers. Note that this value
+# does not *change* the processor frequency - it should merely be updated to
+# reflect the processor speed set externally so that the code can use accurate
+# software delays.
+F_CPU = 16000000
+
+#
+# LUFA specific
+#
+# Target architecture (see library "Board Types" documentation).
+ARCH = AVR8
+
+# Input clock frequency.
+# This will define a symbol, F_USB, in all source code files equal to the
+# input clock frequency (before any prescaling is performed) in Hz. This value may
+# differ from F_CPU if prescaling is used on the latter, and is required as the
+# raw input clock is fed directly to the PLL sections of the AVR for high speed
+# clock generation for the USB and other AVR subsections. Do NOT tack on a 'UL'
+# at the end, this will be done automatically to create a 32-bit value in your
+# source code.
+#
+# If no clock division is performed on the input clock inside the AVR (via the
+# CPU clock adjust registers or the clock division fuses), this will be equal to F_CPU.
+F_USB = $(F_CPU)
+
+# Interrupt driven control endpoint task(+60)
+OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
+
+# Boot Section
+BOOTLOADER = atmel-dfu
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+RAW_ENABLE = yes
+DYNAMIC_KEYMAP_ENABLE = yes
+CIE1931_CURVE = yes
diff --git a/keyboards/zeal65/zeal65.c b/keyboards/zeal65/zeal65.c
new file mode 100644
index 000000000..540c93080
--- /dev/null
+++ b/keyboards/zeal65/zeal65.c
@@ -0,0 +1,18 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#ifndef RGB_BACKLIGHT_ZEAL65
+#error RGB_BACKLIGHT_ZEAL65 not defined, you done goofed somehao, brah
+#endif
diff --git a/keyboards/zeal65/zeal65.h b/keyboards/zeal65/zeal65.h
new file mode 100644
index 000000000..3ee4f49e5
--- /dev/null
+++ b/keyboards/zeal65/zeal65.h
@@ -0,0 +1,50 @@
+/* Copyright 2017 Jason Williams (Wilba)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include "quantum.h"
+#include "../zeal60/rgb_backlight_keycodes.h"
+#include "../zeal60/zeal60_keycodes.h"
+
+#define XXX KC_NO
+
+#define LAYOUT_65_split_bs( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K2D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K47, K4A, K4B, K4C, K4D, K4E \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
+ { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, XXX, XXX, XXX, XXX, XXX, K47, XXX, XXX, K4A, K4B, K4C, K4D, K4E } \
+}
+
+#define LAYOUT_65_normie( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K47, K4A, K4B, K4C, K4D, K4E \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, XXX, K2E }, \
+ { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, XXX, XXX, XXX, XXX, XXX, K47, XXX, XXX, K4A, K4B, K4C, K4D, K4E } \
+}
diff --git a/keyboards/zen/info.json b/keyboards/zen/info.json
new file mode 100644
index 000000000..f312529ed
--- /dev/null
+++ b/keyboards/zen/info.json
@@ -0,0 +1,12 @@
+{
+ "keyboard_name": "Zen",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 17,
+ "height": 6.5,
+ "layouts": {
+ "LAYOUT": {
+ "layout": [{"label":"k00", "x":0.5, "y":0}, {"label":"k01", "x":1.5, "y":0}, {"label":"k02", "x":2.5, "y":0}, {"label":"k03", "x":3.5, "y":0}, {"label":"k04", "x":4.5, "y":0}, {"label":"k05", "x":5.5, "y":0}, {"label":"k55", "x":10.5, "y":0}, {"label":"k54", "x":11.5, "y":0}, {"label":"k53", "x":12.5, "y":0}, {"label":"k52", "x":13.5, "y":0}, {"label":"k51", "x":14.5, "y":0}, {"label":"k50", "x":15.5, "y":0}, {"label":"k10", "x":0, "y":1, "w":1.5}, {"label":"k11", "x":1.5, "y":1}, {"label":"k12", "x":2.5, "y":1}, {"label":"k13", "x":3.5, "y":1}, {"label":"k14", "x":4.5, "y":1}, {"label":"k15", "x":5.5, "y":1}, {"label":"k65", "x":10.5, "y":1}, {"label":"k64", "x":11.5, "y":1}, {"label":"k63", "x":12.5, "y":1}, {"label":"k62", "x":13.5, "y":1}, {"label":"k61", "x":14.5, "y":1}, {"label":"k60", "x":15.5, "y":1, "w":1.5}, {"label":"k20", "x":0, "y":2, "w":1.5}, {"label":"k21", "x":1.5, "y":2}, {"label":"k22", "x":2.5, "y":2}, {"label":"k23", "x":3.5, "y":2}, {"label":"k24", "x":4.5, "y":2}, {"label":"k25", "x":5.5, "y":2}, {"label":"k75", "x":10.5, "y":2}, {"label":"k74", "x":11.5, "y":2}, {"label":"k73", "x":12.5, "y":2}, {"label":"k72", "x":13.5, "y":2}, {"label":"k71", "x":14.5, "y":2}, {"label":"k70", "x":15.5, "y":2, "w":1.5}, {"label":"k30", "x":0, "y":3, "w":1.5}, {"label":"k31", "x":1.5, "y":3}, {"label":"k32", "x":2.5, "y":3}, {"label":"k33", "x":3.5, "y":3}, {"label":"k34", "x":4.5, "y":3}, {"label":"k35", "x":5.5, "y":3}, {"label":"k85", "x":10.5, "y":3}, {"label":"k84", "x":11.5, "y":3}, {"label":"k83", "x":12.5, "y":3}, {"label":"k82", "x":13.5, "y":3}, {"label":"k81", "x":14.5, "y":3}, {"label":"k80", "x":15.5, "y":3, "w":1.5}, {"label":"k40", "x":0, "y":4, "w":1.5}, {"label":"k41", "x":1.5, "y":4}, {"label":"k42", "x":2.5, "y":4}, {"label":"k43", "x":3.5, "y":4}, {"label":"k44", "x":4.5, "y":4}, {"label":"k45", "x":6, "y":4.5, "h":2}, {"label":"k46", "x":7, "y":4.5, "h":2}, {"label":"k96", "x":9, "y":4.5, "h":2}, {"label":"k95", "x":10, "y":4.5, "h":2}, {"label":"k94", "x":11.5, "y":4}, {"label":"k93", "x":12.5, "y":4}, {"label":"k92", "x":13.5, "y":4}, {"label":"k91", "x":14.5, "y":4}, {"label":"k90", "x":15.5, "y":4, "w":1.5}]
+ }
+ }
+}
diff --git a/keyboards/zen/keymaps/333fred/keymap.c b/keyboards/zen/keymaps/333fred/keymap.c
index 5332062e0..3dd769803 100644
--- a/keyboards/zen/keymaps/333fred/keymap.c
+++ b/keyboards/zen/keymaps/333fred/keymap.c
@@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Ctrl | F4 | F5 | GUI | Alt | Bksp |Lwr/VM||Enter|Space | NAV | - | = | Alt | Del |
* `------------------------------------------------''-----------------------------------------------'
*/
-[BASE] = KEYMAP( \
+[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_MINUS, \
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_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
@@ -45,7 +45,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | Pscr | | RESET| | | GAME | || | 0 | . | = | Prev | Next | Play |
* `------------------------------------------------- -------------------------------------------------'
*/
-[SYMB] = KEYMAP( \
+[SYMB] = LAYOUT( \
KC_CAPS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, \
_______, KC_EXLM, KC_AT, KC_LPRN, KC_RPRN, KC_PIPE, KC_7, KC_8, KC_9, KC_ASTR, KC_RPRN, KC_F12, \
_______, KC_HASH, KC_DLR, KC_LCBR, KC_RCBR, KC_GRV, KC_4, KC_5, KC_6, KC_PLUS, KC_RCBR, KC_PIPE, \
@@ -66,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* | | | | | | | || | | | | | | |
* `------------------------------------------------..------------------------------------------------'
*/
-[VIM] = KEYMAP( \
+[VIM] = LAYOUT( \
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, \
_______, RGB_SAI, RGB_VAI, RGB_SAD, KC_LSFT, _______, _______, _______, _______, _______, _______, _______, \
_______, M(DLEFT), M(DRIGHT), KC_LCTL, KC_LGUI, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, \
@@ -81,17 +81,38 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | CTRL | | | | F | | | | | | | | |
+ * | CTRL | | | | | | | | | | | | |
* |------+------+------+------+------+------| |------+------+------+------+------+------|
* | Shift| Z | | | | | | | | | | | GUI |
* |------+------+------+------+------+------+------..------+------+------+------+------+------+------|
* | Enter| | Lock | Bksp | Alt | Spc | RESET|| | Lower| Left | Up | Down | Right|QWERTY|
* `------------------------------------------------..-----------------------------------------------'
*/
-[GAME] = KEYMAP( \
+[GAME] = LAYOUT( \
+ KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_LSFT, KC_Z, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LGUI, \
+ KC_ENT, TG(GAME_ARROW), KC_LOCK, KC_BSPC, KC_F5, KC_LALT, KC_SPC, OSL(SYMB), KC_F6, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TO(BASE) \
+),
+/* Gaming Arrow mode (Raise)
+ * Turns wasd into arrows
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | ESC | | | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | Up | | | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | CTRL | Left | Down | Right| | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | | | | | | | | | | | GUI |
+ * |------+------+------+------+------+------+------..------+------+------+------+------+------+------|
+ * | Enter| | Lock | Bksp | Alt | Spc | RESET|| | Lower| Left | Up | Down | Right|QWERTY|
+ * `------------------------------------------------..-----------------------------------------------'
+ */
+[GAME_ARROW] = LAYOUT( \
KC_ESC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- KC_LCTL, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ KC_LCTL, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, \
KC_LSFT, KC_Z, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LGUI, \
KC_ENT, _______, KC_LOCK, KC_BSPC, KC_F5, KC_LALT, KC_SPC, OSL(SYMB), KC_F6, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, TO(BASE) \
)
diff --git a/keyboards/zen/keymaps/default/keymap.c b/keyboards/zen/keymaps/default/keymap.c
index a955e892f..e9e7d798c 100644
--- a/keyboards/zen/keymaps/default/keymap.c
+++ b/keyboards/zen/keymaps/default/keymap.c
@@ -1,6 +1,4 @@
-#include "zen.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
@@ -24,47 +22,47 @@ enum custom_keycodes {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Qwerty
- * ,-----------------------------------------. .-----------------------------------------.
- * | GESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * |CAPS(NAV)|A | S | D | F | G | | H | J | K | L | ; | " |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
- * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt |RGBTOG| NAV |Space |Delete||Enter|Space | NAV | - | = | PGUP | PGDN |
- * `------------------------------------------------''-----------------------------------------------'
- */
-[_QWERTY] = KEYMAP( \
- 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, \
- LT(_NAV, KC_CAPS),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
- KC_LCTL, KC_LGUI, KC_LALT, RGB_TOG, MO(_NAV), KC_SPC, KC_DEL, KC_ENT, KC_SPACE, MO(_NAV), KC_MINS, KC_EQL, KC_PGUP, KC_PGDN \
-),
+ /* Qwerty
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | GESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |CAPS(NAV)|A | S | D | F | G | | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt |RGBTOG| NAV |Space |Delete||Enter|Space | NAV | - | = | PGUP | PGDN |
+ * `------------------------------------------------''-----------------------------------------------'
+ */
+ [_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, \
+ LT(_NAV, KC_CAPS),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ KC_LCTL, KC_LGUI, KC_LALT, RGB_TOG, MO(_NAV), KC_SPC, KC_DEL, KC_ENT, KC_SPACE, MO(_NAV), KC_MINS, KC_EQL, KC_PGUP, KC_PGDN \
+ ),
-/* NAV
- * ,-----------------------------------------. .-----------------------------------------.
- * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | |RGBSAI|RGBVAI|RGBSAD| RESET| [ | | ] | Pgup | Up | Pgdn |Insert| Home |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | |RGBHUD|RGBVAD|RGBHUI| | | | | Left | Down | Right|Delete| End |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * |Shift | | | | | | | NKRO | | | Pause| Back | Next |
- * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------|
- * | Ctrl | GUI | Alt |RGBMOD| | | || | | | | Mute | VOLUP| VOLDN|
- * `------------------------------------------------''-----------------------------------------------'
- */
-[_NAV] = KEYMAP( \
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 , \
- KC_TRNS, RGB_SAI, RGB_VAI, RGB_SAD, RESET, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME , \
- KC_TRNS, RGB_HUD, RGB_VAD, RGB_HUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END , \
- KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT , \
- KC_LCTL, KC_LGUI, KC_LALT, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLU, KC_VOLD \
-),
+ /* NAV
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | |RGBSAI|RGBVAI|RGBSAD| RESET| [ | | ] | Pgup | Up | Pgdn |Insert| Home |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | |RGBHUD|RGBVAD|RGBHUI| | | | | Left | Down | Right|Delete| End |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |Shift | | | | | | | NKRO | | | Pause| Back | Next |
+ * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------|
+ * | Ctrl | GUI | Alt |RGBMOD| | | || | | | | Mute | VOLUP| VOLDN|
+ * `------------------------------------------------''-----------------------------------------------'
+ */
+ [_NAV] = LAYOUT( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, RGB_SAI, RGB_VAI, RGB_SAD, RESET, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, \
+ _______, RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, \
+ KC_LSFT, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT, \
+ KC_LCTL, KC_LGUI, KC_LALT, RGB_MOD, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD \
+ ),
};
diff --git a/keyboards/zen/keymaps/jwlawrence/keymap.c b/keyboards/zen/keymaps/jwlawrence/keymap.c
index ca7056718..1ca9b78c0 100644
--- a/keyboards/zen/keymaps/jwlawrence/keymap.c
+++ b/keyboards/zen/keymaps/jwlawrence/keymap.c
@@ -1,6 +1,4 @@
-#include "zen.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
@@ -24,47 +22,47 @@ enum custom_keycodes {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-/* Qwerty
- * ,-----------------------------------------. .-----------------------------------------.
- * | GESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * |CAPS(NAV)|A | S | D | F | G | | H | J | K | L | ; | " |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | | N | M | , | . | / |Shift |
- * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------|
- * | Ctrl | Alt | GUI | GUI | NAV |Space |Delete||Enter|Space | NAV | - | = |RGBTOG|Enter |
- * `------------------------------------------------''-----------------------------------------------'
- */
-[_QWERTY] = KEYMAP( \
- 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, \
- LT(_NAV, KC_CAPS),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
- KC_LCTL, KC_LALT, KC_LGUI, KC_LGUI, MO(_NAV), KC_SPC, KC_DEL, KC_ENT, KC_SPACE, MO(_NAV), KC_MINS, KC_EQL, RGB_TOG, KC_ENT \
-),
+ /* Qwerty
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | GESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |CAPS(NAV)|A | S | D | F | G | | H | J | K | L | ; | " |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / |Shift |
+ * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI | GUI | NAV |Space |Delete||Enter|Space | NAV | - | = |RGBTOG|Enter |
+ * `------------------------------------------------''-----------------------------------------------'
+ */
+ [_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, \
+ LT(_NAV, KC_CAPS),KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ KC_LCTL, KC_LALT, KC_LGUI, KC_LGUI, MO(_NAV), KC_SPC, KC_DEL, KC_ENT, KC_SPACE, MO(_NAV), KC_MINS, KC_EQL, RGB_TOG, KC_ENT \
+ ),
-/* NAV
- * ,-----------------------------------------. .-----------------------------------------.
- * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | |RGBSAI|RGBVAI|RGBSAD| RESET| [ | | ] | Pgup | Up | Pgdn |Insert| Home |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * | |RGBHUD|RGBVAD|RGBHUI|RGBMOD| | | | Left | Down | Right|Delete| End |
- * |------+------+------+------+------+------| |------+------+------+------+------+------|
- * |Shift | | | | | | | NKRO | | | Pause| Back | Next |
- * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------|
- * | Ctrl | Alt | GUI | | | | || | | | | Mute | VOLUP| VOLDN|
- * `------------------------------------------------''-----------------------------------------------'
- */
-[_NAV] = KEYMAP( \
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12 , \
- KC_TRNS, RGB_SAI, RGB_VAI, RGB_SAD, RESET, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME , \
- KC_TRNS, RGB_HUD, RGB_VAD, RGB_HUI, RGB_MOD, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END , \
- KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MAGIC_TOGGLE_NKRO, KC_TRNS, KC_TRNS, KC_MPLY, KC_MPRV, KC_MNXT , \
- KC_LCTL, KC_LALT, KC_LGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE, KC_VOLU, KC_VOLD \
-),
+ /* NAV
+ * ,-----------------------------------------. .-----------------------------------------.
+ * | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | |RGBSAI|RGBVAI|RGBSAD| RESET| [ | | ] | Pgup | Up | Pgdn |Insert| Home |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | |RGBHUD|RGBVAD|RGBHUI|RGBMOD| | | | Left | Down | Right|Delete| End |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |Shift | | | | | | | NKRO | | | Pause| Back | Next |
+ * |------+------+------+------+------+------+------..-----+------+------+------+------+------+------|
+ * | Ctrl | Alt | GUI | | | | || | | | | Mute | VOLUP| VOLDN|
+ * `------------------------------------------------''-----------------------------------------------'
+ */
+ [_NAV] = LAYOUT( \
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, \
+ _______, RGB_SAI, RGB_VAI, RGB_SAD, RESET, KC_LBRC, KC_RBRC, KC_PGUP, KC_UP, KC_PGDN, KC_INS, KC_HOME, \
+ _______, RGB_HUD, RGB_VAD, RGB_HUI, RGB_MOD, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_END, \
+ KC_LSFT, _______, _______, _______, _______, _______, MAGIC_TOGGLE_NKRO, _______, _______, KC_MPLY, KC_MPRV, KC_MNXT, \
+ KC_LCTL, KC_LALT, KC_LGUI, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLU, KC_VOLD \
+ ),
};
diff --git a/keyboards/zen/keymaps/kageurufu/keymap.c b/keyboards/zen/keymaps/kageurufu/keymap.c
new file mode 100644
index 000000000..761100dbe
--- /dev/null
+++ b/keyboards/zen/keymaps/kageurufu/keymap.c
@@ -0,0 +1,62 @@
+#include QMK_KEYBOARD_H
+#include "kageurufu.h"
+#ifdef PROTOCOL_LUFA
+#include "lufa.h"
+#include "split_util.h"
+#endif
+
+extern keymap_config_t keymap_config;
+extern uint8_t is_master;
+
+
+#define EXPAND_LAYOUT(...) LAYOUT(__VA_ARGS__)
+#define _BASE_LAYOUT( \
+ _00, _01, _02, _03, _04, _05, _06, _07, _08, _09, \
+ _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, \
+ _20, _21, _22, _23, _24, _25, _26, _27, _28, _29 \
+) \
+EXPAND_LAYOUT( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, \
+ KC_TAB, _00, _01, _02, _03, _04, _05, _06, _07, _08, _09, KC_BSLS, \
+ FN_ESC, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, KC_QUOT, \
+ KC_LSPO, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, KC_RSPC, \
+ KC_LCTL, KC_LGUI, KC_LGUI, KC_LALT, FN, KC_SPC, KC_BSPC, KC_ENT, KC_SPC, KC_MINS, KC_EQL, KC_DOWN, KC_PGUP, KC_PGDN \
+)
+#define BASE_LAYOUT(...) _BASE_LAYOUT(__VA_ARGS__)
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = BASE_LAYOUT( \
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, \
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, \
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ \
+ ),
+
+ [_COLEMAK] = BASE_LAYOUT( \
+ _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, \
+ _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, \
+ _________________COLEMAK_L3________________, _________________COLEMAK_R3________________ \
+ ),
+
+ [_COLEMAK_DH] = BASE_LAYOUT( \
+ ______________COLEMAK_MOD_DH_L1____________, ______________COLEMAK_MOD_DH_R1____________, \
+ ______________COLEMAK_MOD_DH_L2____________, ______________COLEMAK_MOD_DH_R2____________, \
+ ______________COLEMAK_MOD_DH_L3____________, ______________COLEMAK_MOD_DH_R3____________ \
+ ),
+
+ [_FN] = EXPAND_LAYOUT( \
+ ________________FUNCTION_L1________________, ________________FUNCTION_R1________________, \
+ ________________FUNCTION_L2________________, ________________FUNCTION_R2________________, \
+ ________________FUNCTION_L3________________, ________________FUNCTION_R3________________, \
+ ________________FUNCTION_L4________________, ________________FUNCTION_R4________________, \
+ ________________FUNCTION_L5________________, _______, KC_DEL, ________________FUNCTION_R5________________ \
+ ),
+
+ [_ADJ] = EXPAND_LAYOUT( \
+ _________________ADJUST_L1_________________, _________________ADJUST_R1_________________, \
+ _________________ADJUST_L2_________________, _________________ADJUST_R2_________________, \
+ _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, \
+ _________________ADJUST_L4_________________, _________________ADJUST_R4_________________, \
+ _________________ADJUST_L5_________________, _______, _______, _________________ADJUST_R5_________________ \
+ )
+};
diff --git a/keyboards/zen/keymaps/xyverz/keymap.c b/keyboards/zen/keymaps/xyverz/keymap.c
index 2180a7459..8879fbb5f 100644
--- a/keyboards/zen/keymaps/xyverz/keymap.c
+++ b/keyboards/zen/keymaps/xyverz/keymap.c
@@ -16,9 +16,7 @@ TODO:
*/
-#include "zen.h"
-#include "action_layer.h"
-#include "eeconfig.h"
+#include QMK_KEYBOARD_H
extern keymap_config_t keymap_config;
@@ -55,61 +53,61 @@ enum atreus52_keycodes {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-[_DVORAK] = KEYMAP( \
- KC_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, \
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, \
- KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
- KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \
- LOWER, KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, KC_UP, KC_DOWN, KC_SLSH, KC_EQL, RAISE \
-),
-
-[_QWERTY] = KEYMAP( \
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, \
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL , \
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
- LOWER, KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL, RAISE \
-),
-
-[_COLEMAK] = KEYMAP( \
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, \
- KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL , \
- KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
- LOWER, KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL, RAISE \
-),
-
-[_WOW] = KEYMAP( \
- KC_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, \
- KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, \
- KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
- KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \
- LOWER, KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, CTLBSPC, KC_LALT, KC_ENT, KC_SPC, KC_UP, KC_DOWN, KC_SLSH, KC_EQL, RAISE \
-),
-
-[_LOWER] = KEYMAP( \
- KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12 , \
- KC_TILD, KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE, \
- KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, KC_PLUS, KC_LCBR, KC_RCBR, _______, \
- _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, \
- _______, _______, _______, KC_HOME, KC_END, KC_DEL, _______, _______, KC_INS, KC_PGUP, KC_PGDN, _______, _______, _______ \
-),
-
-[_RAISE] = KEYMAP( \
- KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12 , \
- KC_TILD, KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE, \
- KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, KC_EQL, KC_LBRC, KC_RBRC, _______, \
- _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, \
- _______, _______, _______, KC_HOME, KC_END, KC_DEL, _______, _______, KC_INS, KC_PGUP, KC_PGDN, _______, _______, _______ \
-),
-
-[_ADJUST] = KEYMAP( \
- RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
- _______, _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_SNK, _______, QWERTY, COLEMAK, DVORAK, WOW, _______, \
- RGB_TOG, RGB_MOD, RGB_SWR, RGB_M_K, RGB_M_G, RGB_HUI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, \
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
-),
+ [_DVORAK] = LAYOUT( \
+ KC_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \
+ LOWER, KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, KC_UP, KC_DOWN, KC_SLSH, KC_EQL, RAISE \
+ ),
+
+ [_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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL , \
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ LOWER, KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL, RAISE \
+ ),
+
+ [_COLEMAK] = LAYOUT( \
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_DEL , \
+ KC_CAPS, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, \
+ LOWER, KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, KC_BSPC, KC_LGUI, KC_ENT, KC_SPC, KC_UP, KC_DOWN, KC_RGUI, KC_RCTL, RAISE \
+ ),
+
+ [_WOW] = LAYOUT( \
+ KC_RBRC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_LBRC, \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_SLSH, \
+ KC_ESC, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_MINS, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_RSFT, \
+ LOWER, KC_LCTL, KC_LALT, KC_LEFT, KC_RGHT, CTLBSPC, KC_LALT, KC_ENT, KC_SPC, KC_UP, KC_DOWN, KC_SLSH, KC_EQL, RAISE \
+ ),
+
+ [_LOWER] = LAYOUT( \
+ KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12 , \
+ KC_TILD, KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE, \
+ KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, KC_PLUS, KC_LCBR, KC_RCBR, _______, \
+ _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, \
+ _______, _______, _______, KC_HOME, KC_END, KC_DEL, _______, _______, KC_INS, KC_PGUP, KC_PGDN, _______, _______, _______ \
+ ),
+
+ [_RAISE] = LAYOUT( \
+ KC_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12 , \
+ KC_TILD, KC_GRV, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PIPE, \
+ KC_CAPS, _______, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, KC_EQL, KC_LBRC, KC_RBRC, _______, \
+ _______, _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, _______, KC_PSCR, KC_SLCK, KC_PAUS, _______, \
+ _______, _______, _______, KC_HOME, KC_END, KC_DEL, _______, _______, KC_INS, KC_PGUP, KC_PGDN, _______, _______, _______ \
+ ),
+
+ [_ADJUST] = LAYOUT( \
+ RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
+ _______, _______, RGB_M_P, RGB_M_B, RGB_M_R, RGB_SNK, _______, QWERTY, COLEMAK, DVORAK, WOW, _______, \
+ RGB_TOG, RGB_MOD, RGB_SWR, RGB_M_K, RGB_M_G, RGB_HUI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
};
diff --git a/keyboards/zen/readme.md b/keyboards/zen/readme.md
index 36c63d293..beb5e13ac 100644
--- a/keyboards/zen/readme.md
+++ b/keyboards/zen/readme.md
@@ -1,12 +1,20 @@
-Zen Keyboard
-====
+# Zen Keyboard
A split ergo keyboard with a few goals in mind:
- - Be as thin as possible. Other split KBs (Let's Split, Nyquist, Iris) are 15.2mm thick. The Zen is only 8.0mm thick.
- - Layout designed for gaming. 1.5u pinky keys, ortho alphas, and angled thumb keys. After trying Ortholiniear, Atreus62, and Ergodox, this is the best layout for gaming and typing.
- - RGB backlighting. 16 WS2812b LEDs shine through the perimeter switches. The SK6812 variant are cheap and easy to solder.
- - Price. Using Arduino Pro Micro, SK6812 LEDs, and PCB FR4 for the case, the cost of each half without switches or caps can be reduced to under $20 when purchased at volume.
-A build guide and more info for this keyboard can be found here: [Zen Build Guide](https://legonut.gitbooks.io/zen-keyboard/content/)
+- Be as thin as possible. Other split KBs (Let's Split, Nyquist, Iris) are 15.2mm thick. The Zen is only 8.0mm thick.
+- Layout designed for gaming. 1.5u pinky keys, ortho alphas, and angled thumb keys. After trying Ortholinear, Atreus62, and Ergodox, this is the best layout for gaming and typing.
+- RGB backlighting. 16 WS2812b LEDs shine through the perimeter switches. The SK6812 variant are cheap and easy to solder.
+- Price. Using Arduino Pro Micro, SK6812 LEDs, and PCB FR4 for the case, the cost of each half without switches or caps can be reduced to under $20 when purchased at volume.
-Maintained by u/legonut3 \ No newline at end of file
+Keyboard Maintainer: [Legonut](https://github.com/Legonut)
+Hardware Supported: Zen rev1
+Hardware Availability: [RGBKB.net](https://www.rgbkb.net/)
+
+A build guide and more info for this keyboard can be found here: [Zen Build Guide](https://legonut.gitbooks.io/zen-keyboard/content/).
+
+Make example for this keyboard (after setting up your build environment):
+
+ make zen/rev1:default
+
+See [build environment setup](https://docs.qmk.fm/build_environment_setup.html) then the [make instructions](https://docs.qmk.fm/make_instructions.html) for more information.
diff --git a/keyboards/zen/rev1/config.h b/keyboards/zen/rev1/config.h
index efae55892..890d30757 100644
--- a/keyboards/zen/rev1/config.h
+++ b/keyboards/zen/rev1/config.h
@@ -65,10 +65,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* ws2812 RGB LED */
#define RGB_DI_PIN D1
-#define RGBLIGHT_TIMER
+
#define RGBLED_NUM 16 // Number of LEDs
-#define ws2812_PORTREG PORTD
-#define ws2812_DDRREG DDRD
/*
* Feature disable options
diff --git a/keyboards/zen/rev1/rev1.h b/keyboards/zen/rev1/rev1.h
index 4983bb2a3..c2444f047 100644
--- a/keyboards/zen/rev1/rev1.h
+++ b/keyboards/zen/rev1/rev1.h
@@ -17,7 +17,7 @@
//void promicro_bootloader_jmp(bool program);
-#define KEYMAP( \
+#define LAYOUT( \
k00, k01, k02, k03, k04, k05, k55, k54, k53, k52, k51, k50, \
k10, k11, k12, k13, k14, k15, k65, k64, k63, k62, k61, k60, \
k20, k21, k22, k23, k24, k25, k75, k74, k73, k72, k71, k70, \
diff --git a/keyboards/zen/rules.mk b/keyboards/zen/rules.mk
index 32d3dc51c..4e8268911 100644
--- a/keyboards/zen/rules.mk
+++ b/keyboards/zen/rules.mk
@@ -62,7 +62,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 = yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
SUBPROJECT_rev1 = yes
USE_I2C = no
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
diff --git a/keyboards/zen/zen.h b/keyboards/zen/zen.h
index 4560ff8cd..56fc64fe2 100644
--- a/keyboards/zen/zen.h
+++ b/keyboards/zen/zen.h
@@ -4,20 +4,4 @@
#include "rev1.h"
#include "quantum.h"
-// Used to create a keymap using only KC_ prefixed keys
-#define KC_KEYMAP( \
- L00, L01, L02, L03, L04, L05, R01, R02, R03, R04, R05, R06,\
- L10, L11, L12, L13, L14, L15, R11, R12, R13, R14, R15, R16,\
- L20, L21, L22, L23, L24, L25, 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 \
- ) \
- KEYMAP( \
- KC_##L00, KC_##L01, KC_##L02, KC_##L03, KC_##L04, KC_##L05, KC_##R01, KC_##R02, KC_##R03, KC_##R04, KC_##R05, KC_##R06, \
- KC_##L10, KC_##L11, KC_##L12, KC_##L13, KC_##L14, KC_##L15, KC_##R11, KC_##R12, KC_##R13, KC_##R14, KC_##R15, KC_##R16, \
- KC_##L20, KC_##L21, KC_##L22, KC_##L23, KC_##L24, KC_##L25, KC_##R21, KC_##R22, KC_##R23, KC_##R24, KC_##R25, KC_##R26, \
- KC_##L30, KC_##L31, KC_##L32, KC_##L33, KC_##L34, KC_##L35, KC_##R31, KC_##R32, KC_##R33, KC_##R34, KC_##R35, KC_##R36, \
- KC_##L40, KC_##L41, KC_##L42, KC_##L43, KC_##L44, KC_##L45, KC_##L46, KC_##R40, KC_##R41, KC_##R42, KC_##R43, KC_##R44, KC_##R45, KC_##R46, \
- )
-
-#endif \ No newline at end of file
+#endif
diff --git a/keyboards/zinc/config.h b/keyboards/zinc/config.h
new file mode 100644
index 000000000..9c60d631b
--- /dev/null
+++ b/keyboards/zinc/config.h
@@ -0,0 +1,50 @@
+/*
+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
+//#ifndef CONFIG_H
+//#define CONFIG_H
+
+#include "config_common.h"
+
+// GCC include 'config.h" sequence in qmk_firmware/keyboards/zinc/
+// -include keyboards/zinc/config.h
+// -include keyboards/zinc/rev?/config.h
+// -include keyboards/zinc/rev?/keymaps/MAPNAME/config.h
+// XXXX.c
+
+#include <serial_config.h>
+
+// GCC include search path in qmk_firmare/keyboards/zinc/
+// #include "..." search starts here:
+// #include <...> search starts here:
+// keyboards/zinc/rev?/keymaps/MAPNAME
+// keyboards/zinc
+// keyboards/zinc/rev?
+// .
+// ./tmk_core
+// ......
+
+#ifdef USE_Link_Time_Optimization
+ // LTO has issues with macros (action_get_macro) and "functions" (fn_actions),
+ // so just disable them
+ #define NO_ACTION_MACRO
+ #define NO_ACTION_FUNCTION
+#endif // USE_Link_Time_Optimization
+
+//#endif /* CONFIG_H */
diff --git a/keyboards/zinc/i2c.c b/keyboards/zinc/i2c.c
new file mode 100644
index 000000000..4bee5c639
--- /dev/null
+++ b/keyboards/zinc/i2c.c
@@ -0,0 +1,162 @@
+#include <util/twi.h>
+#include <avr/io.h>
+#include <stdlib.h>
+#include <avr/interrupt.h>
+#include <util/twi.h>
+#include <stdbool.h>
+#include "i2c.h"
+
+#ifdef USE_I2C
+
+// Limits the amount of we wait for any one i2c transaction.
+// Since were running SCL line 100kHz (=> 10μs/bit), and each transactions is
+// 9 bits, a single transaction will take around 90μs to complete.
+//
+// (F_CPU/SCL_CLOCK) => # of μC cycles to transfer a bit
+// poll loop takes at least 8 clock cycles to execute
+#define I2C_LOOP_TIMEOUT (9+1)*(F_CPU/SCL_CLOCK)/8
+
+#define BUFFER_POS_INC() (slave_buffer_pos = (slave_buffer_pos+1)%SLAVE_BUFFER_SIZE)
+
+volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
+
+static volatile uint8_t slave_buffer_pos;
+static volatile bool slave_has_register_set = false;
+
+// Wait for an i2c operation to finish
+inline static
+void i2c_delay(void) {
+ uint16_t lim = 0;
+ while(!(TWCR & (1<<TWINT)) && lim < I2C_LOOP_TIMEOUT)
+ lim++;
+
+ // easier way, but will wait slightly longer
+ // _delay_us(100);
+}
+
+// Setup twi to run at 100kHz or 400kHz (see ./i2c.h SCL_CLOCK)
+void i2c_master_init(void) {
+ // no prescaler
+ TWSR = 0;
+ // Set TWI clock frequency to SCL_CLOCK. Need TWBR>10.
+ // Check datasheets for more info.
+ TWBR = ((F_CPU/SCL_CLOCK)-16)/2;
+}
+
+// Start a transaction with the given i2c slave address. The direction of the
+// transfer is set with I2C_READ and I2C_WRITE.
+// returns: 0 => success
+// 1 => error
+uint8_t i2c_master_start(uint8_t address) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTA);
+
+ i2c_delay();
+
+ // check that we started successfully
+ if ( (TW_STATUS != TW_START) && (TW_STATUS != TW_REP_START))
+ return 1;
+
+ TWDR = address;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+
+ i2c_delay();
+
+ if ( (TW_STATUS != TW_MT_SLA_ACK) && (TW_STATUS != TW_MR_SLA_ACK) )
+ return 1; // slave did not acknowledge
+ else
+ return 0; // success
+}
+
+
+// Finish the i2c transaction.
+void i2c_master_stop(void) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
+
+ uint16_t lim = 0;
+ while(!(TWCR & (1<<TWSTO)) && lim < I2C_LOOP_TIMEOUT)
+ lim++;
+}
+
+// Write one byte to the i2c slave.
+// returns 0 => slave ACK
+// 1 => slave NACK
+uint8_t i2c_master_write(uint8_t data) {
+ TWDR = data;
+ TWCR = (1<<TWINT) | (1<<TWEN);
+
+ i2c_delay();
+
+ // check if the slave acknowledged us
+ return (TW_STATUS == TW_MT_DATA_ACK) ? 0 : 1;
+}
+
+// Read one byte from the i2c slave. If ack=1 the slave is acknowledged,
+// if ack=0 the acknowledge bit is not set.
+// returns: byte read from i2c device
+uint8_t i2c_master_read(int ack) {
+ TWCR = (1<<TWINT) | (1<<TWEN) | (ack<<TWEA);
+
+ i2c_delay();
+ return TWDR;
+}
+
+void i2c_reset_state(void) {
+ TWCR = 0;
+}
+
+void i2c_slave_init(uint8_t address) {
+ TWAR = address << 0; // slave i2c address
+ // TWEN - twi enable
+ // TWEA - enable address acknowledgement
+ // TWINT - twi interrupt flag
+ // TWIE - enable the twi interrupt
+ TWCR = (1<<TWIE) | (1<<TWEA) | (1<<TWINT) | (1<<TWEN);
+}
+
+ISR(TWI_vect);
+
+ISR(TWI_vect) {
+ uint8_t ack = 1;
+ switch(TW_STATUS) {
+ case TW_SR_SLA_ACK:
+ // this device has been addressed as a slave receiver
+ slave_has_register_set = false;
+ break;
+
+ case TW_SR_DATA_ACK:
+ // this device has received data as a slave receiver
+ // The first byte that we receive in this transaction sets the location
+ // of the read/write location of the slaves memory that it exposes over
+ // i2c. After that, bytes will be written at slave_buffer_pos, incrementing
+ // slave_buffer_pos after each write.
+ if(!slave_has_register_set) {
+ slave_buffer_pos = TWDR;
+ // don't acknowledge the master if this memory loctaion is out of bounds
+ if ( slave_buffer_pos >= SLAVE_BUFFER_SIZE ) {
+ ack = 0;
+ slave_buffer_pos = 0;
+ }
+ slave_has_register_set = true;
+ } else {
+ i2c_slave_buffer[slave_buffer_pos] = TWDR;
+ BUFFER_POS_INC();
+ }
+ break;
+
+ case TW_ST_SLA_ACK:
+ case TW_ST_DATA_ACK:
+ // master has addressed this device as a slave transmitter and is
+ // requesting data.
+ TWDR = i2c_slave_buffer[slave_buffer_pos];
+ BUFFER_POS_INC();
+ break;
+
+ case TW_BUS_ERROR: // something went wrong, reset twi state
+ TWCR = 0;
+ default:
+ break;
+ }
+ // Reset everything, so we are ready for the next TWI interrupt
+ TWCR |= (1<<TWIE) | (1<<TWINT) | (ack<<TWEA) | (1<<TWEN);
+}
+#endif
diff --git a/keyboards/zinc/i2c.h b/keyboards/zinc/i2c.h
new file mode 100644
index 000000000..47cf6bd1b
--- /dev/null
+++ b/keyboards/zinc/i2c.h
@@ -0,0 +1,49 @@
+#ifndef I2C_H
+#define I2C_H
+
+#include <stdint.h>
+
+#ifndef F_CPU
+#define F_CPU 16000000UL
+#endif
+
+#define I2C_READ 1
+#define I2C_WRITE 0
+
+#define I2C_ACK 1
+#define I2C_NACK 0
+
+#define SLAVE_BUFFER_SIZE 0x10
+
+// i2c SCL clock frequency 400kHz
+#define SCL_CLOCK 400000L
+
+extern volatile uint8_t i2c_slave_buffer[SLAVE_BUFFER_SIZE];
+
+void i2c_master_init(void);
+uint8_t i2c_master_start(uint8_t address);
+void i2c_master_stop(void);
+uint8_t i2c_master_write(uint8_t data);
+uint8_t i2c_master_read(int);
+void i2c_reset_state(void);
+void i2c_slave_init(uint8_t address);
+
+
+static inline unsigned char i2c_start_read(unsigned char addr) {
+ return i2c_master_start((addr << 1) | I2C_READ);
+}
+
+static inline unsigned char i2c_start_write(unsigned char addr) {
+ return i2c_master_start((addr << 1) | I2C_WRITE);
+}
+
+// from SSD1306 scrips
+extern unsigned char i2c_rep_start(unsigned char addr);
+extern void i2c_start_wait(unsigned char addr);
+extern unsigned char i2c_readAck(void);
+extern unsigned char i2c_readNak(void);
+extern unsigned char i2c_read(unsigned char ack);
+
+#define i2c_read(ack) (ack) ? i2c_readAck() : i2c_readNak();
+
+#endif
diff --git a/keyboards/zinc/info.json b/keyboards/zinc/info.json
new file mode 100644
index 000000000..740f31ae6
--- /dev/null
+++ b/keyboards/zinc/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "Zinc",
+ "url": "https://github.com/monksoffunk/",
+ "maintainer": "monksoffunk",
+ "width": 15,
+ "height": 5,
+ "layouts": {
+ "LAYOUT": {
+ "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":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/zinc/keymaps/default/config.h b/keyboards/zinc/keymaps/default/config.h
new file mode 100644
index 000000000..4dcb0724f
--- /dev/null
+++ b/keyboards/zinc/keymaps/default/config.h
@@ -0,0 +1,38 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2018 monksoffunk
+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
+// if you need more program area, try uncomment follow line
+#include "serial_config_simpleapi.h"
+
+// place overrides here
+// 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
diff --git a/keyboards/zinc/keymaps/default/keymap.c b/keyboards/zinc/keymaps/default/keymap.c
new file mode 100644
index 000000000..7729914ec
--- /dev/null
+++ b/keyboards/zinc/keymaps/default/keymap.c
@@ -0,0 +1,306 @@
+#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;
+rgblight_config_t RGB_current_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,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ ADJUST,
+ BACKLIT,
+ KANA,
+ EISU,
+ RGBRST
+};
+
+enum macro_keycodes {
+ KC_SAMPLEMACRO,
+};
+
+//Macros
+#define M_SAMPLE M(KC_SAMPLEMACRO)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { \
+ /* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc |ADJUST| Win | Alt |LOWER |Space | | 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ KC_ESC, ADJUST, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Colemak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_COLEMAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ KC_ESC, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Dvorak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | ' | , | . | P | Y | | F | G | C | R | L | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_DVORAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ KC_ESC, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | - | _ | + | { | } | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | Home | End | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | 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_MINS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_RAISE] = LAYOUT_ortho_4x12( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | Reset|RGBRST|Aud on|Audoff| | | |Qwerty|Colemk|Dvorak| | Ins |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | |RGB ON| HUE+ | SAT+ | VAL+ | Mac | | Win | - | = |Print |ScLock|Pause |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | MODE | HUE- | SAT- | VAL- | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | EISU | EISU | EISU | | KANA | KANA | Home |PageDn|PageUp| End |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_ortho_4x12( \
+ _______, RESET, RGBRST, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, KC_INS, \
+ _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, AG_NORM, AG_SWAP, KC_MINS, KC_EQL, KC_PSCR, KC_SLCK, KC_PAUS,\
+ _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,\
+ _______, _______, _______, EISU, EISU, EISU, KANA, KANA, KC_HOME, KC_PGDN, KC_PGUP, KC_END\
+ )
+};
+
+// define variables for reactive RGB
+bool TOG_STATUS = false;
+
+// Setting ADJUST layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(RGB_current_config.mode);
+ #endif
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+
+ case LOWER:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(16);
+ #endif
+ }
+ layer_on(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ TOG_STATUS = false;
+ layer_off(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+
+ case RAISE:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(15);
+ #endif
+ }
+ layer_on(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ layer_off(_RAISE);
+ TOG_STATUS = false;
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
+ case RGB_MOD:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ rgblight_mode_noeeprom(RGB_current_config.mode);
+ rgblight_step();
+ RGB_current_config.mode = rgblight_config.mode;
+ }
+ #endif
+ return false;
+ break;
+
+ case EISU:
+ 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);
+ }
+ return false;
+ break;
+ case KANA:
+ if (record->event.pressed) {
+ if(keymap_config.swap_lalt_lgui==false){
+ register_code(KC_LANG1);
+ }else{
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG1);
+ }
+ return false;
+ break;
+
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_config = rgblight_config;
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_init();
+ RGB_current_config = rgblight_config;
+ #endif
+}
+
+
diff --git a/keyboards/zinc/keymaps/default/readme_jp.md b/keyboards/zinc/keymaps/default/readme_jp.md
new file mode 100644
index 000000000..f6e91f0c8
--- /dev/null
+++ b/keyboards/zinc/keymaps/default/readme_jp.md
@@ -0,0 +1,123 @@
+# The Default Zinc Layout
+## 配列
+
+### Qwerty配列
+
+```
+ ,-----------------------------------------. ,-----------------------------------------.
+ | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Esc | Fn | Alt | Win |Lower |Space | | Space| Raise| Left | Down | Up | Right|
+ `------------------------------------------ ------------------------------------------'
+```
+
+### Colemak
+
+```
+ ,-----------------------------------------. ,-----------------------------------------.
+ | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
+ `------------------------------------------ ------------------------------------------'
+```
+
+### Dvorak
+
+```
+ ,-----------------------------------------. ,-----------------------------------------.
+ | Tab | ' | , | . | P | Y | | F | G | C | R | L | Del |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
+ `-----------------------------------------' `-----------------------------------------'
+```
+
+
+## コンパイルの仕方
+
+コンパイルは、qmk_firmware のトップディレクトリで行います。
+
+```
+$ cd qmk_firmware
+```
+qmk_firmwareでは各キーボードのコンパイルは、`<キーボード名>:<キーマップ名>`という指定で行います。
+
+```
+$ make zinc:default
+```
+
+キーボードへの書き込みまで同時に行うには下記のように`:avrdude`を付けます。
+
+```
+$ make zinc:default:avrdude
+```
+
+コンパイル結果と中間生成物を消去したい場合は以下のようにします。
+
+```
+$ make zinc:default:clean
+```
+
+## カスタマイズ
+
+コマンドラインからオプションを指定してビルドすることが出来ます。
+
+```
+# Zinc keyboard 'default' keymap: convenient command line option
+make ZINC=<options> zinc:defualt
+# option= back | under | na | ios
+# ex.
+# make ZINC=under zinc:defualt
+# make ZINC=under,ios zinc:defualt
+# make ZINC=back zinc:default
+# make ZINC=back,na zinc:default
+# make ZINC=back,ios zinc:default
+```
+
+あるいは`qmk_firmware/keyboards/zinc/rev1/keymaps/default/rules.mk` の以下の部分を直接編集して機能を有効化してください。
+
+```
+# Zinc keyboard customize
+LED_BACK_ENABLE = no # LED backlight (Enable SK6812mini backlight)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight)
+LED_ANIMATIONS = yes # LED animations
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+
+
+```
+
+## RGB backlight を有効にする
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+```
+LED_BACK_ENABLE = yes # LED backlight (Enable SK6812mini backlight)
+```
+
+
+## RGB Underglow を有効にする
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+```
+LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.)
+```
+
+
+## iPad/iPhoneサポートを有効にする。
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+RBG Underglow や RGBバックライトの輝度を抑えて、iPad, iPhone にも接続できるようになります。
+
+```
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+``` \ No newline at end of file
diff --git a/keyboards/zinc/keymaps/default/rules.mk b/keyboards/zinc/keymaps/default/rules.mk
new file mode 100644
index 000000000..2dcefc001
--- /dev/null
+++ b/keyboards/zinc/keymaps/default/rules.mk
@@ -0,0 +1,98 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+define ZINC_CUSTOMISE_MSG
+ $(info Zinc customize)
+ $(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE))
+ $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE))
+ $(info - LED_ANIMATION=$(LED_ANIMATIONS))
+ $(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE))
+endef
+
+# Zinc keyboard customize
+LED_BACK_ENABLE = no # LED backlight (Enable SK6812mini backlight)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight)
+LED_ANIMATIONS = yes # LED animations
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
+
+#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
+#### Do not enable these with audio at the same time.
+
+### Zinc keyboard 'default' keymap: convenient command line option
+## make ZINC=<options> zinc:defualt
+## option= back | under | na | ios
+## ex.
+## make ZINC=under zinc:defualt
+## make ZINC=under,ios zinc:defualt
+## make ZINC=back zinc:default
+## make ZINC=back,na zinc:default
+## make ZINC=back,ios zinc:default
+
+ifneq ($(strip $(ZINC)),)
+ ifeq ($(findstring back,$(ZINC)), back)
+ LED_BACK_ENABLE = yes
+ else ifeq ($(findstring under,$(ZINC)), under)
+ LED_UNDERGLOW_ENABLE = yes
+ endif
+ ifeq ($(findstring na,$(ZINC)), na)
+ LED_ANIMATIONS = no
+ endif
+ ifeq ($(findstring ios,$(ZINC)), ios)
+ IOS_DEVICE_ENABLE = yes
+ endif
+ $(eval $(call ZINC_CUSTOMISE_MSG))
+ $(info )
+endif
+
+ifeq ($(strip $(LED_BACK_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+ OPT_DEFS += -DRGBLED_BACK
+ ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ $(eval $(call ZINC_CUSTOMISE_MSG))
+ $(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes')
+ endif
+else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+else
+ RGBLIGHT_ENABLE = no
+endif
+
+ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+endif
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+# OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
+
+endif
+
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+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
+
+
+# Uncomment these for debugging
+# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
+# $(info -- OPT_DEFS=$(OPT_DEFS))
+# $(info )
diff --git a/keyboards/zinc/keymaps/ginjake/config.h b/keyboards/zinc/keymaps/ginjake/config.h
new file mode 100644
index 000000000..4dcb0724f
--- /dev/null
+++ b/keyboards/zinc/keymaps/ginjake/config.h
@@ -0,0 +1,38 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2018 monksoffunk
+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
+// if you need more program area, try uncomment follow line
+#include "serial_config_simpleapi.h"
+
+// place overrides here
+// 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
diff --git a/keyboards/zinc/keymaps/ginjake/keymap.c b/keyboards/zinc/keymaps/ginjake/keymap.c
new file mode 100644
index 000000000..323d2c7d4
--- /dev/null
+++ b/keyboards/zinc/keymaps/ginjake/keymap.c
@@ -0,0 +1,368 @@
+#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;
+rgblight_config_t RGB_current_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,
+ _COLEMAK,
+ _DVORAK,
+ _LOWER,
+ _RAISE,
+ _ADJUST
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ ADJUST,
+ BACKLIT,
+ KANA,
+ EISU,
+ RGBRST,
+ AQOURS, //サンシャインぴっかぴかモード
+};
+
+#ifdef RGBLIGHT_ENABLE
+ //9色に変化するLEDのHSV各パラメータ
+ int aqours_h[] = { 26, 340, 150, 0, 199, 220, 53, 265, 322};
+ int aqours_s[] = {255, 165, 255, 255, 255, 350, 255, 255, 255};
+ int aqours_v[] = {255, 255, 255, 255, 255, 255, 255, 255, 255};
+ const int NEXT_COLOR_TIME = 2400; //次の色に切り替わるまでの時間
+ const int NEXT_CHANGE_TARGET_TIME = 100; //次のキーに色が伝播するまでの時間
+ bool aqours_mode = false;
+ int aqours_next_color_timer_count = 0;
+ int aqours_num = 0;
+ int target_col = 0;
+
+ //keyのmatrixの位置とLEDの番号を紐づける
+ int combined_key_to_led[] =
+ {
+ 0,1,2,3,4,5,
+ 11,10,9,8,7,6,
+ 12,13,14,15,16,17,
+ 23,22,21,20,19,18
+ };
+#endif
+
+enum macro_keycodes {
+ KC_SAMPLEMACRO,
+};
+
+//Macros
+#define M_SAMPLE M(KC_SAMPLEMACRO)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { \
+ /* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc |ADJUST| Win | Alt |LOWER |Space | | 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ KC_ESC, ADJUST, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Colemak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_COLEMAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, \
+ KC_LCTL, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ KC_ESC, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Dvorak
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | ' | , | . | P | Y | | F | G | C | R | L | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_DVORAK] = LAYOUT_ortho_4x12( \
+ KC_TAB, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_DEL, \
+ KC_LCTL, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH, \
+ KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT , \
+ KC_ESC, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
+
+ /* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | - | _ | + | { | } | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | Home | End | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | 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_MINS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_RAISE] = LAYOUT_ortho_4x12( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | Reset|RGBRST|Aud on|Audoff| | | |Qwerty|Colemk|Dvorak| | Ins |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * |AQOURS|RGB ON| HUE+ | SAT+ | VAL+ | Mac | | Win | - | = |Print |ScLock|Pause |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | MODE | HUE- | SAT- | VAL- | | | | | | | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | EISU | EISU | EISU | | KANA | KANA | Home |PageDn|PageUp| End |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_ortho_4x12( \
+ _______, RESET, RGBRST, _______, _______, _______, _______, QWERTY, COLEMAK, DVORAK, _______, KC_INS, \
+ AQOURS, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, AG_NORM, AG_SWAP, KC_MINS, KC_EQL, KC_PSCR, KC_SLCK, KC_PAUS,\
+ _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______,\
+ _______, _______, _______, EISU, EISU, EISU, KANA, KANA, KC_HOME, KC_PGDN, KC_PGUP, KC_END\
+ )
+};
+
+// define variables for reactive RGB
+bool TOG_STATUS = false;
+
+// Setting ADJUST layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(RGB_current_config.mode);
+ #endif
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+ case COLEMAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_COLEMAK);
+ }
+ return false;
+ break;
+ case DVORAK:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_DVORAK);
+ }
+ return false;
+ break;
+
+ case LOWER:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(16);
+ #endif
+ }
+ layer_on(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ TOG_STATUS = false;
+ layer_off(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+
+ case RAISE:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(15);
+ #endif
+ }
+ layer_on(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ layer_off(_RAISE);
+ TOG_STATUS = false;
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
+ case RGB_MOD:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ rgblight_mode_noeeprom(RGB_current_config.mode);
+ rgblight_step();
+ RGB_current_config.mode = rgblight_config.mode;
+ }
+ #endif
+ return false;
+ break;
+
+ case EISU:
+ 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);
+ }
+ return false;
+ break;
+ case KANA:
+ if (record->event.pressed) {
+ if(keymap_config.swap_lalt_lgui==false){
+ register_code(KC_LANG1);
+ }else{
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG1);
+ }
+ return false;
+ break;
+ case AQOURS:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ aqours_mode = !aqours_mode;
+ }
+ #endif
+ break;
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_config = rgblight_config;
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
+#ifdef RGBLIGHT_ENABLE
+
+ void aqours_led(void) {
+ aqours_next_color_timer_count++;
+ //一定間隔で色が変化
+ if (aqours_next_color_timer_count > NEXT_COLOR_TIME) {
+ aqours_num++;
+ aqours_next_color_timer_count = 0;
+ target_col = 0;
+ if (aqours_num == sizeof(aqours_h) / sizeof(int)) {
+ aqours_num = 0;
+ }
+ }
+
+ //キー毎に時間差で色が変化していく
+ if (aqours_next_color_timer_count % NEXT_CHANGE_TARGET_TIME == 0) {
+ if (target_col < MATRIX_COLS) {
+ sethsv(aqours_h[aqours_num], aqours_s[aqours_num], aqours_v[aqours_num], (LED_TYPE *)&led[target_col]);
+ sethsv(aqours_h[aqours_num], aqours_s[aqours_num], aqours_v[aqours_num], (LED_TYPE *)&led[11 - target_col]);
+ sethsv(aqours_h[aqours_num], aqours_s[aqours_num], aqours_v[aqours_num], (LED_TYPE *)&led[12 + target_col]);
+ sethsv(aqours_h[aqours_num], aqours_s[aqours_num], aqours_v[aqours_num], (LED_TYPE *)&led[23 - target_col]);
+ target_col++;
+ rgblight_set();
+ }
+ }
+ }
+#endif
+
+void matrix_scan_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ if (aqours_mode) {
+ aqours_led();
+ }
+ #endif
+}
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_init();
+ RGB_current_config = rgblight_config;
+ #endif
+}
diff --git a/keyboards/zinc/keymaps/ginjake/readme_jp.md b/keyboards/zinc/keymaps/ginjake/readme_jp.md
new file mode 100644
index 000000000..f6e91f0c8
--- /dev/null
+++ b/keyboards/zinc/keymaps/ginjake/readme_jp.md
@@ -0,0 +1,123 @@
+# The Default Zinc Layout
+## 配列
+
+### Qwerty配列
+
+```
+ ,-----------------------------------------. ,-----------------------------------------.
+ | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Esc | Fn | Alt | Win |Lower |Space | | Space| Raise| Left | Down | Up | Right|
+ `------------------------------------------ ------------------------------------------'
+```
+
+### Colemak
+
+```
+ ,-----------------------------------------. ,-----------------------------------------.
+ | Tab | Q | W | F | P | G | | J | L | U | Y | ; | Bksp |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Ctrl | A | R | S | T | D | | H | N | E | I | O | ' |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Shift| Z | X | C | V | B | | K | M | , | . | / |Enter |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
+ `------------------------------------------ ------------------------------------------'
+```
+
+### Dvorak
+
+```
+ ,-----------------------------------------. ,-----------------------------------------.
+ | Tab | ' | , | . | P | Y | | F | G | C | R | L | Del |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Ctrl | A | O | E | U | I | | D | H | T | N | S | / |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Shift| ; | Q | J | K | X | | B | M | W | V | Z |Enter |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Esc |ADJUST| Alt | Win |LOWER |Space | | Space| RAISE| Left | Down | Up | Right|
+ `-----------------------------------------' `-----------------------------------------'
+```
+
+
+## コンパイルの仕方
+
+コンパイルは、qmk_firmware のトップディレクトリで行います。
+
+```
+$ cd qmk_firmware
+```
+qmk_firmwareでは各キーボードのコンパイルは、`<キーボード名>:<キーマップ名>`という指定で行います。
+
+```
+$ make zinc:default
+```
+
+キーボードへの書き込みまで同時に行うには下記のように`:avrdude`を付けます。
+
+```
+$ make zinc:default:avrdude
+```
+
+コンパイル結果と中間生成物を消去したい場合は以下のようにします。
+
+```
+$ make zinc:default:clean
+```
+
+## カスタマイズ
+
+コマンドラインからオプションを指定してビルドすることが出来ます。
+
+```
+# Zinc keyboard 'default' keymap: convenient command line option
+make ZINC=<options> zinc:defualt
+# option= back | under | na | ios
+# ex.
+# make ZINC=under zinc:defualt
+# make ZINC=under,ios zinc:defualt
+# make ZINC=back zinc:default
+# make ZINC=back,na zinc:default
+# make ZINC=back,ios zinc:default
+```
+
+あるいは`qmk_firmware/keyboards/zinc/rev1/keymaps/default/rules.mk` の以下の部分を直接編集して機能を有効化してください。
+
+```
+# Zinc keyboard customize
+LED_BACK_ENABLE = no # LED backlight (Enable SK6812mini backlight)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight)
+LED_ANIMATIONS = yes # LED animations
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+
+
+```
+
+## RGB backlight を有効にする
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+```
+LED_BACK_ENABLE = yes # LED backlight (Enable SK6812mini backlight)
+```
+
+
+## RGB Underglow を有効にする
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+```
+LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight.)
+```
+
+
+## iPad/iPhoneサポートを有効にする。
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+RBG Underglow や RGBバックライトの輝度を抑えて、iPad, iPhone にも接続できるようになります。
+
+```
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+``` \ No newline at end of file
diff --git a/keyboards/zinc/keymaps/ginjake/rules.mk b/keyboards/zinc/keymaps/ginjake/rules.mk
new file mode 100644
index 000000000..2dcefc001
--- /dev/null
+++ b/keyboards/zinc/keymaps/ginjake/rules.mk
@@ -0,0 +1,98 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+define ZINC_CUSTOMISE_MSG
+ $(info Zinc customize)
+ $(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE))
+ $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE))
+ $(info - LED_ANIMATION=$(LED_ANIMATIONS))
+ $(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE))
+endef
+
+# Zinc keyboard customize
+LED_BACK_ENABLE = no # LED backlight (Enable SK6812mini backlight)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight)
+LED_ANIMATIONS = yes # LED animations
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
+
+#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
+#### Do not enable these with audio at the same time.
+
+### Zinc keyboard 'default' keymap: convenient command line option
+## make ZINC=<options> zinc:defualt
+## option= back | under | na | ios
+## ex.
+## make ZINC=under zinc:defualt
+## make ZINC=under,ios zinc:defualt
+## make ZINC=back zinc:default
+## make ZINC=back,na zinc:default
+## make ZINC=back,ios zinc:default
+
+ifneq ($(strip $(ZINC)),)
+ ifeq ($(findstring back,$(ZINC)), back)
+ LED_BACK_ENABLE = yes
+ else ifeq ($(findstring under,$(ZINC)), under)
+ LED_UNDERGLOW_ENABLE = yes
+ endif
+ ifeq ($(findstring na,$(ZINC)), na)
+ LED_ANIMATIONS = no
+ endif
+ ifeq ($(findstring ios,$(ZINC)), ios)
+ IOS_DEVICE_ENABLE = yes
+ endif
+ $(eval $(call ZINC_CUSTOMISE_MSG))
+ $(info )
+endif
+
+ifeq ($(strip $(LED_BACK_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+ OPT_DEFS += -DRGBLED_BACK
+ ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ $(eval $(call ZINC_CUSTOMISE_MSG))
+ $(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes')
+ endif
+else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+else
+ RGBLIGHT_ENABLE = no
+endif
+
+ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+endif
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+# OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
+
+endif
+
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+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
+
+
+# Uncomment these for debugging
+# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
+# $(info -- OPT_DEFS=$(OPT_DEFS))
+# $(info )
diff --git a/keyboards/zinc/keymaps/monks/config.h b/keyboards/zinc/keymaps/monks/config.h
new file mode 100644
index 000000000..4dcb0724f
--- /dev/null
+++ b/keyboards/zinc/keymaps/monks/config.h
@@ -0,0 +1,38 @@
+/*
+This is the c configuration file for the keymap
+
+Copyright 2018 monksoffunk
+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
+// if you need more program area, try uncomment follow line
+#include "serial_config_simpleapi.h"
+
+// place overrides here
+// 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
diff --git a/keyboards/zinc/keymaps/monks/keymap.c b/keyboards/zinc/keymaps/monks/keymap.c
new file mode 100644
index 000000000..5fd7c6aa8
--- /dev/null
+++ b/keyboards/zinc/keymaps/monks/keymap.c
@@ -0,0 +1,255 @@
+#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;
+rgblight_config_t RGB_current_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 {
+ QWERTY = SAFE_RANGE,
+ COLEMAK,
+ DVORAK,
+ LOWER,
+ RAISE,
+ ADJUST,
+ BACKLIT,
+ KANA,
+ EISU,
+ RGBRST
+};
+
+enum macro_keycodes {
+ KC_SAMPLEMACRO,
+};
+
+
+//Macros
+#define M_SAMPLE M(KC_SAMPLEMACRO)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { \
+ /* Qwerty
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | Esc |ADJUST| Alt | GUI |LOWER |Space | | Space| RAISE| KANA | Left | Down | 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , \
+ KC_ESC, ADJUST, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KANA, KC_LEFT, KC_DOWN, KC_RGHT \
+ ),
+
+ /* Lower
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ~ | ! | @ | # | $ | % | | ^ | & | * | ( | ) | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | - | _ | + | { | } | | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | UP | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | | | | |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_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_MINS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
+ ),
+
+ /* Raise
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | Del |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F1 | F2 | F3 | F4 | F5 | | F6 | - | = | [ | ] | \ |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | F7 | F8 | F9 | F10 | F11 | | F12 | | | | ? | |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | | | | | | | Next | Vol- | Vol+ | Play |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_RAISE] = LAYOUT_ortho_4x12( \
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, S(KC_SLSH), _______, \
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY \
+ ),
+
+ /* Adjust (Lower + Raise)
+ * ,-----------------------------------------. ,-----------------------------------------.
+ * | | Reset|RGBRST| | | | | | | | | | Ins |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | |RGB ON| HUE+ | SAT+ | VAL+ | Mac | | Win | - | = |Print |ScLock|Pause |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | MODE | HUE- | SAT- | VAL- | | | | | | |PageUp| |
+ * |------+------+------+------+------+------| |------+------+------+------+------+------|
+ * | | | | EISU | EISU | EISU | | KANA | KANA | KANA | Home |PageDn| End |
+ * `-----------------------------------------' `-----------------------------------------'
+ */
+ [_ADJUST] = LAYOUT_ortho_4x12( \
+ _______, RESET, RGBRST, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, \
+ _______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, AG_NORM, AG_SWAP, KC_MINS, KC_EQL, KC_PSCR, KC_SLCK, KC_PAUS,\
+ _______, RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, KC_PGUP, _______,\
+ _______, _______, _______, EISU, EISU, EISU, KANA, KANA, KANA, KC_HOME, KC_PGDN, KC_END\
+ )
+};
+
+// define variables for reactive RGB
+bool TOG_STATUS = false;
+
+// Setting ADJUST layer RGB back to default
+void update_tri_layer_RGB(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(RGB_current_config.mode);
+ #endif
+ layer_on(layer3);
+ } else {
+ layer_off(layer3);
+ }
+}
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case QWERTY:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_QWERTY);
+ }
+ return false;
+ break;
+
+ case LOWER:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(16);
+ #endif
+ }
+ layer_on(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ TOG_STATUS = false;
+ layer_off(_LOWER);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+
+ case RAISE:
+ if (record->event.pressed) {
+ //not sure how to have keyboard check mode and set it to a variable, so my work around
+ //uses another variable that would be set to true after the first time a reactive key is pressed.
+ if (TOG_STATUS) { //TOG_STATUS checks is another reactive key currently pressed, only changes RGB mode if returns false
+ } else {
+ TOG_STATUS = !TOG_STATUS;
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(15);
+ #endif
+ }
+ layer_on(_RAISE);
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ } else {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_mode_noeeprom(RGB_current_config.mode); // revert RGB to initial mode prior to RGB mode change
+ #endif
+ layer_off(_RAISE);
+ TOG_STATUS = false;
+ update_tri_layer_RGB(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+
+ case ADJUST:
+ if (record->event.pressed) {
+ layer_on(_ADJUST);
+ } else {
+ layer_off(_ADJUST);
+ }
+ return false;
+ break;
+ //led operations - RGB mode change now updates the RGB_current_mode to allow the right RGB mode to be set after reactive keys are released
+ case RGB_MOD:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ rgblight_mode_noeeprom(RGB_current_config.mode);
+ rgblight_step();
+ RGB_current_config.mode = rgblight_config.mode;
+ }
+ #endif
+ return false;
+ break;
+
+ case EISU:
+ 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);
+ }
+ return false;
+ break;
+ case KANA:
+ if (record->event.pressed) {
+ if(keymap_config.swap_lalt_lgui==false){
+ register_code(KC_LANG1);
+ }else{
+ SEND_STRING(SS_LALT("`"));
+ }
+ } else {
+ unregister_code(KC_LANG1);
+ }
+ return false;
+ break;
+
+ case RGBRST:
+ #ifdef RGBLIGHT_ENABLE
+ if (record->event.pressed) {
+ eeconfig_update_rgblight_default();
+ rgblight_enable();
+ RGB_current_config = rgblight_config;
+ }
+ #endif
+ break;
+ }
+ return true;
+}
+
+
+void matrix_init_user(void) {
+ #ifdef RGBLIGHT_ENABLE
+ rgblight_init();
+ RGB_current_config = rgblight_config;
+ #endif
+}
diff --git a/keyboards/zinc/keymaps/monks/readme_jp.md b/keyboards/zinc/keymaps/monks/readme_jp.md
new file mode 100644
index 000000000..680e2866c
--- /dev/null
+++ b/keyboards/zinc/keymaps/monks/readme_jp.md
@@ -0,0 +1,103 @@
+# monksoffunk's personal zinc Layout
+## 配列
+
+### Qwerty配列
+
+```
+ ,-----------------------------------------. ,-----------------------------------------.
+ | Tab | Q | W | E | R | T | | Y | U | I | O | P | Bksp |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Ctrl | A | S | D | F | G | | H | J | K | L | ; | ' |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Shift| Z | X | C | V | B | | N | M | , | . | / |Enter |
+ |------+------+------+------+------+------| |------+------+------+------+------+------|
+ | Esc |ADJUST| Alt | GUI |LOWER |Space | | Space| RAISE| KANA | Left | Down | Right|
+ `------------------------------------------ ------------------------------------------'
+```
+
+KANAキーを独立させ、UPキーをLOWER+スラッシュに当てています。そのほかデフォルトからレイヤーをかなりいじっています。
+また、RGB LEDがアンコメントしてありますので、実装していない場合はソースを見て適宜コメントアウトしてください。
+
+## コンパイルの仕方
+
+コンパイルは、qmk_firmware のトップディレクトリで行います。
+
+```
+$ cd qmk_firmware
+```
+qmk_firmwareでは各キーボードのコンパイルは、`<キーボード名>:<キーマップ名>`という指定で行います。
+
+```
+$ make zinc:monks
+```
+
+キーボードへの書き込みまで同時に行うには下記のように`:avrdude`を付けます。
+
+```
+$ make zinc:monks:avrdude
+```
+
+コンパイル結果と中間生成物を消去したい場合は以下のようにします。
+
+```
+$ make zinc:monks:clean
+```
+
+なお、avrdudeではなくQMK Toolbox(GUIツール)を使う方法もあります。
+
+https://github.com/qmk/qmk_toolbox/releases
+
+その場合は、$ make zinc:monksでビルドした成果物をQMK Toolboxから指定してください。
+
+## カスタマイズ
+
+コマンドラインからオプションを指定してビルドすることが出来ます。
+
+```
+# Zinc keyboard 'monks' keymap: convenient command line option
+make ZINC=<options> zinc:monks
+# option= back | under | na | ios
+# ex.
+# make ZINC=under zinc:monks
+# make ZINC=under,ios zinc:monks
+# make ZINC=back zinc:monks
+# make ZINC=back,na zinc:monks
+# make ZINC=back,ios zinc:monks
+```
+
+あるいは`qmk_firmware/keyboards/zinc/rev1/keymaps/monks/rules.mk` の以下の部分を編集して機能を有効化してください。
+
+```
+# Zinc keyboard customize
+LED_BACK_ENABLE = no # LED backlight (Enable SK6812mini backlight)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight)
+LED_ANIMATIONS = yes # LED animations
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+
+
+```
+
+## RGB backlight を有効にする
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+```
+LED_BACK_ENABLE = yes # LED backlight (Enable SK6812mini backlight)
+```
+
+
+## RGB Underglow を有効にする
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+```
+LED_UNDERGLOW_ENABLE = yes # LED underglow (Enable WS2812 RGB underlight)
+```
+
+
+## iPad/iPhoneサポートを有効にする。
+
+rules.mk の下記の部分を編集して no を yes に変更してください。
+RBG Underglow や RGBバックライトの輝度を抑えて、iPad, iPhone にも接続できるようになります。
+
+```
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+``` \ No newline at end of file
diff --git a/keyboards/zinc/keymaps/monks/rules.mk b/keyboards/zinc/keymaps/monks/rules.mk
new file mode 100644
index 000000000..a5335def8
--- /dev/null
+++ b/keyboards/zinc/keymaps/monks/rules.mk
@@ -0,0 +1,100 @@
+
+# Build Options
+# change to "no" to disable the options, or define them in the Makefile in
+# the appropriate keymap folder that will get included automatically
+#
+BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
+MOUSEKEY_ENABLE = no # Mouse keys(+4700)
+EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
+CONSOLE_ENABLE = no # Console for debug(+400)
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+MIDI_ENABLE = no # MIDI controls
+AUDIO_ENABLE = no # Audio output on port C6
+UNICODE_ENABLE = no # Unicode
+BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight. Do not enable this with audio at the same time.
+SWAP_HANDS_ENABLE = no # Enable one-hand typing
+
+define ZINC_CUSTOMISE_MSG
+ $(info Zinc customize)
+ $(info - LED_BACK_ENABLE=$(LED_BACK_ENABLE))
+ $(info - LED_UNDERGLOW_ENABLE=$(LED_UNDERGLOW_ENABLE))
+ $(info - LED_ANIMATION=$(LED_ANIMATIONS))
+ $(info - IOS_DEVICE_ENABLE=$(IOS_DEVICE_ENABLE))
+endef
+
+# Zinc keyboard customize
+LED_BACK_ENABLE = no # LED backlight (Enable SK6812mini backlight)
+LED_UNDERGLOW_ENABLE = no # LED underglow (Enable WS2812 RGB underlight)
+LED_ANIMATIONS = yes # LED animations
+IOS_DEVICE_ENABLE = no # connect to IOS device (iPad,iPhone)
+Link_Time_Optimization = no # if firmware size over limit, try this option
+
+#### LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE.
+#### Do not enable these with audio at the same time.
+
+### Zinc keyboard 'default' keymap: convenient command line option
+## make ZINC=<options> zinc:defualt
+## option= back | under | na | ios
+## ex.
+## make ZINC=under zinc:defualt
+## make ZINC=under,ios zinc:defualt
+## make ZINC=back zinc:default
+## make ZINC=back,na zinc:default
+## make ZINC=back,ios zinc:default
+
+ifneq ($(strip $(ZINC)),)
+ ifeq ($(findstring back,$(ZINC)), back)
+ LED_BACK_ENABLE = yes
+ else ifeq ($(findstring under,$(ZINC)), under)
+ LED_UNDERGLOW_ENABLE = yes
+ endif
+ ifeq ($(findstring na,$(ZINC)), na)
+ LED_ANIMATIONS = no
+ endif
+ ifeq ($(findstring ios,$(ZINC)), ios)
+ IOS_DEVICE_ENABLE = yes
+ endif
+ $(eval $(call ZINC_CUSTOMISE_MSG))
+ $(info )
+endif
+
+ifeq ($(strip $(LED_BACK_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+ OPT_DEFS += -DRGBLED_BACK
+ ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ $(eval $(call ZINC_CUSTOMISE_MSG))
+ $(error LED_BACK_ENABLE and LED_UNDERGLOW_ENABLE both 'yes')
+ endif
+else ifeq ($(strip $(LED_UNDERGLOW_ENABLE)), yes)
+ RGBLIGHT_ENABLE = yes
+else
+ RGBLIGHT_ENABLE = no
+endif
+
+ifeq ($(strip $(IOS_DEVICE_ENABLE)), yes)
+ OPT_DEFS += -DIOS_DEVICE_ENABLE
+endif
+
+ifeq ($(strip $(LED_ANIMATIONS)), yes)
+# OPT_DEFS += -DRGBLIGHT_ANIMATIONS
+ OPT_DEFS += -DLED_ANIMATIONS
+endif
+
+ifeq ($(strip $(Link_Time_Optimization)),yes)
+ EXTRAFLAGS += -flto -DUSE_Link_Time_Optimization
+endif
+
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+ifndef QUANTUM_DIR
+ include ../../../../Makefile
+endif
+
+# Uncomment these for debugging
+# $(info -- RGBLIGHT_ENABLE=$(RGBLIGHT_ENABLE))
+# $(info -- OPT_DEFS=$(OPT_DEFS))
+# $(info )
diff --git a/keyboards/zinc/readme.md b/keyboards/zinc/readme.md
new file mode 100644
index 000000000..3b4ce105c
--- /dev/null
+++ b/keyboards/zinc/readme.md
@@ -0,0 +1,17 @@
+Zinc
+===
+
+![Zinc](https://i.imgur.com/vxlpWkD.jpg)
+
+40% row-staggered split keyboard.
+
+Keyboard Maintainer: [monksoffunk](https://github.com/monksoffunk/) [@monksoffunkJP](https://twitter.com/monksoffunkJP)
+Hardware Supported: Zinc PCB
+Hardware Availability: (https://twitter.com/monksoffunkJP)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make zinc: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/zinc/rev1/config.h b/keyboards/zinc/rev1/config.h
new file mode 100644
index 000000000..c628400f2
--- /dev/null
+++ b/keyboards/zinc/rev1/config.h
@@ -0,0 +1,149 @@
+/*
+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
+
+//#ifndef REV1_CONFIG_H
+//#define REV1_CONFIG_H
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xFEED
+#define PRODUCT_ID 0x9991
+#define DEVICE_VER 0x0001
+#define MANUFACTURER monksoffunk
+#define PRODUCT zinc rev.1
+#define DESCRIPTION A split keyboard
+
+
+#define PREVENT_STUCK_MODIFIERS
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 100
+
+/* 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
+
+
+/* key matrix size */
+// Rows are doubled-up
+ #define MATRIX_ROWS 8
+ #define MATRIX_ROW_PINS { F6, F7, B1, B3 }
+
+// wiring of each half
+#define MATRIX_COLS 6
+#define MATRIX_COL_PINS { F4, D4, C6, D7, E6, B4 }
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+#define RGBLIGHT_TIMER
+//#define RGBLED_NUM 12 // Number of LEDs. see ./keymaps/default/config.h
+#define ws2812_PORTREG PORTD
+#define ws2812_DDRREG DDRD
+
+// 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
+#ifdef RGBLED_BACK
+ #define RGBLED_NUM 24
+#else
+ #define RGBLED_NUM 6
+#endif
+
+#ifndef IOS_DEVICE_ENABLE
+ #if RGBLED_NUM <= 6
+ #define RGBLIGHT_LIMIT_VAL 255
+ #else
+ #if RGBLED_NUM <= 16
+ #define RGBLIGHT_LIMIT_VAL 130
+ #else
+ #define RGBLIGHT_LIMIT_VAL 120
+ #endif
+ #endif
+ #define RGBLIGHT_VAL_STEP 17
+#else
+ #if RGBLED_NUM <= 6
+ #define RGBLIGHT_LIMIT_VAL 90
+ #else
+ #if RGBLED_NUM <= 16
+ #define RGBLIGHT_LIMIT_VAL 45
+ #else
+ #define RGBLIGHT_LIMIT_VAL 35
+ #endif
+ #endif
+ #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
+// 120 RGBoff
+// 330 RGB 6
+// 300 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
+
+
+//#endif
diff --git a/keyboards/zinc/rev1/info.json b/keyboards/zinc/rev1/info.json
new file mode 100644
index 000000000..0ca8acded
--- /dev/null
+++ b/keyboards/zinc/rev1/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "Zinc rev.1",
+ "url": "https://github.com/monksoffunk/zinc",
+ "maintainer": "monksoffunk",
+ "width": 15,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "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":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/zinc/rev1/matrix.c b/keyboards/zinc/rev1/matrix.c
new file mode 100644
index 000000000..220954f05
--- /dev/null
+++ b/keyboards/zinc/rev1/matrix.c
@@ -0,0 +1,356 @@
+/*
+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/zinc/rev1/rev1.c b/keyboards/zinc/rev1/rev1.c
new file mode 100644
index 000000000..2ce08a07c
--- /dev/null
+++ b/keyboards/zinc/rev1/rev1.c
@@ -0,0 +1,6 @@
+#include "zinc.h"
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+};
+
diff --git a/keyboards/zinc/rev1/rev1.h b/keyboards/zinc/rev1/rev1.h
new file mode 100644
index 000000000..933e635c2
--- /dev/null
+++ b/keyboards/zinc/rev1/rev1.h
@@ -0,0 +1,44 @@
+#pragma once
+
+#include "../zinc.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+#ifdef RGBLIGHT_ENABLE
+//rgb led driver
+#include "ws2812.h"
+#endif
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+
+
+// Standard Keymap
+// (TRRS jack on both halves are to the left side)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05}, \
+ { L10, L11, L12, L13, L14, L15}, \
+ { L20, L21, L22, L23, L24, L25}, \
+ { L30, L31, L32, L33, L34, L35}, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ }
+
+#define LAYOUT_ortho_4x12 LAYOUT
diff --git a/keyboards/zinc/rev1/rules.mk b/keyboards/zinc/rev1/rules.mk
new file mode 100644
index 000000000..e78b9258d
--- /dev/null
+++ b/keyboards/zinc/rev1/rules.mk
@@ -0,0 +1,4 @@
+SRC += rev1/matrix.c
+SRC += rev1/split_util.c
+SRC += rev1/split_scomm.c
+SRC += ws2812.c
diff --git a/keyboards/zinc/rev1/serial_config.h b/keyboards/zinc/rev1/serial_config.h
new file mode 100644
index 000000000..9fb5dfc67
--- /dev/null
+++ b/keyboards/zinc/rev1/serial_config.h
@@ -0,0 +1,18 @@
+#ifndef SOFT_SERIAL_CONFIG_H
+#define SOFT_SERIAL_CONFIG_H
+
+#ifndef SOFT_SERIAL_PIN
+/* Soft Serial defines */
+#define SOFT_SERIAL_PIN D2
+// 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
+#endif
+
+//// USE flexible API (using multi-type transaction function)
+#define SERIAL_USE_MULTI_TRANSACTION
+
+#endif /* SOFT_SERIAL_CONFIG_H */
diff --git a/keyboards/zinc/rev1/serial_config_simpleapi.h b/keyboards/zinc/rev1/serial_config_simpleapi.h
new file mode 100644
index 000000000..e2d22a41e
--- /dev/null
+++ b/keyboards/zinc/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/zinc/rev1/split_scomm.c b/keyboards/zinc/rev1/split_scomm.c
new file mode 100644
index 000000000..50d233ce9
--- /dev/null
+++ b/keyboards/zinc/rev1/split_scomm.c
@@ -0,0 +1,95 @@
+#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 SERIAL_DEBUG_MODE
+#include <avr/io.h>
+#endif
+#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/zinc/rev1/split_scomm.h b/keyboards/zinc/rev1/split_scomm.h
new file mode 100644
index 000000000..873d8939d
--- /dev/null
+++ b/keyboards/zinc/rev1/split_scomm.h
@@ -0,0 +1,24 @@
+#ifndef SPLIT_COMM_H
+#define SPLIT_COMM_H
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (OLD API, compatible with let's split serial.c) --- */
+#include "serial.h"
+
+#else
+/* --- USE flexible API (using multi-type transaction function) --- */
+// Buffers for master - slave communication
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
+extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+extern uint8_t slave_buffer_change_count;
+
+void serial_master_init(void);
+void serial_slave_init(void);
+int serial_update_buffers(int master_changed);
+
+#endif
+
+#endif /* SPLIT_COMM_H */
diff --git a/keyboards/zinc/rev1/split_util.c b/keyboards/zinc/rev1/split_util.c
new file mode 100644
index 000000000..e1ff8b437
--- /dev/null
+++ b/keyboards/zinc/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/zinc/rev1/split_util.h b/keyboards/zinc/rev1/split_util.h
new file mode 100644
index 000000000..687ca19bd
--- /dev/null
+++ b/keyboards/zinc/rev1/split_util.h
@@ -0,0 +1,19 @@
+#ifndef SPLIT_KEYBOARD_UTIL_H
+#define SPLIT_KEYBOARD_UTIL_H
+
+#include <stdbool.h>
+#include "eeconfig.h"
+
+#define SLAVE_I2C_ADDRESS 0x32
+
+extern volatile bool isLeftHand;
+
+// slave version of matix scan, defined in matrix.c
+void matrix_slave_scan(void);
+
+void split_keyboard_setup(void);
+bool has_usb(void);
+
+void matrix_master_OLED_init (void);
+
+#endif
diff --git a/keyboards/zinc/reva/config.h b/keyboards/zinc/reva/config.h
new file mode 100644
index 000000000..158051890
--- /dev/null
+++ b/keyboards/zinc/reva/config.h
@@ -0,0 +1,143 @@
+/*
+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 0x9991
+#define DEVICE_VER 0x0001
+#define MANUFACTURER monksoffunk
+#define PRODUCT zinc rev.A
+#define DESCRIPTION A split keyboard
+
+
+#define PREVENT_STUCK_MODIFIERS
+#define TAPPING_FORCE_HOLD
+#define TAPPING_TERM 100
+
+/* 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
+
+
+/* key matrix size */
+// Rows are doubled-up
+ #define MATRIX_ROWS 8
+ #define MATRIX_ROW_PINS { D4, C6, D7, E6 }
+
+// wiring of each half
+#define MATRIX_COLS 6
+#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3}
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* number of backlight levels */
+// #define BACKLIGHT_LEVELS 3
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCING_DELAY 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+//#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+//#define LOCKING_RESYNC_ENABLE
+
+/* key combination for command */
+#define IS_COMMAND() ( \
+ keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
+)
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+#define RGBLIGHT_TIMER
+//#define RGBLED_NUM 24 // Number of LEDs. see ./keymaps/default/config.h
+#define ws2812_PORTREG PORTD
+#define ws2812_DDRREG DDRD
+
+// 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
+#ifdef RGBLED_BACK
+ #define RGBLED_NUM 24
+#else
+ #define RGBLED_NUM 6
+#endif
+
+#ifndef IOS_DEVICE_ENABLE
+ #if RGBLED_NUM <= 6
+ #define RGBLIGHT_LIMIT_VAL 255
+ #else
+ #if RGBLED_NUM <= 16
+ #define RGBLIGHT_LIMIT_VAL 130
+ #else
+ #define RGBLIGHT_LIMIT_VAL 120
+ #endif
+ #endif
+ #define RGBLIGHT_VAL_STEP 17
+#else
+ #if RGBLED_NUM <= 6
+ #define RGBLIGHT_LIMIT_VAL 90
+ #else
+ #if RGBLED_NUM <= 16
+ #define RGBLIGHT_LIMIT_VAL 45
+ #else
+ #define RGBLIGHT_LIMIT_VAL 35
+ #endif
+ #endif
+ #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
+// 120 RGBoff
+// 330 RGB 6
+// 300 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/zinc/reva/info.json b/keyboards/zinc/reva/info.json
new file mode 100644
index 000000000..138c79068
--- /dev/null
+++ b/keyboards/zinc/reva/info.json
@@ -0,0 +1,13 @@
+{
+ "keyboard_name": "Zinc rev.A",
+ "url": "https://github.com/monksoffunk/zinc",
+ "maintainer": "monksoffunk",
+ "width": 15,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "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":9, "y":0}, {"x":10, "y":0}, {"x":11, "y":0}, {"x":12, "y":0}, {"x":13, "y":0}, {"x":14, "y":0}, {"x":0, "y":1}, {"x":1, "y":1}, {"x":2, "y":1}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":9, "y":1}, {"x":10, "y":1}, {"x":11, "y":1}, {"x":12, "y":1}, {"x":13, "y":1}, {"x":14, "y":1}, {"x":0, "y":2}, {"x":1, "y":2}, {"x":2, "y":2}, {"x":3, "y":2}, {"x":4, "y":2}, {"x":5, "y":2}, {"x":9, "y":2}, {"x":10, "y":2}, {"x":11, "y":2}, {"x":12, "y":2}, {"x":13, "y":2}, {"x":14, "y":2}, {"x":0, "y":3}, {"x":1, "y":3}, {"x":2, "y":3}, {"x":3, "y":3}, {"x":4, "y":3}, {"x":5, "y":3}, {"x":9, "y":3}, {"x":10, "y":3}, {"x":11, "y":3}, {"x":12, "y":3}, {"x":13, "y":3}, {"x":14, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/zinc/reva/matrix.c b/keyboards/zinc/reva/matrix.c
new file mode 100644
index 000000000..220954f05
--- /dev/null
+++ b/keyboards/zinc/reva/matrix.c
@@ -0,0 +1,356 @@
+/*
+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/zinc/reva/reva.c b/keyboards/zinc/reva/reva.c
new file mode 100644
index 000000000..2ce08a07c
--- /dev/null
+++ b/keyboards/zinc/reva/reva.c
@@ -0,0 +1,6 @@
+#include "zinc.h"
+
+void matrix_init_kb(void) {
+ matrix_init_user();
+};
+
diff --git a/keyboards/zinc/reva/reva.h b/keyboards/zinc/reva/reva.h
new file mode 100644
index 000000000..933e635c2
--- /dev/null
+++ b/keyboards/zinc/reva/reva.h
@@ -0,0 +1,44 @@
+#pragma once
+
+#include "../zinc.h"
+
+//void promicro_bootloader_jmp(bool program);
+#include "quantum.h"
+
+#ifdef RGBLIGHT_ENABLE
+//rgb led driver
+#include "ws2812.h"
+#endif
+
+#ifdef USE_I2C
+#include <stddef.h>
+#ifdef __AVR__
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+#endif
+#endif
+
+//void promicro_bootloader_jmp(bool program);
+
+
+
+// Standard Keymap
+// (TRRS jack on both halves are to the left side)
+#define LAYOUT( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05}, \
+ { L10, L11, L12, L13, L14, L15}, \
+ { L20, L21, L22, L23, L24, L25}, \
+ { L30, L31, L32, L33, L34, L35}, \
+ { R00, R01, R02, R03, R04, R05 }, \
+ { R10, R11, R12, R13, R14, R15 }, \
+ { R20, R21, R22, R23, R24, R25 }, \
+ { R30, R31, R32, R33, R34, R35 }, \
+ }
+
+#define LAYOUT_ortho_4x12 LAYOUT
diff --git a/keyboards/zinc/reva/rules.mk b/keyboards/zinc/reva/rules.mk
new file mode 100644
index 000000000..3ea61267a
--- /dev/null
+++ b/keyboards/zinc/reva/rules.mk
@@ -0,0 +1,4 @@
+SRC += reva/matrix.c
+SRC += reva/split_util.c
+SRC += reva/split_scomm.c
+SRC += ws2812.c
diff --git a/keyboards/zinc/reva/serial_config.h b/keyboards/zinc/reva/serial_config.h
new file mode 100644
index 000000000..9fb5dfc67
--- /dev/null
+++ b/keyboards/zinc/reva/serial_config.h
@@ -0,0 +1,18 @@
+#ifndef SOFT_SERIAL_CONFIG_H
+#define SOFT_SERIAL_CONFIG_H
+
+#ifndef SOFT_SERIAL_PIN
+/* Soft Serial defines */
+#define SOFT_SERIAL_PIN D2
+// 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
+#endif
+
+//// USE flexible API (using multi-type transaction function)
+#define SERIAL_USE_MULTI_TRANSACTION
+
+#endif /* SOFT_SERIAL_CONFIG_H */
diff --git a/keyboards/zinc/reva/serial_config_simpleapi.h b/keyboards/zinc/reva/serial_config_simpleapi.h
new file mode 100644
index 000000000..e2d22a41e
--- /dev/null
+++ b/keyboards/zinc/reva/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/zinc/reva/split_scomm.c b/keyboards/zinc/reva/split_scomm.c
new file mode 100644
index 000000000..50d233ce9
--- /dev/null
+++ b/keyboards/zinc/reva/split_scomm.c
@@ -0,0 +1,95 @@
+#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 SERIAL_DEBUG_MODE
+#include <avr/io.h>
+#endif
+#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/zinc/reva/split_scomm.h b/keyboards/zinc/reva/split_scomm.h
new file mode 100644
index 000000000..873d8939d
--- /dev/null
+++ b/keyboards/zinc/reva/split_scomm.h
@@ -0,0 +1,24 @@
+#ifndef SPLIT_COMM_H
+#define SPLIT_COMM_H
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (OLD API, compatible with let's split serial.c) --- */
+#include "serial.h"
+
+#else
+/* --- USE flexible API (using multi-type transaction function) --- */
+// Buffers for master - slave communication
+#define SERIAL_SLAVE_BUFFER_LENGTH MATRIX_ROWS/2
+#define SERIAL_MASTER_BUFFER_LENGTH MATRIX_ROWS/2
+
+extern volatile uint8_t serial_slave_buffer[SERIAL_SLAVE_BUFFER_LENGTH];
+extern volatile uint8_t serial_master_buffer[SERIAL_MASTER_BUFFER_LENGTH];
+extern uint8_t slave_buffer_change_count;
+
+void serial_master_init(void);
+void serial_slave_init(void);
+int serial_update_buffers(int master_changed);
+
+#endif
+
+#endif /* SPLIT_COMM_H */
diff --git a/keyboards/zinc/reva/split_util.c b/keyboards/zinc/reva/split_util.c
new file mode 100644
index 000000000..e1ff8b437
--- /dev/null
+++ b/keyboards/zinc/reva/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/zinc/reva/split_util.h b/keyboards/zinc/reva/split_util.h
new file mode 100644
index 000000000..687ca19bd
--- /dev/null
+++ b/keyboards/zinc/reva/split_util.h
@@ -0,0 +1,19 @@
+#ifndef SPLIT_KEYBOARD_UTIL_H
+#define SPLIT_KEYBOARD_UTIL_H
+
+#include <stdbool.h>
+#include "eeconfig.h"
+
+#define SLAVE_I2C_ADDRESS 0x32
+
+extern volatile bool isLeftHand;
+
+// slave version of matix scan, defined in matrix.c
+void matrix_slave_scan(void);
+
+void split_keyboard_setup(void);
+bool has_usb(void);
+
+void matrix_master_OLED_init (void);
+
+#endif
diff --git a/keyboards/zinc/rules.mk b/keyboards/zinc/rules.mk
new file mode 100644
index 000000000..5236c0bb0
--- /dev/null
+++ b/keyboards/zinc/rules.mk
@@ -0,0 +1,72 @@
+#SRC += i2c.c
+SRC += serial.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. Do not enable this with audio at the same time.
+SUBPROJECT_rev1 = no
+USE_I2C = yes
+# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
+SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
+
+CUSTOM_MATRIX = yes
+
+DEFAULT_FOLDER = zinc/rev1
diff --git a/keyboards/zinc/serial.c b/keyboards/zinc/serial.c
new file mode 100644
index 000000000..325c29a3f
--- /dev/null
+++ b/keyboards/zinc/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 ////////////////////////////////
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (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 Simple API (OLD API, compatible with let's split serial.c)
+////////////////////////////////////////////////////////////////////////////
+
+#define ALWAYS_INLINE __attribute__((always_inline))
+#define NO_INLINE __attribute__((noinline))
+#define _delay_sub_us(x) __builtin_avr_delay_cycles(x)
+
+// 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/zinc/serial.h b/keyboards/zinc/serial.h
new file mode 100644
index 000000000..7e0c0847a
--- /dev/null
+++ b/keyboards/zinc/serial.h
@@ -0,0 +1,84 @@
+#ifndef SOFT_SERIAL_H
+#define SOFT_SERIAL_H
+
+#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 Simple API (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 flexible API (using multi-type transaction function)
+// #define SERIAL_USE_MULTI_TRANSACTION
+//
+// /////////////////////////////////////////////////////////////////
+
+
+#ifndef SERIAL_USE_MULTI_TRANSACTION
+/* --- USE Simple API (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 // USE Simple 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
+
+#endif /* SOFT_SERIAL_H */
diff --git a/keyboards/zinc/zinc.c b/keyboards/zinc/zinc.c
new file mode 100644
index 000000000..139919d5a
--- /dev/null
+++ b/keyboards/zinc/zinc.c
@@ -0,0 +1 @@
+#include "zinc.h"
diff --git a/keyboards/zinc/zinc.h b/keyboards/zinc/zinc.h
new file mode 100644
index 000000000..87d889da0
--- /dev/null
+++ b/keyboards/zinc/zinc.h
@@ -0,0 +1,14 @@
+#ifndef ZINC_H
+#define ZINC_H
+
+#ifdef KEYBOARD_zinc_reva
+ #include "reva.h"
+#endif
+#ifdef KEYBOARD_zinc_rev1
+ #include "rev1.h"
+#endif
+
+
+#include "quantum.h"
+
+#endif
diff --git a/keyboards/zlant/config.h b/keyboards/zlant/config.h
index 456d225aa..ae9dcfef6 100755
--- a/keyboards/zlant/config.h
+++ b/keyboards/zlant/config.h
@@ -43,9 +43,6 @@
keyboard_report->mods == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)) \
)
-/* prevent stuck modifiers */
-#define PREVENT_STUCK_MODIFIERS
-
#define RGB_DI_PIN D6
#ifdef RGB_DI_PIN
#define RGBLIGHT_ANIMATIONS
diff --git a/keyboards/zlant/info.json b/keyboards/zlant/info.json
new file mode 100644
index 000000000..773fa5a31
--- /dev/null
+++ b/keyboards/zlant/info.json
@@ -0,0 +1,17 @@
+{
+ "keyboard_name": "Zlant",
+ "url": "",
+ "maintainer": "qmk",
+ "width": 12.75,
+ "height": 4,
+ "layouts": {
+ "LAYOUT": {
+ "key_count": 48,
+ "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":"K004", "x":4, "y":0}, {"label":"K005", "x":5, "y":0}, {"label":"K006", "x":6, "y":0}, {"label":"K007", "x":7, "y":0}, {"label":"K008", "x":8, "y":0}, {"label":"K009", "x":9, "y":0}, {"label":"K010", "x":10, "y":0}, {"label":"K011", "x":11, "y":0}, {"label":"K100", "x":0.25, "y":1}, {"label":"K101", "x":1.25, "y":1}, {"label":"K102", "x":2.25, "y":1}, {"label":"K103", "x":3.25, "y":1}, {"label":"K104", "x":4.25, "y":1}, {"label":"K105", "x":5.25, "y":1}, {"label":"K106", "x":6.25, "y":1}, {"label":"K107", "x":7.25, "y":1}, {"label":"K108", "x":8.25, "y":1}, {"label":"K109", "x":9.25, "y":1}, {"label":"K110", "x":10.25, "y":1}, {"label":"K111", "x":11.25, "y":1}, {"label":"K200", "x":0.5, "y":2}, {"label":"K201", "x":1.5, "y":2}, {"label":"K202", "x":2.5, "y":2}, {"label":"K203", "x":3.5, "y":2}, {"label":"K204", "x":4.5, "y":2}, {"label":"K205", "x":5.5, "y":2}, {"label":"K206", "x":6.5, "y":2}, {"label":"K207", "x":7.5, "y":2}, {"label":"K208", "x":8.5, "y":2}, {"label":"K209", "x":9.5, "y":2}, {"label":"K210", "x":10.5, "y":2}, {"label":"K211", "x":11.5, "y":2}, {"label":"K300", "x":0.75, "y":3}, {"label":"K301", "x":1.75, "y":3}, {"label":"K302", "x":2.75, "y":3}, {"label":"K303", "x":3.75, "y":3}, {"label":"K304", "x":4.75, "y":3}, {"label":"K305", "x":5.75, "y":3}, {"label":"K306", "x":6.75, "y":3}, {"label":"K307", "x":7.75, "y":3}, {"label":"K308", "x":8.75, "y":3}, {"label":"K309", "x":9.75, "y":3}, {"label":"K310", "x":10.75, "y":3}, {"label":"K311", "x":11.75, "y":3}]
+ },
+ "LAYOUT_planck_mit": {
+ "key_count": 47,
+ "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":"K004", "x":4, "y":0}, {"label":"K005", "x":5, "y":0}, {"label":"K006", "x":6, "y":0}, {"label":"K007", "x":7, "y":0}, {"label":"K008", "x":8, "y":0}, {"label":"K009", "x":9, "y":0}, {"label":"K010", "x":10, "y":0}, {"label":"K011", "x":11, "y":0}, {"label":"K100", "x":0.25, "y":1}, {"label":"K101", "x":1.25, "y":1}, {"label":"K102", "x":2.25, "y":1}, {"label":"K103", "x":3.25, "y":1}, {"label":"K104", "x":4.25, "y":1}, {"label":"K105", "x":5.25, "y":1}, {"label":"K106", "x":6.25, "y":1}, {"label":"K107", "x":7.25, "y":1}, {"label":"K108", "x":8.25, "y":1}, {"label":"K109", "x":9.25, "y":1}, {"label":"K110", "x":10.25, "y":1}, {"label":"K111", "x":11.25, "y":1}, {"label":"K200", "x":0.5, "y":2}, {"label":"K201", "x":1.5, "y":2}, {"label":"K202", "x":2.5, "y":2}, {"label":"K203", "x":3.5, "y":2}, {"label":"K204", "x":4.5, "y":2}, {"label":"K205", "x":5.5, "y":2}, {"label":"K206", "x":6.5, "y":2}, {"label":"K207", "x":7.5, "y":2}, {"label":"K208", "x":8.5, "y":2}, {"label":"K209", "x":9.5, "y":2}, {"label":"K210", "x":10.5, "y":2}, {"label":"K211", "x":11.5, "y":2}, {"label":"K300", "x":0.75, "y":3}, {"label":"K301", "x":1.75, "y":3}, {"label":"K302", "x":2.75, "y":3}, {"label":"K303", "x":3.75, "y":3}, {"label":"K304", "x":4.75, "y":3, "w":1.25}, {"label":"K305", "x":6, "y":3, "w":1.5}, {"label":"K307", "x":7.5, "y":3, "w":1.25}, {"label":"K308", "x":8.75, "y":3}, {"label":"K309", "x":9.75, "y":3}, {"label":"K310", "x":10.75, "y":3}, {"label":"K311", "x":11.75, "y":3}]
+ }
+ }
+}
diff --git a/keyboards/zlant/keymaps/default/keymap.c b/keyboards/zlant/keymaps/default/keymap.c
index d586c841d..a701a7965 100755
--- a/keyboards/zlant/keymaps/default/keymap.c
+++ b/keyboards/zlant/keymaps/default/keymap.c
@@ -5,16 +5,18 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [BASE] = 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_ESC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT,
- RGB_HUI, RGB_HUD, KC_LGUI, KC_LALT, KC_LSFT, KC_SPC, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT),
+ [BASE] = 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_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, \
+ KC_ESC, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT, \
+ RGB_HUI, RGB_HUD, KC_LGUI, KC_LALT, KC_LSFT, KC_SPC, KC_SPC, MO(1), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT \
+ ),
- [FN] = LAYOUT(
- KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
- KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
- KC_TRNS, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_PGUP, KC_HOME, KC_TRNS, KC_TRNS,
- RGB_VAI, RGB_VAD, RESET, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_END, KC_TRNS, KC_DEL)
+ [FN] = LAYOUT(
+ _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, \
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, \
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_PGUP, KC_HOME, _______, _______, \
+ RGB_VAI, RGB_VAD, RESET, KC_PSCR, _______, _______, _______, _______, KC_PGDN, KC_END, _______, KC_DEL \
+ )
};
diff --git a/keyboards/zlant/readme.md b/keyboards/zlant/readme.md
index 0780cedeb..8f50e6d4c 100644
--- a/keyboards/zlant/readme.md
+++ b/keyboards/zlant/readme.md
@@ -4,10 +4,8 @@
A compact 40% inspired by the Plank with a staggered layout instead.
-Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury)
-
-Hardware Supported: Zlant Prototype PCB
-
+Keyboard Maintainer: [Felipe Coury](https://github.com/fcoury)
+Hardware Supported: Zlant Prototype PCB
Hardware Availability: Group buy soon
Make example for this keyboard (after setting up your build environment):
diff --git a/keyboards/zlant/rules.mk b/keyboards/zlant/rules.mk
index 482f99b22..0bc5c8aae 100755
--- a/keyboards/zlant/rules.mk
+++ b/keyboards/zlant/rules.mk
@@ -54,3 +54,5 @@ NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https:/
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE = no
RGBLIGHT_ENABLE = yes
+
+LAYOUTS = ortho_4x12 planck_mit
diff --git a/keyboards/zlant/zlant.h b/keyboards/zlant/zlant.h
index 48c7b3f40..6310a14e3 100755
--- a/keyboards/zlant/zlant.h
+++ b/keyboards/zlant/zlant.h
@@ -3,16 +3,42 @@
#include "quantum.h"
-#define LAYOUT( \
- K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
- K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
- K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \
- K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 \
+#define LAYOUT_ortho_4x12( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 \
) { \
- { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \
- { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \
- { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \
- { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 } \
}
+#define LAYOUT_planck_mit( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \
+ K300, K301, K302, K303, K304, K305, K307, K308, K309, K310, K311 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211 }, \
+ { K300, K301, K302, K303, K304, K305, K305, K307, K308, K309, K310, K311 } \
+}
+
+#define LAYOUT_kc_ortho_4x12( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311 \
+) LAYOUT( \
+ KC_##K000, KC_##K001, KC_##K002, KC_##K003, KC_##K004, KC_##K005, KC_##K006, KC_##K007, KC_##K008, KC_##K009, KC_##K010, KC_##K011, \
+ KC_##K100, KC_##K101, KC_##K102, KC_##K103, KC_##K104, KC_##K105, KC_##K106, KC_##K107, KC_##K108, KC_##K109, KC_##K110, KC_##K111, \
+ KC_##K200, KC_##K201, KC_##K202, KC_##K203, KC_##K204, KC_##K205, KC_##K206, KC_##K207, KC_##K208, KC_##K209, KC_##K210, KC_##K211, \
+ KC_##K300, KC_##K301, KC_##K302, KC_##K303, KC_##K304, KC_##K305, KC_##K306, KC_##K307, KC_##K308, KC_##K309, KC_##K310, KC_##K311 \
+)
+
+#define LAYOUT LAYOUT_ortho_4x12
+
#endif